-- 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.3
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.Semigroup1 GHC.Base.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.Monoid1 f, Data.Monoid.Lifted.Monoid1 g) => Data.Monoid.Lifted.Monoid1 (Data.Functor.Compose.Compose f g)
instance Data.Monoid.Lifted.Semigroup1 GHC.Types.IO
instance Data.Monoid.Lifted.Monoid1 GHC.Types.IO
instance GHC.Classes.Ord k => Data.Monoid.Lifted.Semigroup1 (Data.Map.Base.Map k)
instance (Data.Hashable.Class.Hashable k, GHC.Classes.Eq k) => Data.Monoid.Lifted.Semigroup1 (Data.HashMap.Base.HashMap k)
instance (Data.Hashable.Class.Hashable k, GHC.Classes.Eq k) => Data.Monoid.Lifted.Monoid1 (Data.HashMap.Base.HashMap k)
instance Data.Monoid.Lifted.Semigroup1 []
instance Data.Monoid.Lifted.Monoid1 []
instance Data.Monoid.Lifted.Semigroup1 Data.Functor.Identity.Identity
instance Data.Monoid.Lifted.Monoid1 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.Monoid1 f, Data.Monoid.Lifted.Monoid1 g) => Data.Monoid.Lifted.Monoid1 (Data.Functor.Product.Product f g)
instance Data.Monoid.Lifted.Semigroup1 Data.Monoid.Dual
instance Data.Monoid.Lifted.Monoid1 Data.Monoid.Dual
instance Data.Semigroup.Semigroup a => Data.Monoid.Lifted.Semigroup1 ((,) a)
instance (Data.Semigroup.Semigroup a, GHC.Base.Monoid a) => Data.Monoid.Lifted.Monoid1 ((,) a)
instance Data.Monoid.Lifted.Semigroup1 Data.Proxy.Proxy
instance Data.Monoid.Lifted.Monoid1 Data.Proxy.Proxy
instance Data.Monoid.Lifted.Semigroup1 ((->) a)
instance Data.Monoid.Lifted.Monoid1 ((->) a)
-- | Data types and type classes for working with existentially quantified
-- values. In the event that Quantified Class Constraints ever land in
-- GHC, this package will be considered obsolete. The benefit that most
-- of the typeclasses in this module provide is that they help populate
-- the instances of Exists.
module Data.Exists
-- | Hide a type parameter.
data Exists (f :: k -> Type)
Exists :: !(f a) -> Exists
data Exists2 (f :: k -> j -> Type)
Exists2 :: !(f a b) -> Exists2
data Exists3 (f :: k -> j -> l -> Type)
Exists3 :: !(f a b c) -> Exists3
data Some (f :: k -> Type)
Some :: !(Sing a) -> !(f a) -> Some
class EqForall f
eqForall :: EqForall f => f a -> f a -> Bool
class EqForall f => EqForallPoly f where eqForallPoly = defaultEqForallPoly
eqForallPoly :: EqForallPoly f => f a -> f b -> Bool
eqForallPoly :: (EqForallPoly f, TestEquality f) => f a -> f b -> Bool
class EqForall f => OrdForall f
compareForall :: OrdForall f => f a -> f a -> Ordering
class (OrdForall f, EqForallPoly f) => OrdForallPoly f where compareForallPoly = defaultCompareForallPoly
compareForallPoly :: OrdForallPoly f => f a -> f b -> Ordering
compareForallPoly :: (OrdForallPoly f, TestEquality f) => f a -> f b -> Ordering
class ShowForall f
showsPrecForall :: ShowForall f => Int -> f a -> ShowS
class ReadForall f
readPrecForall :: ReadForall f => ReadPrec (Exists f)
class EnumForall f
toEnumForall :: EnumForall f => Int -> Exists f
fromEnumForall :: EnumForall f => f a -> Int
class BoundedForall f
minBoundForall :: BoundedForall f => Exists f
maxBoundForall :: BoundedForall f => Exists f
class SemigroupForall f
sappendForall :: SemigroupForall f => f a -> f a -> f a
class SemigroupForall f => MonoidForall f
memptyForall :: MonoidForall f => Sing a -> f a
class HashableForall f
hashWithSaltForall :: HashableForall f => Int -> f a -> Int
class PathPieceForall f
fromPathPieceForall :: PathPieceForall f => Text -> Maybe (Exists f)
toPathPieceForall :: PathPieceForall f => f a -> Text
class FromJSONForall f
parseJSONForall :: FromJSONForall 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
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 FromJSONKeyFunctionForall f
FromJSONKeyTextParserForall :: !(forall a. Sing a -> Text -> Parser (f a)) -> FromJSONKeyFunctionForall f
FromJSONKeyValueForall :: !(forall a. Sing a -> Value -> Parser (f a)) -> FromJSONKeyFunctionForall f
class ToJSONKeyForall f
toJSONKeyForall :: ToJSONKeyForall f => ToJSONKeyFunctionForall f
class FromJSONKeyExists f
fromJSONKeyExists :: FromJSONKeyExists f => FromJSONKeyFunction (Exists f)
class FromJSONKeyForall f
fromJSONKeyForall :: FromJSONKeyForall f => FromJSONKeyFunctionForall f
class StorableForall (f :: k -> Type)
peekForall :: StorableForall f => Sing a -> Ptr (f a) -> IO (f a)
pokeForall :: StorableForall f => Ptr (f a) -> f a -> IO ()
sizeOfFunctorForall :: StorableForall f => f a -> Int
sizeOfForall :: forall (a :: k). StorableForall f => Proxy f -> Sing a -> Int
class EqForall2 f
eqForall2 :: EqForall2 f => f a b -> f a b -> Bool
class EqForallPoly2 f
eqForallPoly2 :: EqForallPoly2 f => f a b -> f c d -> Bool
class ShowForall2 f
showsPrecForall2 :: ShowForall2 f => Int -> f a b -> ShowS
data SingList :: [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 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
showsForall :: ShowForall f => f a -> ShowS
showForall :: ShowForall f => f a -> String
showsForall2 :: ShowForall2 f => f a b -> ShowS
showForall2 :: ShowForall2 f => f a b -> String
defaultEqForallPoly :: (TestEquality f, EqForall f) => f a -> f b -> Bool
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 OrdForall instance agrees with the
-- Ord instance.
parseJSONMapForallKey :: forall f a v. (FromJSONKeyForall f, OrdForall f) => (Value -> Parser v) -> Sing a -> Value -> Parser (Map (f a) v)
unreifyList :: forall (as :: [k]) b. Unreify k => SingList as -> (Reify as => b) -> b
instance Data.Exists.EqForall Data.Proxy.Proxy
instance Data.Exists.OrdForall Data.Proxy.Proxy
instance Data.Exists.ShowForall Data.Proxy.Proxy
instance Data.Exists.ReadForall Data.Proxy.Proxy
instance Data.Exists.SemigroupForall Data.Proxy.Proxy
instance forall k (a :: k). Data.Exists.EqForall ((Data.Type.Equality.:~:) a)
instance Data.Exists.EqForall2 (Data.Type.Equality.:~:)
instance GHC.Classes.Eq a => Data.Exists.EqForall (Data.Functor.Const.Const a)
instance GHC.Classes.Eq a => Data.Exists.EqForallPoly (Data.Functor.Const.Const a)
instance GHC.Classes.Ord a => Data.Exists.OrdForall (Data.Functor.Const.Const a)
instance GHC.Classes.Ord a => Data.Exists.OrdForallPoly (Data.Functor.Const.Const a)
instance Data.Hashable.Class.Hashable a => Data.Exists.HashableForall (Data.Functor.Const.Const a)
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 -> GHC.Types.Type). (Data.Exists.FromJSONKeyExists f, Data.Exists.FromJSONExists f) => Data.Aeson.Types.FromJSON.FromJSONKey (Data.Exists.Exists f)
instance forall k (f :: k -> *). Data.Exists.EqForallPoly f => GHC.Classes.Eq (Data.Exists.Exists f)
instance forall j k (f :: k -> j -> *). Data.Exists.EqForallPoly2 f => GHC.Classes.Eq (Data.Exists.Exists2 f)
instance forall k (f :: k -> *). Data.Exists.OrdForallPoly f => GHC.Classes.Ord (Data.Exists.Exists f)
instance forall k (f :: k -> *). Data.Exists.HashableForall f => Data.Hashable.Class.Hashable (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 :: k -> GHC.Types.Type). Data.Exists.FromJSONExists f => Data.Aeson.Types.FromJSON.FromJSON (Data.Exists.Exists f)
instance forall k (f :: k -> *). Data.Exists.ShowForall f => GHC.Show.Show (Data.Exists.Exists f)
instance forall j k (f :: k -> j -> *). Data.Exists.ShowForall2 f => GHC.Show.Show (Data.Exists.Exists2 f)
instance forall k (f :: k -> GHC.Types.Type). Data.Exists.ReadForall f => GHC.Read.Read (Data.Exists.Exists f)
instance forall k (f :: k -> GHC.Types.Type). Data.Exists.EnumForall f => GHC.Enum.Enum (Data.Exists.Exists f)
instance forall k (f :: k -> GHC.Types.Type). Data.Exists.BoundedForall f => GHC.Enum.Bounded (Data.Exists.Exists f)
instance forall k (f :: k -> GHC.Types.Type). Data.Exists.PathPieceForall f => Web.PathPieces.PathPiece (Data.Exists.Exists f)
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 :: k -> *) (g :: k -> *). (Data.Exists.EqForallPoly f, Data.Exists.EqForallPoly g) => Data.Exists.EqForallPoly (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.Product.Product f g)
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 -> *) (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.Aeson.Types.ToJSON.ToJSON1 f, Data.Exists.ToJSONForall g) => Data.Exists.ToJSONForall (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 :: * -> *) (g :: k -> *). (Data.Functor.Classes.Eq1 f, Data.Exists.EqForall g) => Data.Exists.EqForall (Data.Functor.Compose.Compose f g)
instance forall k (f :: * -> *) (g :: k -> *). (Data.Functor.Classes.Eq1 f, Data.Exists.EqForallPoly g) => Data.Exists.EqForallPoly (Data.Functor.Compose.Compose 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 -> *) (g :: k -> *). (Data.Exists.EqForall f, Data.Exists.EqForall g) => Data.Exists.EqForall (Data.Functor.Sum.Sum 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.Unreify k => Data.Exists.Unreify [k]
instance Data.Exists.Reify '[]
instance forall a (a1 :: a) (as :: [a]). (Data.Exists.Reify a1, Data.Exists.Reify as) => Data.Exists.Reify (a1 : as)
instance Data.Exists.Reify 'GHC.Base.Nothing
instance forall a (a1 :: a). Data.Exists.Reify a1 => Data.Exists.Reify ('GHC.Base.Just a1)
instance Data.Exists.EqSing a => Data.Exists.EqSing [a]
instance forall k (k1 :: k) k2 (f :: k2 -> *). (Data.Exists.EqForall f, Data.Exists.EqSing k2) => GHC.Classes.Eq (Data.Exists.Some f)
instance forall k (k1 :: k) k2 (f :: k2 -> *). (Data.Exists.ToJSONForall f, Data.Exists.ToJSONSing k2) => Data.Aeson.Types.ToJSON.ToJSON (Data.Exists.Some f)
instance forall k (k1 :: k) k2 (f :: k2 -> *). (Data.Exists.FromJSONForall f, Data.Exists.FromJSONSing k2) => Data.Aeson.Types.FromJSON.FromJSON (Data.Exists.Some f)
instance forall k (f :: k -> *) (a :: k). Data.Exists.EqForall f => GHC.Classes.Eq (Data.Exists.Apply f a)
instance forall k (f :: k -> *) (a :: k). Data.Exists.OrdForall f => GHC.Classes.Ord (Data.Exists.Apply f a)
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)
instance Data.Monoid.Lifted.Semigroup1 f => Data.Semigroup.Semigroup (Topaz.Types.Fix f)
instance Data.Monoid.Lifted.Monoid1 f => GHC.Base.Monoid (Topaz.Types.Fix f)
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 forall k (h :: (k -> *) -> k -> *). Topaz.Types.TestEqualityHetero h => Data.Type.Equality.TestEquality (Topaz.Types.HFix h)
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 -> *) (as :: [k]). Data.Exists.EqForall f => GHC.Classes.Eq (Topaz.Types.Rec f as)
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.EqForall f => Data.Exists.EqForall (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 -> *) (as :: [k]). Data.Exists.SemigroupForall f => Data.Semigroup.Semigroup (Topaz.Types.Rec f as)
instance forall k (f :: k -> *) (as :: [k]). (Data.Exists.MonoidForall f, Data.Exists.Reify as) => GHC.Base.Monoid (Topaz.Types.Rec f as)
instance forall k (f :: k -> *). Data.Exists.MonoidForall f => Data.Exists.MonoidForall (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.FromJSONForall f, Data.Exists.Reify as) => Data.Aeson.Types.FromJSON.FromJSON (Topaz.Types.Rec f as)
instance forall k (f :: k -> *). Data.Exists.FromJSONForall f => Data.Exists.FromJSONForall (Topaz.Types.Rec f)
instance forall k (f :: k -> GHC.Types.Type). Data.Exists.StorableForall f => Data.Exists.StorableForall (Topaz.Types.Rec f)
instance forall k (f :: k -> GHC.Types.Type) (as :: [k]). (Data.Exists.StorableForall f, Data.Exists.Reify as) => Foreign.Storable.Storable (Topaz.Types.Rec f as)
instance forall k (f :: k -> GHC.Types.Type). Data.Exists.FromJSONExists f => Data.Exists.FromJSONExists (Topaz.Types.Rec f)
module Topaz.Rec
data Rec :: (k -> Type) -> [k] -> Type
[RecNil] :: Rec f '[]
[RecCons] :: f r -> Rec f rs -> Rec f (r : rs)
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
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