Edison API和Core模块是纯功能数据的Haskell实现结构

F#和原生.Net数据结构是否足以涵盖Edison API和Core中的用例?

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

有帮助吗?

解决方案

我还没看过关于爱迪生的文章 ,但如果它只不过是纯函数数据结构的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也是如此。对于需要这些数据结构的人来说是值得的。

其他提示

几个月后重新审视这个问题,我注意到了

http://lepensemoi.free.fr/index。 PHP /标签/纯粹官能-数据结构

有人在该博客上实施了很多。

我没有按照这个链接,虽然我至少有一个很小的家庭作品或冈崎。因此,这整个答案都是非常具有推测性的(我可能会根据我对Edison API中的内容的假设而偏离基础)。

我希望人们喜欢'新语言'中的“参考普通FP数据结构的实现”来帮助学习新语言,这样做会有“一些好处”。

至于在实践中的使用(而不是教学法),我希望它们中的一些是有用的,尽管有一些F#和.Net API可能对许多场景有用或更有用。我认为主要的几个'批次'重叠功能是F#immutable集合(Set和Map),以及.Net 4.0 并发集合(如ConcurrentQueue)。

当然,你也会在网上找到一些片段,比如Jomo的不可变队列

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top