expressions 0.1.4 → 0.1.5
raw patch · 5 files changed
+43/−22 lines, 5 filesdep −QuickCheckdep −tastydep −tasty-quickcheckdep ~basedep ~containersdep ~singletonssetup-changedPVP: major bump suggested
API removals or changes: PVP suggests a major version bump
Dependencies removed: QuickCheck, tasty, tasty-quickcheck
Dependency ranges changed: base, containers, singletons
API changes (from Hackage documentation)
- Data.Expression: instance forall k (f :: (k -> GHC.Types.*) -> k -> GHC.Types.*). (Data.Expression.Utils.Indexed.Functor.IFunctor f, Data.Expression.Utils.Indexed.Foldable.IFoldable f) => Data.Expression.MaybeQuantified f
- Data.Expression: instance forall k k1 (f :: k1 -> k -> *) (h :: (Data.Expression.Sort.Sort -> *) -> Data.Expression.Sort.Sort -> *) (g :: k1 -> k -> *). (Data.Expression.Bind f h, Data.Expression.Bind g h) => Data.Expression.Bind (f Data.Expression.Utils.Indexed.Sum.:+: g) h
- Data.Expression: instance forall k k1 (f :: k1 -> k -> *) (h :: (Data.Expression.Sort.Sort -> *) -> Data.Expression.Sort.Sort -> *) (g :: k1 -> k -> *). (Data.Expression.Forall f h, Data.Expression.Forall g h) => Data.Expression.Forall (f Data.Expression.Utils.Indexed.Sum.:+: g) h
- Data.Expression.Parser: instance forall k k1 (f :: k1 -> k -> *) (h :: (Data.Expression.Sort.Sort -> GHC.Types.*) -> Data.Expression.Sort.Sort -> GHC.Types.*) (g :: k1 -> k -> *). (Data.Expression.Parser.Parseable f h, Data.Expression.Parser.Parseable g h) => Data.Expression.Parser.Parseable (f Data.Expression.Utils.Indexed.Sum.:+: g) h
- Data.Expression.Sort: instance (Data.Singletons.SingI n0, Data.Singletons.SingI n1) => Data.Singletons.SingI ('Data.Expression.Sort.ArraySort n0 n1)
- Data.Expression.Utils.Indexed.Functor: instance forall i (f :: (i -> GHC.Types.*) -> i -> GHC.Types.*). Data.Expression.Utils.Indexed.Eq.IEq1 f => Data.Expression.Utils.Indexed.Eq.IEq (Data.Expression.Utils.Indexed.Functor.IFix f)
- Data.Expression.Utils.Indexed.Functor: instance forall k (f :: (k -> GHC.Types.*) -> k -> GHC.Types.*) (i :: k). (Data.Expression.Utils.Indexed.Functor.IFunctor f, Data.Expression.Utils.Indexed.Show.IShow f) => GHC.Show.Show (Data.Expression.Utils.Indexed.Functor.IFix f i)
- Data.Expression.Utils.Indexed.Functor: instance forall k (f :: (k -> GHC.Types.*) -> k -> GHC.Types.*) (i :: k). Data.Expression.Utils.Indexed.Eq.IEq1 f => GHC.Classes.Eq (Data.Expression.Utils.Indexed.Functor.IFix f i)
- Data.Expression.Utils.Indexed.Sum: class (IFunctor f, IFunctor g) => (:<:) f g
- Data.Expression.Utils.Indexed.Sum: data (:+:) f g a i
- Data.Expression.Utils.Indexed.Sum: instance forall i (f :: (i -> GHC.Types.*) -> i -> GHC.Types.*) (g :: (i -> GHC.Types.*) -> i -> GHC.Types.*). (Data.Expression.Utils.Indexed.Eq.IEq1 f, Data.Expression.Utils.Indexed.Eq.IEq1 g) => Data.Expression.Utils.Indexed.Eq.IEq1 (f Data.Expression.Utils.Indexed.Sum.:+: g)
- Data.Expression.Utils.Indexed.Sum: instance forall i (f :: (i -> GHC.Types.*) -> i -> GHC.Types.*) (g :: (i -> GHC.Types.*) -> i -> GHC.Types.*). (Data.Expression.Utils.Indexed.Foldable.IFoldable f, Data.Expression.Utils.Indexed.Foldable.IFoldable g) => Data.Expression.Utils.Indexed.Foldable.IFoldable (f Data.Expression.Utils.Indexed.Sum.:+: g)
- Data.Expression.Utils.Indexed.Sum: instance forall i (f :: (i -> GHC.Types.*) -> i -> GHC.Types.*) (g :: (i -> GHC.Types.*) -> i -> GHC.Types.*). (Data.Expression.Utils.Indexed.Functor.IFunctor f, Data.Expression.Utils.Indexed.Functor.IFunctor g) => Data.Expression.Utils.Indexed.Functor.IFunctor (f Data.Expression.Utils.Indexed.Sum.:+: g)
- Data.Expression.Utils.Indexed.Sum: instance forall i (f :: (i -> GHC.Types.*) -> i -> GHC.Types.*) (g :: (i -> GHC.Types.*) -> i -> GHC.Types.*). (Data.Expression.Utils.Indexed.Traversable.ITraversable f, Data.Expression.Utils.Indexed.Traversable.ITraversable g) => Data.Expression.Utils.Indexed.Traversable.ITraversable (f Data.Expression.Utils.Indexed.Sum.:+: g)
- Data.Expression.Utils.Indexed.Sum: instance forall i (f :: (i -> GHC.Types.*) -> i -> GHC.Types.*). Data.Expression.Utils.Indexed.Functor.IFunctor f => f Data.Expression.Utils.Indexed.Sum.:<: f
- Data.Expression.Utils.Indexed.Sum: instance forall k (f :: (k -> GHC.Types.*) -> k -> GHC.Types.*) (g :: (k -> GHC.Types.*) -> k -> GHC.Types.*) (h :: (k -> GHC.Types.*) -> k -> GHC.Types.*). (Data.Expression.Utils.Indexed.Functor.IFunctor f, Data.Expression.Utils.Indexed.Functor.IFunctor g, Data.Expression.Utils.Indexed.Functor.IFunctor h, f Data.Expression.Utils.Indexed.Sum.:<: g) => f Data.Expression.Utils.Indexed.Sum.:<: (h Data.Expression.Utils.Indexed.Sum.:+: g)
- Data.Expression.Utils.Indexed.Sum: instance forall k (f :: (k -> GHC.Types.*) -> k -> GHC.Types.*) (g :: (k -> GHC.Types.*) -> k -> GHC.Types.*). (Data.Expression.Utils.Indexed.Functor.IFunctor f, Data.Expression.Utils.Indexed.Functor.IFunctor g) => f Data.Expression.Utils.Indexed.Sum.:<: (f Data.Expression.Utils.Indexed.Sum.:+: g)
- Data.Expression.Utils.Indexed.Sum: instance forall k k1 (f :: (k1 -> *) -> k -> *) (g :: (k1 -> *) -> k -> *). (Data.Expression.Utils.Indexed.Show.IShow f, Data.Expression.Utils.Indexed.Show.IShow g) => Data.Expression.Utils.Indexed.Show.IShow (f Data.Expression.Utils.Indexed.Sum.:+: g)
+ Data.Expression: instance forall k (f :: (k -> *) -> k -> *). (Data.Expression.Utils.Indexed.Functor.IFunctor f, Data.Expression.Utils.Indexed.Foldable.IFoldable f) => Data.Expression.MaybeQuantified f
+ Data.Expression: instance forall k1 k2 (f :: k1 -> k2 -> *) (h :: (Data.Expression.Sort.Sort -> *) -> Data.Expression.Sort.Sort -> *) (g :: k1 -> k2 -> *). (Data.Expression.Bind f h, Data.Expression.Bind g h) => Data.Expression.Bind (f Data.Expression.Utils.Indexed.Sum.:+: g) h
+ Data.Expression: instance forall k1 k2 (f :: k1 -> k2 -> *) (h :: (Data.Expression.Sort.Sort -> *) -> Data.Expression.Sort.Sort -> *) (g :: k1 -> k2 -> *). (Data.Expression.Forall f h, Data.Expression.Forall g h) => Data.Expression.Forall (f Data.Expression.Utils.Indexed.Sum.:+: g) h
+ Data.Expression.Parser: instance forall k1 k2 (f :: k1 -> k2 -> *) (h :: (Data.Expression.Sort.Sort -> *) -> Data.Expression.Sort.Sort -> *) (g :: k1 -> k2 -> *). (Data.Expression.Parser.Parseable f h, Data.Expression.Parser.Parseable g h) => Data.Expression.Parser.Parseable (f Data.Expression.Utils.Indexed.Sum.:+: g) h
+ Data.Expression.Sort: instance (Data.Singletons.SingI n1, Data.Singletons.SingI n2) => Data.Singletons.SingI ('Data.Expression.Sort.ArraySort n1 n2)
+ Data.Expression.Utils.Indexed.Functor: instance forall i (f :: (i -> *) -> i -> *). Data.Expression.Utils.Indexed.Eq.IEq1 f => Data.Expression.Utils.Indexed.Eq.IEq (Data.Expression.Utils.Indexed.Functor.IFix f)
+ Data.Expression.Utils.Indexed.Functor: instance forall k (f :: (k -> *) -> k -> *) (i :: k). (Data.Expression.Utils.Indexed.Functor.IFunctor f, Data.Expression.Utils.Indexed.Show.IShow f) => GHC.Show.Show (Data.Expression.Utils.Indexed.Functor.IFix f i)
+ Data.Expression.Utils.Indexed.Functor: instance forall k (f :: (k -> *) -> k -> *) (i :: k). Data.Expression.Utils.Indexed.Eq.IEq1 f => GHC.Classes.Eq (Data.Expression.Utils.Indexed.Functor.IFix f i)
+ Data.Expression.Utils.Indexed.Sum: class (IFunctor f, IFunctor g) => f :<: g
+ Data.Expression.Utils.Indexed.Sum: data f (:+:) g a i
+ Data.Expression.Utils.Indexed.Sum: instance forall i (f :: (i -> *) -> i -> *) (g :: (i -> *) -> i -> *). (Data.Expression.Utils.Indexed.Eq.IEq1 f, Data.Expression.Utils.Indexed.Eq.IEq1 g) => Data.Expression.Utils.Indexed.Eq.IEq1 (f Data.Expression.Utils.Indexed.Sum.:+: g)
+ Data.Expression.Utils.Indexed.Sum: instance forall i (f :: (i -> *) -> i -> *) (g :: (i -> *) -> i -> *). (Data.Expression.Utils.Indexed.Foldable.IFoldable f, Data.Expression.Utils.Indexed.Foldable.IFoldable g) => Data.Expression.Utils.Indexed.Foldable.IFoldable (f Data.Expression.Utils.Indexed.Sum.:+: g)
+ Data.Expression.Utils.Indexed.Sum: instance forall i (f :: (i -> *) -> i -> *) (g :: (i -> *) -> i -> *). (Data.Expression.Utils.Indexed.Functor.IFunctor f, Data.Expression.Utils.Indexed.Functor.IFunctor g) => Data.Expression.Utils.Indexed.Functor.IFunctor (f Data.Expression.Utils.Indexed.Sum.:+: g)
+ Data.Expression.Utils.Indexed.Sum: instance forall i (f :: (i -> *) -> i -> *) (g :: (i -> *) -> i -> *). (Data.Expression.Utils.Indexed.Traversable.ITraversable f, Data.Expression.Utils.Indexed.Traversable.ITraversable g) => Data.Expression.Utils.Indexed.Traversable.ITraversable (f Data.Expression.Utils.Indexed.Sum.:+: g)
+ Data.Expression.Utils.Indexed.Sum: instance forall i (f :: (i -> *) -> i -> *). Data.Expression.Utils.Indexed.Functor.IFunctor f => f Data.Expression.Utils.Indexed.Sum.:<: f
+ Data.Expression.Utils.Indexed.Sum: instance forall k (f :: (k -> *) -> k -> *) (g :: (k -> *) -> k -> *) (h :: (k -> *) -> k -> *). (Data.Expression.Utils.Indexed.Functor.IFunctor f, Data.Expression.Utils.Indexed.Functor.IFunctor g, Data.Expression.Utils.Indexed.Functor.IFunctor h, f Data.Expression.Utils.Indexed.Sum.:<: g) => f Data.Expression.Utils.Indexed.Sum.:<: (h Data.Expression.Utils.Indexed.Sum.:+: g)
+ Data.Expression.Utils.Indexed.Sum: instance forall k (f :: (k -> *) -> k -> *) (g :: (k -> *) -> k -> *). (Data.Expression.Utils.Indexed.Functor.IFunctor f, Data.Expression.Utils.Indexed.Functor.IFunctor g) => f Data.Expression.Utils.Indexed.Sum.:<: (f Data.Expression.Utils.Indexed.Sum.:+: g)
+ Data.Expression.Utils.Indexed.Sum: instance forall k1 k2 (f :: (k1 -> *) -> k2 -> *) (g :: (k1 -> *) -> k2 -> *). (Data.Expression.Utils.Indexed.Show.IShow f, Data.Expression.Utils.Indexed.Show.IShow g) => Data.Expression.Utils.Indexed.Show.IShow (f Data.Expression.Utils.Indexed.Sum.:+: g)
- Data.Expression: (.&.) :: ConjunctionF :<: f => IFix f BooleanSort -> IFix f BooleanSort -> IFix f BooleanSort
+ Data.Expression: (.&.) :: ConjunctionF :<: f => IFix f 'BooleanSort -> IFix f 'BooleanSort -> IFix f 'BooleanSort
- Data.Expression: (.->.) :: (DisjunctionF :<: f, NegationF :<: f) => IFix f BooleanSort -> IFix f BooleanSort -> IFix f BooleanSort
+ Data.Expression: (.->.) :: (DisjunctionF :<: f, NegationF :<: f) => IFix f 'BooleanSort -> IFix f 'BooleanSort -> IFix f 'BooleanSort
- Data.Expression: (./=.) :: forall f s. (NegationF :<: f, EqualityF :<: f, SingI s) => IFix f s -> IFix f s -> IFix f BooleanSort
+ Data.Expression: (./=.) :: forall f s. (NegationF :<: f, EqualityF :<: f, SingI s) => IFix f s -> IFix f s -> IFix f 'BooleanSort
- Data.Expression: (.<-.) :: (DisjunctionF :<: f, NegationF :<: f) => IFix f BooleanSort -> IFix f BooleanSort -> IFix f BooleanSort
+ Data.Expression: (.<-.) :: (DisjunctionF :<: f, NegationF :<: f) => IFix f 'BooleanSort -> IFix f 'BooleanSort -> IFix f 'BooleanSort
- Data.Expression: (.<->.) :: (ConjunctionF :<: f, DisjunctionF :<: f, NegationF :<: f) => IFix f BooleanSort -> IFix f BooleanSort -> IFix f BooleanSort
+ Data.Expression: (.<->.) :: (ConjunctionF :<: f, DisjunctionF :<: f, NegationF :<: f) => IFix f 'BooleanSort -> IFix f 'BooleanSort -> IFix f 'BooleanSort
- Data.Expression: (.|.) :: DisjunctionF :<: f => IFix f BooleanSort -> IFix f BooleanSort -> IFix f BooleanSort
+ Data.Expression: (.|.) :: DisjunctionF :<: f => IFix f 'BooleanSort -> IFix f 'BooleanSort -> IFix f 'BooleanSort
- Data.Expression: [And] :: [a BooleanSort] -> ConjunctionF a BooleanSort
+ Data.Expression: [And] :: [a 'BooleanSort] -> ConjunctionF a 'BooleanSort
- Data.Expression: [Exists] :: [Var v] -> a BooleanSort -> ExistentialF v a BooleanSort
+ Data.Expression: [Exists] :: [Var v] -> a 'BooleanSort -> ExistentialF v a 'BooleanSort
- Data.Expression: [Forall] :: [Var v] -> a BooleanSort -> UniversalF v a BooleanSort
+ Data.Expression: [Forall] :: [Var v] -> a 'BooleanSort -> UniversalF v a 'BooleanSort
- Data.Expression: [Not] :: a BooleanSort -> NegationF a BooleanSort
+ Data.Expression: [Not] :: a 'BooleanSort -> NegationF a 'BooleanSort
- Data.Expression: [Or] :: [a BooleanSort] -> DisjunctionF a BooleanSort
+ Data.Expression: [Or] :: [a 'BooleanSort] -> DisjunctionF a 'BooleanSort
- Data.Expression: and :: ConjunctionF :<: f => [IFix f BooleanSort] -> IFix f BooleanSort
+ Data.Expression: and :: ConjunctionF :<: f => [IFix f 'BooleanSort] -> IFix f 'BooleanSort
- Data.Expression: conjuncts :: ConjunctionF :<: f => IFix f BooleanSort -> [IFix f BooleanSort]
+ Data.Expression: conjuncts :: ConjunctionF :<: f => IFix f 'BooleanSort -> [IFix f 'BooleanSort]
- Data.Expression: disjuncts :: DisjunctionF :<: f => IFix f BooleanSort -> [IFix f BooleanSort]
+ Data.Expression: disjuncts :: DisjunctionF :<: f => IFix f 'BooleanSort -> [IFix f 'BooleanSort]
- Data.Expression: exists :: ExistentialF v :<: f => [Var v] -> IFix f BooleanSort -> IFix f BooleanSort
+ Data.Expression: exists :: ExistentialF v :<: f => [Var v] -> IFix f 'BooleanSort -> IFix f 'BooleanSort
- Data.Expression: false :: DisjunctionF :<: f => IFix f BooleanSort
+ Data.Expression: false :: DisjunctionF :<: f => IFix f 'BooleanSort
- Data.Expression: flatten :: forall f. Flatten f => IFix f BooleanSort -> IFix f BooleanSort
+ Data.Expression: flatten :: forall f. Flatten f => IFix f 'BooleanSort -> IFix f 'BooleanSort
- Data.Expression: forall :: UniversalF v :<: f => [Var v] -> IFix f BooleanSort -> IFix f BooleanSort
+ Data.Expression: forall :: UniversalF v :<: f => [Var v] -> IFix f 'BooleanSort -> IFix f 'BooleanSort
- Data.Expression: literals :: (ConjunctionF :<: f, DisjunctionF :<: f) => IFix f BooleanSort -> [IFix f BooleanSort]
+ Data.Expression: literals :: (ConjunctionF :<: f, DisjunctionF :<: f) => IFix f 'BooleanSort -> [IFix f 'BooleanSort]
- Data.Expression: nnf :: forall f. NNF f => IFix f BooleanSort -> IFix f BooleanSort
+ Data.Expression: nnf :: forall f. NNF f => IFix f 'BooleanSort -> IFix f 'BooleanSort
- Data.Expression: not :: NegationF :<: f => IFix f BooleanSort -> IFix f BooleanSort
+ Data.Expression: not :: NegationF :<: f => IFix f 'BooleanSort -> IFix f 'BooleanSort
- Data.Expression: or :: DisjunctionF :<: f => [IFix f BooleanSort] -> IFix f BooleanSort
+ Data.Expression: or :: DisjunctionF :<: f => [IFix f 'BooleanSort] -> IFix f 'BooleanSort
- Data.Expression: prenex :: forall f. Prenex f => IFix f BooleanSort -> IFix f BooleanSort
+ Data.Expression: prenex :: forall f. Prenex f => IFix f 'BooleanSort -> IFix f 'BooleanSort
- Data.Expression: true :: ConjunctionF :<: f => IFix f BooleanSort
+ Data.Expression: true :: ConjunctionF :<: f => IFix f 'BooleanSort
- Data.Expression: type ALiaF = ExistentialF BooleanSort :+: (ExistentialF IntegralSort :+: (UniversalF BooleanSort :+: (UniversalF IntegralSort :+: QFALiaF)))
+ Data.Expression: type ALiaF = ExistentialF 'BooleanSort :+: (ExistentialF 'IntegralSort :+: (UniversalF 'BooleanSort :+: (UniversalF 'IntegralSort :+: QFALiaF)))
- Data.Expression: type LiaF = ExistentialF BooleanSort :+: (ExistentialF IntegralSort :+: (UniversalF BooleanSort :+: (UniversalF IntegralSort :+: QFLiaF)))
+ Data.Expression: type LiaF = ExistentialF 'BooleanSort :+: (ExistentialF 'IntegralSort :+: (UniversalF 'BooleanSort :+: (UniversalF 'IntegralSort :+: QFLiaF)))
- Data.Expression: unstore :: forall f. Unstore f => IFix f BooleanSort -> IFix f BooleanSort
+ Data.Expression: unstore :: forall f. Unstore f => IFix f 'BooleanSort -> IFix f 'BooleanSort
- Data.Expression.Arithmetic: (.*.) :: forall f. ArithmeticF :<: f => IFix f IntegralSort -> IFix f IntegralSort -> IFix f IntegralSort
+ Data.Expression.Arithmetic: (.*.) :: forall f. ArithmeticF :<: f => IFix f 'IntegralSort -> IFix f 'IntegralSort -> IFix f 'IntegralSort
- Data.Expression.Arithmetic: (.+.) :: forall f. ArithmeticF :<: f => IFix f IntegralSort -> IFix f IntegralSort -> IFix f IntegralSort
+ Data.Expression.Arithmetic: (.+.) :: forall f. ArithmeticF :<: f => IFix f 'IntegralSort -> IFix f 'IntegralSort -> IFix f 'IntegralSort
- Data.Expression.Arithmetic: (.<.) :: forall f. ArithmeticF :<: f => IFix f IntegralSort -> IFix f IntegralSort -> IFix f BooleanSort
+ Data.Expression.Arithmetic: (.<.) :: forall f. ArithmeticF :<: f => IFix f 'IntegralSort -> IFix f 'IntegralSort -> IFix f 'BooleanSort
- Data.Expression.Arithmetic: (.<=.) :: forall f. ArithmeticF :<: f => IFix f IntegralSort -> IFix f IntegralSort -> IFix f BooleanSort
+ Data.Expression.Arithmetic: (.<=.) :: forall f. ArithmeticF :<: f => IFix f 'IntegralSort -> IFix f 'IntegralSort -> IFix f 'BooleanSort
- Data.Expression.Arithmetic: (.>.) :: forall f. ArithmeticF :<: f => IFix f IntegralSort -> IFix f IntegralSort -> IFix f BooleanSort
+ Data.Expression.Arithmetic: (.>.) :: forall f. ArithmeticF :<: f => IFix f 'IntegralSort -> IFix f 'IntegralSort -> IFix f 'BooleanSort
- Data.Expression.Arithmetic: (.>=.) :: forall f. ArithmeticF :<: f => IFix f IntegralSort -> IFix f IntegralSort -> IFix f BooleanSort
+ Data.Expression.Arithmetic: (.>=.) :: forall f. ArithmeticF :<: f => IFix f 'IntegralSort -> IFix f 'IntegralSort -> IFix f 'BooleanSort
- Data.Expression.Arithmetic: (.\.) :: ArithmeticF :<: f => Int -> IFix f IntegralSort -> IFix f BooleanSort
+ Data.Expression.Arithmetic: (.\.) :: ArithmeticF :<: f => Int -> IFix f 'IntegralSort -> IFix f 'BooleanSort
- Data.Expression.Arithmetic: [Add] :: [a IntegralSort] -> ArithmeticF a IntegralSort
+ Data.Expression.Arithmetic: [Add] :: [a 'IntegralSort] -> ArithmeticF a 'IntegralSort
- Data.Expression.Arithmetic: [Const] :: Int -> ArithmeticF a IntegralSort
+ Data.Expression.Arithmetic: [Const] :: Int -> ArithmeticF a 'IntegralSort
- Data.Expression.Arithmetic: [Divides] :: Int -> a IntegralSort -> ArithmeticF a BooleanSort
+ Data.Expression.Arithmetic: [Divides] :: Int -> a 'IntegralSort -> ArithmeticF a 'BooleanSort
- Data.Expression.Arithmetic: [LessThan] :: a IntegralSort -> a IntegralSort -> ArithmeticF a BooleanSort
+ Data.Expression.Arithmetic: [LessThan] :: a 'IntegralSort -> a 'IntegralSort -> ArithmeticF a 'BooleanSort
- Data.Expression.Arithmetic: [Mul] :: [a IntegralSort] -> ArithmeticF a IntegralSort
+ Data.Expression.Arithmetic: [Mul] :: [a 'IntegralSort] -> ArithmeticF a 'IntegralSort
- Data.Expression.Arithmetic: add :: ArithmeticF :<: f => [IFix f IntegralSort] -> IFix f IntegralSort
+ Data.Expression.Arithmetic: add :: ArithmeticF :<: f => [IFix f 'IntegralSort] -> IFix f 'IntegralSort
- Data.Expression.Arithmetic: cnst :: ArithmeticF :<: f => Int -> IFix f IntegralSort
+ Data.Expression.Arithmetic: cnst :: ArithmeticF :<: f => Int -> IFix f 'IntegralSort
- Data.Expression.Arithmetic: mul :: ArithmeticF :<: f => [IFix f IntegralSort] -> IFix f IntegralSort
+ Data.Expression.Arithmetic: mul :: ArithmeticF :<: f => [IFix f 'IntegralSort] -> IFix f 'IntegralSort
- Data.Expression.Array: [Select] :: Sing i -> Sing e -> a (ArraySort i e) -> a i -> ArrayF a e
+ Data.Expression.Array: [Select] :: Sing i -> Sing e -> a ( 'ArraySort i e) -> a i -> ArrayF a e
- Data.Expression.Array: [Store] :: Sing i -> Sing e -> a (ArraySort i e) -> a i -> a e -> ArrayF a (ArraySort i e)
+ Data.Expression.Array: [Store] :: Sing i -> Sing e -> a ( 'ArraySort i e) -> a i -> a e -> ArrayF a ( 'ArraySort i e)
- Data.Expression.Array: select :: (ArrayF :<: f, SingI i, SingI e) => IFix f (ArraySort i e) -> IFix f i -> IFix f e
+ Data.Expression.Array: select :: (ArrayF :<: f, SingI i, SingI e) => IFix f ( 'ArraySort i e) -> IFix f i -> IFix f e
- Data.Expression.Array: store :: (ArrayF :<: f, SingI i, SingI e) => IFix f (ArraySort i e) -> IFix f i -> IFix f e -> IFix f (ArraySort i e)
+ Data.Expression.Array: store :: (ArrayF :<: f, SingI i, SingI e) => IFix f ( 'ArraySort i e) -> IFix f i -> IFix f e -> IFix f ( 'ArraySort i e)
- Data.Expression.Equality: (.=.) :: forall f s. (EqualityF :<: f, SingI s) => IFix f s -> IFix f s -> IFix f BooleanSort
+ Data.Expression.Equality: (.=.) :: forall f s. (EqualityF :<: f, SingI s) => IFix f s -> IFix f s -> IFix f 'BooleanSort
- Data.Expression.Equality: [Equals] :: Sing s -> a s -> a s -> EqualityF a BooleanSort
+ Data.Expression.Equality: [Equals] :: Sing s -> a s -> a s -> EqualityF a 'BooleanSort
- Data.Expression.IfThenElse: [IfThenElse] :: Sing s -> a BooleanSort -> a s -> a s -> IfThenElseF a s
+ Data.Expression.IfThenElse: [IfThenElse] :: Sing s -> a 'BooleanSort -> a s -> a s -> IfThenElseF a s
- Data.Expression.IfThenElse: ite :: forall f s. (IfThenElseF :<: f, SingI s) => IFix f BooleanSort -> IFix f s -> IFix f s -> IFix f s
+ Data.Expression.IfThenElse: ite :: forall f s. (IfThenElseF :<: f, SingI s) => IFix f 'BooleanSort -> IFix f s -> IFix f s -> IFix f s
Files
- ChangeLog.md +4/−0
- Setup.hs +0/−2
- expressions.cabal +5/−8
- src/Data/Expression/Arithmetic.hs +4/−3
- test/Main.hs +30/−9
ChangeLog.md view
@@ -1,5 +1,9 @@ # Change Log +## 0.1.5++* Bump dependencies, fix equality, tweak readme+ ## 0.1.4 * Bump dependencies
− Setup.hs
@@ -1,2 +0,0 @@-import Distribution.Simple-main = defaultMain
expressions.cabal view
@@ -1,5 +1,5 @@ name: expressions-version: 0.1.4+version: 0.1.5 synopsis: Expressions and Formulae a la carte description: This package is aimed at providing means of fixing a first-order language and@@ -71,10 +71,10 @@ TypeSynonymInstances, UndecidableInstances build-depends: attoparsec >=0.13 && <0.14,- base >=4.9 && <4.11,- containers >=0.5.7 && <0.5.11,+ base >=4.9 && <4.12,+ containers >=0.5.7 && <0.6, lattices >=1.6 && <1.8,- singletons >=2.2 && <2.4,+ singletons >=2.2 && <2.5, text >=1.2 && <1.3, transformers >=0.5.2 && <0.6 hs-source-dirs: src@@ -86,10 +86,7 @@ build-depends: base, expressions, singletons,- text,- tasty,- tasty-quickcheck,- QuickCheck >=2.10 && <2.11+ text hs-source-dirs: test main-is: Main.hs default-language: Haskell2010
src/Data/Expression/Arithmetic.hs view
@@ -53,9 +53,10 @@ LessThan :: a 'IntegralSort -> a 'IntegralSort -> ArithmeticF a 'BooleanSort instance IEq1 ArithmeticF where- Const a `ieq1` Const b = a == b- Add as `ieq1` Add bs = foldr (&&) True $ zipWith ieq as bs- Mul as `ieq1` Mul bs = foldr (&&) True $ zipWith ieq as bs+ Const a `ieq1` Const b = a == b++ Add as `ieq1` Add bs | length as == length bs = foldr (&&) True $ zipWith ieq as bs+ Mul as `ieq1` Mul bs | length as == length bs = foldr (&&) True $ zipWith ieq as bs Divides c a `ieq1` Divides d b = a `ieq` b && c == d LessThan a c `ieq1` LessThan b d = a `ieq` b && c `ieq` d
test/Main.hs view
@@ -1,26 +1,47 @@ {-# LANGUAGE DataKinds+ , FlexibleContexts , KindSignatures , OverloadedStrings , RankNTypes , TypeOperators #-} +import Control.Monad import Data.Maybe import Data.Singletons import Data.Text import Prelude hiding (and)-import Test.QuickCheck hiding ((.&.))-import Test.Tasty-import Test.Tasty.QuickCheck hiding ((.&.)) +import qualified Prelude as P+ import Data.Expression parseJust :: forall f (s :: Sort). ( Parseable f f, SingI s ) => Text -> IFix f s parseJust = fromJust . parse +a, b, x, y, z :: forall f (s :: Sort). ( VarF :<: f, SingI s ) => IFix f s+a = var "a"+b = var "b"+x = var "x"+y = var "y"+z = var "z"++c1, c3 :: forall f. ArithmeticF :<: f => IFix f 'IntegralSort+c1 = cnst 1+c3 = cnst 3+ main :: IO ()-main = defaultMain $ testGroup "parsing" [ testProperty "1" $ once $ var "a" == (parseJust "(a : int)" :: ALia 'IntegralSort)- , testProperty "2" $ once $ var "a" /= (parseJust "(+ (a : int) 3)" :: ALia 'IntegralSort)- , testProperty "3" $ once $ var "a" .+. cnst 1 == (parseJust "(+ (a : int) 1)" :: ALia 'IntegralSort)- , testProperty "4" $ once $ select (var "a") (var "b" .+. cnst 3) == (parseJust "(select (a : array int (array int bool)) (+ (b : int) 3))" :: QFALia ('ArraySort 'IntegralSort 'BooleanSort))- , testProperty "5" $ once $ forall [var "x" :: Var 'IntegralSort] (exists [var "y" :: Var 'IntegralSort] (and [true, var "b" .=. (var "x" .<. var "y")])) == (parseJust "(forall ((x : int)) (exists ((y : int)) (and true (= (b : bool) (< x y)))))" :: Lia 'BooleanSort)- , testProperty "6" $ once $ forall [var "x" :: Var 'IntegralSort, var "y"] (var "x" .<. var "y" .+. var "z") .&. var "z" .=. cnst 3 == (parseJust "(and (forall ((x : int) (y : int)) (< x (+ y (z : int)))) (= z 3))" :: Lia 'BooleanSort) ]+main = guard (P.and props) where++ props = [ e1 == (parseJust "(a : int)" :: ALia 'IntegralSort)+ , e2 /= (parseJust "(+ (a : int) 3)" :: ALia 'IntegralSort)+ , e3 == (parseJust "(+ (a : int) 1)" :: ALia 'IntegralSort)+ , e4 == (parseJust "(select (a : array int (array int bool)) (+ (b : int) 3))" :: QFALia ('ArraySort 'IntegralSort 'BooleanSort))+ , e5 == (parseJust "(forall ((x : int)) (exists ((y : int)) (and true (= (b : bool) (< x y)))))" :: Lia 'BooleanSort)+ , e6 == (parseJust "(and (forall ((x : int) (y : int)) (< x (+ y (z : int)))) (= z 3))" :: Lia 'BooleanSort) ]++ e1 = a+ e2 = a+ e3 = a .+. c1+ e4 = select a (b .+. c3)+ e5 = forall [x :: Var 'IntegralSort] (exists [y :: Var 'IntegralSort] (and [true, b .=. (x .<. y)]))+ e6 = forall [x :: Var 'IntegralSort, y] (x .<. y .+. z) .&. z .=. c3