-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | Existential datatypes holding evidence of constraints -- -- This package contains: -- --
-- type (c :&: d) a = (c a, d a) ---- -- except that it can be partially applied. -- --
-- f :: ((Eq :&: Enum :&: Bounded) a) => a -> Bool ---- -- is equivalent to -- --
-- f :: (Eq a, Enum a, Bounded a) => a -> Bool --class (c a, d a) => :&: c d a -- | The same as :&:. type And c d = c :&: d -- | An empty constraint which implies nothing. -- -- :&: and Empty form a type-level -- monoid with Empty as the identity element. class Empty a instance Empty k a instance (c a, d a) => (:&:) k c d a -- | Useless existential datatypes holding evidence of no constraint. module Data.Anything -- | A datatype containing anything. You can't do anything with it. data Anything Anything :: a -> Anything -- | A datatype containing any * -> * kinded type constructor -- applied to a. You can't do anything with it. data Anything1 a Anything1 :: f a -> Anything1 a instance Typeable Anything instance Typeable1 Anything1 instance Show (Anything1 a) instance Show Anything -- | Existential datatypes holding evidence of constraints and type classes -- for existential datatypes. module Data.Exists -- | A datatype which holds a value of a type satisfying the constraint -- c, hiding the type, and evidence for the constraint, so that -- it can be retrieved by pattern matching later. -- -- Example: -- --
-- foo :: Exists Show -- foo = Exists (Just 9 :: Maybe Int) -- -- printExists :: Exists Show -> IO () -- printExists (Exists e) = print e -- -- main = printExists foo -- prints "Just 9" --data Exists c Exists :: a -> Exists c -- | A type class to abstract over existential datatypes. -- -- Example: -- --
-- data EShow where -- EShow :: Show a => a -> EShow -- -- instance Existential EShow where -- type ConstraintOf EShow = Show -- exists = EShow -- apply f (EShow a) = f a -- -- foo :: EShow -- foo = exists (Just 9 :: Maybe Int) -- -- main = apply print foo -- prints "Just 9" ---- -- Note that had we given foo the type signature -- --
-- foo :: (Existential e, ConstraintOf e ~ Show) => e ---- -- GHC would have output an error message, because the instance of -- Existential to use would have been ambiguous. (The -- apply f . exists problem is the same as -- the show . read problem.) class Existential e where type family ConstraintOf e :: * -> Constraint exists :: (Existential e, (ConstraintOf e) a) => a -> e apply :: Existential e => (forall a. (ConstraintOf e) a => a -> r) -> e -> r -- | An alias for convenience. -- --
-- foo :: ExistentialWith Show e => e -> IO () ---- -- is equivalent to -- --
-- foo :: (Existential e, ConstraintOf e ~ Show) => e -> IO () --class (Existential e, c ~ ConstraintOf e) => ExistentialWith c e -- | Translate between different existential datatypes holding evidence for -- the same constraint. translate :: (ExistentialWith c e1, ExistentialWith c e2) => e1 -> e2 -- | A * -> * kinded version of Exists which -- holds a value of a type constructor applied to a type, hiding the type -- constructor, and evidence for a constraint on the type constructor. data Exists1 c a Exists1 :: f a -> Exists1 c a -- | A version of Existential for kind * -> *. class Existential1 e where type family ConstraintOf1 e :: (* -> *) -> Constraint exists1 :: (Existential1 e, (ConstraintOf1 e) f) => f a -> e a apply1 :: Existential1 e => (forall f. (ConstraintOf1 e) f => f a -> r) -> e a -> r -- | An alias for convenience. A version of ExistentialWith for kind -- * -> *. class (Existential1 e, c ~ ConstraintOf1 e) => ExistentialWith1 c e -- | Translate between different existential datatypes holding evidence for -- the same constraint on a * -> * kinded type constructor. translate1 :: (ExistentialWith1 c e1, ExistentialWith1 c e2) => e1 a -> e2 a data Constraint :: BOX instance Copointed (Exists1 Copointed) instance ComonadStore s (Exists1 (ComonadStore s)) instance Comonad (Exists1 (ComonadStore s)) instance Extend (Exists1 (ComonadStore s)) instance Functor (Exists1 (ComonadStore s)) instance ComonadTraced m (Exists1 (ComonadTraced m)) instance Comonad (Exists1 (ComonadTraced m)) instance Extend (Exists1 (ComonadTraced m)) instance Functor (Exists1 (ComonadTraced m)) instance ComonadEnv e (Exists1 (ComonadEnv e)) instance Comonad (Exists1 (ComonadEnv e)) instance Extend (Exists1 (ComonadEnv e)) instance Functor (Exists1 (ComonadEnv e)) instance Comonad (Exists1 Comonad) instance Extend (Exists1 Comonad) instance Functor (Exists1 Comonad) instance Extend (Exists1 Extend) instance Functor (Exists1 Extend) instance Contravariant (Exists1 Contravariant) instance Traversable (Exists1 Traversable) instance Foldable (Exists1 Traversable) instance Functor (Exists1 Traversable) instance Foldable (Exists1 Foldable) instance Functor (Exists1 Functor) instance Show (Exists Show) instance Existential SomeException instance Existential Dynamic instance Existential1 Anything1 instance Existential Anything instance Existential1 (Any (* -> *)) instance Existential (Any *)