Есть ли какая-то польза от переноса API Haskell Edison и Core на F #?
-
05-07-2019 - |
Вопрос
Модули Edison API и Core являются реализацией на Haskell чисто функциональных данных. структуры
Достаточно ли охватывают F # и собственные структуры данных .Net сценарии использования в Edison API и Core? Р>
Будет ли какая-то польза от попыток перенести модули API и CORE Haskell на F #?
Решение
Я не читал статью об Эдисоне , но если это не что иное, как реализация чисто функциональных структур данных на Haskell, не имеет ли больше смысла переносить код SML, который находится в книге / диссертации? Это должно быть проще, чем портировать код на 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 # заключаются в незначительном синтаксисе, поэтому перевод должен быть легким.
Что касается того, стоит ли это делать, большинство структур данных в книге Окасаки являются очень специализированными, поэтому вряд ли они уже существуют в .NET, даже несмотря на неизменность Set и Map F #. Это будет полезно для людей, которым нужны эти структуры данных.
Другие советы
Возвращаясь к этому вопросу несколько месяцев спустя, отмечу, что
http://lepensemoi.free.fr/index. PHP / теги / чисто-функциональные-структуры данных
кто-то реализовал их в этом блоге.
Я не перешел по ссылке, хотя у меня есть хотя бы крошечная фамилия с работой или Окасаки. Так что весь этот ответ дико спекулятивен (мои предположения о том, что есть в API Edison, могут быть не правы).
Я ожидаю, что есть «некоторая выгода» в том смысле, что люди любят «ссылочные реализации общих структур данных FP» в «новых языках», чтобы помочь в изучении новых языков.
Что касается использования на практике (а не в педагогике), я ожидаю, что некоторые из них полезны, хотя есть некоторые API F # и .Net, которые могут быть как полезными, так и более полезными для многих сценариев. Я полагаю, что основными «пакетами» перекрывающихся функций являются неизменяемые коллекции F # (Set и Map), а также .Net 4.0 одновременные коллекции (например, ConcurrentQueue). Р>
Конечно, вы также найдете некоторые фрагменты в Интернете, такие как неизменяемая очередь .