我只是偶然發現了包裹OneTuple的瑕疵。我想知道它的目的,我確信作者並沒有爲了它的樂趣而創建它。那麼什麼時候這可能有用?它很清楚它的作用,但不會在什麼時候使用它。什麼時候會想要使用OneTuple?
那麼,有誰知道任何很酷的例子,當你可以從中受益?或者也許顯示它背後的數學美?
我只是偶然發現了包裹OneTuple的瑕疵。我想知道它的目的,我確信作者並沒有爲了它的樂趣而創建它。那麼什麼時候這可能有用?它很清楚它的作用,但不會在什麼時候使用它。什麼時候會想要使用OneTuple?
那麼,有誰知道任何很酷的例子,當你可以從中受益?或者也許顯示它背後的數學美?
這幾乎是一樣的Identity
單子,其通常用作單子變壓器堆疊的基礎上,所不同的是,因爲使用OneTuple
的data
代替newtype
它有一個額外的底部值。
這很有趣,因爲它是在一定意義上的大部分它實現了類型類的最簡單的例子。雖然我沒有看到太多的實際用途。
我只能看到創建額外的間接層的實際用途,例如爲了安全評估內部的thunk。 – fuz
假設你有一個(略帶傻氣)類型類上的元組進行操作。您有一個(a,a)
的實例,(a,a,a)
的實例。您還需要一個單一值的實例。但是你不能僅僅爲a
製作一個實例,因爲它會與其他所有東西重疊!但是,您可以爲OneTuple a
製作一個實例。
既然類型類是有點用處,但它很容易想象,一個類型類幾乎一樣,但更加有用。事實上,這恰恰是在BOS' MySQL庫使用Only
:http://hackage.haskell.org/packages/archive/mysql-simple/0.2.0.2/doc/html/Database-MySQL-Simple-QueryResults.html
這肯定是不一個笑話,就像身份單子實現不是一個笑話。與普通類型a
不同,您可以獲得所有有用的實例,並獲得額外的底部,從而使單身元組更接近其他元組類型的語義。
的一個用例是這樣的,就像身份單子,泛化。你有一個applicative/monadic函數,它有一個多態函子類型。例如,許多有用的軟件包,例如的枚舉器支持在用戶選擇的monad上運行。 OneTuple
(與Identity
相比)稍微不同的語義可能非常有用,當您有複雜的數據依賴性或想要使用額外的懶惰時,Identity
不會給您。
「我確定作者並沒有爲了它的樂趣而創建它」 - 您可能會低估Haskell社區的幽默感。 – MatrixFrog
青蛙說什麼。請參閱極致套裝類別,瞭解沒有真正原因的套裝示例。 –