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
  • 我知道扩展名叫“MagicHash”,但它不可能那么神奇。有什么好处


    (我想我应该添加一条免责声明,我不知道
    -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.
    -}