2011-07-26 85 views

回答

15

他們根本沒有關係。

seq具有類型:

seq :: a -> b -> b 

它用於(作爲seq a b,或a `seq` b)評價a頭正常形式,這是說,它迫使懶惰值a是的一個奇特的方式評估一下。它與單子無關。

>>=是用於測序monads。它的類型爲:

(>>=) :: Monad m => m a -> (a -> m b) -> m b 

它用於從單值中獲取值並將其傳遞給返回另一個一元值的函數。基本上是這樣的:

getLine >>= putStrLn 

這將從命令行得到一個輸入字符串,然後打印出來。

所以,基本上根本沒有關係。

+2

嗯,對於某種「嚴格身份monad」,'seq'可能會被視爲類似於「(>>)」的東西。有點懷疑這是提問者想到的。 –

+2

或者也許OP在考慮'sequence :: Monad m => [m a] - > m [a]'? –

+0

@pelotom,不,但謝謝你試圖幫助。 – mcandre

2

seq不是特定於單子。 用於在返回第二個參數之前強制對其第一個參數進行評估。

+3

沒有。那是pseq。在兩個論點中,Seq都是嚴格的。關於評估的順序沒有任何說法。 – fuz

相關問題