-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | Rage against the quantification -- -- Data types and typeclasses to deal with universally and existentially -- quantified types @package quantification @version 0.5.1 module Data.Binary.Lifted class Binary1 f liftPut :: Binary1 f => (a -> Put) -> f a -> Put liftGet :: Binary1 f => Get a -> Get (f a) put1 :: (Binary1 f, Binary a) => f a -> Put get1 :: (Binary1 f, Binary a) => Get (f a) instance Data.Binary.Lifted.Binary1 [] instance Data.Binary.Lifted.Binary1 GHC.Maybe.Maybe instance (Data.Binary.Lifted.Binary1 f, Data.Binary.Lifted.Binary1 g) => Data.Binary.Lifted.Binary1 (Data.Functor.Compose.Compose f g) module Data.Monoid.Lifted -- | Laws for this typeclass: -- -- class Semigroup1 f liftAppend :: Semigroup1 f => (a -> a -> a) -> f a -> f a -> f a -- | Laws for this typeclass: -- -- class Semigroup1 f => Monoid1 f liftEmpty :: Monoid1 f => a -> f a append1 :: (Semigroup1 f, Semigroup a) => f a -> f a -> f a empty1 :: (Monoid1 f, Monoid a) => f a instance (Data.Monoid.Lifted.Monoid1 f, Data.Monoid.Lifted.Monoid1 g) => Data.Monoid.Lifted.Monoid1 (Data.Functor.Compose.Compose f g) instance Data.Monoid.Lifted.Monoid1 GHC.Types.IO instance GHC.Classes.Ord k => Data.Monoid.Lifted.Monoid1 (Data.Map.Internal.Map k) instance (Data.Hashable.Class.Hashable k, GHC.Classes.Eq k) => Data.Monoid.Lifted.Monoid1 (Data.HashMap.Base.HashMap k) instance Data.Monoid.Lifted.Monoid1 [] instance Data.Monoid.Lifted.Monoid1 Data.Functor.Identity.Identity instance (Data.Monoid.Lifted.Monoid1 f, Data.Monoid.Lifted.Monoid1 g) => Data.Monoid.Lifted.Monoid1 (Data.Functor.Product.Product f g) instance Data.Monoid.Lifted.Monoid1 Data.Semigroup.Internal.Dual instance (GHC.Base.Semigroup a, GHC.Base.Monoid a) => Data.Monoid.Lifted.Monoid1 ((,) a) instance Data.Monoid.Lifted.Monoid1 Data.Proxy.Proxy instance Data.Monoid.Lifted.Monoid1 ((->) a) instance Data.Monoid.Lifted.Semigroup1 GHC.Maybe.Maybe instance (Data.Monoid.Lifted.Semigroup1 f, Data.Monoid.Lifted.Semigroup1 g) => Data.Monoid.Lifted.Semigroup1 (Data.Functor.Compose.Compose f g) instance Data.Monoid.Lifted.Semigroup1 GHC.Types.IO instance GHC.Classes.Ord k => Data.Monoid.Lifted.Semigroup1 (Data.Map.Internal.Map k) instance (Data.Hashable.Class.Hashable k, GHC.Classes.Eq k) => Data.Monoid.Lifted.Semigroup1 (Data.HashMap.Base.HashMap k) instance Data.Monoid.Lifted.Semigroup1 [] instance Data.Monoid.Lifted.Semigroup1 Data.Functor.Identity.Identity instance (Data.Monoid.Lifted.Semigroup1 f, Data.Monoid.Lifted.Semigroup1 g) => Data.Monoid.Lifted.Semigroup1 (Data.Functor.Product.Product f g) instance Data.Monoid.Lifted.Semigroup1 Data.Semigroup.Internal.Dual instance GHC.Base.Semigroup a => Data.Monoid.Lifted.Semigroup1 ((,) a) instance Data.Monoid.Lifted.Semigroup1 Data.Proxy.Proxy instance Data.Monoid.Lifted.Semigroup1 ((->) a) instance GHC.Base.Semigroup a => Data.Monoid.Lifted.Semigroup1 (Data.Functor.Const.Const a) -- | Data types and type classes for working with existentially quantified -- values. When Quantified Class Constraints land in GHC 8.6, the -- BarForall classes will be considered obsolete. When Dependent -- Haskell lands, the BarForeach classes will also be obsolete. -- The benefit that most of the typeclasses in this module provide is -- that they help populate the instances of Exists and -- Rec. module Data.Exists -- | Hide a type parameter. data Exists (f :: k -> Type) Exists :: !f a -> Exists -- | Hide two type parameters. data Exists2 (f :: k -> j -> Type) Exists2 :: !f a b -> Exists2 -- | Hide three type parameters. data Exists3 (f :: k -> j -> l -> Type) Exists3 :: !f a b c -> Exists3 -- | A dependent pair in which the first element is a singleton. data Some (f :: k -> Type) Some :: !Sing a -> !f a -> Some -- | A pair in which the type of the second element can only be discovered -- by looking at the first element. The type instance does not enforce -- this, but all of its typeclass instances make this assumption. data DependentPair (f :: k -> Type) (g :: k -> Type) DependentPair :: f a -> g a -> DependentPair data WitnessedEquality (a :: k) (b :: k) [WitnessedEqualityEqual] :: WitnessedEquality a a [WitnessedEqualityUnequal] :: WitnessedEquality a b data WitnessedOrdering (a :: k) (b :: k) [WitnessedOrderingLT] :: WitnessedOrdering a b [WitnessedOrderingEQ] :: WitnessedOrdering a a [WitnessedOrderingGT] :: WitnessedOrdering a b newtype ApplyForall f a ApplyForall :: f a -> ApplyForall f a [getApplyForall] :: ApplyForall f a -> f a -- | This is useful for recovering an instance of a typeclass when we have -- the pi-quantified variant and a singleton in scope. newtype ApplyForeach f a ApplyForeach :: f a -> ApplyForeach f a [getApplyForeach] :: ApplyForeach f a -> f a newtype ApplyLifted f a ApplyLifted :: f a -> ApplyLifted f a [getApplyLifted] :: ApplyLifted f a -> f a class EqForall f eqForall :: EqForall f => f a -> f a -> Bool class EqForall f => EqForallPoly f eqForallPoly :: EqForallPoly f => f a -> f b -> WitnessedEquality a b eqForallPoly :: (EqForallPoly f, TestEquality f) => f a -> f b -> WitnessedEquality a b -- | Variant of EqForall that requires a pi-quantified type. class EqForeach f eqForeach :: EqForeach f => Sing a -> f a -> f a -> Bool class EqForall f => OrdForall f compareForall :: OrdForall f => f a -> f a -> Ordering class (OrdForall f, EqForallPoly f) => OrdForallPoly f compareForallPoly :: OrdForallPoly f => f a -> f b -> WitnessedOrdering a b -- | Variant of OrdForall that requires a pi-quantified type. class EqForeach f => OrdForeach f compareForeach :: OrdForeach f => Sing a -> f a -> f a -> Ordering class ShowForall f showsPrecForall :: ShowForall f => Int -> f a -> ShowS class ShowForeach f showsPrecForeach :: ShowForeach f => Sing a -> Int -> f a -> ShowS class ReadExists f readPrecExists :: ReadExists f => ReadPrec (Exists f) class EnumForall f toEnumForall :: EnumForall f => Int -> f a fromEnumForall :: EnumForall f => f a -> Int class EnumExists f toEnumExists :: EnumExists f => Int -> Exists f fromEnumExists :: EnumExists f => Exists f -> Int class BoundedExists f minBoundExists :: BoundedExists f => Exists f maxBoundExists :: BoundedExists f => Exists f class SemigroupForall f appendForall :: SemigroupForall f => f a -> f a -> f a class SemigroupForeach f appendForeach :: SemigroupForeach f => Sing a -> f a -> f a -> f a class SemigroupForall f => MonoidForall f emptyForall :: MonoidForall f => f a class SemigroupForeach f => MonoidForeach f emptyForeach :: MonoidForeach f => Sing a -> f a class HashableForall f hashWithSaltForall :: HashableForall f => Int -> f a -> Int class HashableForeach f hashWithSaltForeach :: HashableForeach f => Sing a -> Int -> f a -> Int class PathPieceExists f fromPathPieceForall :: PathPieceExists f => Text -> Maybe (Exists f) toPathPieceForall :: PathPieceExists f => Exists f -> Text class FromJSONForall f parseJSONForall :: FromJSONForall f => Sing a -> Value -> Parser (f a) class FromJSONForeach f parseJSONForeach :: FromJSONForeach f => Sing a -> Value -> Parser (f a) class FromJSONExists f parseJSONExists :: FromJSONExists f => Value -> Parser (Exists f) class ToJSONForall f toJSONForall :: ToJSONForall f => f a -> Value class ToJSONForeach f toJSONForeach :: ToJSONForeach f => Sing a -> f a -> Value data ToJSONKeyFunctionForall f ToJSONKeyTextForall :: !forall a. f a -> Text -> !forall a. f a -> Encoding' Text -> ToJSONKeyFunctionForall f ToJSONKeyValueForall :: !forall a. f a -> Value -> !forall a. f a -> Encoding -> ToJSONKeyFunctionForall f data FromJSONKeyFunctionForeach f FromJSONKeyTextParserForeach :: !forall a. Sing a -> Text -> Parser (f a) -> FromJSONKeyFunctionForeach f FromJSONKeyValueForeach :: !forall a. Sing a -> Value -> Parser (f a) -> FromJSONKeyFunctionForeach f class ToJSONKeyForall f toJSONKeyForall :: ToJSONKeyForall f => ToJSONKeyFunctionForall f class ToJSONKeyForeach f toJSONKeyForeach :: ToJSONKeyForeach f => ToJSONKeyFunctionForall (Product Sing f) class FromJSONKeyExists f fromJSONKeyExists :: FromJSONKeyExists f => FromJSONKeyFunction (Exists f) class FromJSONKeyForeach f fromJSONKeyForeach :: FromJSONKeyForeach f => FromJSONKeyFunctionForeach f class StorableForeach (f :: k -> Type) peekForeach :: StorableForeach f => Sing a -> Ptr (f a) -> IO (f a) pokeForeach :: StorableForeach f => Sing a -> Ptr (f a) -> f a -> IO () sizeOfForeach :: forall (a :: k). StorableForeach f => Proxy f -> Sing a -> Int -- | This is like StorableForall except that the type constructor -- must ignore its argument (for purposes of representation). class StorableForall (f :: k -> Type) peekForall :: StorableForall f => Ptr (f a) -> IO (f a) pokeForall :: StorableForall f => Ptr (f a) -> f a -> IO () sizeOfForall :: StorableForall f => Proxy f -> Int -- | Be careful with this typeclass. It is more unsafe than Prim. -- With writeByteArray# and readByteArray#, one can -- implement unsafeCoerce. class PrimForall (f :: k -> Type) sizeOfForall# :: PrimForall f => Proxy# f -> Int# alignmentForall# :: PrimForall f => Proxy# f -> Int# indexByteArrayForall# :: PrimForall f => ByteArray# -> Int# -> f a readByteArrayForall# :: PrimForall f => MutableByteArray# s -> Int# -> State# s -> (# State# s, f a #) writeByteArrayForall# :: PrimForall f => MutableByteArray# s -> Int# -> f a -> State# s -> State# s setByteArrayForall# :: PrimForall f => MutableByteArray# s -> Int# -> Int# -> f a -> State# s -> State# s indexOffAddrForall# :: PrimForall f => Addr# -> Int# -> f a readOffAddrForall# :: PrimForall f => Addr# -> Int# -> State# s -> (# State# s, f a #) writeOffAddrForall# :: PrimForall f => Addr# -> Int# -> f a -> State# s -> State# s setOffAddrForall# :: PrimForall f => Addr# -> Int# -> Int# -> f a -> State# s -> State# s class BinaryExists (f :: k -> Type) putExists :: BinaryExists f => Exists f -> Put getExists :: BinaryExists f => Get (Exists f) class BinaryForeach (f :: k -> Type) putForeach :: BinaryForeach f => Sing a -> f a -> Put getForeach :: BinaryForeach f => Sing a -> Get (f a) class EqForall2 f eqForall2 :: EqForall2 f => f a b -> f a b -> Bool class EqForallPoly2 (f :: k -> j -> Type) eqForallPoly2 :: forall (a :: k) (b :: j) (c :: k) (d :: j). EqForallPoly2 f => f a b -> f c d -> WitnessedEquality '(a, b) '(c, d) class ShowForall2 f showsPrecForall2 :: ShowForall2 f => Int -> f a b -> ShowS class ShowForeach2 f showsPrecForeach2 :: ShowForeach2 f => Sing a -> Sing b -> Int -> f a b -> ShowS class BinaryExists2 (f :: k -> j -> Type) putExists2 :: BinaryExists2 f => Exists2 f -> Put getExists2 :: BinaryExists2 f => Get (Exists2 f) type family Sing = (r :: k -> Type) | r -> k data SingList :: forall (k :: Type). [k] -> Type [SingListNil] :: SingList '[] [SingListCons] :: Sing r -> SingList rs -> SingList (r : rs) data SingMaybe :: Maybe k -> Type [SingMaybeJust] :: Sing a -> SingMaybe ( 'Just a) [SingMaybeNothing] :: SingMaybe 'Nothing class Reify a reify :: Reify a => Sing a class Unreify k unreify :: forall (a :: k) b. Unreify k => Sing a -> (Reify a => b) -> b class EqSing k eqSing :: forall (a :: k) (b :: k). EqSing k => Sing a -> Sing b -> Maybe (a :~: b) class EqSing k => OrdSing k compareSing :: forall (a :: k) (b :: k). OrdSing k => Sing a -> Sing b -> WitnessedOrdering a b class ShowSing k showsPrecSing :: forall (a :: k). ShowSing k => Int -> Sing a -> ShowS class ToJSONSing k toJSONSing :: forall (a :: k). ToJSONSing k => Sing a -> Value class FromJSONSing k parseJSONSing :: FromJSONSing k => Value -> Parser (Exists (Sing :: k -> Type)) class ToSing (f :: k -> Type) toSing :: ToSing f => f a -> Sing a -- | The two functions must form an isomorphism. class SingKind k demoteSing :: SingKind k => Sing (a :: k) -> k promoteSing :: SingKind k => k -> Exists (Sing :: k -> Type) showsForall :: ShowForall f => f a -> ShowS showsForeach :: ShowForeach f => Sing a -> f a -> ShowS showForall :: ShowForall f => f a -> String showListForall :: ShowForall f => [f a] -> ShowS showListForeach :: ShowForeach f => Sing a -> [f a] -> ShowS showsForall2 :: ShowForall2 f => f a b -> ShowS showForall2 :: ShowForall2 f => f a b -> String defaultEqForallPoly :: (TestEquality f, EqForall f) => f a -> f b -> WitnessedEquality a b defaultCompareForallPoly :: (TestEquality f, OrdForall f) => f a -> f b -> Ordering -- | Parse a Map whose key type is higher-kinded. This only creates -- a valid Map if the OrdForeach instance agrees with the -- Ord instance. parseJSONMapForeachKey :: forall k (f :: k -> Type) (a :: k) v. (FromJSONKeyForeach f, OrdForeach f, Unreify k) => (Value -> Parser v) -> Sing a -> Value -> Parser (Map (f a) v) toJSONMapForeachKey :: (ToJSONKeyForeach f, ToJSONForeach v) => Sing a -> Map (f a) (v a) -> Value weakenEquality :: WitnessedEquality a b -> Bool weakenOrdering :: WitnessedOrdering a b -> Ordering strengthenEquality :: Bool -> WitnessedEquality a a -- | Given that we already know two types are equal, promote an -- Ordering. strengthenOrdering :: Ordering -> WitnessedOrdering a a -- | Given that we already know two types to be unequal, promote an -- Ordering. The argument should not be EQ. strengthenUnequalOrdering :: Ordering -> WitnessedOrdering a b unreifyList :: forall (as :: [k]) b. Unreify k => SingList as -> (Reify as => b) -> b instance forall k (f :: k -> *). (Data.Exists.FromJSONForeach f, Data.Exists.FromJSONSing k) => Data.Aeson.Types.FromJSON.FromJSON (Data.Exists.Some f) instance forall k (f :: k -> *). (Data.Exists.ToJSONForeach f, Data.Exists.ToJSONSing k) => Data.Aeson.Types.ToJSON.ToJSON (Data.Exists.Some f) instance forall k (f :: k -> *) (g :: k -> *). (Data.Exists.EqForallPoly f, Data.Exists.ToSing f, Data.Exists.EqForeach g) => GHC.Classes.Eq (Data.Exists.DependentPair f g) instance forall k (f :: k -> *) (g :: k -> *). (Data.Exists.OrdForallPoly f, Data.Exists.ToSing f, Data.Exists.OrdForeach g) => GHC.Classes.Ord (Data.Exists.DependentPair f g) instance forall k (f :: k -> *) (g :: k -> *). (Data.Exists.ShowForall f, Data.Exists.ToSing f, Data.Exists.ShowForeach g) => GHC.Show.Show (Data.Exists.DependentPair f g) instance Data.Exists.Reify 'GHC.Maybe.Nothing instance forall a1 (a2 :: a1). Data.Exists.Reify a2 => Data.Exists.Reify ('GHC.Maybe.Just a2) instance Data.Exists.SingKind k => Data.Exists.SingKind [k] instance Data.Exists.Reify '[] instance forall a1 (a2 :: a1) (as :: [a1]). (Data.Exists.Reify a2, Data.Exists.Reify as) => Data.Exists.Reify (a2 : as) instance Data.Exists.EqForall Data.Exists.SingList instance Data.Exists.EqSing k => Data.Exists.EqForallPoly Data.Exists.SingList instance (Data.Exists.SingKind k, Data.Binary.Class.Binary k) => Data.Exists.BinaryExists Data.Exists.SingList instance forall k (xs :: [k]). Data.Exists.ShowSing k => GHC.Show.Show (Data.Exists.SingList xs) instance forall k (f :: k -> *) (a :: k). Data.Exists.MonoidForall f => GHC.Base.Monoid (Data.Exists.ApplyForall f a) instance forall k (f :: k -> *). Data.Exists.MonoidForall f => Data.Exists.MonoidForall (Data.Exists.ApplyForall f) instance GHC.Base.Monoid a => Data.Exists.MonoidForall (Data.Functor.Const.Const a) instance forall k (f :: k -> *) (a :: k). (Data.Exists.MonoidForeach f, Data.Exists.Reify a) => GHC.Base.Monoid (Data.Exists.ApplyForeach f a) instance forall k (f :: k -> *). Data.Exists.MonoidForeach f => Data.Exists.MonoidForeach (Data.Exists.ApplyForeach f) instance Data.Exists.ShowSing k => Data.Exists.ShowSing [k] instance forall k (f :: k -> *). (Data.Exists.ShowForeach f, Data.Exists.ShowSing k) => GHC.Show.Show (Data.Exists.Some f) instance forall k (f :: k -> *). (Data.Exists.OrdForeach f, Data.Exists.OrdSing k) => GHC.Classes.Ord (Data.Exists.Some f) instance Data.Exists.EqSing a => Data.Exists.EqSing [a] instance forall k (f :: k -> *). (Data.Exists.EqForeach f, Data.Exists.EqSing k) => GHC.Classes.Eq (Data.Exists.Some f) instance Data.Exists.Unreify k => Data.Exists.Unreify [k] instance forall k (f :: k -> *) (a :: k). (Data.Exists.EqForeach f, Data.Exists.Reify a) => GHC.Classes.Eq (Data.Exists.ApplyForeach f a) instance forall k (f :: k -> *) (a :: k). (Data.Exists.OrdForeach f, Data.Exists.Reify a) => GHC.Classes.Ord (Data.Exists.ApplyForeach f a) instance forall k (f :: k -> *) (a :: k). (Data.Exists.ShowForeach f, Data.Exists.Reify a) => GHC.Show.Show (Data.Exists.ApplyForeach f a) instance forall k (f :: k -> *) (a :: k). (Data.Exists.SemigroupForeach f, Data.Exists.Reify a) => GHC.Base.Semigroup (Data.Exists.ApplyForeach f a) instance forall k (f :: k -> *) (a :: k). (Data.Exists.ToJSONForeach f, Data.Exists.Reify a) => Data.Aeson.Types.ToJSON.ToJSON (Data.Exists.ApplyForeach f a) instance forall k (f :: k -> *) (a :: k). (Data.Exists.FromJSONForeach f, Data.Exists.Reify a) => Data.Aeson.Types.FromJSON.FromJSON (Data.Exists.ApplyForeach f a) instance forall k (f :: k -> *) (a :: k). (Data.Exists.ToJSONKeyForeach f, Data.Exists.Reify a) => Data.Aeson.Types.ToJSON.ToJSONKey (Data.Exists.ApplyForeach f a) instance forall k (f :: k -> *) (a :: k). (Data.Exists.FromJSONKeyForeach f, Data.Exists.Reify a) => Data.Aeson.Types.FromJSON.FromJSONKey (Data.Exists.ApplyForeach f a) instance forall k (f :: k -> *). Data.Exists.FromJSONKeyForeach f => Data.Exists.FromJSONKeyForeach (Data.Exists.ApplyForeach f) instance forall k (f :: k -> *). Data.Exists.OrdForeach f => Data.Exists.OrdForeach (Data.Exists.ApplyForeach f) instance forall k (f :: * -> *) (g :: k -> *). (Data.Functor.Classes.Ord1 f, Data.Exists.OrdForeach g) => Data.Exists.OrdForeach (Data.Functor.Compose.Compose f g) instance forall k (f :: k -> *). Data.Exists.EqForeach f => Data.Exists.EqForeach (Data.Exists.ApplyForeach f) instance forall k (f :: * -> *) (g :: k -> *). (Data.Functor.Classes.Eq1 f, Data.Exists.EqForeach g) => Data.Exists.EqForeach (Data.Functor.Compose.Compose f g) instance forall k (f :: * -> *) (g :: k -> *). (Data.Functor.Classes.Show1 f, Data.Exists.ShowForeach g) => Data.Exists.ShowForeach (Data.Functor.Compose.Compose f g) instance forall k (f :: k -> *). Data.Exists.ToJSONKeyForeach f => Data.Exists.ToJSONKeyForeach (Data.Exists.ApplyForeach f) instance forall k (f :: k -> *). Data.Exists.ToJSONForeach f => Data.Exists.ToJSONForeach (Data.Exists.ApplyForeach f) instance Data.Aeson.Types.ToJSON.ToJSON a => Data.Exists.ToJSONForeach (Data.Functor.Const.Const a) instance forall k (f :: * -> *) (g :: k -> *). (Data.Aeson.Types.ToJSON.ToJSON1 f, Data.Exists.ToJSONForeach g) => Data.Exists.ToJSONForeach (Data.Functor.Compose.Compose f g) instance forall k (f :: * -> *) (g :: k -> *). (Data.Aeson.Types.FromJSON.FromJSON1 f, Data.Exists.FromJSONForall g) => Data.Exists.FromJSONForall (Data.Functor.Compose.Compose f g) instance forall k (f :: k -> *). Data.Exists.FromJSONForeach f => Data.Exists.FromJSONForeach (Data.Exists.ApplyForeach f) instance Data.Aeson.Types.FromJSON.FromJSON a => Data.Exists.FromJSONForeach (Data.Functor.Const.Const a) instance forall k (f :: * -> *) (g :: k -> *). (Data.Aeson.Types.FromJSON.FromJSON1 f, Data.Exists.FromJSONForeach g) => Data.Exists.FromJSONForeach (Data.Functor.Compose.Compose f g) instance forall k (f :: k -> *). Data.Exists.SemigroupForeach f => Data.Exists.SemigroupForeach (Data.Exists.ApplyForeach f) instance forall k (f :: * -> *) (g :: k -> *). (Data.Monoid.Lifted.Semigroup1 f, Data.Exists.SemigroupForeach g) => Data.Exists.SemigroupForeach (Data.Functor.Compose.Compose f g) instance forall k (f :: * -> *) (g :: k -> *). (Data.Binary.Lifted.Binary1 f, Data.Exists.BinaryForeach g) => Data.Exists.BinaryForeach (Data.Functor.Compose.Compose f g) instance forall k j (f :: k -> j -> *). Data.Exists.BinaryExists2 f => Data.Binary.Class.Binary (Data.Exists.Exists2 f) instance forall k (f :: k -> *). Data.Exists.BinaryExists f => Data.Binary.Class.Binary (Data.Exists.Exists f) instance forall k (f :: k -> *) (a :: k). Data.Exists.SemigroupForall f => GHC.Base.Semigroup (Data.Exists.ApplyForall f a) instance forall k (f :: k -> *). Data.Exists.SemigroupForall f => Data.Exists.SemigroupForall (Data.Exists.ApplyForall f) instance Data.Exists.SemigroupForall Data.Proxy.Proxy instance forall k (f :: * -> *) (g :: k -> *). (Data.Monoid.Lifted.Semigroup1 f, Data.Exists.SemigroupForall g) => Data.Exists.SemigroupForall (Data.Functor.Compose.Compose f g) instance GHC.Base.Semigroup a => Data.Exists.SemigroupForall (Data.Functor.Const.Const a) instance forall k (f :: k -> *). Data.Exists.PathPieceExists f => Web.PathPieces.PathPiece (Data.Exists.Exists f) instance forall k (f :: k -> *). Data.Exists.BoundedExists f => GHC.Enum.Bounded (Data.Exists.Exists f) instance forall k (f :: k -> *). Data.Exists.EnumExists f => GHC.Enum.Enum (Data.Exists.Exists f) instance forall k (f :: k -> *). (Data.Exists.FromJSONKeyExists f, Data.Exists.FromJSONExists f) => Data.Aeson.Types.FromJSON.FromJSONKey (Data.Exists.Exists f) instance forall k (f :: k -> *). Data.Exists.FromJSONExists f => Data.Aeson.Types.FromJSON.FromJSON (Data.Exists.Exists f) instance forall k (f :: k -> *). (Data.Exists.ToJSONKeyForall f, Data.Exists.ToJSONForall f) => Data.Aeson.Types.ToJSON.ToJSONKey (Data.Exists.Exists f) instance forall k (f :: k -> *). Data.Exists.ToJSONForall f => Data.Aeson.Types.ToJSON.ToJSON (Data.Exists.Exists f) instance forall k (f :: * -> *) (g :: k -> *). (Data.Aeson.Types.ToJSON.ToJSON1 f, Data.Exists.ToJSONForall g) => Data.Exists.ToJSONForall (Data.Functor.Compose.Compose f g) instance Data.Hashable.Class.Hashable a => Data.Exists.HashableForall (Data.Functor.Const.Const a) instance forall k (f :: k -> *). Data.Exists.HashableForall f => Data.Hashable.Class.Hashable (Data.Exists.Exists f) instance forall k j (f :: k -> j -> *). Data.Exists.EqForallPoly2 f => GHC.Classes.Eq (Data.Exists.Exists2 f) instance Data.Exists.EqForall2 (Data.Type.Equality.:~:) instance Data.Exists.ReadExists Data.Proxy.Proxy instance forall k (f :: k -> *). Data.Exists.ReadExists f => GHC.Read.Read (Data.Exists.Exists f) instance forall k j (f :: k -> j -> *). Data.Exists.ShowForall2 f => GHC.Show.Show (Data.Exists.Exists2 f) instance forall k (f :: k -> *) (a :: k). Data.Exists.ShowForall f => GHC.Show.Show (Data.Exists.ApplyForall f a) instance Data.Exists.ShowForall Data.Proxy.Proxy instance GHC.Show.Show a => Data.Exists.ShowForall (Data.Functor.Const.Const a) instance forall k (f :: k -> *). Data.Exists.ShowForall f => GHC.Show.Show (Data.Exists.Exists f) instance forall k (f :: k -> *) (g :: k -> *). (Data.Exists.ShowForall f, Data.Exists.ShowForall g) => Data.Exists.ShowForall (Data.Functor.Product.Product f g) instance forall k (f :: * -> *) (g :: k -> *). (Data.Functor.Classes.Show1 f, Data.Exists.ShowForall g) => Data.Exists.ShowForall (Data.Functor.Compose.Compose f g) instance forall k (f :: k -> *). Data.Exists.OrdForallPoly f => GHC.Classes.Ord (Data.Exists.Exists f) instance forall k (f :: k -> *) (g :: k -> *). (Data.Exists.OrdForallPoly f, Data.Exists.OrdForallPoly g) => Data.Exists.OrdForallPoly (Data.Functor.Product.Product f g) instance forall k (f :: k -> *). Data.Exists.EqForallPoly f => GHC.Classes.Eq (Data.Exists.Exists f) instance forall k (f :: k -> *) (g :: k -> *). (Data.Exists.EqForallPoly f, Data.Exists.EqForallPoly g) => Data.Exists.EqForallPoly (Data.Functor.Product.Product f g) instance Data.Exists.OrdForall Data.Proxy.Proxy instance GHC.Classes.Ord a => Data.Exists.OrdForall (Data.Functor.Const.Const a) instance forall k (f :: k -> *) (g :: k -> *). (Data.Exists.OrdForall f, Data.Exists.OrdForall g) => Data.Exists.OrdForall (Data.Functor.Product.Product f g) instance forall k (f :: k -> *) (g :: k -> *). (Data.Exists.OrdForall f, Data.Exists.OrdForall g) => Data.Exists.OrdForall (Data.Functor.Sum.Sum f g) instance Data.Exists.EqForall Data.Proxy.Proxy instance forall k (a :: k). Data.Exists.EqForall ((Data.Type.Equality.:~:) a) instance GHC.Classes.Eq a => Data.Exists.EqForall (Data.Functor.Const.Const a) instance forall k (f :: k -> *) (g :: k -> *). (Data.Exists.EqForall f, Data.Exists.EqForall g) => Data.Exists.EqForall (Data.Functor.Product.Product f g) instance forall k (f :: * -> *) (g :: k -> *). (Data.Functor.Classes.Eq1 f, Data.Exists.EqForall g) => Data.Exists.EqForall (Data.Functor.Compose.Compose f g) instance forall k (f :: k -> *) (g :: k -> *). (Data.Exists.EqForall f, Data.Exists.EqForall g) => Data.Exists.EqForall (Data.Functor.Sum.Sum f g) instance (Data.Monoid.Lifted.Semigroup1 f, GHC.Base.Semigroup a) => GHC.Base.Semigroup (Data.Exists.ApplyLifted f a) instance (Data.Monoid.Lifted.Monoid1 f, GHC.Base.Monoid a) => GHC.Base.Monoid (Data.Exists.ApplyLifted f a) instance (Data.Functor.Classes.Eq1 f, GHC.Classes.Eq a) => GHC.Classes.Eq (Data.Exists.ApplyLifted f a) instance (Data.Functor.Classes.Ord1 f, GHC.Classes.Ord a) => GHC.Classes.Ord (Data.Exists.ApplyLifted f a) instance Data.Monoid.Lifted.Semigroup1 f => Data.Monoid.Lifted.Semigroup1 (Data.Exists.ApplyLifted f) instance Data.Monoid.Lifted.Monoid1 f => Data.Monoid.Lifted.Monoid1 (Data.Exists.ApplyLifted f) instance Data.Functor.Classes.Eq1 f => Data.Functor.Classes.Eq1 (Data.Exists.ApplyLifted f) instance Data.Functor.Classes.Ord1 f => Data.Functor.Classes.Ord1 (Data.Exists.ApplyLifted f) module Topaz.Types data Elem (rs :: [k]) (r :: k) [ElemHere] :: Elem (r : rs) r [ElemThere] :: Elem rs r -> Elem (s : rs) r data Rec :: (k -> Type) -> [k] -> Type [RecNil] :: Rec f '[] [RecCons] :: f r -> Rec f rs -> Rec f (r : rs) data NestRec :: (k -> Type) -> Nest k -> Type [NestRec] :: Rec f rs -> Rec (NestRec f) ns -> NestRec f ( 'Nest ns rs) newtype Fix f Fix :: f (Fix f) -> Fix f newtype HFix h a HFix :: h (HFix h) a -> HFix h a data Nest a Nest :: [Nest a] -> [a] -> Nest a class EqHetero h eqHetero :: EqHetero h => (forall x. f x -> f x -> Bool) -> h f a -> h f a -> Bool class TestEqualityHetero h testEqualityHetero :: TestEqualityHetero h => (forall x y. f x -> f y -> Maybe (x :~: y)) -> h f a -> h f b -> Maybe (a :~: b) data Nat Succ :: Nat -> Nat Zero :: Nat data SingNat :: Nat -> Type [SingZero] :: SingNat 'Zero [SingSucc] :: SingNat n -> SingNat ( 'Succ n) data Vector :: Nat -> Type -> Type [VectorNil] :: Vector 'Zero a [VectorCons] :: a -> Vector n a -> Vector ( 'Succ n) a type family (as :: [k]) ++ (bs :: [k]) :: [k] infixr 5 ++ instance forall k (h :: (k -> *) -> k -> *). Topaz.Types.TestEqualityHetero h => Data.Type.Equality.TestEquality (Topaz.Types.HFix h) instance forall k (h :: (k -> *) -> k -> *). Topaz.Types.EqHetero h => Data.Exists.EqForall (Topaz.Types.HFix h) instance forall k (h :: (k -> *) -> k -> *) (a :: k). Topaz.Types.EqHetero h => GHC.Classes.Eq (Topaz.Types.HFix h a) instance Data.Monoid.Lifted.Semigroup1 f => GHC.Base.Semigroup (Topaz.Types.Fix f) instance Data.Monoid.Lifted.Monoid1 f => GHC.Base.Monoid (Topaz.Types.Fix f) instance forall k (f :: k -> *). Data.Type.Equality.TestEquality f => Data.Type.Equality.TestEquality (Topaz.Types.Rec f) instance forall k (f :: k -> *). Data.Type.Coercion.TestCoercion f => Data.Type.Coercion.TestCoercion (Topaz.Types.Rec f) instance forall k (f :: k -> *). Data.Exists.HashableForall f => Data.Exists.HashableForall (Topaz.Types.Rec f) instance forall k (f :: k -> *) (as :: [k]). Data.Exists.HashableForall f => Data.Hashable.Class.Hashable (Topaz.Types.Rec f as) instance forall k (f :: k -> *). Data.Exists.ShowForall f => Data.Exists.ShowForall (Topaz.Types.Rec f) instance forall k (f :: k -> *) (as :: [k]). Data.Exists.ShowForall f => GHC.Show.Show (Topaz.Types.Rec f as) instance forall k (f :: k -> *). Data.Exists.ShowForeach f => Data.Exists.ShowForeach (Topaz.Types.Rec f) instance forall k (f :: k -> *) (as :: [k]). Data.Exists.EqForall f => GHC.Classes.Eq (Topaz.Types.Rec f as) instance forall k (f :: k -> *). Data.Exists.EqForall f => Data.Exists.EqForall (Topaz.Types.Rec f) instance forall k (f :: k -> *). Data.Exists.EqForeach f => Data.Exists.EqForeach (Topaz.Types.Rec f) instance forall k (f :: k -> *). Data.Exists.EqForallPoly f => Data.Exists.EqForallPoly (Topaz.Types.Rec f) instance forall k (f :: k -> *) (as :: [k]). Data.Exists.OrdForall f => GHC.Classes.Ord (Topaz.Types.Rec f as) instance forall k (f :: k -> *). Data.Exists.OrdForall f => Data.Exists.OrdForall (Topaz.Types.Rec f) instance forall k (f :: k -> *). Data.Exists.OrdForeach f => Data.Exists.OrdForeach (Topaz.Types.Rec f) instance forall k (f :: k -> *) (as :: [k]). Data.Exists.SemigroupForall f => GHC.Base.Semigroup (Topaz.Types.Rec f as) instance forall k (f :: k -> *). Data.Exists.SemigroupForeach f => Data.Exists.SemigroupForeach (Topaz.Types.Rec f) instance forall k (f :: k -> *). Data.Exists.MonoidForeach f => Data.Exists.MonoidForeach (Topaz.Types.Rec f) instance forall k (f :: k -> *). Data.Exists.SemigroupForall f => Data.Exists.SemigroupForall (Topaz.Types.Rec f) instance forall k (f :: k -> *) (as :: [k]). Data.Exists.ToJSONForall f => Data.Aeson.Types.ToJSON.ToJSON (Topaz.Types.Rec f as) instance forall k (f :: k -> *). Data.Exists.ToJSONForall f => Data.Exists.ToJSONForall (Topaz.Types.Rec f) instance forall k (f :: k -> *) (as :: [k]). (Data.Exists.FromJSONForeach f, Data.Exists.Reify as) => Data.Aeson.Types.FromJSON.FromJSON (Topaz.Types.Rec f as) instance forall k (f :: k -> *). Data.Exists.FromJSONForeach f => Data.Exists.FromJSONForeach (Topaz.Types.Rec f) instance forall k (f :: k -> *). Data.Exists.StorableForeach f => Data.Exists.StorableForeach (Topaz.Types.Rec f) instance forall k (f :: k -> *) (as :: [k]). (Data.Exists.StorableForeach f, Data.Exists.Reify as) => Foreign.Storable.Storable (Topaz.Types.Rec f as) instance forall k (f :: k -> *). Data.Exists.BinaryForeach f => Data.Exists.BinaryForeach (Topaz.Types.Rec f) instance forall k (f :: k -> *). Data.Exists.FromJSONExists f => Data.Exists.FromJSONExists (Topaz.Types.Rec f) instance GHC.Classes.Eq a => GHC.Classes.Eq (Topaz.Types.Vector n a) module Topaz.Rec data Rec :: (k -> Type) -> [k] -> Type [RecNil] :: Rec f '[] [RecCons] :: f r -> Rec f rs -> Rec f (r : rs) -- | infix RecCons with proper fixity (<:) :: forall a (f :: a -> *) (r :: a) (rs :: [a]). f r -> Rec f rs -> Rec f (r : rs) infixr 7 <: map :: (forall x. f x -> g x) -> Rec f as -> Rec g as append :: Rec f as -> Rec f bs -> Rec f (as ++ bs) traverse :: Applicative h => (forall x. f x -> h (g x)) -> Rec f rs -> h (Rec g rs) traverse_ :: Applicative h => (forall x. f x -> h b) -> Rec f rs -> h () zipWith :: (forall x. f x -> g x -> h x) -> Rec f rs -> Rec g rs -> Rec h rs -- | Map each element of a record to a monoid and combine the results. foldMap :: forall f m rs. Monoid m => (forall x. f x -> m) -> Rec f rs -> m foldMap1 :: forall f m r rs. Semigroup m => (forall x. f x -> m) -> Rec f (r : rs) -> m -- | Strict left fold over the elements of a record. foldl' :: forall f a rs. (forall x. a -> f x -> a) -> a -> Rec f rs -> a get :: Elem rs r -> Rec f rs -> f r put :: Elem rs r -> f r -> Rec f rs -> Rec f rs gets :: Rec (Elem rs) ss -> Rec f rs -> Rec f ss puts :: Rec (Elem rs) ss -> Rec f rs -> Rec f ss -> Rec f rs fromSingList :: SingList as -> Rec Sing as toSingList :: Rec Sing as -> SingList as fromList :: [Exists f] -> Exists (Rec f)