Dato un tipo, esiste un solo modo ovvio per implementare un'istanza Additive
, dalla libreria Lineare, ad essa. Convenientemente, Additive
ha un'implementazione generica, quindi possiamo usare deriving
per questo. Purtroppo, dipende dall'esistenza di un Applicative
esempio, che non è derivabile, in modo da avere ancora a dichiararlo:Come derivare genericamente Additivo su Haskell, senza definire un'istanza Applicativa?
{-# LANGUAGE DeriveGeneric, DeriveFunctor #-}
import Linear
import GHC.Generics
import Control.Applicative
data Foo a = Foo a a a deriving (Show, Functor, Generic1)
instance Additive Foo
instance Applicative Foo where
pure x = Foo x x x
Foo f g h <*> Foo x y z = Foo (f x) (g y) (h z)
main = print $ Foo 1 2 3 ^+^ Foo 4 5 6
Esiste un modo per ricavare automaticamente additivo, senza dover dichiarare un'istanza applicativa?