ST monad 声明的语法
syntax of ST monad declaration
我最近开始研究 Hackage 上的核心库,有一个我不明白的重复出现的习语。这是 ST module:
中的示例
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 #)
。我假设第二个散列指的是一个未装箱的值,但其余的对我来说是个谜(大概与 "new state" 有关)。
(# x, y, z #)
是一个包含三个元素的未装箱的元组。请参阅 https://downloads.haskell.org/~ghc/6.8.3/docs/html/users_guide/primitives.html.
中的“8.2.2. 未装箱的元组”
剩下的基本上就是State的一个实现。
我最近开始研究 Hackage 上的核心库,有一个我不明白的重复出现的习语。这是 ST module:
中的示例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 #)
。我假设第二个散列指的是一个未装箱的值,但其余的对我来说是个谜(大概与 "new state" 有关)。
(# x, y, z #)
是一个包含三个元素的未装箱的元组。请参阅 https://downloads.haskell.org/~ghc/6.8.3/docs/html/users_guide/primitives.html.
剩下的基本上就是State的一个实现。