2015-04-22 9 views

risposta

13

No, questo non è affatto ovvio. Confrontare le seguenti Applicative casi:

  1. []
  2. ZipList
  3. Data.Sequence.Seq, il cui Applicative instance declaration corre a diverse centinaia di righe.
  4. IO
  5. (->) r
  6. Parser in parsec, attoparsec, regex-applicative.
  7. Proxy nel pacchetto pipes.

C'è poca uniformità qui e la maggior parte delle istanze non è ovvia.

+13

Inoltre, '[]' e 'ZipList' sono entrambi, in definitiva, due diverse istanze' Applicative' uguali per il tipo di lista. –

+0

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

+0

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

Problemi correlati