将Haskell Edison API和Core移植到F#有什么好处?
-
05-07-2019 - |
题
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也是如此。对于需要这些数据结构的人来说是值得的。
其他提示
不隶属于 StackOverflow