Syntax 哈斯克尔的`~`是什么意思?

Syntax 哈斯克尔的`~`是什么意思?,syntax,haskell,pattern-matching,Syntax,Haskell,Pattern Matching,我正在研究mtl库,并试图做一些我自己的单变压器。我正在检查Control.Monad.State.StateT声明,在所有代码中,我看到以下语法: execStateT :: (Monad m) => StateT s m a -> s -> m s execStateT m s = do ~(_, s') <- runStateT m s return s' execStateT::(Monad m)=>StateT s ma->s->ms execStat

我正在研究
mtl
库,并试图做一些我自己的单变压器。我正在检查
Control.Monad.State.StateT
声明,在所有代码中,我看到以下语法:

execStateT :: (Monad m) => StateT s m a -> s -> m s
execStateT m s = do
  ~(_, s') <- runStateT m s
  return s'
execStateT::(Monad m)=>StateT s ma->s->ms
execStateT m s=do

这是Haskell中惰性模式的符号。我不能说我对它很熟悉,但是:

它被称为惰性模式,并且具有 表格号为~pat。惰性模式是 无可辩驳:匹配一个值v 帕特总是成功, 不管帕特。操作上 如果pat中的标识符为 后来在右手边“使用”, 它将被绑定到 如果v为 成功匹配pat,以及⊥ 否则

另外,它可能有用。

它相当于

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

对于正常模式匹配,需要计算应匹配的值,以便与模式进行比较

~
表示惰性模式匹配:只是假设值将匹配该模式。然后,只有在实际使用匹配变量的值时,才进行匹配

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