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 +3/−0
- LICENSE +1/−1
- ghc-typelits-extra.cabal +7/−6
- src/GHC/TypeLits/Extra.hs +9/−29
- src/GHC/TypeLits/Extra/Solver.hs +9/−0
- src/GHC/TypeLits/Extra/Solver/Operations.hs +2/−1
- src/GHC/TypeLits/Extra/Solver/Unify.hs +2/−1
- tests/ErrorTests.hs +5/−1
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