dimensions 0.3.1.0 → 0.3.2.0
raw patch · 2 files changed
+21/−13 lines, 2 filesPVP: major bump suggested
API removals or changes: PVP suggests a major version bump
API changes (from Hackage documentation)
- Numeric.Dimensions.XDim: instance Numeric.Dimensions.XDim.XDimensions xs => Numeric.Dimensions.XDim.XDimensions (Numeric.TypeLits.N n : xs)
- Numeric.Dimensions.XDim: instance Numeric.Dimensions.XDim.XDimensions xs => Numeric.Dimensions.XDim.XDimensions (Numeric.TypeLits.XN m : xs)
+ Numeric.Dimensions.XDim: instance (Numeric.Dimensions.XDim.XDimensions xs, Numeric.TypeLits.KnownDim m) => Numeric.Dimensions.XDim.XDimensions (Numeric.TypeLits.XN m : xs)
+ Numeric.Dimensions.XDim: instance (Numeric.Dimensions.XDim.XDimensions xs, Numeric.TypeLits.KnownDim n) => Numeric.Dimensions.XDim.XDimensions (Numeric.TypeLits.N n : xs)
- Numeric.Dimensions.XDim: wrapDim :: (XDimensions xds, FixedXDim xds ds ~ xds) => Dim ds -> Dim xds
+ Numeric.Dimensions.XDim: wrapDim :: XDimensions xds => Dim (ds :: [Nat]) -> Maybe (Dim xds)
- Numeric.Dimensions.XDim: xdim :: forall (ds :: [Nat]) (xds :: [XNat]). (Dimensions ds, XDimensions xds, FixedXDim xds ds ~ xds) => Dim xds
+ Numeric.Dimensions.XDim: xdim :: forall (ds :: [Nat]) (xds :: [XNat]). (Dimensions ds, XDimensions xds) => Maybe (Dim xds)
Files
- dimensions.cabal +1/−1
- src/Numeric/Dimensions/XDim.hs +20/−12
dimensions.cabal view
@@ -1,5 +1,5 @@ name: dimensions-version: 0.3.1.0+version: 0.3.2.0 cabal-version: >=1.20 build-type: Simple license: BSD3
src/Numeric/Dimensions/XDim.hs view
@@ -58,29 +58,37 @@ class XDimensions (xds :: [XNat]) where- wrapDim :: FixedXDim xds ds ~ xds => Dim ds -> Dim xds+ wrapDim :: Dim (ds :: [Nat]) -> Maybe (Dim xds) instance XDimensions '[] where- wrapDim D = D+ wrapDim D = Just D+ wrapDim _ = Nothing {-# INLINE wrapDim #-} -instance XDimensions xs => XDimensions (XN m ': xs) where- wrapDim ((d@Dn :: Dim d) :* ds)- | Evidence <- unsafeEqEvidence @(m <=? d) @'True- = Dx d :* wrapDim ds+instance (XDimensions xs, KnownDim m) => XDimensions (XN m ': xs) where+ wrapDim D = Nothing+ wrapDim ((d@Dn :: Dim d) :* ds) =+ if dimVal d >= dimVal' @m+ then case (wrapDim @xs ds, unsafeEqEvidence @(m <=? d) @'True) of+ (Just xds, Evidence) -> Just (Dx d :* xds)+ (Nothing, _) -> Nothing+ else Nothing -instance XDimensions xs => XDimensions (N n ': xs) where- wrapDim ((Dn :: Dim d) :* ds)- | Evidence <- unsafeEqEvidence @n @d- = Dn @d :* wrapDim ds+instance (XDimensions xs, KnownDim n) => XDimensions (N n ': xs) where+ wrapDim D = Nothing+ wrapDim ((Dn :: Dim d) :* ds) =+ if dimVal' @d == dimVal' @n+ then case (wrapDim @xs ds, unsafeEqEvidence @n @d) of+ (Just xds, Evidence) -> Just (Dn @d :* xds)+ (Nothing, _) -> Nothing+ else Nothing -- | Loose compile-time information about dimensionalities xdim :: forall (ds :: [Nat]) (xds :: [XNat]) . ( Dimensions ds- , XDimensions xds- , FixedXDim xds ds ~ xds) => Dim xds+ , XDimensions xds) => Maybe (Dim xds) xdim = wrapDim @xds @ds (dim @ds) {-# INLINE xdim #-}