'#'的意思是什么?

4
STM (State# RealWorld -> (#State# RealWorld, a#))

#在Haskell运算符列表中没有显示出来,而且谷歌也没有提供任何有用的信息。 Ghci:>:t (#) 显示:变量不在范围内。

那么这个字符是做什么用的?为什么在上述STM代码中使用它?

1个回答

5

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

它并不会做任何事情,只是一个特殊的字符而已, GHC 的人们似乎喜欢在低级别、可能与 boxing 相关的东西的名称中使用它。

有一个叫做(# a, b #)的类型,它是ab的未打包元组类型,这就是你在那里看到的--它并不是( #State# , ...,而是(# State#, ...


还让我困惑的是,有提到“State#”和“#State#”-它们是相同的还是有区别? - BitTickler
啊!那么这里也没有a#的参与?!?!这可能只是证明Haskell解析器在解析方面比我更聪明 :) - BitTickler
3
为了运行这段代码,你实际上需要两个语言扩展:UnboxedTuples 用于不装箱的元组和 MagicHash 以允许使用诸如 State# 这样的标识符名称。请注意,翻译后保持原文意思,尽量使语言通俗易懂,并且不要添加解释或其他额外的信息。 - dfeuer
1
@dfeuer感谢您提供可在Google上搜索到的名称“MagicHash”! - BitTickler
我找到了一个很好的入口点,解释了一些问题:https://downloads.haskell.org/~ghc/6.12.3/docs/html/users_guide/primitives.html - BitTickler

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接