{-# LANGUAGE UndecidableInstances #-} -- due to type class design {-# LANGUAGE AllowAmbiguousTypes #-} -- due to type class design module Generic.Data.Function.Contra.NonSum where import Data.Functor.Contravariant import GHC.Generics import Generic.Data.Function.Contra.Constructor ( GContraC(gContraC) , GenericContra(type GenericContraF) ) import Generic.Data.Rep.Error class GContraNonSum tag gf where gContraNonSum :: GenericContraF tag (gf p) instance (Contravariant (GenericContraF tag), GContraC tag g) => GContraNonSum tag (C1 c g) where gContraNonSum = contramap unM1 (gContraC @tag) instance GContraNonSum tag (l :+: r) where gContraNonSum = error eNoSum instance GContraNonSum tag V1 where gContraNonSum = error eNoEmpty