问题标签 [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.

0 投票
4 回答
1803 浏览

haskell - 需要一个使用 GHC 来解析和检查 Haskell 的教程

我正在研究一个分析 Haskell 代码的项目。我决定使用 GHC 来解析源代码和推断类型,而不是编写我自己的代码来做这件事。现在,我正在阅读 Haddock 文档,但进展缓慢。有谁知道好的教程吗?

编辑:澄清一下,我不是在寻找像 hlint 这样的东西。我正在编写自己的工具来分析 Haskell 代码的运行时特性,所以就像我在编写不同的 hlint。我正在寻找的基本上是 wiki 页面GHC As a library的扩展。

0 投票
3 回答
2801 浏览

haskell - 在 GHC (Haskell) 中捕获 Control-C 异常

我在 Haskell 中构建了一个非常简单的 read-eval-print-loop 来捕获 Control-C(UserInterrupt)。但是,每当我编译和运行这个程序时,它总是会捕获第一个 Control-C 并总是在第二个 Control-C 上中止,退出代码为 130。无论我在两者之前和之间输入多少行输入都无关紧要Control-Cs,它总是以这种方式发生。我知道我一定遗漏了一些简单的东西......请帮忙,谢谢!

注意:这是基于 4 的异常,所以是 Control.Exception 而不是 Control.OldException。

0 投票
3 回答
2741 浏览

haskell - 使用 GHC API 评估 Haskell 语句/表达式

对于我正在编写的工具(http://hackage.haskell.org/package/explore),我需要一种在运行时读取 haskell 函数定义的方法,将它们应用于我的工具中的值并检索其应用程序的结果.

谁能给我一个使用 GHC(6.10.4 或 6.12.1)API 的非常基本的示例?

在运行时从文件中读取的示例函数定义:

预期的程序输出

!!更新!!
我发布了一个快速答案,但它在执行目录中创建了一个目标文件,任何避免这种情况和避免所有文件 IO 的提示都是最受欢迎的。我还希望看到一个可以在内存中完成所有操作的版本:例如,用户在 GUI 中提供函数定义,并且编译/评估不会创建任何目标文件。

0 投票
1 回答
3450 浏览

haskell - 使用 putStr 和 getLine 的错误 IO 操作顺序

我有以下代码:

当我运行它(使用runhaskell)或编译它(ghc 6.10.4)时,结果是这样的:

为什么Test input : asd被打印后asd

http://learnyouahaskell.com/上的代码示例中,它使用putStrgetLine呈现的输出与我的不同。当我使用putStrLn程序按预期工作时(打印,然后提示,然后打印)。

它是一个错误ghc,还是它应该工作的方式?

0 投票
2 回答
2450 浏览

haskell - Haskell 中的 CPP 扩展和多行文字

是否可以在包含多行字符串文字的 Haskell 代码上使用 CPP 扩展?Haskell 还有其他条件编译技术吗?

例如,让我们看这段代码:

如果我取消注释{-# LANGUAGE CPP #-},则 GHC 会以词法错误驳斥此代码:

使用 GHC 6.12.1,cpphs 可用。

我确认使用cpphs.compat包装器和-pgmP cpphs.compat选项会有所帮助,但我希望有一个不依赖于自定义 shell 脚本的解决方案。-pgmP cpphs不起作用。

PS 我需要为 GHC < 6.12 和 GHC >= 6.12 使用不同的代码,没有预处理器可以吗?

升级版。除了 Ganesh 接受的答案之外,我还发现另一种解决方法是将所有条件声明放在一个单独的模块中{-# LANGUAGE CPP #-},从而避免在具有多行字符串的模块中使用 CPP。

0 投票
1 回答
1232 浏览

haskell - 使用 GHC,在用户空间安装 GMP 的 cabal

我一直在尝试在cabal-install没有安装 GNU 多精度包 (GMP) 的系统上安装 Haskell 平台并安装在用户空间中的 Linux 上。

我设法通过设置LB_LIBRARY_PATH指向我安装 GMP 的 lib 目录来安装 GHC-6.12.1 和 GHCi 工作,但是在下一步cabal-install开始工作时遇到了问题。它一直试图(静态)链接到 GMP。

这失败了,因为 GMP 没有安装在系统中并且ld不知道在哪里可以找到库,并且没有环境变量(我知道)可以告诉 ld 在哪里可以找到用户安装的 GMP,并且(显然)无法告诉配置 Cabal 提供相关-L标志。

经过多次徒劳的搜索和黑客尝试后,我想到了安装我自己的 shell 脚本的荒谬简单的想法,该脚本使用适当的标志ld调用系统。ld-L

这是 shell 脚本 101,当然:

随着这个脚本安装在我PATH前面的目录中,/usr/bin所有问题似乎都消失了。

0 投票
2 回答
322 浏览

haskell - Haskell:这个函数的类型是什么?

有没有办法让 ghci 告诉我?

0 投票
3 回答
12016 浏览

haskell - Haskell (GHC) 中的列表是如何实现的?

我只是对 Haskell 中列表的一些确切实现细节感到好奇(GHC 特定的答案很好)——它们是简单的链表,还是有任何特殊的优化?进一步来说:

  1. 是否length(!!)(例如)必须遍历列表?
  2. 如果是这样,它们的值是否以任何方式缓存(即,如果我调用length两次,是否必须两次迭代)?
  3. 访问列表后面是否涉及遍历整个列表?
  4. 是否记住了无限列表和列表推导?(即,对于fib = 1:1:zipWith (+) fib (tail fib),每个值是递归计算的,还是依赖于先前计算的值?)

任何其他有趣的实现细节将不胜感激。提前致谢!

0 投票
2 回答
2059 浏览

haskell - ghc-pkg 和 cabal 是什么关系?

关于在 Haskell 中如何创建、安装和使用包,ghc-pkgcabal是什么关系?

他们的角色是什么——你什么时候使用一个,而不是另一个,或者两者都使用?

它们是互补的工具、竞争的工具,还是只是做不同工作的工具?

0 投票
6 回答
1932 浏览

macos - GHC 6.12 和 MacPorts

我最近在运行 OS X 10.5.8 的 Intel MacBook 上 安装了(通过二进制安装程序)GHC 6.12 和Haskell Platform 2010.1.0.1 ,最初一切正常。编辑:我必须从源代码安装cabal、、alexhappy,但在之后,一切似乎都运行良好。但是,我发现如果我cabal install用来安装依赖于 MacPorts 库(例如cabal install --extra-lib-dirs=/opt/local/lib --extra-include-dirs=/opt/local/include gd)的包,则在 GHCi 中一切正常,但如果我尝试编译,则会出现错误

在谷歌搜索之后,我发现了一个讨论这个问题的 Haskell-cafe 长线程。结果似乎是MacPorts 安装了 libiconv 的更新版本,二进制接口与系统附带的版本略有不同。因此,如果您尝试与任何 MacPorts 库链接,MacPorts libiconv 也会被链接;并且由于基础库是为了链接不同版本的 libiconv 而构建的,所以事情就中断了。我已经尝试设置LD_LIBRARY_PATHDYLD_LIBRARY_PATH添加更多标志来尝试让它/usr/lib再次查看(例如 cabal install --extra-lib-dirs=/opt/local/lib --extra-include-dirs=/opt/local/include --extra-lib-dirs=/usr/lib --extra-include-dirs=/usr/include gd),但都没有奏效。卸载 MacPortslibiconv这不是一个真正的选择,因为我安装了一堆依赖于它的端口——包括我希望 Haskell 链接到的一些端口,比如gd2.

从我在网上看到的情况来看,结果似乎真的是“你已经筋疲力尽了”:在使用 GHC 编译时,您无法链接到任何 MacPorts 库,而且似乎没有解决方案。但是,该线程是从 2009 年底开始的,所以我认为有人有可能有解决方案、变通方法、荒谬的 hack ......任何东西,真的。那么:有谁知道如何让 GHC 6.12 在链接到 MacPorts 库的同时链接到系统 libiconv? 或者,如果做不到这一点,一种使链接不会以其他巧妙方式中断的方法?