Domanda

Quando si lavora con le istanze derivate in Haskell, è possibile ricavare le funzioni per i tipi arbitrarie, o siamo limitati a funzioni specifiche?

È stato utile?

Soluzione

È possibile derivare istanze delle seguenti classi in Haskell 98:. Eq, Ord, Enum, Ix, delimitato, leggere, e Show

Uso delle estensioni ghc si può anche ricavare istanze delle seguenti classi: tipizzabile, dati, funtore, pieghevole e attraversabile. C'è anche un'estensione GHC che consente a un newtype per derivare le istanze dalla sua tipo di implementazione.

Non è possibile derivare istanze di classi arbitrarie per la semplice ragione che Haskell non saprebbe come generare le funzioni necessarie, senza particolari conoscenze sulla classe in questione.

Altri suggerimenti

Si sono limitati a particolari classi, in termini di ciò che il compilatore sa come derivare per voi. Utilizzando un preprocessore, o Modello Haskell, è possibile codificare fino soli nuovi meccanismi derivanti, se siete a conoscenza di approcci generali per cedere implementazioni di funzioni per particolari tipi.

Gli altri due risposte sono corrette. Ma se avete bisogno di più, ci sono alcuni pacchetti su hackage in grado di gestire più. Mi piace Data.Derive molto, dal momento che è possibile generare il codice sorgente direttamente (per la compatibilità) o agganciarlo in modello Haskell di farlo al momento della compilazione. Una vasta gamma di classi sono già supportati, ed è molto facile da aggiungere il supporto per il proprio. passo la pubblicità per una dannata bella biblioteca:: Riassunto -)

Per aggiungere alla risposta di Don: derivante funzionalità personalizzate per i tipi di dati è chiamato programmazione generica e c'è una letteratura su questo. Preprocessori e Template Haskell non sono le uniche soluzioni; vedere uno dei giornali panoramica che l'elenco della letteratura per altre opzioni.

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