在Haskell中"〜"是什么意思?

Rom*_*lez 17 syntax haskell pattern-matching

我正在研究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'
Run Code Online (Sandbox Code Playgroud)

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

Mic*_*ter 14

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

它被称为懒惰模式,并具有~pat的形式.懒惰模式是无可辩驳的:匹配值v对~pat总是成功,无论pat.在操作上,如果pat中的标识符稍后在右侧被"使用",则它将被绑定到如果v成功匹配pat将导致的值的那部分,否则⊥.

此外,本节可能有用.


sth*_*sth 8

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

~表示一个惰性模式匹配:假设该值与模式匹配.如果实际使用匹配变量的值,则匹配仅在稍后进行.