Domanda

I moduli API e Core di Edison sono l'implementazione Haskell di Dati puramente funzionali strutture

Le strutture di dati F # e .Net native coprono sufficientemente i casi d'uso nell'API Edison e nel Core?

Sarebbe utile provare a trasferire i moduli API e CORE Haskell su F #?

È stato utile?

Soluzione

Non ho letto l'articolo su edison , ma se non è altro che l'implementazione Haskell di Strutture di dati puramente funzionali, non ha più senso portare il codice SML che è in nel libro / tesi? Dovrebbe essere più facile del porting del codice Haskell, che deve essere annotato per rigore, mentre F # dovrà annotarsi per pigrizia.

La lingua usata dal libro è SML con estensioni di sintassi per una valutazione pigra. F # fornisce nativamente metà di tali estensioni:

> 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

Per convertire la notazione divertente pigro del libro, cambia questa:

fun lazy plus ($m, $n) = $m + n

A questo:

let plus (m',n') = lazy (
  match (m',n') with
  | (Lazy(m), Lazy(n)) -> (lazy (m + n)).Force())

(Vedi pagina 33 nel libro). Le differenze tra SML e F # sono sintassi minori, quindi la traduzione dovrebbe essere semplice.

Per quanto valga la pena, la maggior parte delle strutture di dati nel libro di Okasaki sono molto specializzate, quindi è improbabile che esistano già in .NET, anche se Set e Map immutabili di F #. Sarebbe utile per le persone che necessitano di tali strutture di dati.

Altri suggerimenti

Rivisitando questa domanda mesi dopo, noto che

http://lepensemoi.free.fr/index. php / tag / puramente-funzionali-data-strutture

qualcuno ne ha implementati molti su quel blog.

Non ho seguito il link, anche se ho almeno una piccola familiarità con il lavoro o Okasaki. Quindi tutta questa risposta è selvaggiamente speculativa (potrei essere fuori base nei miei presupposti su cosa c'è nell'API Edison).

Mi aspetto che ci siano "alcuni benefici", nel senso che alla gente piacciono le "implementazioni di riferimento di strutture comuni di dati FP" in "nuove lingue" per aiutare a imparare nuove lingue.

Per quanto riguarda l'uso pratico (piuttosto che la pedagogia), mi aspetto che alcuni di essi siano utili, anche se ci sono alcune API F # e .Net che potrebbero essere utili o più utili per molti scenari. I principali "lotti" di funzionalità sovrapposte che immagino siano le raccolte immutabili F # (Set e Mappa), così come .Net 4.0 raccolte simultanee (come ConcurrentQueue).

Naturalmente troverai anche alcuni frammenti sul web, come coda immutabile .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top