【问题标题】:syntax of ST monad declarationST monad 声明的语法
【发布时间】:2017-09-03 10:12:30
【问题描述】:

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

【问题讨论】:

    标签: haskell st-monad


    【解决方案1】:

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

    剩下的基本上只是State的一个实现。

    【讨论】:

    • 一般来说,Haskell 中的# 意味着它正在做某种低级和/或原始的东西。您必须启用 MagicHash 语言扩展才能在名称中使用 #。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-18
    • 1970-01-01
    • 1970-01-01
    • 2011-10-13
    • 1970-01-01
    相关资源
    最近更新 更多