8

我最近开始在 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 #)。我假设第二个哈希是指未装箱的值,但其余的对我来说是个谜(大概与“新状态”有关)。

4

1 回答 1

7

(# x, y, z #)是一个包含三个元素的未装箱元组。请参阅https://downloads.haskell.org/~ghc/6.8.3/docs/html/users_guide/primitives.html上的“8.2.2. Unboxed Tuples” 。

其余的基本上只是状态的一个实现。

于 2017-04-07T22:55:37.073 回答