2012-07-22 3 views
24

Tornando almeno alla fine degli anni '90 ci sono state persone che desideravano l'integrazione di restricted monads in Haskell in modo amichevole.Qual è lo stato corrente delle monadi limitate?

Ad esempio, senza monadi limitati non è possibile creare una monade efficiente su Set, Map o probability distributions. Ecco un SO question di alcuni anni fa in cui qualcun altro si è imbattuto in questo problema.

ci sono diverse soluzioni che le persone hanno escogitato, tra cui:

Nessuno di questi approcci sembra essere "canonico" tuttavia. Ho trovato un commento da Don Stewart su this blog post, nel 2007, in cui ha affermato che eravamo "abbastanza vicini" ad avere monadi limitate con Indexed types.

Qual è lo stato corrente? Esiste ora un modo "canonico" di fare monadi limitati? O stiamo ancora vivendo con soluzioni alternative?

+12

Penso che con i tipi di vincoli è tanto canonico come si ottiene, sono solo un po 'troppo nuovo per essere la soluzione più _common_ ancora. – leftaroundabout

risposta

11

C'è un recente articolo di Anders Persson, Emil Axelsson e Josef Svenningson che mostra un modo per codificare le monadi limitate. Ho dimenticato i dettagli, ma ricordo che era un bel giornale.

Persson, A.; Axelsson, E.; Svenningsson, J. (2011). Generic monadic constructs for embedded languages. IFL 2011, il 23 ° Simposio sull'implementazione e l'applicazione delle lingue funzionali.

+1

Grazie Norman. Per chiunque sia interessato, è possibile ottenere una copia dell'articolo dalla [homepage di Josef Svenningson] (http://www.cse.chalmers.se/~josefs/). –

10

In realtà è possibile ottenere un Set monad efficiente come monade regolare, senza restrizioni. In due modi distinti. Il seguente articolo spiega sia :

http://okmij.org/ftp/Haskell/set-monad.html

L'articolo sottolinea inoltre che le monadi sono in realtà molto limitato limitato e esclude molti idiomi monadici. Suppongo che i metodi di implementazione di siano generali e che qualsiasi monade limitata possa essere trasformata nella solita, senza perdere efficienza. Quindi, potrebbe sembrare che non abbiamo bisogno di monadi limitate.

+0

In realtà ho già usato l'idea alla base della tua monade Set efficiente per costruire un'efficace distribuzione della probabilità (vedere https://github.com/chris-taylor/hs-probability/blob/master/src/Control/Probability/Bayes.hs) .. quindi grazie! Non ho pensato di fare la stessa cosa per le altre monadi limitate, ma non vedo immediatamente una ragione per cui non funzionerebbe. –