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 #)
。我假設第二個散列指的是一個未裝箱的值,但其餘部分對我來說是個謎(推測可能與「新狀態」有關)。
一般來說,Haskell中的'#'意味着它正在做某種低級和/或原始的東西。您必須啓用'MagicHash'語言擴展才能在名稱中使用'#'。 – Lazersmoke