【问题标题】: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
        

        【讨论】:

          猜你喜欢
          • 2016-09-14
          • 1970-01-01
          • 1970-01-01
          • 2013-10-31
          • 1970-01-01
          • 2015-07-31
          • 1970-01-01
          • 2012-02-26
          相关资源
          最近更新 更多