问题标签 [ghc]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
haskell - 为什么 GHCi 不能解析 [[]] 的那种?
为什么 Haskell 不能解析 [[]] (列表列表)的类型?
为什么不是简单的 * -> *,因为我可以给它一个像 Int 这样的类型,然后得到 [[Int]],它是一种 *。
windows - 如何使用 ghc 编译 GUI 可执行文件?
我将我编写的一个小 Haskell 程序从 Mac 移植到 Windows。它是一个 GUI 应用程序(wxHaskell,用 ghc 6.12.1 编译),所以它不需要打开命令提示符窗口。无论如何,它确实如此,所以我的问题是:我必须做什么才能在不先打开提示窗口的情况下启动程序?有一些 ghc 开关吗?
haskell - 对 HashTable 性能问题感到好奇
我读到 Haskell 中的哈希表存在性能问题(在 2006年的Haskell-Cafe和 2009 年的 Flying Frog Consultancy 的博客上),因为我喜欢 Haskell,这让我很担心。
那是一年前的事,现在(2010 年 6 月)的状态如何?GHC 中的“哈希表问题”是否已修复?
haskell - Haskell/GHC 中的 `forall` 关键字有什么作用?
我开始了解如何forall
在所谓的“存在类型”中使用关键字,如下所示:
然而,这只是如何forall
使用的一个子集,我根本无法理解它在这样的事情中的使用:
或者解释为什么这些不同:
或者整个RankNTypes
东西...
我更喜欢清晰、没有行话的英语,而不是学术环境中常见的语言。我尝试阅读的大多数解释(我可以通过搜索引擎找到的解释)都存在以下问题:
- 它们是不完整的。他们解释了这个关键字使用的一部分(比如“存在类型”),这让我感到很高兴,直到我阅读了以完全不同的方式使用它的代码(比如
runST
,foo
和bar
以上)。 - 它们充满了假设,这些假设是我在本周流行的离散数学、范畴论或抽象代数的任何分支中读到的最新消息。(如果我再也没有读到“请参阅论文以了解实施细节”的话,那就太早了。)
- 它们的编写方式经常将甚至简单的概念变成曲折扭曲和支离破碎的语法和语义。
所以...
关于实际问题。任何人都可以用清晰、简单的英语完整地解释这个forall
关键字(或者,如果它存在于某个地方,指出我错过的如此清晰的解释)而不认为我是一个沉浸在行话中的数学家吗?
编辑添加:
下面的高质量答案中有两个突出的答案,但不幸的是,我只能选择一个作为最佳答案。 诺曼的回答详细而有用,以一种显示一些理论基础的方式解释事物,forall
同时向我展示了它的一些实际含义。 亚初的回答涵盖了其他人没有提到的领域(作用域类型变量),并用代码和 GHCi 会话说明了所有概念。如果可以选择最好的,我会的。不幸的是,我不能,并且在仔细查看了这两个答案之后,我认为由于说明性代码和附加的解释,yairchu 稍微优于 Norman 的。然而,这有点不公平,因为我确实需要两个答案来理解这一点,以至于forall
当我在类型签名中看到它时不会让我有一种微弱的恐惧感。
haskell - Haskell 中的孤立实例
当使用该选项编译我的 Haskell 应用程序时-Wall
,GHC 抱怨孤立实例,例如:
类型类ToSElem
不是我的,它是由HStringTemplate定义的。
现在我知道如何解决这个问题(将实例声明移动到声明 Result 的模块中),并且我知道为什么 GHC 更愿意避免孤立实例,但我仍然相信我的方式更好。我不在乎编译器是否给您带来不便——而不是我。
我想在 Publisher 模块中声明我的ToSElem
实例的原因是因为它是 Publisher 模块依赖于 HStringTemplate,而不是其他模块。我试图保持关注点分离并避免每个模块都依赖于 HStringTemplate。
我认为 Haskell 类型类的优点之一是,例如与 Java 的接口相比,它们是开放的而不是封闭的,因此不必在与数据类型相同的位置声明实例。GHC 的建议似乎是忽略这一点。
所以,我正在寻找的是一些验证,证明我的想法是正确的,并且我有理由忽略/抑制这个警告,或者是一个更有说服力的反对以我的方式做事的论据。
compiler-construction - 对 GHC 扩展进行分类
我想知道 GHC 的扩展是否可以基本上分为两个不同的类别
- 那些提供“句法糖”或便利的
- 以及那些引入新事物的人,例如新范式。
现在提供一个可以将现有扩展划分为上述类别的扩展将适合哪个类别?
haskell - 如何在 eeePc 701 / Ubuntu Netbook Remix 1.6 (Lucid) 上构建 cabal-install
不是编程问题,但我第一次看到这样的东西。
UNR 1.6(基于 Ubuntu 10.04)安装 6.12.1 版本的 GHC。
因此,为了构建 cabal-install-0.8.2,我必须安装
parsec、mtl、network 和 zlib 的 libghc6- 包。
然后,在启动 'sh ./bootstrap.sh' 后,我得到:
检查已安装的 ghc-6.12.1 软件包...
parsec 已安装且版本正常。
网络已经安装,版本没问题。
Cabal 已经安装,版本没问题。
mtl 已经安装,版本没问题。
HTTP 已经安装并且版本没问题。
zlib 已经安装,版本没问题。
[1 of 1] 编译主程序(Setup.hs、Setup.o)
链接安装程序...
配置 cabal-install-0.8.2...
为 cabal-install-0.8.2 预处理可执行文件...
构建 cabal-install- 0.8.2...
[ 1 / 40] 编译 Distribution.Client.BuildReports.Types ( Distribution/Client/BuildReports/Types.hs, dist/build/cabal/cabal-tmp/Distribution/Client/BuildReports/Types.o )
[ 2 / 40] 编译Distribution.Client.Utils ( Distribution/Client/Utils.hs, dist/build/cabal/cabal-tmp/Distribution/Client/Utils.o )
...关于未使用 addPackageExcludeConstraint 和响应的两个警告...
[39 of 40] 编译 Distribution.Client.Install ( Distribution/Client/Install.hs, dist/build/cabal/cabal-tmp/Distribution/Client/Install.o )
[40 of 40] 编译 Main ( Main.hs, dist/build/cabal/cabal-tmp/Main.o )
链接 dist/build/cabal/cabal ...
collect2: ld 以信号 9 终止 [Processus arrêté]
cabal-install 引导期间出错:
构建 cabal-install 包失败
在链接和 collect2 之间(一分钟左右),我的硬盘驱动器的 LED 闪烁
,好像有很多文件被写入或读取。
我不知道它是否相关,但这里是依赖关系
Cabal-1.8.0.2
HTTP-4000.0.6
mtl-1.1.0.2
network-2.2.1.7
parsec-2.1.0.1
zlib-0.5.2.0 的版本
macos - 为什么 GHC 的 Macports 包编译需要这么长时间?
为什么?有一个引导过程和编译真正的编译器过程,但是哪个部分消耗的时间最多?
performance - GHC 用于垃圾收集的 RTS 选项
我有一个 Haskell 程序,它处理一个文本文件并构建一个Map
(包含数百万个元素)。整个过程可以运行2-3分钟。我发现调整 -H 和 -A 选项会对运行时间产生很大影响。
有关于 RTS 的此功能的文档,但对我来说很难阅读,因为我不知道 GC 理论中的算法和术语。我正在寻找一个技术含量较低的解释,最好是针对 Haskell/GHC。有没有关于为这些选项选择合理值的参考资料?
编辑:这就是代码,它为给定的单词列表构建了一个 trie。