packages feed

generic-data-functions-0.1.0: 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 GHC.TypeLits ( TypeError )
import Generic.Data.Function.Error ( type ENoEmpty, type EUnexpectedSum )
import Generic.Data.Function.Traverse.Constructor ( GTraverseC(gTraverseC) )

class GTraverseNonSum f f' where gTraverseNonSum :: f (f' p)

instance (Functor f, GTraverseNonSum' cd f f') => GTraverseNonSum f (D1 cd f') where
    gTraverseNonSum = M1 <$> gTraverseNonSum' @cd

class GTraverseNonSum' cd f f' where gTraverseNonSum' :: f (f' p)

instance TypeError EUnexpectedSum => GTraverseNonSum' cd f (l :+: r) where
    gTraverseNonSum' = undefined

instance (Functor f, GTraverseC cd cc 0 f f')
  => GTraverseNonSum' cd f (C1 cc f') where
    gTraverseNonSum' = M1 <$> gTraverseC @cd @cc @0

instance TypeError ENoEmpty => GTraverseNonSum' cd f V1 where
    gTraverseNonSum' = undefined