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#は怠forに注釈を付ける必要があります。
本で使用されている言語は、遅延評価のための構文拡張を備えた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#の違いはわずかな構文であるため、翻訳は簡単です。
価値があるかどうかについては、岡崎の本のデータ構造のほとんどは非常に特殊化されているため、F#の不変のSetおよびMapであっても、.NETにすでに存在することはほとんどありません。これらのデータ構造を必要とする人々にとって価値があるでしょう。
他のヒント
この質問を数か月後に再訪すると、私はそれに注意します
http://lepensemoi.free.fr/index。 php / tag / purely-functional-data-structures
誰かがそのブログにそれらの多くを実装しています。
私はこのリンクをたどりませんでしたが、少なくとも作品または岡崎についてはごくわずかな知識しかありません。したがって、この全体の答えは非常に推測的なものです(Edison APIに含まれるものについては、私の想定から外れているかもしれません)。
「新しい言語」の「一般的なFPデータ構造の実装を参照する」などの人々が新しい言語の学習に役立つという意味で、「いくらかのメリット」があると期待しています。
実際の使用(教育学ではなく)に関しては、多くのシナリオで有用またはより有用なF#および.Net APIがいくつかありますが、それらのいくつかは有用であると期待しています。重複する機能の主な「バッチ」は、F#不変コレクション(セットとマップ)、および.Net 4.0 コンカレントコレクション(ConcurrentQueueなど)。
もちろん、Jomoの不変キュー。