I database sono spesso modellati come monadi nella programmazione funzionale. HaskellDb , Quill , Chiazza di petrolio e Doobie sono alcuni esempi di cui sono a conoscenza. Puoi dire che c'è una differenza tra il database stesso e l'interfaccia di programmazione nel database. Non sono sicuro che sia una distinzione utile in questo contesto.
Più precisamente, una operazione su una tabella del database è spesso modellata come una monade. Quindi la funzione return
racchiude una rappresentazione di tabella (come un record o una classe) in un modulo di query interno che può essere utilizzato per ulteriori trasformazioni (prendendo ad esempio record
a Query record
). La funzione bind
(chiamata >>=
in Haskell) trasforma l'azione della query spostata usando la funzione data. Ad esempio, aggiungendo una clausola WHERE
alla query.
Poiché la maggior parte dei tipi di raccolta sono anche monadi, ciò consente di trattare tabelle di database come raccolte regolari. Puoi usare le stesse semplificazioni che usi per altre monade: libreria Control.Monad, notazione, comprensione, composizione, ecc. La struttura della tua query è controllata. Se aggiungi macro al mix, come fa Quill, l'SQL può essere generato in fase di compilazione. È un'astrazione abbastanza utile.