2011-09-19 81 views
7

我只是偶然發現了包裹OneTuple的瑕疵。我想知道它的目的,我確信作者並沒有爲了它的樂趣而創建它。那麼什麼時候這可能有用?它很清楚它的作用,但不會在什麼時候使用它。什麼時候會想要使用OneTuple?

那麼,有誰知道任何很酷的例子,當你可以從中受益?或者也許顯示它背後的數學美?

+1

「我確定作者並沒有爲了它的樂趣而創建它」 - 您可能會低估Haskell社區的幽默感。 – MatrixFrog

+0

青蛙說什麼。請參閱極致套裝類別,瞭解沒有真正原因的套裝示例。 –

回答

3

這幾乎是一樣的Identity單子,其通常用作單子變壓器堆疊的基礎上,所不同的是,因爲使用OneTupledata代替newtype它有一個額外的底部值。

這很有趣,因爲它是在一定意義上的大部分它實現了類型類的最簡單的例子。雖然我沒有看到太多的實際用途。

+2

我只能看到創建額外的間接層的實際用途,例如爲了安全評估內部的thunk。 – fuz

2

我認爲這是一個笑話的東西,像don't包。這就是說,OneTuple確實一個新值添加到任何類型的(相對於Maybe,其將兩個:Nothing,要麼Just undefinedundefined取決於如何你的船晃來晃去)。所以,如果它證明你需要的,你知道去哪裏...

+0

''不'似乎對於調試目的非常有用 - 例如,如果你想「註釋掉」一些單點操作。 – fuz

+2

我使用「 - 」運算符:-) – sclv

4

假設你有一個(略帶傻氣)類型類上的元組進行操作。您有一個(a,a)的實例,(a,a,a)的實例。您還需要一個單一值的實例。但是你不能僅僅爲a製作一個實例,因爲它會與其他所有東西重疊!但是,您可以爲OneTuple a製作一個實例。

既然類型類是有點用處,但它很容易想象,一個類型類幾乎一樣,但更加有用。事實上,這恰恰是在BOS' MySQL庫使用Onlyhttp://hackage.haskell.org/packages/archive/mysql-simple/0.2.0.2/doc/html/Database-MySQL-Simple-QueryResults.html

3

這肯定是不一個笑話,就像身份單子實現不是一個笑話。與普通類型a不同,您可以獲得所有有用的實例,並獲得額外的底部,從而使單身元組更接近其他元組類型的語義。

的一個用例是這樣的,就像身份單子,泛化。你有一個applicative/monadic函數,它有一個多態函子類型。例如,許多有用的軟件包,例如的枚舉器支持在用戶選擇的monad上運行。 OneTuple(與Identity相比)稍微不同的語義可能非常有用,當您有複雜的數據依賴性或想要使用額外的懶惰時,Identity不會給您。