packages feed

constraints 0.11.2 → 0.12

raw patch · 4 files changed

+32/−3 lines, 4 filesPVP ok

version bump matches the API change (PVP)

API changes (from Hackage documentation)

- Data.Constraint.Nat: dividesDef :: forall a b. Divides a b :- ((a * Div b a) ~ b)
+ Data.Constraint.Nat: dividesDef :: forall a b. Divides a b :- (Mod b a ~ 0)
- Data.Constraint.Nat: dividesTimes :: (Divides a b, Divides a c) :- Divides a (b * c)
+ Data.Constraint.Nat: dividesTimes :: Divides a b :- Divides a (b * c)

Files

CHANGELOG.markdown view
@@ -1,3 +1,28 @@+0.12 [2020.02.03]+-----------------+* Relax the type signature for `divideTimes`:++  ```diff+  -dividesTimes :: (Divides a b, Divides a c) :- Divides a (b * c)+  +dividesTimes ::  Divides a b               :- Divides a (b * c)+  ```++* Simplify the type signature of `dividesDef`:++  ```diff+  -dividesDef :: forall a b. Divides a b :- ((a * Div b a) ~ b)+  +dividesDef :: forall a b. Divides a b :- (Mod b a ~ 0)+  ```++  The original type of `diviesDef` can be (partially) recovered by defining+  it in terms of the new `dividesDef`:++  ```hs+  dividesDef' :: forall a b. (1 <= a, Divides a b) :- ((a * Div b a) ~ b)+  dividesDef' = Sub $ case (dividesDef @a @b, euclideanNat @a @b) of+    (Sub Dict, Sub Dict) -> Dict+  ```+ 0.11.2 [2019.09.06] ------------------- * Depend on the `type-equality` compatibility library so that `(:~~:)` may be
constraints.cabal view
@@ -1,6 +1,6 @@ name:          constraints category:      Constraints-version:       0.11.2+version:       0.12 license:       BSD2 cabal-version: >= 1.10 license-file:  LICENSE
src/Data/Constraint.hs view
@@ -208,6 +208,7 @@ infixr 9 :- infixr 9 ⊢ +-- | Type entailment, as written with a single character. type (⊢) = (:-)  -- | This is the type of entailment.
src/Data/Constraint/Nat.hs view
@@ -323,7 +323,7 @@ dividesPlus :: (Divides a b, Divides a c) :- Divides a (b + c) dividesPlus = Sub axiom -dividesTimes :: (Divides a b, Divides a c) :- Divides a (b * c)+dividesTimes :: Divides a b :- Divides a (b * c) dividesTimes = Sub axiom  dividesMin :: (Divides a b, Divides a c) :- Divides a (Min b c)@@ -332,7 +332,10 @@ dividesMax :: (Divides a b, Divides a c) :- Divides a (Max b c) dividesMax = Sub axiom -dividesDef :: forall a b. Divides a b :- ((a * Div b a) ~ b)+-- This `dividesDef` is simpler and more convenient than Divides a b :- ((a * Div b a) ~ b)+-- because the latter can be easily derived via 'euclideanNat', but not vice versa.++dividesDef :: forall a b. Divides a b :- (Mod b a ~ 0) dividesDef = Sub axiom  dividesPow :: (1 <= n, Divides a b) :- Divides a (b^n)