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

Jim*_*hey 10 haskell

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

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

如果这是真的,它解释了包含特定于实现的常量,例如表示元组的最大大小的常量和(可能)非便携式调试函数.

但是,它没有解释为什么sortWith在这个模块中.它的实现看起来像普通的,可移植的Haskell给我.我希望能看到它,例如Data.List和Data.Sequence.

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

那么,什么是GHC.Exts for?和为什么它出口的东西,这样一个奇怪的混合

Mas*_*tic 8

这些函数和Downnewtype用于语法扩展:通用(类似SQL)列表推导,启用-XTransformListComp.

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

有三个新的关键字:group,by,和using.(该函数 sortWith不是关键字;它是由GHC.Exts.导出的普通函数.)

这些功能正在列表中,但它们确实属于扩展(并且GHC.Exts是扩展的主页).

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

如果您想了解更多信息,请参阅用户指南页面 - 更多信息,请参阅Phil Wadler和Simon Peyton Jones撰写的论文.这实际上非常令人兴奋,这是用户指南页面中的一个例子:

我截断它,但你可以说:

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

另一个例子是:

output = [x| y <- [1..5], x <- "hello"
, then group using inits]
Run Code Online (Sandbox Code Playgroud)

产量:

["","h","he","hel","hell","hello","helloh","hellohe","hellohel","hellohell","hellohello","hellohelloh",...]
Run Code Online (Sandbox Code Playgroud)

  • 只有中等稳定的原语才能成为"GHC.Exts".在`GHC.Prim`等中有一些实验性的东西. (2认同)