harg-0.3.0.0: Haskell program configuration using higher kinded data

Safe HaskellNone
LanguageHaskell2010

Options.Harg.Het.HList

Synopsis

Documentation

data AssocListF (ts :: [Symbol]) (xs :: [(Type -> Type) -> Type]) (f :: Type -> Type) where Source #

A heterogeneous list that holds higher-kinded types and the associated type constructor, along with a type level list of Symbols that act as tags for each type.

Constructors

ANil :: AssocListF '[] '[] f 
ACons :: x f -> AssocListF ts xs f -> AssocListF (t ': ts) (x ': xs) f 

type family l :+ r = (res :: (Type -> Type) -> Type) where ... infixr 4 Source #

Helper type-level function to construct an AssocList which is not yet applied to the type constructor that needs to be fully applied.

  type Config
    =  "run" :-> RunConfig
    :+ "test" :-> TestConfig

Config above has type (Type -> Type) -> Type, and requires a type like Opt to be fully applied.

Equations

(tl :-> vl) :+ (tr :-> vr) = AssocListF '[tl, tr] '[vl, vr] 
(tl :-> vl) :+ (AssocListF ts vs) = AssocListF (tl ': ts) (vl ': vs) 
l :+ r = TypeError (((Text "Invalid type for tagged options. Construct like this:" :$$: Text "type MyConfig") :$$: Text " = \"one\" :-> ConfigForOne") :$$: Text " :+ \"two\" :-> ConfigForTwo") 

pattern (:+) :: x f -> AssocListF ts xs f -> AssocListF (t ': ts) (x ': xs) f infixr 4 Source #

data (t :: Symbol) :-> (v :: (Type -> Type) -> Type) :: (Type -> Type) -> Type infixr 5 Source #

class MapAssocList (as :: [(Type -> Type) -> Type]) where Source #

Methods

mapAssocList :: (forall a. FunctorB a => a f -> a g) -> AssocListF ts as f -> AssocListF ts as g Source #

Apply a function to all higher-kinded types in an AssocList.

Instances
MapAssocList ([] :: [(Type -> Type) -> Type]) Source # 
Instance details

Defined in Options.Harg.Het.HList

Methods

mapAssocList :: (forall (a :: (Type -> Type) -> Type). FunctorB a => a f -> a g) -> AssocListF ts [] f -> AssocListF ts [] g Source #

(MapAssocList as, FunctorB a) => MapAssocList (a ': as) Source # 
Instance details

Defined in Options.Harg.Het.HList

Methods

mapAssocList :: (forall (a0 :: (Type -> Type) -> Type). FunctorB a0 => a0 f -> a0 g) -> AssocListF ts (a ': as) f -> AssocListF ts (a ': as) g Source #