相关疑难解决方法(0)

为什么不在Haskell中输入同义词允许递归?

谁能解释为什么这两个都快乐地编译:

data A a b = A { a :: a, b :: b }
newtype B a = B (A a (B a))
newtype C = C (A Int C)
Run Code Online (Sandbox Code Playgroud)

但我不能通过类型同义词创建类似的递归定义类型?

type B a = A a (B a)
type C = A Int C
Run Code Online (Sandbox Code Playgroud)

虽然显然data B a = A { a :: a, b :: B a }效果很好.

有没有办法避免处理那个额外的构造函数X,我希望类型递归?我主要传递的是访问器功能,b无论如何都要选择,所以我很好,但如果存在简单的规避机制,我想知道它.

我应该用什么编译指示来提高专用数据类型C的性能?只是专攻东西?

在没有复制记录两次的情况下复制A a bA c d定义a -> bc …

haskell types

20
推荐指数
2
解决办法
1255
查看次数

最新的 Prolog 实现基准?

是否有任何最新的 Prolog 实现基准(带有结果)?

我在网站上找到了这个。令人惊讶的是,它显示了和 Aquarius之间的 20 倍差距。我怀疑这些结果已经很老了。这个差距还成立吗?就我个人而言,我还希望看到一些与启用发生检查的比较,因为它对性能有重大影响,并且某些编译器在优化它方面可能比其他编译器更好。

最近比较,我发现这个要求是是2X比SWI更快,YAP为4x比SWI快于一个特定的代码库。


编辑:

实际问题需要发生检查的特定情况

当然:在 Haskell、OCaml、Swift或定理证明器(例如this one)中进行类型推断。我还认为程序员有责任证明他的代码不需要发生检查。测试只能证明你确实需要它,而不是你不需要它

prolog swi-prolog gnu-prolog

3
推荐指数
1
解决办法
259
查看次数

标签 统计

gnu-prolog ×1

haskell ×1

prolog ×1

swi-prolog ×1

types ×1