问题标签 [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 - 需要一个使用 GHC 来解析和检查 Haskell 的教程
我正在研究一个分析 Haskell 代码的项目。我决定使用 GHC 来解析源代码和推断类型,而不是编写我自己的代码来做这件事。现在,我正在阅读 Haddock 文档,但进展缓慢。有谁知道好的教程吗?
编辑:澄清一下,我不是在寻找像 hlint 这样的东西。我正在编写自己的工具来分析 Haskell 代码的运行时特性,所以就像我在编写不同的 hlint。我正在寻找的基本上是 wiki 页面GHC As a library的扩展。
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。
haskell - 使用 GHC API 评估 Haskell 语句/表达式
对于我正在编写的工具(http://hackage.haskell.org/package/explore),我需要一种在运行时读取 haskell 函数定义的方法,将它们应用于我的工具中的值并检索其应用程序的结果.
谁能给我一个使用 GHC(6.10.4 或 6.12.1)API 的非常基本的示例?
在运行时从文件中读取的示例函数定义:
预期的程序输出
!!更新!!
我发布了一个快速答案,但它在执行目录中创建了一个目标文件,任何避免这种情况和避免所有文件 IO 的提示都是最受欢迎的。我还希望看到一个可以在内存中完成所有操作的版本:例如,用户在 GUI 中提供函数定义,并且编译/评估不会创建任何目标文件。
haskell - 使用 putStr 和 getLine 的错误 IO 操作顺序
我有以下代码:
当我运行它(使用runhaskell
)或编译它(ghc 6.10.4)时,结果是这样的:
为什么Test input : asd
被打印后asd
?
在http://learnyouahaskell.com/上的代码示例中,它使用putStr
,getLine
呈现的输出与我的不同。当我使用putStrLn
程序按预期工作时(打印,然后提示,然后打印)。
它是一个错误ghc
,还是它应该工作的方式?
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。
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
所有问题似乎都消失了。
haskell - Haskell:这个函数的类型是什么?
有没有办法让 ghci 告诉我?
haskell - Haskell (GHC) 中的列表是如何实现的?
我只是对 Haskell 中列表的一些确切实现细节感到好奇(GHC 特定的答案很好)——它们是简单的链表,还是有任何特殊的优化?进一步来说:
- 是否
length
和(!!)
(例如)必须遍历列表? - 如果是这样,它们的值是否以任何方式缓存(即,如果我调用
length
两次,是否必须两次迭代)? - 访问列表后面是否涉及遍历整个列表?
- 是否记住了无限列表和列表推导?(即,对于
fib = 1:1:zipWith (+) fib (tail fib)
,每个值是递归计算的,还是依赖于先前计算的值?)
任何其他有趣的实现细节将不胜感激。提前致谢!
macos - GHC 6.12 和 MacPorts
我最近在运行 OS X 10.5.8 的 Intel MacBook 上 安装了(通过二进制安装程序)GHC 6.12 和Haskell Platform 2010.1.0.1 ,最初一切正常。编辑:我必须从源代码安装cabal
、、alex
和happy
,但在那之后,一切似乎都运行良好。但是,我发现如果我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_PATH
并DYLD_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? 或者,如果做不到这一点,一种使链接不会以其他巧妙方式中断的方法?