2017-04-07 84 views
7

我最近开始在Hackage上查看核心库,并且有一个我不明白的反复出现的习语。下面是来自ST module一个例子:ST monad声明的语法

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 #)。我假设第二个散列指的是一个未装箱的值,但其余部分对我来说是个谜(推测可能与“新状态”有关)。

回答