2016-09-18 267 views
4
STM (State# RealWorld -> (#State# RealWorld, a#)) 

#没有显示在Haskell运营商列表中,谷歌也没有产生任何有用的东西。 Ghci:>:t (#)指出:变量不在范围内。'#'是什么意思?

那么这个角色做了什么?为什么它用在上面的一段代码中(来自STM)?

回答

5

你需要一种语言扩展才能使用它,这就是它的特别之处!

它什么也没做,它只是一个特殊的人物,GHC人们喜欢用低级别的拳击相关的东西。

(# a, b #)这是ab未装箱的元组,也就是你看到有什么样的类型 - 这不是(#State# , ...,这是(# State#, ...

+0

还有什么让我困惑的是,有提及''状态#''和''#状态#'' - 这两者是相同还是有区别? – BitTickler

+0

啊!那么也没有涉及到的''''''!这可能就是证明haskell解析器在解析时更加智能化,因为我是:) – BitTickler

+3

实际上,您需要两种语言扩展名来代替unboxed元组:'UnboxedTuples'和'MagicHash',以允许标识符名称如'State#' 。 – dfeuer