packages feed

type-combinators 0.2.1.0 → 0.2.2.0

raw patch · 11 files changed

+120/−37 lines, 11 filesPVP: major bump suggested

API removals or changes: PVP suggests a major version bump

API changes (from Hackage documentation)

- Data.Type.Boolean: class BoolEq (f :: k -> *)
- Data.Type.Boolean: instance Data.Type.Boolean.BoolEq Data.Type.Boolean.Boolean
- Data.Type.Conjunction: instance forall (k :: BOX) (f :: k -> *) (g :: k -> *). Type.Class.Witness.DecEquality f => Type.Class.Witness.DecEquality (f Data.Type.Conjunction.:&: g)
- Data.Type.Nat.Inequality: instance (lt ~ (x Data.Type.Nat.Inequality.< y), eq ~ (x Data.Type.Equality.== y), gt ~ (x Data.Type.Nat.Inequality.> y)) => Type.Class.Witness.Witness Type.Family.Constraint.ØC (x ~ y, Type.Class.Known.Known Data.Type.Nat.Nat x, lt ~ 'GHC.Types.False, eq ~ 'GHC.Types.True, gt ~ 'GHC.Types.False) (Data.Type.Nat.Inequality.NatEQ x y)
- Data.Type.Nat.Inequality: instance (lt ~ (x Data.Type.Nat.Inequality.< y), eq ~ (x Data.Type.Equality.== y), gt ~ (x Data.Type.Nat.Inequality.> y), x' ~ Type.Family.Nat.Pred x) => Type.Class.Witness.Witness Type.Family.Constraint.ØC (x ~ 'Type.Family.Nat.S x', Type.Class.Known.Known Data.Type.Nat.Nat y, lt ~ 'GHC.Types.False, eq ~ 'GHC.Types.False, gt ~ 'GHC.Types.True) (Data.Type.Nat.Inequality.NatGT x y)
- Data.Type.Nat.Inequality: instance (lt ~ (x Data.Type.Nat.Inequality.< y), eq ~ (x Data.Type.Equality.== y), gt ~ (x Data.Type.Nat.Inequality.> y), y' ~ Type.Family.Nat.Pred y) => Type.Class.Witness.Witness Type.Family.Constraint.ØC (y ~ 'Type.Family.Nat.S y', Type.Class.Known.Known Data.Type.Nat.Nat x, lt ~ 'GHC.Types.True, eq ~ 'GHC.Types.False, gt ~ 'GHC.Types.False) (Data.Type.Nat.Inequality.NatLT x y)
+ Data.Type.Boolean: class BoolEquality (f :: k -> *) where type family BoolEqC f (a :: k) (b :: k) :: Constraint BoolEqC f a b = ØC
+ Data.Type.Boolean: instance Data.Type.Boolean.BoolEquality Data.Type.Boolean.Boolean
+ Data.Type.Nat: instance Data.Type.Boolean.BoolEquality Data.Type.Nat.Nat
+ Data.Type.Nat.Inequality: instance (lt ~ (x Type.Family.Nat.< y), eq ~ (x Data.Type.Equality.== y), gt ~ (x Type.Family.Nat.> y)) => Type.Class.Witness.Witness Type.Family.Constraint.ØC (x ~ y, Type.Class.Known.Known Data.Type.Nat.Nat x, lt ~ 'GHC.Types.False, eq ~ 'GHC.Types.True, gt ~ 'GHC.Types.False) (Data.Type.Nat.Inequality.NatEQ x y)
+ Data.Type.Nat.Inequality: instance (lt ~ (x Type.Family.Nat.< y), eq ~ (x Data.Type.Equality.== y), gt ~ (x Type.Family.Nat.> y), x' ~ Type.Family.Nat.Pred x) => Type.Class.Witness.Witness Type.Family.Constraint.ØC (x ~ 'Type.Family.Nat.S x', Type.Class.Known.Known Data.Type.Nat.Nat y, lt ~ 'GHC.Types.False, eq ~ 'GHC.Types.False, gt ~ 'GHC.Types.True) (Data.Type.Nat.Inequality.NatGT x y)
+ Data.Type.Nat.Inequality: instance (lt ~ (x Type.Family.Nat.< y), eq ~ (x Data.Type.Equality.== y), gt ~ (x Type.Family.Nat.> y), y' ~ Type.Family.Nat.Pred y) => Type.Class.Witness.Witness Type.Family.Constraint.ØC (y ~ 'Type.Family.Nat.S y', Type.Class.Known.Known Data.Type.Nat.Nat x, lt ~ 'GHC.Types.True, eq ~ 'GHC.Types.False, gt ~ 'GHC.Types.False) (Data.Type.Nat.Inequality.NatLT x y)
+ Data.Type.Quantifier: (>>=-) :: Monad m => m (Some f) -> (forall a. f a -> m r) -> m r
+ Data.Type.Quantifier: (>>=--) :: Monad m => m (Some2 f) -> (forall a b. f a b -> m r) -> m r
+ Data.Type.Quantifier: (>>=---) :: Monad m => m (Some3 f) -> (forall a b c. f a b c -> m r) -> m r
+ Data.Type.Quantifier: (>>=~) :: Monad m => m (SomeC c f) -> (forall a. c a => f a -> m r) -> m r
+ Data.Type.Quantifier: EveryC :: (forall a. c a => f a) -> EveryC c f
+ Data.Type.Quantifier: [instEveryC] :: EveryC c f -> forall a. c a => f a
+ Data.Type.Quantifier: data EveryC (c :: k -> Constraint) (f :: k -> *) :: *
+ Data.Type.Quantifier: msome :: Monad m => f a -> m (Some f)
+ Data.Type.Quantifier: msome2 :: Monad m => f a b -> m (Some2 f)
+ Data.Type.Quantifier: msome3 :: Monad m => f a b c -> m (Some3 f)
+ Data.Type.Quantifier: msomeC :: (Monad m, c a) => f a -> m (SomeC c f)
+ Data.Type.Sym: instance Data.Type.Boolean.BoolEquality Data.Type.Sym.Sym
+ Type.Class.Witness: exFalso :: Wit Fail -> a
+ Type.Class.Witness: toEquality :: (a ~ b) :- (c ~ d) -> a :~: b -> c :~: d
+ Type.Class.Witness: transC :: (b :- c) -> (a :- b) -> a :- c
+ Type.Family.Nat: type (>=) x y = (x == y) || (x > y)
- Data.Type.Boolean: (.==) :: BoolEq f => f a -> f b -> Boolean (a == b)
+ Data.Type.Boolean: (.==) :: (BoolEquality f, BoolEqC f a b) => f a -> f b -> Boolean (a == b)

Files

src/Data/Type/Boolean.hs view
@@ -30,6 +30,7 @@  import Data.Type.Quantifier (Some(..)) import Type.Family.Bool+import Type.Family.Constraint import Type.Class.Known import Type.Class.Higher @@ -83,11 +84,13 @@ (<==>) = (.==) infixr 1 <==> -class BoolEq (f :: k -> *) where-  (.==) :: f a -> f b -> Boolean (a == b)+class BoolEquality (f :: k -> *) where+  type BoolEqC f (a :: k) (b :: k) :: Constraint+  type BoolEqC f a b = ØC+  (.==) :: BoolEqC f a b => f a -> f b -> Boolean (a == b) infix 4 .== -instance BoolEq Boolean where+instance BoolEquality Boolean where   (.==) = \case     False_ -> \case       False_ -> True_
src/Data/Type/Conjunction.hs view
@@ -36,6 +36,7 @@ import Type.Class.Known import Type.Class.Witness import Type.Family.Tuple+import Data.Type.Boolean  -- (:&:) {{{ @@ -79,9 +80,6 @@ curryFan :: ((f :&: g) a -> r) -> f a -> g a -> r curryFan f a b = f (a :&: b) -instance DecEquality f => DecEquality (f :&: g) where-  decideEquality (a :&: _) (c :&: _) = decideEquality a c- instance (Known f a, Known g a) => Known (f :&: g) a where   known = known :&: known @@ -158,6 +156,11 @@  _snd :: (a#b) :~: (c#d) -> b :~: d _snd Refl = Refl++{-+instance (BoolEquality f, BoolEquality g) => BoolEquality (f :*: g) where+  (a :*: b) .== (c :*: d) = a .== c .&& b .== d+-}  instance (DecEquality f, DecEquality g) => DecEquality (f :*: g) where   decideEquality (a :*: b) (c :*: d) = case decideEquality a c of
src/Data/Type/Disjunction.hs view
@@ -167,6 +167,18 @@     , (a,s2)    <- readsPrec1 11 s1     ] +{-+instance (DecEquality f, DecEquality g) => DecEquality (f :+: g) where+  decideEquality = \case+    L' a -> \case+      L' b -> decCase (decideEquality a b) (\Refl -> Proven Refl) (\contra -> Refuted $ contra . toEquality fromLeftCong)+      R' _ -> Refuted $+    R' a -> \case+      L' b -> Refuted undefined+      R' b -> undefined+-}++ (>+<) :: (forall a. (e ~ Left a) => f a -> r) -> (forall b. (e ~ Right b) => g b -> r) -> (f :+: g) e -> r f >+< g = \case   L' a -> f a
src/Data/Type/Nat.hs view
@@ -28,6 +28,7 @@  module Data.Type.Nat where +import Data.Type.Boolean import Data.Type.Equality import Data.Type.Quantifier import Type.Class.Higher@@ -84,6 +85,15 @@     S_ x -> \case       Z_   -> Nothing       S_ y -> testEquality x y //? qed++instance BoolEquality Nat where+  (.==) = \case+    Z_ -> \case+      Z_   -> True_+      S_ _ -> False_+    S_ x -> \case+      Z_   -> False_+      S_ y -> x .== y  pred' :: Nat (S x) -> Nat x pred' (S_ x) = x
src/Data/Type/Nat/Inequality.hs view
@@ -21,20 +21,6 @@ import Type.Family.Constraint import Type.Family.Nat -type family (x :: N) < (y :: N) :: Bool where-  Z   < Z   = False-  Z   < S y = True-  S x < Z   = False-  S x < S y = x < y-infix 4 <--type family (x :: N) > (y :: N) :: Bool where-  Z   > Z   = False-  Z   > S y = False-  S x > Z   = True-  S x > S y = x > y-infix 4 >- data NatLT :: N -> N -> * where   LTZ :: NatLT Z (S y)   LTS :: !(NatLT x y)
src/Data/Type/Quantifier.hs view
@@ -69,6 +69,15 @@ onSome :: (forall a. f a -> g x) -> Some f -> Some g onSome f (Some a) = Some (f a) +msome :: Monad m => f a -> m (Some f)+msome = return . Some++(>>=-) :: Monad m => m (Some f) -> (forall a. f a -> m r) -> m r+m >>=- f = do+  s <- m+  s >>- f+infixl 1 >>=-+ -- }}}  -- Some2 {{{@@ -93,6 +102,15 @@ onSome2 :: (forall a b. f a b -> g x y) -> Some2 f -> Some2 g onSome2 f (Some2 a) = Some2 (f a) +msome2 :: Monad m => f a b -> m (Some2 f)+msome2 = return . Some2++(>>=--) :: Monad m => m (Some2 f) -> (forall a b. f a b -> m r) -> m r+m >>=-- f = do+  s <- m+  s >>-- f+infixl 1 >>=--+ -- }}}  -- Some3 {{{@@ -117,6 +135,15 @@ onSome3 :: (forall a b c. f a b c -> g x y z) -> Some3 f -> Some3 g onSome3 f (Some3 a) = Some3 (f a) +msome3 :: Monad m => f a b c -> m (Some3 f)+msome3 = return . Some3++(>>=---) :: Monad m => m (Some3 f) -> (forall a b c. f a b c -> m r) -> m r+m >>=--- f = do+  s <- m+  s >>--- f+infixl 1 >>=---+ -- }}}  -- SomeC {{{@@ -131,6 +158,15 @@ (>>~) = someC infixl 1 >>~ +msomeC :: (Monad m, c a) => f a -> m (SomeC c f)+msomeC = return . SomeC++(>>=~) :: Monad m => m (SomeC c f) -> (forall a. c a => f a -> m r) -> m r+m >>=~ f = do+  s <- m+  s >>~ f+infixl 1 >>=~+ -- }}}  -- EveryN {{{@@ -143,6 +179,10 @@  data Every3 (f :: k -> l -> m -> *) :: * where   Every3 :: { instEvery3 :: forall a b c. f a b c } -> Every3 f++data EveryC (c :: k -> Constraint) (f :: k -> *) :: * where+  EveryC :: { instEveryC :: forall a. c a => f a }+         -> EveryC c f  -- }}} 
src/Data/Type/Sym.hs view
@@ -29,6 +29,7 @@  module Data.Type.Sym where +import Data.Type.Boolean import Type.Class.Higher import Type.Class.Known import Type.Class.Witness@@ -53,6 +54,10 @@  instance TestEquality Sym where   testEquality Sym Sym = sameSymbol Proxy Proxy++instance BoolEquality Sym where+  type BoolEqC Sym a b = Known Boolean (a == b)+  Sym .== Sym = known  instance KnownSymbol x => Known Sym x where   type KnownC Sym x = KnownSymbol x
src/Type/Class/Witness.hs view
@@ -88,6 +88,9 @@   id              = Sub Wit   Sub bc . Sub ab = Sub $ bc \\ ab +transC :: (b :- c) -> (a :- b) -> a :- c+transC = (.)+ -- }}}  -- Witness {{{@@ -176,6 +179,9 @@  -- Initial/Terminal {{{ +toEquality :: (a ~ b) :- (c ~ d) -> a :~: b -> c :~: d+toEquality p = \Refl -> Refl \\ p+ commute :: (a ~ b) :- (b ~ a) commute = Sub Wit @@ -192,6 +198,8 @@ bottom :: Fail :- c bottom = falso ++ instance Witness ØC c (Wit c) where   r \\ Wit = r @@ -239,6 +247,14 @@  impossible :: a -> Void impossible = unsafeCoerce++exFalso :: Wit Fail -> a+exFalso p = castWith q ()+  where+  q :: () :~: a+  q = toEquality (contraC r) Refl+  r :: (b ~ b) :- Fail+  r = Sub p  (=?=) :: TestEquality f => f a -> f b -> Maybe (a :~: b) (=?=) = testEquality
src/Type/Family/Bool.hs view
@@ -27,29 +27,16 @@  module Type.Family.Bool   ( module Type.Family.Bool-  , type (==)+  , module Exports   ) where  import Type.Family.Constraint-import Type.Class.Witness (type (==))+import Type.Class.Witness as Exports (type (==))+import Data.Type.Bool as Exports (type Not, type (||), type (&&))  type family BoolC (b :: Bool) :: Constraint where   BoolC True  = ØC   BoolC False = Fail--type family (a :: Bool) || (b :: Bool) :: Bool where-  True  || b = True-  False || b = b-infixr 2 ||--type family (a :: Bool) && (b :: Bool) :: Bool where-  True  && b = b-  False && b = False-infixr 3 &&--type family Not (a :: Bool) :: Bool where-  Not True  = False-  Not False = True  type a ==> b = Not a || b infixr 1 ==>
src/Type/Family/Nat.hs view
@@ -30,6 +30,7 @@ module Type.Family.Nat where  import Data.Type.Equality+import Type.Family.Bool import Type.Family.Constraint import Type.Family.List import Type.Class.Witness@@ -112,6 +113,26 @@  ixCong :: (x ~ y,as ~ bs) :- (Ix x as ~ Ix y bs) ixCong = Sub Wit++type family (x :: N) < (y :: N) :: Bool where+  Z   < Z   = False+  Z   < S y = True+  S x < Z   = False+  S x < S y = x < y+infix 4 <++type x <= y = (x == y) || (x < y)+infix 4 <=++type family (x :: N) > (y :: N) :: Bool where+  Z   > Z   = False+  Z   > S y = False+  S x > Z   = True+  S x > S y = x > y+infix 4 >++type x >= y = (x == y) || (x > y)+infix 4 >=  -- | Convenient aliases for low-value Peano numbers. type N0  = Z
type-combinators.cabal view
@@ -1,5 +1,5 @@ name: type-combinators-version: 0.2.1.0+version: 0.2.2.0 category: Data synopsis: A collection of data types for type-level programming cabal-version: >=1.10