我最近开始在 Hackage 上查看核心库,有一个反复出现的成语我不明白。下面是 ST 模块的示例:
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 #)
.我假设第二个哈希值是指一个未装箱的值,但其余的对我来说是一个谜(大概与"新状态"有关(。
(# x, y, z #)
是一个包含三个元素的未装箱元组。请参阅"8.2.2.未装箱的元组"在 https://downloads.haskell.org/~ghc/6.8.3/docs/html/users_guide/primitives.html。
其余的基本上只是国家的实现。