-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | Useful type level operations (type families and related operators). -- -- Useful type level operations (type families and related operators). @package typelevel @version 1.2.2 module Data.Constraint.Struct module Data.Constraints module Data.Proxify proxify :: a -> Proxy (Proxified a) module Type.Any module Type.Bool type a && b = And a b class KnownBool (b :: Bool) boolVal :: KnownBool b => Proxy b -> Bool instance Type.Bool.KnownBool 'GHC.Types.True instance Type.Bool.KnownBool 'GHC.Types.False module Constraint.Container.Homo module Type.Container type UnsafeIndex el cont = FromJust (Index el cont) module Type.Either module Type.Error type ErrMsg = 'Text class TypeErrorIf (ok :: Bool) (err :: ErrorMessage) type TypeAssert ok = TypeErrorIf ok (ErrMsg "Assertion failed.") type Sentence a = a :<>: ErrMsg "." type Ticked a = Between' "`" a type Parensed a = Between "(" ")" a type Between l r a = (ErrMsg l :<>: a) :<>: ErrMsg r type Between' s a = Between s s a type a :: b = (a :<>: ErrMsg " ") :<>: b instance Type.Error.TypeErrorIf 'GHC.Types.True err instance (TypeError ...) => Type.Error.TypeErrorIf 'GHC.Types.False err module Type.Error_old type ErrMsg = 'Text class Assert (ok :: Bool) (err :: ErrorMessage) type Assert' ok = Assert ok (ErrMsg "Assertion failed.") type Sentence a = a :<>: ErrMsg "." type Ticked a = Between' "`" a type Parensed a = Between "(" ")" a type Between l r a = (ErrMsg l :<>: a) :<>: ErrMsg r type Between' s a = Between s s a type a :: b = (a :<>: ErrMsg " ") :<>: b instance Type.Error_old.Assert 'GHC.Types.True err instance (TypeError ...) => Type.Error_old.Assert 'GHC.Types.False err module Type.Functor type f <$> as = FMap f as module Type.Hidden class Hidden t hide :: Hidden t => a -> t reveal :: Hidden t => t -> a data Any [Any] :: a -> Any instance GHC.Show.Show Type.Hidden.Any instance Type.Hidden.Hidden Type.Hidden.Any module Type.Inference -- | The Inferable type class describes a monad with a functional -- dependency on the given type. It allows for writing polymorphic code -- and ensuring Haskell that the type will be resolved while evaluating -- the monadic stack. type KnownType cls t = KnownTypeT cls t Identity newtype KnownTypeT (cls :: ck) (t :: tk) (m :: * -> *) (a :: *) KnownTypeT :: (IdentityT m a) -> KnownTypeT inferT :: forall cls t m a. KnownTypeT cls t m a -> m a instance forall tk1 ck1 tk2 ck2 (cls1 :: ck2) (t1 :: tk2) (m1 :: * -> *) a1 t2 (cls2 :: ck1) (t3 :: tk1) (m2 :: * -> *) a2. Type.Inference.KnownTypeT cls1 t1 m1 a1 ~ t2 => Control.Lens.Wrapped.Rewrapped (Type.Inference.KnownTypeT cls2 t3 m2 a2) t2 instance forall tk ck (cls :: ck) (t :: tk) (m :: * -> *) a. Control.Lens.Wrapped.Wrapped (Type.Inference.KnownTypeT cls t m a) instance forall tk ck (m :: * -> *) (cls :: ck) (t :: tk). Control.Monad.Primitive.PrimMonad m => Control.Monad.Primitive.PrimMonad (Type.Inference.KnownTypeT cls t m) instance forall ck (cls :: ck) tk (t :: tk) (m :: * -> *). GHC.Base.Alternative m => GHC.Base.Alternative (Type.Inference.KnownTypeT cls t m) instance forall ck (cls :: ck) tk (t :: tk) (m :: * -> *). GHC.Base.MonadPlus m => GHC.Base.MonadPlus (Type.Inference.KnownTypeT cls t m) instance forall ck (cls :: ck) tk (t :: tk) (m :: * -> *). Control.Monad.Catch.MonadMask m => Control.Monad.Catch.MonadMask (Type.Inference.KnownTypeT cls t m) instance forall ck (cls :: ck) tk (t :: tk) (m :: * -> *). Control.Monad.Catch.MonadCatch m => Control.Monad.Catch.MonadCatch (Type.Inference.KnownTypeT cls t m) instance forall ck (cls :: ck) tk (t :: tk) (m :: * -> *). Control.Monad.Catch.MonadThrow m => Control.Monad.Catch.MonadThrow (Type.Inference.KnownTypeT cls t m) instance forall ck (cls :: ck) tk (t :: tk) (m :: * -> *). GHC.Base.Applicative m => GHC.Base.Applicative (Type.Inference.KnownTypeT cls t m) instance forall ck (cls :: ck) tk (t :: tk). Control.Monad.Trans.Class.MonadTrans (Type.Inference.KnownTypeT cls t) instance forall ck (cls :: ck) tk (t :: tk) (m :: * -> *). Control.Monad.Fix.MonadFix m => Control.Monad.Fix.MonadFix (Type.Inference.KnownTypeT cls t m) instance forall ck (cls :: ck) tk (t :: tk) (m :: * -> *). Control.Monad.IO.Class.MonadIO m => Control.Monad.IO.Class.MonadIO (Type.Inference.KnownTypeT cls t m) instance forall ck (cls :: ck) tk (t :: tk) (m :: * -> *). GHC.Base.Monad m => GHC.Base.Monad (Type.Inference.KnownTypeT cls t m) instance forall ck (cls :: ck) tk (t :: tk) (m :: * -> *). GHC.Base.Functor m => GHC.Base.Functor (Type.Inference.KnownTypeT cls t m) instance forall ck (cls :: ck) tk (t :: tk) (m :: * -> *) a. (GHC.Show.Show a, Data.Functor.Classes.Show1 m) => GHC.Show.Show (Type.Inference.KnownTypeT cls t m a) module Type.Known class KnownType t fromType :: KnownType t => KnownTypeVal t fromType' :: forall t s. (KnownType t, Convertible' (KnownTypeVal t) s) => s instance GHC.TypeNats.KnownNat t => Type.Known.KnownType t instance GHC.TypeLits.KnownSymbol t => Type.Known.KnownType t module Type.Map data Map k v Map :: [(k, v)] -> Map k v module Type.Maybe module Type.Monoid type a <> b = Concat a b module Type.Applicative type a <*> b = AppBind a b -- | Deprecated: Use Type.Known instead module Type.Promotion class Known (t :: k) (val :: *) typeVal :: Known t val => Proxy t -> val class KnownNats (nats :: [Nat]) natVals :: KnownNats nats => Proxy nats -> [Integer] instance Type.Promotion.KnownNats '[] instance (GHC.TypeNats.KnownNat n, Type.Promotion.KnownNats ns) => Type.Promotion.KnownNats (n : ns) instance (GHC.Num.Num i, GHC.TypeNats.KnownNat t) => Type.Promotion.Known t i instance val ~ GHC.Types.Bool => Type.Promotion.Known 'GHC.Types.True val instance val ~ GHC.Types.Bool => Type.Promotion.Known 'GHC.Types.False val instance val ~ GHC.Base.Maybe a2 => Type.Promotion.Known 'GHC.Base.Nothing val instance forall a1 val a2 (t :: a1). (val ~ GHC.Base.Maybe a2, Type.Promotion.Known t a2) => Type.Promotion.Known ('GHC.Base.Just t) val instance forall b a val l r (t :: a). (val ~ Data.Either.Either l r, Type.Promotion.Known t l) => Type.Promotion.Known ('Data.Either.Left t) val instance forall a b val l r (t :: b). (val ~ Data.Either.Either l r, Type.Promotion.Known t r) => Type.Promotion.Known ('Data.Either.Right t) val instance Type.Promotion.Known '[] [a] instance forall a1 (t :: a1) a2 (ts :: [a1]). (Type.Promotion.Known t a2, Type.Promotion.Known ts [a2]) => Type.Promotion.Known (t : ts) [a2] module Type.Relation type SemiSuper a = a : Super a module Type.Sequence module Type.Show class Typeable a => TypeShow a showType :: TypeShow a => String printType :: forall a m. (TypeShow a, MonadIO m) => m () ppPrintType :: forall a m. (TypeShow a, MonadIO m) => m () ppShowType :: forall a. TypeShow a => String ppTypeDoc :: forall a. TypeShow a => Doc class ListElemsShow a showListElems :: ListElemsShow a => String instance forall k (a :: [k]). (Type.Show.ListElemsShow a, Data.Typeable.Internal.Typeable a) => Type.Show.TypeShow a instance Type.Show.ListElemsShow '[] instance forall k (a :: k). Type.Show.TypeShow a => Type.Show.ListElemsShow '[a] instance forall a1 (a2 :: a1) (as :: [a1]). (Type.Show.TypeShow a2, Type.Show.ListElemsShow as) => Type.Show.ListElemsShow (a2 : as) instance forall k (a :: k). Data.Typeable.Internal.Typeable a => Type.Show.TypeShow a instance GHC.TypeNats.KnownNat n => Type.Show.TypeShow n instance forall k1 k2 (a :: k2) (b :: k1). (Type.Show.TypeShow a, Type.Show.TypeShow b, Data.Typeable.Internal.Typeable '(a, b)) => Type.Show.TypeShow '(a, b) module Type.Show_old class TypeShow a showType :: TypeShow a => Proxy a -> String showType :: (TypeShow a, Typeable a) => Proxy a -> String showType' :: forall t. TypeShow t => String printType :: TypeShow a => Proxy a -> IO () ppPrintType :: TypeShow a => Proxy a -> IO () ppShowType :: TypeShow a => Proxy a -> String ppTypeDoc :: TypeShow a => Proxy a -> Doc class ListElemsShow a showListElems :: ListElemsShow a => Proxy a -> String instance forall k (a :: [k]). Type.Show_old.ListElemsShow a => Type.Show_old.TypeShow a instance Type.Show_old.ListElemsShow '[] instance forall k (a :: k). Type.Show_old.TypeShow a => Type.Show_old.ListElemsShow '[a] instance forall a1 (a2 :: a1) (as :: [a1]). (Type.Show_old.TypeShow a2, Type.Show_old.ListElemsShow as) => Type.Show_old.ListElemsShow (a2 : as) instance GHC.TypeNats.KnownNat n => Type.Show_old.TypeShow n instance forall k1 k2 (a :: k2) (b :: k1). (Type.Show_old.TypeShow a, Type.Show_old.TypeShow b) => Type.Show_old.TypeShow '(a, b) module Type.Wrapped module Type.Operators -- | The $$ operator is just like $ one but with even lower -- precedence level. Unlike value-level $, the type-level one has -- precedence level of `infixr 1` in order to be used in function -- arguments, like `edge :: Node $ Source a -> Node $ Target a -> -- a`. The $$ operator has higher precedence than `->`, so the -- above expression would not be valid when using it. type f $$ a = f a type f $ a = f a type a & f = f a module Type.Set data Set (a :: [k]) module Type.List data Lst (l :: [k]) data Recursive a type Zip a b = Zip2 a b module Type.Zip