24
我見過提到爲什麼ListT monad變壓器被認爲是越野車 - 它打破了哪些monad法則?
ListT
是一個有錯誤的單子變壓器不符合monad laws一個典型的例子。
這可以通過一個簡單的例子來演示嗎?
編輯:我的想法與ListT []
有點不對,我錯過了documentation要求內部monad是可交換的。那麼,ListT
只是在這個要求的意義上,還是有另一個問題? (該examples at Haskell wiki都使用ListT IO
和IO
顯然是不可交換的。)
該文件說變換的monad必須是可交換的;嘗試使用例如'v n = ListT $ map(read :: String - > Int)。排列。顯示 。 (+ n)' – applicative
@applicative好點,我錯過了。我嘗試過使用'( - >)'monad,但到目前爲止我找不到反例。 –
呃......他們被稱爲「monad變形金剛」,而不是「交換單體變形金剛」。如果我定義了一個變壓器只適用於幾個特定的monads時才能正確工作,那麼是否有人會認爲滿意? –