Edison API 和核心模块是 Purely Functional Data Structures 的 Haskell 实现。
F# 和原生 .Net 数据结构是否充分涵盖了 Edison API 和 Core 中的用例?
尝试将 API 和 CORE Haskell 模块移植到 F# 会有什么好处吗?
最佳答案
我没看过the paper on edison ,但如果它只不过是纯功能数据结构的 Haskell 实现,那么移植书中/论文中的 SML 代码不是更有意义吗?它应该比移植 Haskell 代码更容易,Haskell 代码必须为严格注解,而 F# 必须为懒惰而注解。
本书使用的语言是 SML,带有用于惰性求值的语法扩展。 F# 原生提供了这些扩展的一半:
> let x = lazy 12;;
val x : Lazy<int> = <unevaluated>
> match x with
| Lazy(n) -> n;;
val it : int = 12
> x;;
val it : Lazy<int> = 12
转换本书的
fun lazy
符号,改变这个:fun lazy plus ($m, $n) = $m + n
对此:
let plus (m',n') = lazy (
match (m',n') with
| (Lazy(m), Lazy(n)) -> (lazy (m + n)).Force())
(见本书第 33 页)。 SML 和 F# 之间的区别只是语法上的细微差别,因此翻译应该很容易。
至于值不值得,Okasaki 书中的大部分数据结构都是非常专业的,所以它们不太可能已经存在于 .NET 中,甚至像 F# 的不可变 Set 和 Map 一样。对于需要这些数据结构的人来说,这将是值得的。
关于data-structures - 将 Haskell Edison API 和 Core 移植到 F# 有什么好处吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1602574/