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