Есть ли какая-то польза от переноса API Haskell Edison и Core на F #? - PullRequest
3 голосов
/ 21 октября 2009

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

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

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

Ответы [ 3 ]

7 голосов
/ 22 октября 2009

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

5 голосов
/ 25 февраля 2010

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

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

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

4 голосов
/ 21 октября 2009

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

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

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

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

...