Haskell GHC.Prim中的可疑代码
我在中遇到了以下代码: 特别是:Haskell GHC.Prim中的可疑代码,haskell,ghc,Haskell,Ghc,我在中遇到了以下代码: 特别是: float2Int#甚至不应该进行类型检查 所有函数都不接受参数,因此似乎格式不正确 没有一个函数应用它们声称的数学运算 所有函数都是“无限递归”:let x=x 我知道扩展名叫“MagicHash”,但它不可能那么神奇。有什么好处 (我想我应该添加一条免责声明,我不知道-xmagichish实际上做了什么,我只是假设它允许#语法,仅此而已。)线索在模块顶部: {- This is a generated file (generated by genprimop
float2Int#
甚至不应该进行类型检查let x=x
(我想我应该添加一条免责声明,我不知道
-xmagichish
实际上做了什么,我只是假设它允许#
语法,仅此而已。)线索在模块顶部:
{-
This is a generated file (generated by genprimopcode).
It is not code to actually be used. Its only purpose is to be
consumed by haddock.
-}
顺便提一下,让x=x in x
相当于未定义的
,并且对任何数据类型都有效x
不受以自引用以外的任何方式定义的约束,因此可以是任何类型
这些函数是“原始”的,意味着操作非常基本,它们没有在Haskell代码中定义,很可能只是直接翻译成机器指令。所以我找到了使用此函数的代码,看起来很合理。我不能只是为了文件,不是吗?这些函数还有其他版本吗?@Eric哦,是的,但这里没有。它们是原语,意思是由Haskell代码以外的其他代码定义。@Eric:该代码使用GHC内置代码。
undefined
在序言中定义,它导入原语,而不是相反。实际上,undefined
会抛出一个错误undefined=error“Prelude.undefined”
和error s=throw(errorcalls)
,而let x=x in x
只是一个循环。原始操作不存在于Haskell中,但它们存在于cmm中(C减):。
{-
This is a generated file (generated by genprimopcode).
It is not code to actually be used. Its only purpose is to be
consumed by haddock.
-}