Poiché ogni Monad
è un Monoid
sull'operazione di sequenziamento. Perché l'Monoid
non eredita Monoid
in haskell?Ogni monade è monoide?
9
A
risposta
12
Non deve necessariamente essere un Monad
, questo funziona per ogni Applicative
. Quindi sì, è possibile definire:
class (Functor f, Monoid (f())) => Applicative f where
Ma questo significa che si dovrà fornire l'istanza Monoid
ogni volta che si scrive un'istanza Applicative
. Questo può essere abbastanza fastidioso, certamente dal momento che questa istanza Monoid
non viene utilizzata molto spesso.
Una soluzione migliore consiste nel creare un wrapper newtype attorno a f()
e quindi è possibile fornire un'istanza Monoid
per tutti i funtori applicativi una volta per tutte. Ce n'è uno prontamente disponibile in the reducers package.
Che cosa intendi esattamente con "operazione di sequenziamento" qui? –
@Rhymoid: Sono abbastanza sicuro che sia '>>'. –
@TikhonJelvis: una forma limitata di '>>', giusto? –