【问题标题】:What does `~` mean in Haskell?`~` 在 Haskell 中是什么意思?
【发布时间】:2015-09-14 08:59:44
【问题描述】:
我正在研究 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'
这个~ 操作数是什么意思?
【问题讨论】:
标签:
syntax
haskell
pattern-matching
【解决方案1】:
这是 Haskell 中惰性模式的表示法。我不能说我很熟悉,但是from here:
它被称为惰性模式,并且有
形式〜拍。惰性模式是
无可辩驳:匹配一个值 v
反对 ~pat 总是成功,
不管拍。操作上
说,如果 pat 中的标识符是
后来在右侧“使用”,
它将被绑定到
如果 v 是,将产生的值
成功匹配 pat,⊥
否则。
另外,this section 可能有用。
【解决方案2】:
对于正常的模式匹配,需要评估应该匹配的值,以便可以将其与模式进行比较。
~ 表示惰性模式匹配:只是假设值将匹配模式。如果实际使用了匹配变量的值,则匹配只会在以后进行。
【解决方案3】:
相当于
execStateT m s = do
r <- runStateT m s
return (snd r)
或
execStateT m s =
runStateT m s >>= return . snd