packages feed

ghc-typelits-extra 0.2.3 → 0.2.4

raw patch · 8 files changed

+38/−39 lines, 8 filesdep −singletonsdep ~ghcdep ~ghc-tcplugins-extradep ~ghc-typelits-extraPVP: major bump suggested

API removals or changes: PVP suggests a major version bump

Dependencies removed: singletons

Dependency ranges changed: ghc, ghc-tcplugins-extra, ghc-typelits-extra, ghc-typelits-knownnat

API changes (from Hackage documentation)

- GHC.TypeLits.Extra: instance (GHC.TypeLits.KnownNat x, GHC.TypeLits.KnownNat y) => GHC.TypeLits.KnownNat.KnownNat2 "GHC.TypeLits.Extra.GCD" x y
- GHC.TypeLits.Extra: instance (GHC.TypeLits.KnownNat x, GHC.TypeLits.KnownNat y) => GHC.TypeLits.KnownNat.KnownNat2 "GHC.TypeLits.Extra.LCM" x y
- GHC.TypeLits.Extra: instance (GHC.TypeLits.KnownNat x, GHC.TypeLits.KnownNat y) => GHC.TypeLits.KnownNat.KnownNat2 "GHC.TypeLits.Extra.Max" x y
- GHC.TypeLits.Extra: instance (GHC.TypeLits.KnownNat x, GHC.TypeLits.KnownNat y) => GHC.TypeLits.KnownNat.KnownNat2 "GHC.TypeLits.Extra.Min" x y
- GHC.TypeLits.Extra: instance (GHC.TypeLits.KnownNat x, GHC.TypeLits.KnownNat y, 1 GHC.TypeLits.<= y) => GHC.TypeLits.KnownNat.KnownNat2 "GHC.TypeLits.Extra.Div" x y
- GHC.TypeLits.Extra: instance (GHC.TypeLits.KnownNat x, GHC.TypeLits.KnownNat y, 1 GHC.TypeLits.<= y) => GHC.TypeLits.KnownNat.KnownNat2 "GHC.TypeLits.Extra.Mod" x y
- GHC.TypeLits.Extra: instance (GHC.TypeLits.KnownNat x, GHC.TypeLits.KnownNat y, 2 GHC.TypeLits.<= x, 1 GHC.TypeLits.<= y) => GHC.TypeLits.KnownNat.KnownNat2 "GHC.TypeLits.Extra.CLog" x y
- GHC.TypeLits.Extra: instance (GHC.TypeLits.KnownNat x, GHC.TypeLits.KnownNat y, 2 GHC.TypeLits.<= x, 1 GHC.TypeLits.<= y) => GHC.TypeLits.KnownNat.KnownNat2 "GHC.TypeLits.Extra.FLog" x y
- GHC.TypeLits.Extra: instance (GHC.TypeLits.KnownNat x, GHC.TypeLits.KnownNat y, GHC.TypeLits.Extra.FLog x y ~ GHC.TypeLits.Extra.CLog x y) => GHC.TypeLits.KnownNat.KnownNat2 "GHC.TypeLits.Extra.Log" x y
- GHC.TypeLits.Extra: instance Data.Singletons.SuppressUnusedWarnings.SuppressUnusedWarnings GHC.TypeLits.Extra.CLogSym0
- GHC.TypeLits.Extra: instance Data.Singletons.SuppressUnusedWarnings.SuppressUnusedWarnings GHC.TypeLits.Extra.CLogSym1
- GHC.TypeLits.Extra: instance Data.Singletons.SuppressUnusedWarnings.SuppressUnusedWarnings GHC.TypeLits.Extra.DivSym0
- GHC.TypeLits.Extra: instance Data.Singletons.SuppressUnusedWarnings.SuppressUnusedWarnings GHC.TypeLits.Extra.DivSym1
- GHC.TypeLits.Extra: instance Data.Singletons.SuppressUnusedWarnings.SuppressUnusedWarnings GHC.TypeLits.Extra.FLogSym0
- GHC.TypeLits.Extra: instance Data.Singletons.SuppressUnusedWarnings.SuppressUnusedWarnings GHC.TypeLits.Extra.FLogSym1
- GHC.TypeLits.Extra: instance Data.Singletons.SuppressUnusedWarnings.SuppressUnusedWarnings GHC.TypeLits.Extra.GCDSym0
- GHC.TypeLits.Extra: instance Data.Singletons.SuppressUnusedWarnings.SuppressUnusedWarnings GHC.TypeLits.Extra.GCDSym1
- GHC.TypeLits.Extra: instance Data.Singletons.SuppressUnusedWarnings.SuppressUnusedWarnings GHC.TypeLits.Extra.LCMSym0
- GHC.TypeLits.Extra: instance Data.Singletons.SuppressUnusedWarnings.SuppressUnusedWarnings GHC.TypeLits.Extra.LCMSym1
- GHC.TypeLits.Extra: instance Data.Singletons.SuppressUnusedWarnings.SuppressUnusedWarnings GHC.TypeLits.Extra.LogSym0
- GHC.TypeLits.Extra: instance Data.Singletons.SuppressUnusedWarnings.SuppressUnusedWarnings GHC.TypeLits.Extra.LogSym1
- GHC.TypeLits.Extra: instance Data.Singletons.SuppressUnusedWarnings.SuppressUnusedWarnings GHC.TypeLits.Extra.MaxSym0
- GHC.TypeLits.Extra: instance Data.Singletons.SuppressUnusedWarnings.SuppressUnusedWarnings GHC.TypeLits.Extra.MaxSym1
- GHC.TypeLits.Extra: instance Data.Singletons.SuppressUnusedWarnings.SuppressUnusedWarnings GHC.TypeLits.Extra.MinSym0
- GHC.TypeLits.Extra: instance Data.Singletons.SuppressUnusedWarnings.SuppressUnusedWarnings GHC.TypeLits.Extra.MinSym1
- GHC.TypeLits.Extra: instance Data.Singletons.SuppressUnusedWarnings.SuppressUnusedWarnings GHC.TypeLits.Extra.ModSym0
- GHC.TypeLits.Extra: instance Data.Singletons.SuppressUnusedWarnings.SuppressUnusedWarnings GHC.TypeLits.Extra.ModSym1
+ GHC.TypeLits.Extra: instance (GHC.TypeNats.KnownNat x, GHC.TypeNats.KnownNat y) => GHC.TypeLits.KnownNat.KnownNat2 "GHC.TypeLits.Extra.GCD" x y
+ GHC.TypeLits.Extra: instance (GHC.TypeNats.KnownNat x, GHC.TypeNats.KnownNat y) => GHC.TypeLits.KnownNat.KnownNat2 "GHC.TypeLits.Extra.LCM" x y
+ GHC.TypeLits.Extra: instance (GHC.TypeNats.KnownNat x, GHC.TypeNats.KnownNat y) => GHC.TypeLits.KnownNat.KnownNat2 "GHC.TypeLits.Extra.Max" x y
+ GHC.TypeLits.Extra: instance (GHC.TypeNats.KnownNat x, GHC.TypeNats.KnownNat y) => GHC.TypeLits.KnownNat.KnownNat2 "GHC.TypeLits.Extra.Min" x y
+ GHC.TypeLits.Extra: instance (GHC.TypeNats.KnownNat x, GHC.TypeNats.KnownNat y, 1 GHC.TypeNats.<= y) => GHC.TypeLits.KnownNat.KnownNat2 "GHC.TypeLits.Extra.Div" x y
+ GHC.TypeLits.Extra: instance (GHC.TypeNats.KnownNat x, GHC.TypeNats.KnownNat y, 1 GHC.TypeNats.<= y) => GHC.TypeLits.KnownNat.KnownNat2 "GHC.TypeLits.Extra.Mod" x y
+ GHC.TypeLits.Extra: instance (GHC.TypeNats.KnownNat x, GHC.TypeNats.KnownNat y, 2 GHC.TypeNats.<= x, 1 GHC.TypeNats.<= y) => GHC.TypeLits.KnownNat.KnownNat2 "GHC.TypeLits.Extra.CLog" x y
+ GHC.TypeLits.Extra: instance (GHC.TypeNats.KnownNat x, GHC.TypeNats.KnownNat y, 2 GHC.TypeNats.<= x, 1 GHC.TypeNats.<= y) => GHC.TypeLits.KnownNat.KnownNat2 "GHC.TypeLits.Extra.FLog" x y
+ GHC.TypeLits.Extra: instance (GHC.TypeNats.KnownNat x, GHC.TypeNats.KnownNat y, GHC.TypeLits.Extra.FLog x y ~ GHC.TypeLits.Extra.CLog x y) => GHC.TypeLits.KnownNat.KnownNat2 "GHC.TypeLits.Extra.Log" x y

