Data structures 将Haskell Edison API和核心移植到F#有什么好处吗?

Data structures 将Haskell Edison API和核心移植到F#有什么好处吗?,data-structures,haskell,f#,immutability,referential-transparency,Data Structures,Haskell,F#,Immutability,Referential Transparency,Edison API和核心模块是的Haskell实现 F#和原生.Net数据结构是否充分涵盖了Edison API和Core中的用例 尝试将API和核心Haskell模块移植到F#会有什么好处吗?我没有遵循链接,尽管我至少对这项工作或Okasaki有一点熟悉。因此,整个答案都是推测性的(我对Edison API中的内容的假设可能有偏差) 我认为,人们喜欢“新语言”中的“公共FP数据结构的参考实现”来帮助学习新语言,这是“一些好处” 至于在实践中的使用(而不是教学法),我希望其中一些是有用的,尽管

Edison API和核心模块是的Haskell实现

F#和原生.Net数据结构是否充分涵盖了Edison API和Core中的用例


尝试将API和核心Haskell模块移植到F#会有什么好处吗?

我没有遵循链接,尽管我至少对这项工作或Okasaki有一点熟悉。因此,整个答案都是推测性的(我对Edison API中的内容的假设可能有偏差)

我认为,人们喜欢“新语言”中的“公共FP数据结构的参考实现”来帮助学习新语言,这是“一些好处”

至于在实践中的使用(而不是教学法),我希望其中一些是有用的,尽管有一些F#和.Net API可能对许多场景同样有用或更有用。我猜重叠功能的主要“批次”是F#immutable集合(Set和Map)以及.Net 4.0(如ConcurrentQueue)

当然,你也会在网上找到一些片段,比如Jomo的。

我还没有读过,但是如果它只不过是纯功能数据结构的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
为此:

let plus (m',n') = lazy (
  match (m',n') with
  | (Lazy(m), Lazy(n)) -> (lazy (m + n)).Force())
(见本书第33页)。SML和F#之间的差异是较小的语法,因此翻译应该很容易


至于是否值得,冈崎书中的大多数数据结构都非常专业,因此它们不太可能已经存在于.NET中,即使是F#的不变集和映射。对于需要这些数据结构的人来说,这是值得的。

几个月后,我注意到


有人在那篇博客上实现了很多数据结构。

你可能想更详细地了解这些数据结构的好处,因为阅读一篇168页的论文并不是很多人想回答的问题。Haskell中的这些数据结构有什么好处?F#中没有哪些数据结构可能有助于添加?出于其价值,我尝试将冈崎的一些数据结构翻译为F#()。有趣的是堆和红黑树实现。这是一个维基,所以如果你看到一些错误或奇怪的东西,请随意修复:)
let plus (m',n') = lazy (
  match (m',n') with
  | (Lazy(m), Lazy(n)) -> (lazy (m + n)).Force())