代码之家  ›  专栏  ›  技术社区  ›  Roman Gonzalez

haskell中的“~”是什么意思?

  •  17
  • Roman Gonzalez  · 技术社区  · 15 年前

    我在学习 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'
    

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

    3 回复  |  直到 15 年前
        1
  •  14
  •   jrockway    15 年前

    这是haskell中一个懒惰模式的符号。我不能说我很熟悉,但是 from here :

    它被称为懒惰的模式,并且 形式~PAT.懒惰的模式是 不可辩驳:匹配值V 对抗~pat总是成功的, 不管帕特怎么说。操作上的 如果pat中的标识符是 后来在右手边“使用”了, 它将绑定到 如果v是 成功匹配pat和_? 否则。

    也, this section 可能有用。

        2
  •  8
  •   sth    15 年前

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

    ~ 表示一个延迟模式匹配:只是假设值将匹配该模式。如果实际使用了匹配变量的值,则仅在稍后才进行匹配。

        3
  •  4
  •   finnw    15 年前

    相当于

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

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