Files

CHANGELOG.md view
@@ -1,5 +1,8 @@ # Changelog for the [`ghc-typelits-extra`](http://hackage.haskell.org/package/ghc-typelits-extra) package +# 0.2.4 *January 4th 2018*+* Add support for GHC-8.4.1-alpha1+ # 0.2.3 *May 15th 2017* * Support GHC 8.2 * `Max`, `Min`, `GCD`, and `LCM` now have a commutativity property [#9](https://github.com/clash-lang/ghc-typelits-extra/issues/9)
LICENSE view
@@ -1,5 +1,5 @@ Copyright (c) 2015-2016, University of Twente,-              2017, QBayLogic+              2017-2018, QBayLogic B.V. All rights reserved.  Redistribution and use in source and binary forms, with or without
ghc-typelits-extra.cabal view
@@ -1,5 +1,5 @@ name:                ghc-typelits-extra-version:             0.2.3+version:             0.2.4 synopsis:            Additional type-level operations on GHC.TypeLits.Nat description:   Additional type-level operations on @GHC.TypeLits.Nat@:@@ -40,12 +40,14 @@ license-file:        LICENSE author:              Christiaan Baaij maintainer:          christiaan.baaij@gmail.com-copyright:           Copyright © 2015-2016, University of Twente, 2017, QBayLogic+copyright:           Copyright © 2015-2016, University of Twente,+                                 2017-2018, QBayLogic B.V. category:            Type System build-type:          Simple extra-source-files:  README.md                      CHANGELOG.md cabal-version:       >=1.10+tested-with:         GHC == 8.0.2, GHC == 8.2.2, GHC == 8.4.1  source-repository head   type: git@@ -63,13 +65,12 @@   other-modules:       GHC.TypeLits.Extra.Solver.Unify                        GHC.TypeLits.Extra.Solver.Operations   build-depends:       base                      >= 4.8     && <5,-                       ghc                       >= 7.10    && <8.4,+                       ghc                       >= 7.10    && <8.6,                        ghc-prim                  >= 0.5     && <1.0,                        ghc-tcplugins-extra       >= 0.2,-                       ghc-typelits-knownnat     >= 0.2     && <0.4,+                       ghc-typelits-knownnat     >= 0.4     && <0.5,                        ghc-typelits-natnormalise >= 0.5     && <0.6,                        integer-gmp               >= 1.0     && <1.1,-                       singletons                >= 2.2     && <3,                        transformers              >= 0.4.2.0 && <0.6   hs-source-dirs:      src   default-language:    Haskell2010@@ -95,7 +96,7 @@   main-is:             Main.hs   Other-Modules:       ErrorTests   build-depends:       base                      >= 4.8 && <5,-                       ghc-typelits-extra        >= 0.1.1,+                       ghc-typelits-extra,                        ghc-typelits-knownnat     >= 0.2,                        ghc-typelits-natnormalise >= 0.4.1,                        tasty                     >= 0.10,
src/GHC/TypeLits/Extra.hs view
@@ -1,5 +1,6 @@ {-|-Copyright  :  (C) 2015-2016, University of Twente+Copyright  :  (C) 2015-2016, University of Twente,+                  2017-2018, QBayLogic B.V. License    :  BSD2 (see the file LICENSE) Maintainer :  Christiaan Baaij <christiaan.baaij@gmail.com> @@ -78,7 +79,6 @@ where  import Data.Proxy             (Proxy (..))-import Data.Singletons.TH     (genDefunSymbols) import Data.Type.Bool         (If) import GHC.Base               (Int#,isTrue#,(==#),(+#)) import GHC.Integer.Logarithms (integerLogBase#)@@ -92,6 +92,9 @@ import GHC.TypeLits           as N #endif   (KnownNat, Nat, type (+), type (-), type (<=), type (<=?), natVal)+#if MIN_VERSION_ghc(8,4,0)+import GHC.TypeLits           (Div, Mod)+#endif import GHC.TypeLits.KnownNat  (KnownNat2 (..), SNatKn (..), nameToSymbol)  #if MIN_VERSION_ghc(8,2,0)@@ -108,10 +111,7 @@   Max n n = n   Max x y = If (x <=? y) y x -genDefunSymbols [''Max]- instance (KnownNat x, KnownNat y) => KnownNat2 $(nameToSymbol ''Max) x y where-  type KnownNatF2 $(nameToSymbol ''Max) = MaxSym0   natSing2 = SNatKn (max (N.natVal (Proxy @x)) (N.natVal (Proxy @y)))  -- | Type-level 'min'@@ -119,39 +119,34 @@   Min n n = n   Min x y = If (x <=? y) x y -genDefunSymbols [''Min]- instance (KnownNat x, KnownNat y) => KnownNat2 $(nameToSymbol ''Min) x y where-  type KnownNatF2 $(nameToSymbol ''Min) = MinSym0   natSing2 = SNatKn (min (N.natVal (Proxy @x)) (N.natVal (Proxy @y))) +#if !MIN_VERSION_ghc(8,4,0) -- | Type-level 'div' -- -- Note that additional equations are provided by the type-checker plugin solver -- "GHC.TypeLits.Extra.Solver". type family Div (x :: Nat) (y :: Nat) :: Nat where   Div x 1 = x+#endif  -- | A variant of 'Div' that rounds up instead of down type DivRU n d = Div (n + (d - 1)) d -genDefunSymbols [''Div]- instance (KnownNat x, KnownNat y, 1 <= y) => KnownNat2 $(nameToSymbol ''Div) x y where-  type KnownNatF2 $(nameToSymbol ''Div) = DivSym0   natSing2 = SNatKn (quot (N.natVal (Proxy @x)) (N.natVal (Proxy @y))) +#if !MIN_VERSION_ghc(8,4,0) -- | Type-level 'mod' -- -- Note that additional equations are provided by the type-checker plugin solver -- "GHC.TypeLits.Extra.Solver". type family Mod (x :: Nat) (y :: Nat) :: Nat where   Mod x 1 = 0--genDefunSymbols [''Mod]+#endif  instance (KnownNat x, KnownNat y, 1 <= y) => KnownNat2 $(nameToSymbol ''Mod) x y where-  type KnownNatF2 $(nameToSymbol ''Mod) = ModSym0   natSing2 = SNatKn (rem (N.natVal (Proxy @x)) (N.natVal (Proxy @y)))  -- | Type-level `divMod`@@ -165,10 +160,7 @@ type family FLog (x :: Nat) (y :: Nat) :: Nat where   FLog 2 1 = 0 -- Additional equations are provided by the custom solver -genDefunSymbols [''FLog]- instance (KnownNat x, KnownNat y, 2 <= x, 1 <= y) => KnownNat2 $(nameToSymbol ''FLog) x y where-  type KnownNatF2 $(nameToSymbol ''FLog) = FLogSym0 #if MIN_VERSION_ghc (8,2,0)   natSing2 = SNatKn (intToNumber (integerLogBase# (natVal (Proxy @x)) (natVal (Proxy @y)))) #else@@ -183,10 +175,7 @@ type family CLog (x :: Nat) (y :: Nat) :: Nat where   CLog 2 1 = 0 -- Additional equations are provided by the custom solver -genDefunSymbols [''CLog]- instance (KnownNat x, KnownNat y, 2 <= x, 1 <= y) => KnownNat2 $(nameToSymbol ''CLog) x y where-  type KnownNatF2 $(nameToSymbol ''CLog) = CLogSym0   natSing2 = let x  = natVal (Proxy @x)                  y  = natVal (Proxy @y)                  z1 = integerLogBase# x y@@ -212,10 +201,7 @@ type family Log (x :: Nat) (y :: Nat) :: Nat where   Log 2 1 = 0 -- Additional equations are provided by the custom solver -genDefunSymbols [''Log]- instance (KnownNat x, KnownNat y, FLog x y ~ CLog x y) => KnownNat2 $(nameToSymbol ''Log) x y where-  type KnownNatF2 $(nameToSymbol ''Log) = LogSym0   natSing2 = SNatKn (intToNumber (integerLogBase# (natVal (Proxy @x)) (natVal (Proxy @y))))  -- | Type-level greatest common denominator (GCD).@@ -230,10 +216,7 @@   GCD x x = x   -- Additional equations are provided by the custom solver -genDefunSymbols [''GCD]- instance (KnownNat x, KnownNat y) => KnownNat2 $(nameToSymbol ''GCD) x y where-  type KnownNatF2 $(nameToSymbol ''GCD) = GCDSym0   natSing2 = SNatKn (gcd (N.natVal (Proxy @x)) (N.natVal (Proxy @y)))  -- | Type-level least common multiple (LCM).@@ -248,8 +231,5 @@   LCM x x = x   -- Additional equations are provided by the custom solver -genDefunSymbols [''LCM]- instance (KnownNat x, KnownNat y) => KnownNat2 $(nameToSymbol ''LCM) x y where-  type KnownNatF2 $(nameToSymbol ''LCM) = LCMSym0   natSing2 = SNatKn (lcm (N.natVal (Proxy @x)) (N.natVal (Proxy @y)))
src/GHC/TypeLits/Extra/Solver.hs view
@@ -13,6 +13,7 @@  -} +{-# LANGUAGE CPP           #-} {-# LANGUAGE TupleSections #-}  {-# OPTIONS_HADDOCK show-extensions #-}@@ -44,6 +45,9 @@ import TyCoRep    (Type (..)) import TysWiredIn (typeNatKind, promotedTrueDataCon, promotedFalseDataCon) import TcTypeNats (typeNatLeqTyCon)+#if MIN_VERSION_ghc(8,4,0)+import TcTypeNats (typeNatTyCons)+#endif  -- internal import GHC.TypeLits.Extra.Solver.Operations@@ -161,8 +165,13 @@     md <- lookupModule myModule myPackage     ExtraDefs <$> look md "Max"               <*> look md "Min"+#if MIN_VERSION_ghc(8,4,0)+              <*> pure (typeNatTyCons !! 5)+              <*> pure (typeNatTyCons !! 6)+#else               <*> look md "Div"               <*> look md "Mod"+#endif               <*> look md "FLog"               <*> look md "CLog"               <*> look md "Log"
src/GHC/TypeLits/Extra/Solver/Operations.hs view
@@ -1,5 +1,6 @@ {-|-Copyright  :  (C) 2015-2016, University of Twente+Copyright  :  (C) 2015-2016, University of Twente,+                  2017     , QBayLogic B.V. License    :  BSD2 (see the file LICENSE) Maintainer :  Christiaan Baaij <christiaan.baaij@gmail.com> -}
src/GHC/TypeLits/Extra/Solver/Unify.hs view
@@ -1,5 +1,6 @@ {-|-Copyright  :  (C) 2015-2016, University of Twente+Copyright  :  (C) 2015-2016, University of Twente,+                  2017     , QBayLogic B.V. License    :  BSD2 (see the file LICENSE) Maintainer :  Christiaan Baaij <christiaan.baaij@gmail.com> -}
tests/ErrorTests.hs view
@@ -1,4 +1,4 @@-{-# LANGUAGE DataKinds, TypeOperators, TypeApplications, TypeFamilies, TemplateHaskell #-}+{-# LANGUAGE CPP, DataKinds, TypeOperators, TypeApplications, TypeFamilies, TemplateHaskell #-}  {-# OPTIONS_GHC -fdefer-type-errors #-} {-# OPTIONS_GHC -fplugin GHC.TypeLits.Normalise #-}@@ -206,4 +206,8 @@   ,"Actual type: Proxy (a * b) -> Proxy (a * b)"]  testFail23Errors =+#if __GLASGOW_HASKELL__ >= 804+  ["Couldn't match type ‘'True’ with ‘'False’"]+#else   ["Couldn't match type ‘1 <=? Div 18 3’ with ‘'False’"]+#endif