Есть ли какая-то польза от переноса API Haskell Edison и Core на F#?

Модули Edison API и Core являются реализацией чисто функциональных структур данных на Haskell.

Достаточно ли охватывают структуры данных F# и нативные.Net варианты использования в Edison API и Core?

Будет ли какая-то польза от попыток перенести модули API и CORE Haskell на F#?

3 ответа

Решение

Я не читал статью об Эдисоне, но если это не что иное, как реализация чисто функциональных структур данных на 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, даже если F# - неизменный Set и Map. Это будет полезно для людей, которым нужны эти структуры данных.

Возвращаясь к этому вопросу несколько месяцев спустя, отмечу, что

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

кто-то реализовал их в этом блоге.

Я не перешел по ссылке, хотя у меня есть хотя бы крошечная фамилия с работой или Окасаки. Так что весь этот ответ дико спекулятивен (я могу быть не прав в своих предположениях о том, что в Edison API).

Я ожидаю, что есть "некоторая выгода" в том смысле, что люди любят "ссылочные реализации общих структур данных FP" в "новых языках", чтобы помочь в изучении новых языков.

Что касается практического использования (а не педагогики), я ожидаю, что некоторые из них полезны, хотя есть некоторые API F# и.Net, которые могут быть как полезными, так и более полезными для многих сценариев. Я полагаю, что основными "пакетами" перекрывающихся функций являются неизменяемые коллекции F# (Set и Map), а также параллельные коллекции.Net 4.0 (например, ConcurrentQueue).

Конечно, вы также найдете в Интернете несколько фрагментов, например, неизменную очередь Джомо.

Другие вопросы по тегам