使用Scala无法模拟Haskell中的哪些功能?

时间:2014-03-19 18:58:34

标签: scala haskell

目前我正在学习Scala和Haskell。

我想知道Haskell在某种程度上比Scala(+ ScalaZ)更强大吗? 我知道例如Haskell的代数数据类型,TypeClasses,currying,laziness等可以在Scala中实现。

是否有一些Haskell程序无法轻松映射到Scala?如果是,Scala中缺少什么功能可以阻止此映射?

我的直觉是Scala至少和Haskell一样强大,我只是不确定这种直觉是否正确。有人能证实吗?

编辑: 我看到了亚伯拉罕森的观点。仿真的定义确实至关重要。我将从实际的角度定义仿真,给定一个知道Haskell和Scala的程序员可以将1-2行Haskell代码转换为1-2小时内的等效Scala代码。现在是问题,什么是等价的?这意味着,将Haskell代码中的逻辑结构转换为Scala中的等效逻辑结构,例如Haskell中的Type Classes转换为使用implicits实现的等效结构。

编辑2: 回应Travis'评论:为简单起见,我们只考虑vanilla Haskell。

编辑3:

This问题类似。

1 个答案:

答案 0 :(得分:2)

虽然Scala具有类型推断,但它比Haskell更弱,因为Haskell使用({3}}的扩展,这允许特别强大的推理。 Scala的类型系统允许更广泛的类型概念(例如,它也是面向对象的),这意味着Haskell使用的类型推断算法不起作用。 (另外,实际上,Scala的类型推断比在编译器和编译器编写器上更容易使用更弱。)