-- Hoogle documentation, generated by Haddock
-- See Hoogle, http://www.haskell.org/hoogle/


-- | Universe instances for types from the transformers and mtl packages
--   
--   Universe instances for types from the transformers and mtl packages
@package universe-instances-trans
@version 1.0.0.1

module Data.Universe.Instances.Trans

-- | Creating an instance of this class is a declaration that your type is
--   recursively enumerable (and that <a>universe</a> is that enumeration).
--   In particular, you promise that any finite inhabitant has a finite
--   index in <a>universe</a>, and that no inhabitant appears at two
--   different finite indices.
class Universe a
universe :: Universe a => [a]

-- | Creating an instance of this class is a declaration that your
--   <a>universe</a> eventually ends. Minimal definition: no methods
--   defined. By default, <tt>universeF = universe</tt>, but for some types
--   (like <a>Either</a>) the <a>universeF</a> method may have a more
--   intuitive ordering.
class Universe a => Finite a
universeF :: Finite a => [a]
instance Data.Universe.Class.Universe a => Data.Universe.Class.Universe (Data.Functor.Identity.Identity a)
instance Data.Universe.Class.Universe (f a) => Data.Universe.Class.Universe (Control.Monad.Trans.Identity.IdentityT f a)
instance (Data.Universe.Class.Finite e, GHC.Classes.Ord e, Data.Universe.Class.Universe (m a)) => Data.Universe.Class.Universe (Control.Monad.Trans.Reader.ReaderT e m a)
instance Data.Universe.Class.Universe (f (g a)) => Data.Universe.Class.Universe (Data.Functor.Compose.Compose f g a)
instance (Data.Universe.Class.Universe (f a), Data.Universe.Class.Universe (g a)) => Data.Universe.Class.Universe (Data.Functor.Product.Product f g a)
instance Data.Universe.Class.Finite a => Data.Universe.Class.Finite (Data.Functor.Identity.Identity a)
instance Data.Universe.Class.Finite (f a) => Data.Universe.Class.Finite (Control.Monad.Trans.Identity.IdentityT f a)
instance (Data.Universe.Class.Finite e, GHC.Classes.Ord e, Data.Universe.Class.Finite (m a)) => Data.Universe.Class.Finite (Control.Monad.Trans.Reader.ReaderT e m a)
instance Data.Universe.Class.Finite (f (g a)) => Data.Universe.Class.Finite (Data.Functor.Compose.Compose f g a)
instance (Data.Universe.Class.Finite (f a), Data.Universe.Class.Finite (g a)) => Data.Universe.Class.Finite (Data.Functor.Product.Product f g a)
