2015-02-12 8 views
6

Perché esistono i tipi WrappedMonad e WrappedArrow? È perché Monad s non erano Applicative? Dato che esiste WrappedArrow, dovrebbe l'istanzaPerché WrappedMonad e WrappedArrow?

Arrow a => Applicative (Arrow a b) 

semplicemente essere incorporato in Haskell stessa nello stesso modo che Applicative è ora una superclasse di Monad?

risposta

8

Praticamente per WrappedMonad. Immagino che stia diventando (e forse già lo era) sostanzialmente obsoleto. Ma il numero WrappedArrow è più difficile, perché i tipi Arrow e i tipi Applicative hanno tipi diversi, * -> * -> * rispetto a * -> *. E a causa del modo risoluzione istanza GHC funziona, aggiungendo l'istanza (presumo l'extra Arrow è stato un errore di battitura)

instance Arrow a => Applicative (a b) 

significherebbe che non tipo costruttore con due o più argomenti potrebbe poi dare un Applicative anche senza dando un Arrow - che sembra piuttosto drastico.

L'opzione inversa di aggiungere una superclasse Applicative (a b) => per Arrow a sembrerebbe più appetibile - tranne che non si può avere superclassi con un tipo di forall'ed come b. Tali superclassi sarebbero utili anche per altre cose e sono state suggerite molte volte, quindi presumo sia difficile da implementare bene.

+0

È anche il caso che molte persone considerano la classe 'Arrow' non progettata, quindi farne una superclasse dell'importante classe' Applicative' probabilmente non andrà molto bene. – dfeuer

+1

sottoclasse @dfeuer, non superclasse. Non influenzerebbe direttamente 'Applicativo'. Ancora, non è possibile con l'attuale sistema di classe. –

+0

Ah, ho perso il tuo punto, penso. – dfeuer

Problemi correlati