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

标签 scala haskell

关闭。这个问题是opinion-based .它目前不接受答案。












想改进这个问题?更新问题,以便 editing this post 提供事实和引用来回答它.

8年前关闭。




Improve this question




目前我正在学习 Scala 和 Haskell。

我想知道 Haskell 在某些方面是否比 Scala (+ ScalaZ) 更强大?
例如,我知道 Haskell 的代数数据类型、TypeClasses、currying、惰性等可以在 Scala 中很好地实现。

是否有一些无法轻松映射到 Scala 的 Haskell 程序?如果是,那么 Scala 中缺少什么功能会阻止这种映射?

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

编辑:
我明白亚伯拉罕森的观点。仿真的定义确实至关重要。我会从实际的角度来定义仿真,假设一个知道 Haskell 和 Scala 的程序员可以在 1-2 小时内将 100 行 Haskell 代码转换为等效的 Scala 代码。现在的问题是,什么是等价的?这意味着,将 Haskell 代码中的逻辑构造转换为 Scala 中的等效逻辑构造,例如 Haskell 中的类型类转换为使用隐式实现的等效构造。

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

编辑 3:

This问题类似。

最佳答案

虽然 Scala 有类型推断,但它比 Haskell 弱,因为 Haskell 使用 a(a 的扩展)Hindley-Milner type system这允许特别强大的推理。 Scala 的类型系统允许更广泛的类型概念(例如它也是面向对象的),这意味着 Haskell 使用的类型推断算法不起作用。 (此外,实际上,为了使编译器和编译器编写者更容易,Scala 的类型推断比它可能的要弱。)

关于scala - Haskell 中的哪些功能无法用 Scala 模拟?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22515644/

相关文章:

scala - 在运行时访问函数源代码的宏

scala boolean 变量需要动态改变

scala - 单例对象的类参数(泛型)

java - 了解 akka 中的调度程序

haskell - 使用或在列表理解中

mysql - 为什么SparkSQL在访问MySQL表中的任何值时总是返回超出范围的值?

list - Haskell:如何返回列表的可能拆分列表

c - Haskell FFI - 你能从 Haskell 数据结构中获取 C 指针吗?

haskell - 双仿函数与箭头方法

haskell : Filtering a list of strings