Monads:seq和>> =之间有什么区别?

mca*_*dre 2 monads haskell seq

有什么不同?是否seq保证更多的流动条件?

ste*_*cut 15

他们根本没有关系.

seq 有类型:

seq :: a -> b -> b
Run Code Online (Sandbox Code Playgroud)

它被用来(作为seq a b或者a `seq` b)来评估a头部正常形式,这是一种奇特的说法,它强制对惰性值a进行一点评估.它与monads无关.

>>=用于测序monad.它有类型:

(>>=) :: Monad m => m a -> (a -> m b) -> m b
Run Code Online (Sandbox Code Playgroud)

它用于从monadic值获取值并将其传递给返回另一个monadic值的函数.基本上是这样的:

getLine >>= putStrLn
Run Code Online (Sandbox Code Playgroud)

这将从命令行获取一串输入,然后将其打印出来.

所以,基本上没有任何关系.

  • 对于某种"严格的身份monad",嗯,`seq`可能算作`(>>)`之类的东西.有点怀疑这是提问者的想法. (2认同)
  • 或者OP可能会想到`sequence :: Monad m => [ma] - > m [a]`? (2认同)