2013-08-19 21 views
7

Sto programmando un formatore di vocabolario in Haskell nel mio tempo libero.Esiste un database Haskell che utilizza i tipi di dati algebrici?

Ho un file con le parole in cui le voci sono modellate come i tipi di dati algebrici, che assomigliano

Word { _frq=1 
    , _fra="le" 
    , _eng="the; him, her, it, them" 
    , _deu="der,die,das; er,sie,es" 
    , _uses=[Determiner [], Pronoun []] 
    , _phrase=" vive la politique, vive l'amour" 
    , _sentence="long live politics, long live love" 
    , _satz="Lang lebe die Politik, lang lebe die Liebe." 
    } 

Il più delle volte la traduzione tedesca _deu= e _satz= è il più delle volte solo una stringa vuota, che voglio aggiornare all'interno del programma.

Ora ho alcune domande: 1. Esiste un database che utilizza i tipi di dati Haskell per haskell (mi piacerebbe molto anche la sicurezza del tipo nel mio database)? Le cose che ho trovato erano i collegamenti HDBC a MySQL e simili, e alcune altre cose xml/JSON.

  1. Se aggiorno il file anziché utilizzare un database, c'è un modo per ricomporre l'intero programma - sarebbe un po 'noioso farlo.

e una terza domanda

voglio salvare i vocabolari apprese in un datastructure, che spesso ha bisogno di essere aggiornato, come in ogni fase di apprendimento aggiorno un numero che indica la conoscenza di questa parola - e risolvere la questione datastructure durante l'inserimento/o in seguito. Quindi scelgo una nuova parola in base alla sua posizione in questa infrastruttura. Le liste sembrano essere inefficienti per fare un attraversamento completo della lista e l'ordinamento è un grande sforzo se c'è una soluzione migliore. Una nota alla fine ho solo 5000 voci nell'elenco, quindi forse è preoccupante per la velocità nel posto sbagliato?

risposta

9

Database-saggio, dare un'occhiata a Acid-State. C'è anche a tutorial come parte del corso Happstack Crash.

Si fa quello che si chiede in termini di mantenimento della sicurezza tipo nel modello. Non sono sicuro di quanto sia utile questo sarà per voi, ma ho messo da utilizzare in un paio di web-apps, compreso here, e here (che secondo è parte di un tentativo di analisi comparativa contrapponendo HDBC contro MongoDB e AcidState, quindi puoi usarlo per vedere come i tre si confrontano con l'implementazione nel contesto di un'applicazione web Haskell).

Alla terza domanda, 5000 inserti/letture, è davvero non dovrebbe essere preoccupato per le prestazioni. Se dai uno sguardo allo those benchmarks I mentioned, il benchmark "grande" esegue una (relativamente piccola) 50.000 transazioni in un ordine molto breve, ed erano inserzioni più carnose di quello che sembra che tu stia facendo.

+1

Il http://acid-state.seize.it/ server non ha risposto il 2016-07-17. Ho cambiato il link al repository GitHub. Se si è trattato di un errore temporaneo, non esitare a ripristinare il link originale. –

7

Partenza Persistent da Yesod:

persistente è la risposta di Yesod ai dati Storage-un tipo di sicurezza, interfaccia universale archivio dati per Haskell.

[...]

persistente ci permette di scegliere tra i database esistenti che sono altamente sintonizzati per i diversi casi di utilizzo di memorizzazione dei dati, interagire con altri linguaggi di programmazione, e di utilizzare un'interfaccia di interrogazione sicuro e produttivo, mentre ancora mantenere il tipo di sicurezza dei tipi di dati Haskell.

Persistent segue i principi guida di sicurezza tipo e conciso, sintassi dichiarativa.

+3

È possibile gestire tipi di somma persistenti come "Entrambi"? –

+0

@GabrielGonzalez Sto ancora imparando, quindi non ne sono sicuro, ma indovina no. –

+3

Ha il supporto di base per i tipi di somma, ma tale supporto è realmente costruito attorno ai vincoli del database anziché consentire l'incorporamento di ADT completamente arbitrari. –

Problemi correlati