In Haskell, è possibile derivare Functor
, Foldable
e Traversable
automaticamente utilizzando deriving
. Non c'è modo di derivare Applicative
, però. Considerando che esiste un modo ovvio per definire un'istanza Applicative
(che equivarrebbe a un'applicazione zippata), non esiste un modo per abilitare deriving Applicative
?Perché non c'è modo di derivare i Functional Applicativi in Haskell?
13
A
risposta
13
No, questo non è affatto ovvio. Confrontare le seguenti Applicative
casi:
[]
ZipList
Data.Sequence.Seq
, il cuiApplicative
instance declaration corre a diverse centinaia di righe.IO
(->) r
- Parser in
parsec
,attoparsec
,regex-applicative
. - Proxy nel pacchetto
pipes
.
C'è poca uniformità qui e la maggior parte delle istanze non è ovvia.
Problemi correlati
- 1. Scala - Come utilizzare i Functional su tipi non funzionali?
- 2. Come derivare genericamente Additivo su Haskell, senza definire un'istanza Applicativa?
- 3. Più divertimento con i functors applicativi
- 4. Perché non posso derivare dalla classe astratta System.Enum?
- 5. Perché i valori polimorfici non vengono dedotti in Haskell?
- 6. I trasformatori applicativi sono davvero superflui?
- 7. Dipendentemente digitato 'ZipVector' applicativi
- 8. F # MailboxProcessor e Functional Design
- 9. In Haskell, perché i pattern non esaustivi non sono errori in fase di compilazione?
- 10. Servizi di dominio vs Servizi applicativi
- 11. Haskell: Perché non sono permessi i costruttori del tipo infisso?
- 12. Ciclo condizionale in un Functional applicativo
- 13. Posso derivare parzialmente Show?
- 14. Functional and Applicatives per tipi di tipo (* -> *) -> *
- 15. Perché Visual Studio riattiva automaticamente "servizi applicativi client"?
- 16. Perché [1..n] non è gestito allo stesso modo di [n. 1] in Haskell?
- 17. C'è un modo per "preservare" i risultati in Haskell?
- 18. non può derivare (mostra) da questa espressione
- 19. Che cos'è lo stile point free in Functional Programming?
- 20. Composizione Monadi v Funtori applicativi
- 21. modo predefinito di eseguire codice in Haskell
- 22. Haskell - pattern matching non esaustivo in Haskell
- 23. Qual è la vostra esperienza con i blocchi applicativi Microsoft
- 24. Perché non esiste una classe di caratteri `Cofunctor` in Haskell?
- 25. Perché TemplateHaskell fa in modo che GHC carichi i pacchetti?
- 26. . contro i $ in Haskell
- 27. Log4net con approfondimenti applicativi azzurre
- 28. Perché la funzione infisso <*> in Haskell?
- 29. Perché i miei due codici funzionano in modo così diverso? (Haskell, Merge Sort)
- 30. È corretto derivare da System.ArgumentException?
Inoltre, '[]' e 'ZipList' sono entrambi, in definitiva, due diverse istanze' Applicative' uguali per il tipo di lista. –
Quindi forse abbiamo bisogno di una classe Zippable? Cioè, per cose come derivare 'Additive' (che, a sua volta, sembra avere una definizione ovvia) senza dover dichiarare un'istanza [Applicative] (http://lpaste.net/131202). (Forse dovrei fare un'altra domanda?) – MaiaVictor
Il mio male. [Additivo] (http://hackage.haskell.org/package/linear-1.18.0.1/docs/Linear-Vector.html) è una classe del pacchetto lineare che implementa gruppi additivi di spazi vettoriali. Ad esempio, '[1,2,3]^+^[1,1,1] == [2,3,4]'. Ha un'implementazione generica, ma dipende da Applicative che non è derivabile, quindi non è possibile derivare "Additivo" per, ad esempio, "data Triple a = Triple a a" a prescindere dall'avere una derivazione ovvia. Modifica: chi ha chiesto quale additivo viene eliminato. Non sto parlando da solo lol. – MaiaVictor