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

Gar*_*ary 3 f# haskell immutability referential-transparency data-structures

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

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

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

Nat*_*ers 7

我没有看到在爱迪生的文件,但如果它没有什么比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
Run Code Online (Sandbox Code Playgroud)

要转换本书的fun lazy表示法,请更改:

fun lazy plus ($m, $n) = $m + n
Run Code Online (Sandbox Code Playgroud)

对此:

let plus (m',n') = lazy (
  match (m',n') with
  | (Lazy(m), Lazy(n)) -> (lazy (m + n)).Force())
Run Code Online (Sandbox Code Playgroud)

(参见书中的第33页).SML和F#之间的差异是次要语法,因此翻译应该很容易.

至于它是否值得,Okasaki的书中的大部分数据结构都是非常专业的,所以它们不太可能已经存在于.NET中,即使是F#的不可变Set和Map也是如此.对于需要这些数据结构的人来说是值得的.


Bri*_*ian 5

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

http://lepensemoi.free.fr/index.php/tag/purely-functional-data-structures

有人在那个博客上实施了很多.