2017-04-07 121 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 #)。我假設第二個散列指的是一個未裝箱的值,但其餘部分對我來說是個謎(推測可能與「新狀態」有關)。

回答