generic-data-functions-0.4.1: src/Generic/Data/Function/Traverse/NonSum.hs
{-# LANGUAGE UndecidableInstances #-} -- required below GHC 9.6
{-# LANGUAGE AllowAmbiguousTypes #-} -- due to type class design
module Generic.Data.Function.Traverse.NonSum where
import GHC.Generics
import Generic.Data.Function.Traverse.Constructor
( GTraverseC(gTraverseC)
, GenericTraverse(type GenericTraverseF)
)
import Generic.Data.Rep.Error
class GTraverseNonSum tag gf where
gTraverseNonSum :: GenericTraverseF tag (gf p)
instance (Functor (GenericTraverseF tag), GTraverseNonSumD tag cd gf)
=> GTraverseNonSum tag (D1 cd gf) where
gTraverseNonSum = M1 <$> gTraverseNonSumD @tag @cd
class GTraverseNonSumD tag (cd :: Meta) gf where
gTraverseNonSumD :: GenericTraverseF tag (gf p)
instance (Functor (GenericTraverseF tag), GTraverseC tag cd cc 0 gf)
=> GTraverseNonSumD tag cd (C1 cc gf) where
gTraverseNonSumD = M1 <$> gTraverseC @tag @cd @cc @0
instance GTraverseNonSumD cd tag (l :+: r) where
gTraverseNonSumD = error eNoSum
instance GTraverseNonSumD cd tag V1 where
gTraverseNonSumD = error eNoEmpty