ST monad声明的语法

时间:2017-04-07 22:38:43

标签: haskell st-monad

我最近开始在Hackage上查看核心库,这是我不了解的反复出现的习惯用法。以下是ST module

中的一个示例
instance Monad (ST s) where
    {-# INLINE (>>=)  #-}
    (>>) = (*>)
    (ST m) >>= k
      = ST (\ s ->
        case (m s) of { (# new_s, r #) ->
        case (k r) of { ST k2 ->
        (k2 new_s) }})

特别是,我不理解(# new_s, r #)。我假设第二个哈希是指一个未装箱的值,但其余的对我来说是一个谜(与#34;新状态"有关)。

1 个答案:

答案 0 :(得分:7)

(# x, y, z #)是一个包含三个元素的无盒子元组。见" 8.2.2。未装箱的元组"在https://downloads.haskell.org/~ghc/6.8.3/docs/html/users_guide/primitives.html

其余的基本上只是State的实现。