我查看了GHC.Prim的模块,发现似乎GHC.Prim中的所有数据都被定义为data Float#
,而没有=A|B
之类的东西,而GHC.Prim中的所有函数都被定义为gtFloat# = let x = x in x
。
我的问题是这些定义是否有意义以及它们的含义。
我检查了GHC.Prim的标题如下
{-
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.
-}
我想这可能与问题有关,谁可以向我解释一下。
最佳答案
这是魔法 :)
这些是“原始运算符和运算”。它们被硬连线到编译器中,因此没有用于基元的数据构造函数,并且所有函数都是底层函数,因为它们不一定可以在纯haskell中表示。
(底部表示haskell程序中的“孔”,无限循环或undefined
是底部的示例)
换一种方式
这些数据声明/函数用于提供对原始编译器内部的访问。 GHC.Prim的存在是为了导出这些原语,它实际上并没有实现它们或其他任何东西(例如其代码实际上没有用)。所有这些都是在编译器中完成的。
它适用于需要进行极度优化的代码。如果您认为可能需要它,可以使用一些有关GHC中的原语的有用reading
关于haskell - GHC.Prim在Haskell中“let x = x in x”和“data Float#”是什么意思,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15893524/