Dal wiki Haskell:Le leggi monad sono applicate a Haskell?
Monadi possono essere visti come interfaccia di programmazione standard per vari dati o strutture di controllo, che viene catturato dalla classe Monade. Tutti monadi comuni sono membri di esso:
class Monad m where (>>=) :: m a -> (a -> m b) -> m b (>>) :: m a -> m b -> m b return :: a -> m a fail :: String -> m a
Oltre ad attuare le funzioni di classe, tutte le istanze di Monade devono obbedire le seguenti equazioni, o le leggi Monade:
return a >>= k = k a m >>= return = m m >>= (\x -> k x >>= h) = (m >>= k) >>= h
Domanda : Le tre leggi monad in basso sono effettivamente applicate in qualche modo dalla lingua? Oppure sono assiomi aggiuntivi che lo deve applicare per costruire il tuo linguaggio di una "Monade" in modo che corrisponda al concetto matematico di una "Monade"?
Essi non vengono applicate dal linguaggio o compilatore. Il programmatore è responsabile di assicurarsi che le leggi siano valide. – ErikR
Poiché Haskell è una lingua * Turing complete *, non è possibile applicare alcuna legge sulle sue funzioni. –
@WillemVanOnsem Questo è davvero fuorviante. Un linguaggio completo che gira può ancora avere un sistema di prova e fornire garanzie sulle operazioni. Ad esempio, molte estensioni (spesso basate su SMT) sopra Haskell possono dimostrare le leggi della monade: questi nuovi linguaggi estesi diventano improvvisamente non completi di Turing? –