module Data.Universe.Instances.Extended (
Universe(..), Finite(..)
) where
import Data.Void
import Control.Comonad.Trans.Traced
import Data.Functor.Rep
import Data.Universe.Instances.Base
instance Universe Void where universe = []
instance (Representable f, Finite (Rep f), Ord (Rep f), Universe a)
=> Universe (Co f a)
where universe = map tabulate universe
instance (Representable f, Finite s, Ord s, Finite (Rep f), Ord (Rep f), Universe a)
=> Universe (TracedT s f a)
where universe = map tabulate universe
instance Finite Void
instance (Representable f, Finite (Rep f), Ord (Rep f), Finite a)
=> Finite (Co f a)
where universeF = map tabulate universeF
instance (Representable f, Finite s, Ord s, Finite (Rep f), Ord (Rep f), Finite a)
=> Finite (TracedT s f a)
where universeF = map tabulate universeF