Così Real World Haskell dice:È davvero una pratica predefinita rendere ogni trasformatore monad un'istanza di MonadTrans?
Ogni trasformatore monade è un esempio di MonadTrans
ma sto giocando con Scotty e ha scoperto che la sua base monade trasformatore ScottyT
è non un'istanza di MonadTrans
.
Guardando le note di rilascio sembra che si tratti di una decisione intenzionale: here. Codice:
I parametri Monad di ScottyT sono stati disaccoppiati, causando il cambiamento del tipo di costruttore ScottyT. Di conseguenza, ScottyT non è più un'istanza MonadTrans ...
Spero che tu capisca la mia confusione. Tuttavia, cercherò di formulare domande rigorose:
- Perché non si desidera che un trasformatore monad sia un'istanza di
MonadTrans
? - Come spiegheresti il cambiamento di cui sopra nel design ScottyT?
P.S .: Capisco che sia possibile definire un'istanza di MonadTrans ScottyT
da solo, ma dovrei? (rimanda alle domande)
Forse la domanda è "È' ScottyT' un trasformatore monade se non è un'istanza di 'MonadTrans'?" – crockeea
Grazie, Eric, mi è saltato in testa, ma se guardi f.x. a https://en.wikibooks.org/wiki/Haskell/Monad_transformers non afferma mai che MonadTrans è un prerequisito per qualcosa di essere un trasformatore di monade. È più fraseggio come bello da avere. controlla la riga: 'Tecnicamente, questo è tutto ciò di cui abbiamo bisogno; tuttavia, è conveniente rendere MaybeT un'istanza di poche altre classi' – forker