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