data-structures - 将 Haskell Edison API 和 Core 移植到 F# 有什么好处吗?

标签 data-structures haskell f# immutability referential-transparency

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/

相关文章:

interface - 满足隐式接口(interface)而无需重新实现的记录

f# - 如何在 Xamarin.Forms for F# 中的页面之间导航

java - 为什么我会在链表中找到额外的引用对象?

c - 如何在单链表的开头添加节点?

haskell - 处理 Maybe Bool 值

Haskell cabal : I just installed packages, 但现在找不到包

Haskell 批处理文件处理不会改善空间配置文件

entity-framework - 加入 Entity Framework 和 F#

algorithm - AS3 创建 6 ^ 20 结果的算法

java - Java 中的 JSON 解析和数据操作