什么是GHC.Exts,它的内容是如何选择的?

时间:2015-01-30 04:23:29

标签: haskell

Haskell标准库中的GHC.Exts模块声称它

  

是获得GHC特定扩展的批准方式。

如果这是真的,它解释了包含特定于实现的常量,如the constant representing the maximum size of a tuple和(可能)非可移植debugging functions

然而,它并没有解释为什么sortWith在这个模块中。 Its implementation看起来像普通的便携式Haskell给我。 我希望能够看到它,例如Data.List和Data.Sequence。

似乎我误解了GHC.Exts是什么,我不理解其出口集合背后的基本逻辑,或者出现一些大杂烩的历史原因。

那么,什么是GHC.Exts for ?并且为什么会导出这种奇怪的混合物?

1 个答案:

答案 0 :(得分:7)

这些函数和Down newtype用于语法扩展:Generalised (SQL-Like) List Comprehensions,使用-XTransformListComp启用。

此扩展程序引入了与这些功能相对应的关键字:

  

有三个新关键字:groupbyusing。 (功能   sortWith不是关键字;它是一个导出的普通函数   通过GHC.Exts。)

这些功能正在列表中,但它们确实属于某个扩展程序(GHC.Exts是扩展程序' home。)

GHC.Exts导出各种各样的东西的原因是因为有各种各样的扩展。

如果您想看到更多信息,请参阅user guide page - 以及更多信息,由Phil Wadler和Simon Peyton Jones提供paper。它实际上非常令人兴奋,这是用户指南页面中的一个例子:

我将其截断,但你可以说:

[ .. | (name, dept, salary) <- employees
, then group by dept
, then sortWith by (sum salary)
, then take 5 ]

另一个例子是:

output = [x| y <- [1..5], x <- "hello"
, then group using inits]

收率:

["","h","he","hel","hell","hello","helloh","hellohe","hellohel","hellohell","hellohello","hellohelloh",...]