-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | Type set -- -- Please see the README on GitHub at -- https://github.com/YoshikuniJujo/type-set#readme @package type-set @version 0.1.0.0 module Data.Type.Set data Set a Nil :: Set a class Numbered a numbered :: TypeQ -> DecsQ type Singleton t = t :~ 'Nil type family Insert (t :: Type) (ts :: Set Type) :: Set Type type family Merge (ts :: Set Type) (ts' :: Set Type) :: Set Type type t :- ts = t `Insert` ts infixr 5 :- type ts :+: ts' = ts `Merge` ts' infixr 5 :+: module Data.OneOrMore data OneOrMore :: Set Type -> Type class Projectable (as :: Set Type) a class Insertable a (as :: Set Type) (as' :: Set Type) class Expandable (as :: Set Type) (as' :: Set Type) class Collapsable (as :: Set Type) (as' :: Set Type) class Mergeable (as :: Set Type) (as' :: Set Type) (mrg :: Set Type) class Selectable a select :: Selectable a => a -> a -> a pattern Singleton :: a -> OneOrMore (Singleton a) unSingleton :: OneOrMore (Singleton a) -> a project :: Projectable as a => OneOrMore as -> Maybe a (>-) :: Insertable a as (a :- as) => a -> OneOrMore as -> OneOrMore (a :- as) infixr 5 >- expand :: Expandable as as' => OneOrMore as -> OneOrMore as' collapse :: Collapsable as as' => OneOrMore as -> Maybe (OneOrMore as') merge :: Mergeable as as' (as :+: as') => OneOrMore as -> OneOrMore as' -> OneOrMore (as :+: as') merge' :: (Mergeable as as' (as :+: as'), Expandable as (as :+: as'), Expandable as' (as :+: as')) => Maybe (OneOrMore as) -> Maybe (OneOrMore as') -> Maybe (OneOrMore (as :+: as')) module Data.OneOfThem data OneOfThem :: Set Type -> Type pattern Singleton :: a -> OneOfThem (Singleton a) unSingleton :: OneOfThem (Singleton a) -> a class Projectable (as :: Set Type) a project :: Projectable as a => OneOfThem as -> Maybe a class Expandable (as :: Set Type) (as' :: Set Type) (>-) :: (Expandable (Singleton a) (a :- as), Expandable as (a :- as)) => a -> [OneOfThem as] -> [OneOfThem (a :- as)] infixr 5 >- expand :: Expandable as as' => OneOfThem as -> OneOfThem as' data OneOfThemFun (as :: Set Type) b apply :: Applyable as => OneOfThemFun as b -> OneOfThem as -> b pattern SingletonFun :: (a -> b) -> OneOfThemFun (Singleton a) b class InsertableFun a (as :: Set Type) (as' :: Set Type) (>--) :: InsertableFun a as (a :- as) => (a -> b) -> OneOfThemFun as b -> OneOfThemFun (a :- as) b infixr 5 >-- class MergeableFun as as' mrg mergeFun :: MergeableFun as as' (as :+: as') => OneOfThemFun as b -> OneOfThemFun as' b -> OneOfThemFun (as :+: as') b instance Data.OneOfThem.MergeableFun 'Data.Type.Set.Internal.Nil 'Data.Type.Set.Internal.Nil 'Data.Type.Set.Internal.Nil instance Data.OneOfThem.MergeableFun as as' mrg => Data.OneOfThem.MergeableFun as (a' 'Data.Type.Set.Internal.:~ as') (a' 'Data.Type.Set.Internal.:~ mrg) instance Data.OneOfThem.MergeableFun as as' mrg => Data.OneOfThem.MergeableFun (a 'Data.Type.Set.Internal.:~ as) as' (a 'Data.Type.Set.Internal.:~ mrg) instance Data.OneOfThem.Applyable (Data.Type.Set.Internal.Singleton a) instance Data.OneOfThem.Applyable as => Data.OneOfThem.Applyable (a 'Data.Type.Set.Internal.:~ as) instance Data.OneOfThem.InsertableFun a as (a 'Data.Type.Set.Internal.:~ as) instance Data.OneOfThem.InsertableFun a as as' => Data.OneOfThem.InsertableFun a (a' 'Data.Type.Set.Internal.:~ as) (a' 'Data.Type.Set.Internal.:~ as') instance Data.OneOfThem.Collapsable as 'Data.Type.Set.Internal.Nil instance Data.OneOfThem.Collapsable as as' => Data.OneOfThem.Collapsable (a 'Data.Type.Set.Internal.:~ as) (a 'Data.Type.Set.Internal.:~ as') instance Data.OneOfThem.Collapsable as (a' 'Data.Type.Set.Internal.:~ as') => Data.OneOfThem.Collapsable (a 'Data.Type.Set.Internal.:~ as) (a' 'Data.Type.Set.Internal.:~ as') instance Data.OneOfThem.Projectable 'Data.Type.Set.Internal.Nil a instance Data.OneOfThem.Projectable (a 'Data.Type.Set.Internal.:~ as) a instance Data.OneOfThem.Projectable as a => Data.OneOfThem.Projectable (a' 'Data.Type.Set.Internal.:~ as) a instance Data.OneOfThem.Expandable 'Data.Type.Set.Internal.Nil as instance Data.OneOfThem.Expandable as as' => Data.OneOfThem.Expandable (a 'Data.Type.Set.Internal.:~ as) (a 'Data.Type.Set.Internal.:~ as') instance Data.OneOfThem.Expandable (a 'Data.Type.Set.Internal.:~ as) as' => Data.OneOfThem.Expandable (a 'Data.Type.Set.Internal.:~ as) (a' 'Data.Type.Set.Internal.:~ as') instance GHC.Show.Show (Data.OneOfThem.OneOfThem 'Data.Type.Set.Internal.Nil) instance (GHC.Show.Show a, GHC.Show.Show (Data.OneOfThem.OneOfThem as)) => GHC.Show.Show (Data.OneOfThem.OneOfThem (a 'Data.Type.Set.Internal.:~ as)) module Data.Type.SetApp data SetApp a type f :$: ts = 'SetApp f (f `Map` ts) infixl 4 :$: module Data.OneOrMoreApp data OneOrMoreApp :: SetApp Type -> Type type Expandable f as as' = Expandable (f `Map` as) (f `Map` as') type Collapsable f as as' = Collapsable (f `Map` as) (f `Map` as') type Mergeable f as as' mrg = Mergeable (f `Map` as) (f `Map` as') (f `Map` mrg) pattern Singleton :: a -> OneOrMoreApp ('SetApp f (Singleton a)) unSingleton :: OneOrMoreApp ('SetApp f (Singleton a)) -> a project :: Projectable as a => OneOrMoreApp ('SetApp f as) -> Maybe a (>-) :: Insertable a as as' => a -> OneOrMoreApp ('SetApp f as) -> OneOrMoreApp ('SetApp f as') expand :: Expandable as as' => OneOrMoreApp ('SetApp f as) -> OneOrMoreApp ('SetApp f as') collapse :: Collapsable as as' => OneOrMoreApp ('SetApp f as) -> Maybe (OneOrMoreApp ('SetApp f as')) merge :: Mergeable as as' mrg => OneOrMoreApp ('SetApp f as) -> OneOrMoreApp ('SetApp f as') -> OneOrMoreApp ('SetApp f mrg) merge' :: (Mergeable as as' mrg, Expandable as mrg, Expandable as' mrg) => Maybe (OneOrMoreApp ('SetApp f as)) -> Maybe (OneOrMoreApp ('SetApp f as')) -> Maybe (OneOrMoreApp ('SetApp f mrg))