ghc-typelits-knownnat 0.8.1 → 0.8.2
raw patch · 4 files changed
+15/−14 lines, 4 filesdep ~ghc-typelits-natnormalisePVP: major bump suggested
API removals or changes: PVP suggests a major version bump
Dependency ranges changed: ghc-typelits-natnormalise
API changes (from Hackage documentation)
- GHC.TypeLits.KnownNat: instance (GHC.TypeNats.KnownNat a, GHC.TypeNats.KnownNat b, b Data.Type.Ord.<= a) => GHC.TypeLits.KnownNat.KnownNat2 "GHC.TypeNats.-" a b
+ GHC.TypeLits.KnownNat: instance (GHC.TypeNats.KnownNat a, GHC.TypeNats.KnownNat b, (b Data.Type.Ord.<= a) GHC.Types.~ (() :: Constraint)) => GHC.TypeLits.KnownNat.KnownNat2 "GHC.TypeNats.-" a b
Files
- CHANGELOG.md +3/−0
- ghc-typelits-knownnat.cabal +3/−3
- src/GHC/TypeLits/KnownNat.hs +8/−0
- src/GHC/TypeLits/KnownNat/Solver.hs +1/−11
CHANGELOG.md view
@@ -1,5 +1,8 @@ # Changelog for the [`ghc-typelits-knownnat`](http://hackage.haskell.org/package/ghc-typelits-knownnat) package +## 0.8.2 *October 17th 2025*+* Fix -fdefer-type-errors regression+ ## 0.8.1 *October 10th 2025* * Fix [#53](https://github.com/clash-lang/ghc-typelits-knownnat/issues/53) The plugin sometimes doesn't look through type aliases * Fix [#13](https://github.com/clash-lang/ghc-typelits-knownnat/issues/13) Type equality constraints aren't used by solver
ghc-typelits-knownnat.cabal view
@@ -1,6 +1,6 @@ cabal-version: 3.0 name: ghc-typelits-knownnat-version: 0.8.1+version: 0.8.2 synopsis: Derive KnownNat constraints from other KnownNat constraints description: A type checker plugin for GHC that can derive \"complex\" @KnownNat@@@ -90,7 +90,7 @@ build-depends: base >= 4.9 && <5, ghc >= 8.0.1 && <9.17, ghc-tcplugin-api >= 0.18.1.0 && <0.19,- ghc-typelits-natnormalise >= 0.8.0 && <0.9,+ ghc-typelits-natnormalise >= 0.9.0 && <0.10, transformers >= 0.5.2.0 && <0.7, template-haskell >= 2.11.0.0 && <2.26 hs-source-dirs: src@@ -143,7 +143,7 @@ Other-Modules: TestFunctions build-depends: base >= 4.8 && <5, ghc-typelits-knownnat,- ghc-typelits-natnormalise >= 0.8.0 && <0.9,+ ghc-typelits-natnormalise >= 0.8.0 && <0.10, tasty >= 0.10, tasty-hunit >= 0.9, tasty-quickcheck >= 0.8,
src/GHC/TypeLits/KnownNat.hs view
@@ -134,6 +134,10 @@ ( If ) import GHC.Exts ( Proxy# )+#if __GLASGOW_HASKELL__ >= 904+import GHC.Exts+ ( Constraint )+#endif import GHC.TypeLits ( Symbol ) import GHC.TypeNats@@ -206,7 +210,11 @@ {-# NOINLINE natSing2 #-} -- | 'KnownNat2' instance for "GHC.TypeLits"' 'GHC.TypeLits.-'+#if __GLASGOW_HASKELL__ >= 904+instance (KnownNat a, KnownNat b, (b <= a) ~ (() :: Constraint)) => KnownNat2 $(nameToSymbol ''(-)) a b where+#else instance (KnownNat a, KnownNat b, b <= a) => KnownNat2 $(nameToSymbol ''(-)) a b where+#endif natSing2 = SNatKn (natVal (Proxy @a) - natVal (Proxy @b)) {-# NOINLINE natSing2 #-}
src/GHC/TypeLits/KnownNat/Solver.hs view
@@ -296,10 +296,6 @@ -> TcPluginM Solve TcPluginSolveResult solveKnownNat _defs _givens [] = return (TcPluginOk [] []) solveKnownNat defs givens wanteds = do- tcPluginTrace "solveKnownNat Wanteds {" $- vcat [ text "givens:" <+> ppr givens- , text "wanteds:" <+> ppr wanteds- ] let givensTyConSubst = mkTyConSubst givens kn_wanteds = map (\(x,y,z,orig) -> (x,y,z,orig)) $ mapMaybe (toKnConstraint defs) wanteds@@ -312,12 +308,6 @@ -- Try to solve the wanted KnownNat constraints given the [G]iven -- KnownNat constraints (solved,new) <- (unzip . catMaybes) <$> (mapM (constraintToEvTerm defs givensTyConSubst given_map) kn_wanteds)- tcPluginTrace "solveKnownNat Wanteds }" $- vcat [ text "givens:" <+> ppr givens- , text "wanteds:" <+> ppr wanteds- , text "solved:" <+> ppr solved- , text "newWanteds:" <+> ppr (concat new)- ] return (TcPluginOk solved (concat new)) -- | Get the KnownNat constraints@@ -534,7 +524,7 @@ -- with the original Nat operation subWant = mkTyConApp typeNatSubTyCon . (:[want]) -- exploded :: [()]- exploded = map (fst . runWriter . normaliseNat givensTyConSubst . subWant . fst &&& id)+ exploded = map (fst . runWriter . normaliseNat . subWant . fst &&& id) knownsX -- interesting cases for us are those where -- wanted and given only differ by a constant