2010-02-15 73 views
16

我正在學習mtl圖書館,並試圖做我自己的一些MonadTransformers。我檢查了Control.Monad.State.StateT聲明,並在所有的代碼,我看到這句法:Haskell中「〜」的含義是什麼?

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

是什麼~操作數是什麼意思?

回答

14

這是Haskell中一個懶惰模式的表示法。我不能說我很熟悉,但from here

它被稱爲懶人模式,並具有 形式〜拍。惰性模式爲 無可辯駁:匹配值v 與〜pat總是成功, 無論如何。可操作 講,如果在拍的識別符是 以後右手側「已使用」, 它將被綁定到的 如果V是 成功匹配輕拍將導致的值的部分,和⊥ 除此以外。

另外,this section也許有用。

4

這相當於

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

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

對於一個正常的模式匹配,來進行評價的是應當匹配需要的值,以便它能夠與模式相比較。

~表示延遲模式匹配:它只是假定該值將匹配模式。如果實際使用了匹配變量的值,那麼稍後才進行匹配。