Haskell 中的“~”是什么意思?
我正在研究 mtl
库并尝试做一些我自己的 MonadTransformers。我正在检查 Control.Monad.State.StateT
声明,在所有代码中,我看到以下语法:
execStateT :: (Monad m) => StateT s m a -> s -> m s
execStateT m s = do
~(_, s') <- runStateT m s
return s'
这个 ~
操作数是什么意思?
I'm studying the mtl
library and trying to do some MonadTransformers of my own. I was checking the Control.Monad.State.StateT
declaration, and across all the code, I see this syntax:
execStateT :: (Monad m) => StateT s m a -> s -> m s
execStateT m s = do
~(_, s') <- runStateT m s
return s'
What does this ~
operand mean?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
这是 Haskell 中惰性模式的表示法。我不能说我很熟悉它,但是从这里:
另外,本节可能会有用。
This is the notation for a lazy pattern in Haskell. I can't say that I'm familiar with it but from here:
Also, this section may be useful.
对于正常的模式匹配,需要评估应该匹配的值,以便可以将其与模式进行比较。
~
表示惰性模式匹配:只是假设该值将与模式匹配。如果实际使用了匹配变量的值,则稍后才会进行匹配。For a normal pattern match, the value that should be matched needs to be evaluated, so that it can be compared against the pattern.
~
denotes a lazy pattern match: It is just assumed that the value will match the pattern. The match is then only done later, if the value of a matched variable is actually used.它相当于
或
It's equivalent to
or