我查看了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/

10-14 19:47