gpt4 book ai didi

Haskell 编译器魔法 : what requires a special treatment from the compiler?

转载 作者:行者123 更新时间:2023-12-03 14:59:53 24 4
gpt4 key购买 nike

在尝试学习 Haskell 时,出现的困难之一是当某些事情需要编译器提供特殊魔法时的能力。想到的一个例子是 seq无法定义的函数,即您无法创建 seq2功能与内置 seq 完全相同.因此,在教某人有关 seq 的知识时,你需要提一下 seq是特殊的,因为它是编译器的特殊符号。

另一个例子是 do -notation 仅适用于 Monad 的实例类(class)。

有时,它并不总是显而易见的。例如,延续。编译器是否知道 Control.Monad.Cont还是您可以自己发明的普通的旧 Haskell?在这种情况下,我认为编译器不需要什么特别的东西,即使延续是一种非常奇怪的野兽。

抛开语言扩展,Haskell 学习者应该注意哪些其他编译器魔法?

最佳答案

几乎所有不能在用户空间中实现的 ghc 原语都在 ghc-prim 中。包裹。 (它甚至还有一个名为 GHC.Magic 的模块!)

所以浏览它会给你一个很好的感觉。

请注意,除非您确切知道自己在做什么,否则不应在用户代码中使用此模块。其中大部分可用的东西都在 base 中的下游模块中导出。 , 有时是修改形式。那些下游位置和 API 被认为更稳定,而 ghc-prim不保证它将如何从一个版本到另一个版本。

GHC 特定的东西在 GHC.Exts 中重新导出。 ,但是 Prelude 中还有很多其他内容(例如基本数据类型以及 seq )或并发库等。

关于Haskell 编译器魔法 : what requires a special treatment from the compiler?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35736542/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com