繁体   English   中英

`~` 在 Haskell 中是什么意思?

[英]What does `~` mean in 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'

这个~操作数是什么意思?

这是 Haskell 中惰性模式的表示法。 我不能说我熟悉它,但从这里开始

它被称为懒惰模式,格式为 ~pat。 惰性模式是无可辩驳的:不管 pat 是什么,匹配一个值 v 与 ~pat 总是成功的。 从操作上讲,如果 pat 中的标识符稍后在右侧“使用”,则它将绑定到值的那部分,如果 v 成功匹配 pat,则为 ⊥ 否则。

此外, 本节可能有用。

对于正常的模式匹配,需要评估应该匹配的值,以便可以将其与模式进行比较。

~表示惰性模式匹配:只是假设该值将匹配模式。 如果实际使用了匹配变量的值,则匹配仅在稍后完成。

它相当于

execStateT m s = do
  r <- runStateT m s
  return (snd r)

或者

execStateT m s =
  runStateT m s >>= return . snd

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM