问题标签 [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 投票
2 回答
245 浏览

haskell - Haskell GD 绑定的构建错误

我已经使用 cabal安装了 GD 包( http://hackage.haskell.org/package/gd-3000.4.0 )。当我尝试编译使用 GD 的程序时,我收到一个错误:

0 投票
1 回答
299 浏览

haskell - 对 GHC 分析器输出中的类型类函数进行拆解

在分析用 GHC 编写的 Haskell 程序时,类型类函数的名称在 .prof 文件中被修改,以区分一个实例的实现与另一个实例的实现。我怎样才能解开这些名称以找出它是哪种类型的实例?

例如,假设我有以下程序,其中 typesFastSlow都实现Show

我编译-prof -auto-all -caf-all并运行+RTS -p. 在生成的 .prof 文件中,我看到最高成本中心是:

在树中,我同样看到(省略不相关的行):

我如何确定show_an9Slow' 的实现show而不是Fast'?

0 投票
3 回答
123 浏览

windows - 从 Hackage 操作源包如何轻松部署到多个 Windows 框?

最近,当我在 Hackage 上找到 ghc 6.12/6.10 的良好源包时,我不得不对 cabal 文件进行一些小或大的更改,以使这些包在 Windows 下工作。除了将我的修复与 github 分叉和合并之外,将这些修改后的构建带到仅安装了基本 haskell 平台的其他几个 Windows 盒子似乎是最好的方法/足够好的做法?

如果我能以某种方式使用 cabal-install,我应该更喜欢,因为这是通常使用的。是否应该将修改后的构建目录放在共享/网络目录上并从目标 Windows 框中安装?说这样的话:

在机器上准备

关于机器使用和开发正常

0 投票
1 回答
454 浏览

haskell - do-notation 是否特定于“base:GHC.Base.Monad”?

Monad标准类是有缺陷的,它实际上应该扩展FunctorPointed浮动的想法。

我不一定声称这是正确的做法,但假设有人试图这样做:

到目前为止一切顺利,但是当尝试使用 do-notation 时:

编译器抱怨:

问题:

do-notation 仅适用于base:GHC.Base.Monad吗?有没有办法让它与替代Monad类一起工作?

额外的上下文:

我真正想做的是base:Control.Arrow.Arrow用“通用”Arrow类替换:

然后在Arrow我的课程中使用 's proc-notation Arrow,但这就像上面的 do-notation 示例和Monad.

我将主要Either用作我的对类型构造函数,而不是(,)像当前Arrow类那样的类型构造函数。这可能会使我的玩具 RTS 游戏 ( cabal install DefendTheKind) 的代码更漂亮。

0 投票
1 回答
6115 浏览

list - 使用 Map 应用具有多个输入的函数?(哈斯克尔)

伙计们,

目前正在尝试完成我正在处理的一些家庭作业,并且遇到了一个问题,即我试图将 map 应用于接受多个输入的函数。

所以在我使用 processList f (x:xs) = map accelerationList f xs x xs 的情况下

processList 被赋予一个浮点值 (f) 和一个 List,它排序到另一个 List

Accelerate List 接受一个浮点值 (f) 一个 List 和一个 List Object,通过它返回另一个 List Object

我知道我的 Accelerate List 代码是正确的,但我一辈子都无法让这段代码的语法正常工作:

有任何想法吗?我已经挠头大约3个小时了。我知道这简单。

0 投票
1 回答
259 浏览

haskell - 帮助理解惰性代码中的奇怪行为

我编写了一个程序来生成平面图的正交表示。对于这项工作,我使用 GHC 6.10.1。我的代码基于 FGL 库。它用于保持图形结构。

最近我发现了一个我无法解释的错误。如果删除我的程序的上下文作业,那么:

该程序必须打印“OK”但结果是“ERROR”

这里更详细。函数 prepareData 得到一个带有帮助边的图。Data BlockScheme 也将他们的数据保存在cyclesInfoBS 列表中。这些边需要函数 dualGraph 的算法。

函数 prepareG 从删除这些边的图形中构建新图形。并且 EmbeddedBSG 变量的值必须在任何地方都相同。

但是 dualGraph 工作时会发生错误。内部跟踪表示该图没有帮助边(2,1),但在调用 dualGraph 之前,它的图参数有帮助边。dualGraph 的模块既没有 delEdge 也没有 delEdge 也没有 delNodes 也没有 delNode 并且没有调用要执行此操作的函数。dualGraph 的模块只读取图形变量。

如果注释代码删除帮助边缘,那么它们会留下来。

dualGraph之前的图状态:

将图的状态转换为 DualGraph 模块:

第二状态的节点 2 没有任何传出边。

DualGraph中有一个检测错误的地方是函数lSortSuc。

lSortSuc vertexId graph =.... 它要求 vertexId 的顶点至少有 1 个入边和 1 个出边,或者它是 sink 节点。在这种情况下,sink 节点为 1。

然后它可以假设 lSortSuc 在没有节点 2 的帮助边的图的某个地方被调用。但事实并非如此。

有人有什么想法吗?我能做些什么?

0 投票
1 回答
79 浏览

haskell - 是否有任何方法可以快速检测所用库的有效范围版本

我是初学者 Haskell 程序员。在过去的六个月里,我编写了一些有用的代码。我想从中释放一个库。该代码将使用系统安装 cabal 作为任何 Haskell 库。与 cabal 一起发布的库有一个元数据文件,其中有来自库及其版本的逻辑谓词。

开发人员通常使用一组库。它繁琐地关心一组集合库。如何知道我的库是否为某些子库编译成功?

0 投票
3 回答
661 浏览

haskell - 为什么s ++ t不会导致大s的堆栈溢出?

我想知道为什么

不会导致堆栈溢出错误。前奏中的 ++ 似乎是直截了当且非尾递归的:

编辑:最初,我认为这个问题与前奏中定义 ++ 的方式有关,特别是与重写规则有关,因此问题继续如下。讨论告诉我,事实并非如此。我现在认为一些惰性求值效果会导致代码在没有堆栈溢出的情况下运行,但我不太清楚如何。

所以就这样,它应该会遇到堆栈溢出,对吧?所以我认为这可能与遵循 ++ 定义的 ghc 魔法有关:

{-# RULES "++" [~1] forall xs ys。xs ++ ys = 增加 (\cn -> foldr cn xs) ys #-}

*这有助于避免堆栈溢出吗?有人可以为这段代码中发生的事情提供一些提示吗?**

0 投票
1 回答
4607 浏览

haskell - 在 Haskell 中,如果绑定“隐藏现有绑定”是什么意思?

我在编译时收到来自 GHC 的警告:

警告:“pats”的此绑定会隐藏“match_ignore_ancs”定义中的现有绑定

这是功能:

知道这意味着什么以及如何解决吗?

干杯。

0 投票
5 回答
6869 浏览

windows - Haskell: read input character from console immediately, not after newline

I've tried this:

but it waits until the enter is pressed, which is not what I want. I want to read the character immediately after user presses it.

I am using ghc v6.12.1 on Windows 7.

EDIT: workaround for me was moving from GHC to WinHugs, which supports this correctly.