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

发布于 2024-11-26 15:24:03 字数 43 浏览 1 评论 0原文

有什么区别? seq 能否保证更多的流动条件?

What's the difference? Does seq guarantee more flow conditions?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

苍白女子 2024-12-03 15:24:03

他们根本没有关系。

seq 的类型:

seq :: a -> b -> b

它用于(如 seq a ba `seq` b)来评估 a 为普通形式,这是一种奇特的说法,它强制对惰性值 a 进行一点评估。它与 monad 无关。

>>= 用于对 monad 进行排序。它具有以下类型:

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

它用于从一元值获取值并将其传递给返回另一个一元值的函数。基本上类似于:

getLine >>= putStrLn

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

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

They aren't related at all.

seq has the type:

seq :: a -> b -> b

It is used (as seq a b, or a `seq` b) to evaluate a to head normal form, which is a fancy way of saying that it forces the lazy value a to be evaluated a little bit. It has nothing to do with monads.

>>= is for sequencing monads. It has the type:

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

It is used to get the value from a monadic value and pass it to a function that returns another monadic value. Basically something like:

getLine >>= putStrLn

which would get a string of input from the command-line and then print it out.

So, basically, no relation at all.

海夕 2024-12-03 15:24:03

seq is not specific to monads. seq is used to force evaluation of its first argument before its second is returned.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文