orthotope 0.1.2.0 → 0.1.4.0
raw patch · 15 files changed
+197/−51 lines, 15 filesdep ~HUnitdep ~QuickCheckdep ~deepseqPVP: major bump suggested
API removals or changes: PVP suggests a major version bump
Dependency ranges changed: HUnit, QuickCheck, deepseq, dlist, pretty, test-framework, test-framework-hunit, test-framework-quickcheck2, vector
API changes (from Hackage documentation)
- Data.Array.DynamicG: type family VecElem v :: Type -> Constraint;
- Data.Array.Internal: type family VecElem v :: Type -> Constraint;
- Data.Array.Internal.DynamicG: type family VecElem v :: Type -> Constraint
- Data.Array.Internal.RankedG: type family VecElem v :: Type -> Constraint
- Data.Array.Internal.Shape: instance (Data.Array.Internal.Shape.Slice ls ss rs, (o GHC.TypeNats.+ n) GHC.TypeNats.<= s, GHC.TypeNats.KnownNat o) => Data.Array.Internal.Shape.Slice ('(o, n) : ls) (s : ss) (n : rs)
- Data.Array.Internal.Shape: instance (Data.Array.Internal.Shape.Window' ows ws ss rs, w GHC.TypeNats.<= s, ((s GHC.TypeNats.+ 1) GHC.TypeNats.- w) GHC.Types.~ r) => Data.Array.Internal.Shape.Window' ows (w : ws) (s : ss) (r : rs)
- Data.Array.Internal.Shape: instance Data.Array.Internal.Shape.Broadcast'' (GHC.TypeNats.CmpNat i d) i d ds (s : sh) (s' : sh') => Data.Array.Internal.Shape.Broadcast' i (d : ds) (s : sh) (s' : sh')
- Data.Array.Internal.Shape: instance Data.Array.Internal.Shape.Elem' (GHC.TypeNats.CmpNat i n) i ns => Data.Array.Internal.Shape.Elem i (n : ns)
- Data.Array.RankedG: type family VecElem v :: Type -> Constraint;
+ Data.Array.DynamicG: type VecElem v :: Type -> Constraint;
+ Data.Array.Internal: type VecElem v :: Type -> Constraint;
+ Data.Array.Internal.DynamicG: type VecElem v :: Type -> Constraint
+ Data.Array.Internal.RankedG: type VecElem v :: Type -> Constraint
+ Data.Array.Internal.Shape: instance (Data.Array.Internal.Shape.Slice ls ss rs, (o GHC.TypeNats.+ n) Data.Type.Ord.<= s, GHC.TypeNats.KnownNat o) => Data.Array.Internal.Shape.Slice ('(o, n) : ls) (s : ss) (n : rs)
+ Data.Array.Internal.Shape: instance (Data.Array.Internal.Shape.Window' ows ws ss rs, w Data.Type.Ord.<= s, ((s GHC.TypeNats.+ 1) GHC.TypeNats.- w) GHC.Types.~ r) => Data.Array.Internal.Shape.Window' ows (w : ws) (s : ss) (r : rs)
+ Data.Array.Internal.Shape: instance Data.Array.Internal.Shape.Broadcast'' (GHC.TypeNats.Internal.CmpNat i d) i d ds (s : sh) (s' : sh') => Data.Array.Internal.Shape.Broadcast' i (d : ds) (s : sh) (s' : sh')
+ Data.Array.Internal.Shape: instance Data.Array.Internal.Shape.Elem' (GHC.TypeNats.Internal.CmpNat i n) i ns => Data.Array.Internal.Shape.Elem i (n : ns)
+ Data.Array.Internal.ShapedG: type VecElem v :: Type -> Constraint
+ Data.Array.RankedG: type VecElem v :: Type -> Constraint;
+ Data.Array.ShapedG: type VecElem v :: Type -> Constraint;
- Data.Array.Internal.ShapedG: type family VecElem v :: Type -> Constraint
+ Data.Array.Internal.ShapedG: type family Rank (s :: [Nat]) :: Nat
Files
- Data/Array/Convert.hs +1/−0
- Data/Array/Internal/Dynamic.hs +3/−3
- Data/Array/Internal/DynamicG.hs +4/−4
- Data/Array/Internal/DynamicS.hs +3/−3
- Data/Array/Internal/DynamicU.hs +3/−3
- Data/Array/Internal/Ranked.hs +1/−1
- Data/Array/Internal/RankedG.hs +4/−4
- Data/Array/Internal/RankedS.hs +9/−3
- Data/Array/Internal/RankedU.hs +3/−3
- Data/Array/Internal/Shaped.hs +3/−3
- Data/Array/Internal/ShapedG.hs +5/−5
- Data/Array/Internal/ShapedS.hs +10/−4
- Data/Array/Internal/ShapedU.hs +4/−4
- README.md +133/−0
- orthotope.cabal +11/−11
Data/Array/Convert.hs view
@@ -17,6 +17,7 @@ {-# LANGUAGE ScopedTypeVariables #-} {-# LANGUAGE TypeApplications #-} {-# LANGUAGE TypeFamilies #-}+{-# LANGUAGE TypeOperators #-} module Data.Array.Convert(Convert(..)) where import Data.Proxy import qualified Data.Vector as V
Data/Array/Internal/Dynamic.hs view
@@ -134,7 +134,7 @@ shapeL :: Array a -> ShapeL shapeL = G.shapeL . unA --- | The rank of an array, i.e., the number if dimensions it has.+-- | The rank of an array, i.e., the number of dimensions it has. -- O(1) time. rank :: Array a -> Int rank = G.rank . unA@@ -301,8 +301,8 @@ -- | Extract a slice of an array. -- The first argument is a list of (offset, length) pairs.--- The length of the slicing argument must not exceed the rank of the arrar.--- The extracted slice mul fall within the array dimensions.+-- The length of the slicing argument must not exceed the rank of the array.+-- The extracted slice must fall within the array dimensions. -- E.g. @slice [1,2] (fromList [4] [1,2,3,4]) == [2,3]@. -- O(1) time. slice :: (HasCallStack) => [(Int, Int)] -> Array a -> Array a
Data/Array/Internal/DynamicG.hs view
@@ -92,7 +92,7 @@ shapeL :: Array v a -> ShapeL shapeL (A s _) = s --- | The rank of an array, i.e., the number if dimensions it has.+-- | The rank of an array, i.e., the number of dimensions it has. -- O(1) time. {-# INLINE rank #-} rank :: Array v a -> Int@@ -352,8 +352,8 @@ -- | Extract a slice of an array. -- The first argument is a list of (offset, length) pairs.--- The length of the slicing argument must not exceed the rank of the arrar.--- The extracted slice mul fall within the array dimensions.+-- The length of the slicing argument must not exceed the rank of the array.+-- The extracted slice must fall within the array dimensions. -- E.g. @slice [1,2] (fromList [4] [1,2,3,4]) == [2,3]@. -- O(1) time. {-# INLINE slice #-}@@ -473,7 +473,7 @@ -- | Test if the predicate holds for all elements. {-# INLINE allA #-} allA :: (Vector v, VecElem v a) => (a -> Bool) -> Array v a -> Bool-allA p (A sh t) = anyT sh p t+allA p (A sh t) = allT sh p t -- | Put the dimensions of the argument into the specified dimensions, -- and just replicate the data along all other dimensions.
Data/Array/Internal/DynamicS.hs view
@@ -141,7 +141,7 @@ shapeL :: Array a -> ShapeL shapeL = G.shapeL . unA --- | The rank of an array, i.e., the number if dimensions it has.+-- | The rank of an array, i.e., the number of dimensions it has. -- O(1) time. rank :: Array a -> Int rank = G.rank . unA@@ -305,8 +305,8 @@ -- | Extract a slice of an array. -- The first argument is a list of (offset, length) pairs.--- The length of the slicing argument must not exceed the rank of the arrar.--- The extracted slice mul fall within the array dimensions.+-- The length of the slicing argument must not exceed the rank of the array.+-- The extracted slice must fall within the array dimensions. -- E.g. @slice [1,2] (fromList [4] [1,2,3,4]) == [2,3]@. -- O(1) time. slice :: (HasCallStack) => [(Int, Int)] -> Array a -> Array a
Data/Array/Internal/DynamicU.hs view
@@ -138,7 +138,7 @@ shapeL :: Array a -> ShapeL shapeL = G.shapeL . unA --- | The rank of an array, i.e., the number if dimensions it has.+-- | The rank of an array, i.e., the number of dimensions it has. -- O(1) time. rank :: Array a -> Int rank = G.rank . unA@@ -296,8 +296,8 @@ -- | Extract a slice of an array. -- The first argument is a list of (offset, length) pairs.--- The length of the slicing argument must not exceed the rank of the arrar.--- The extracted slice mul fall within the array dimensions.+-- The length of the slicing argument must not exceed the rank of the array.+-- The extracted slice must fall within the array dimensions. -- E.g. @slice [1,2] (fromList [4] [1,2,3,4]) == [2,3]@. -- O(1) time. slice :: (HasCallStack) => [(Int, Int)] -> Array a -> Array a
Data/Array/Internal/Ranked.hs view
@@ -92,7 +92,7 @@ shapeL :: Array n a -> ShapeL shapeL = G.shapeL . unA --- | The rank of an array, i.e., the number if dimensions it has,+-- | The rank of an array, i.e., the number of dimensions it has, -- which is the @n@ in @Array n a@. -- O(1) time. rank :: (KnownNat n) => Array n a -> Int
Data/Array/Internal/RankedG.hs view
@@ -103,7 +103,7 @@ shapeL :: Array n v a -> ShapeL shapeL (A s _) = s --- | The rank of an array, i.e., the number if dimensions it has.+-- | The rank of an array, i.e., the number of dimensions it has. -- O(1) time. {-# INLINE rank #-} rank :: forall n v a . (KnownNat n) => Array n v a -> Int@@ -367,8 +367,8 @@ -- | Extract a slice of an array. -- The first argument is a list of (offset, length) pairs.--- The length of the slicing argument must not exceed the rank of the arrar.--- The extracted slice mul fall within the array dimensions.+-- The length of the slicing argument must not exceed the rank of the array.+-- The extracted slice must fall within the array dimensions. -- E.g. @slice [1,2] (fromList [4] [1,2,3,4]) == [2,3]@. -- O(1) time. {-# INLINE slice #-}@@ -489,7 +489,7 @@ -- | Test if the predicate holds for all elements. {-# INLINE allA #-} allA :: (Vector v, VecElem v a) => (a -> Bool) -> Array r v a -> Bool-allA p (A sh t) = anyT sh p t+allA p (A sh t) = allT sh p t -- | Put the dimensions of the argument into the specified dimensions, -- and just replicate the data along all other dimensions.
Data/Array/Internal/RankedS.hs view
@@ -95,7 +95,7 @@ shapeL :: Array n a -> ShapeL shapeL = G.shapeL . unA --- | The rank of an array, i.e., the number if dimensions it has,+-- | The rank of an array, i.e., the number of dimensions it has, -- which is the @n@ in @Array n a@. -- O(1) time. rank :: (KnownNat n) => Array n a -> Int@@ -108,23 +108,27 @@ -- | Convert to a list with the elements in the linearization order. -- O(n) time.+{-# INLINABLE toList #-} toList :: (Unbox a) => Array n a -> [a] toList = G.toList . unA -- | Convert from a list with the elements given in the linearization order. -- Fails if the given shape does not have the same number of elements as the list. -- O(n) time.+{-# INLINABLE fromList #-} fromList :: (Unbox a, KnownNat n) => ShapeL -> [a] -> Array n a fromList ss = A . G.fromList ss -- | Convert to a vector with the elements in the linearization order. -- O(n) or O(1) time (the latter if the vector is already in the linearization order).+{-# INLINABLE toVector #-} toVector :: (Unbox a) => Array n a -> V.Vector a toVector = G.toVector . unA -- | Convert from a vector with the elements given in the linearization order. -- Fails if the given shape does not have the same number of elements as the list. -- O(1) time.+{-# INLINABLE fromVector #-} fromVector :: (Unbox a, KnownNat n) => ShapeL -> V.Vector a -> Array n a fromVector ss = A . G.fromVector ss @@ -210,12 +214,14 @@ -- | Turn a rank-1 array of arrays into a single array by making the outer array into the outermost -- dimension of the result array. All the arrays must have the same shape. -- O(n) time.+{-# INLINABLE ravel #-} ravel :: (Unbox a, KnownNat (1+n)) => R.Array 1 (Array n a) -> Array (1+n) a ravel = A . G.ravel . G.mapA unA . R.unA -- | Turn an array into a nested array, this is the inverse of 'ravel'. -- I.e., @ravel . unravel == id@.+{-# INLINABLE unravel #-} unravel :: (Unbox a) => Array (1+n) a -> R.Array 1 (Array n a) unravel = R.A . G.mapA A . G.unravel . unA@@ -259,8 +265,8 @@ -- | Extract a slice of an array. -- The first argument is a list of (offset, length) pairs.--- The length of the slicing argument must not exceed the rank of the arrar.--- The extracted slice mul fall within the array dimensions.+-- The length of the slicing argument must not exceed the rank of the array.+-- The extracted slice must fall within the array dimensions. -- E.g. @slice [1,2] (fromList [4] [1,2,3,4]) == [2,3]@. -- O(1) time. slice :: [(Int, Int)] -> Array n a -> Array n a
Data/Array/Internal/RankedU.hs view
@@ -94,7 +94,7 @@ shapeL :: Array n a -> ShapeL shapeL = G.shapeL . unA --- | The rank of an array, i.e., the number if dimensions it has,+-- | The rank of an array, i.e., the number of dimensions it has, -- which is the @n@ in @Array n a@. -- O(1) time. rank :: (KnownNat n) => Array n a -> Int@@ -258,8 +258,8 @@ -- | Extract a slice of an array. -- The first argument is a list of (offset, length) pairs.--- The length of the slicing argument must not exceed the rank of the arrar.--- The extracted slice mul fall within the array dimensions.+-- The length of the slicing argument must not exceed the rank of the array.+-- The extracted slice must fall within the array dimensions. -- E.g. @slice [1,2] (fromList [4] [1,2,3,4]) == [2,3]@. -- O(1) time. slice :: [(Int, Int)] -> Array n a -> Array n a
Data/Array/Internal/Shaped.hs view
@@ -92,7 +92,7 @@ shapeL :: (Shape sh) => Array sh a -> ShapeL shapeL = G.shapeL . unA --- | The rank of an array, i.e., the number if dimensions it has,+-- | The rank of an array, i.e., the number of dimensions it has, -- which is the @n@ in @Array n a@. -- O(1) time. rank :: (Shape sh, KnownNat (Rank sh)) => Array sh a -> Int@@ -249,8 +249,8 @@ -- | Extract a slice of an array. -- The first argument is a list of (offset, length) pairs.--- The length of the slicing argument must not exceed the rank of the arrar.--- The extracted slice mul fall within the array dimensions.+-- The length of the slicing argument must not exceed the rank of the array.+-- The extracted slice must fall within the array dimensions. -- E.g. @slice [1,2] (fromList [4] [1,2,3,4]) == [2,3]@. -- O(1) time. slice :: forall sl sh' sh a .
Data/Array/Internal/ShapedG.hs view
@@ -107,7 +107,7 @@ shapeL :: forall sh v a . (Shape sh) => Array sh v a -> ShapeL shapeL _ = shapeP (Proxy :: Proxy sh) --- | The rank of an array, i.e., the number if dimensions it has.+-- | The rank of an array, i.e., the number of dimensions it has. -- O(1) time. {-# INLINE rank #-} rank :: forall sh v a . (Shape sh, KnownNat (Rank sh)) => Array sh v a -> Int@@ -172,14 +172,14 @@ reshape :: forall sh' sh v a . (Vector v, VecElem v a, Shape sh, Shape sh', Size sh ~ Size sh') => Array sh v a -> Array sh' v a-reshape a = reshape' (shapeL a) (shapeP (Proxy :: Proxy sh')) a+reshape a = reshape' (shapeP (Proxy :: Proxy sh')) (shapeL a) a reshape' :: (Vector v, VecElem v a) => ShapeL -> ShapeL -> Array sh v a -> Array sh' v a reshape' sh sh' (A t@(T ost oo v)) | vLength v == 1 = A $ T (map (const 0) sh) 0 v -- Fast special case for singleton vector- | Just nst <- simpleReshape ost sh sh' = A $ T nst oo v- | otherwise = A $ fromVectorT sh' $ toVectorT sh t+ | Just nst <- simpleReshape ost sh' sh = A $ T nst oo v+ | otherwise = A $ fromVectorT sh $ toVectorT sh' t -- | Change the size of dimensions with size 1. These dimension can be changed to any size. -- All other dimensions must remain the same.@@ -430,7 +430,7 @@ -- | Test if the predicate holds for all elements. {-# INLINE allA #-} allA :: (Vector v, VecElem v a, Shape sh) => (a -> Bool) -> Array sh v a -> Bool-allA p a@(A t) = anyT (shapeL a) p t+allA p a@(A t) = allT (shapeL a) p t -- | Put the dimensions of the argument into the specified dimensions, -- and just replicate the data along all other dimensions.
Data/Array/Internal/ShapedS.hs view
@@ -96,7 +96,7 @@ shapeL :: (Shape sh) => Array sh a -> ShapeL shapeL = G.shapeL . unA --- | The rank of an array, i.e., the number if dimensions it has,+-- | The rank of an array, i.e., the number of dimensions it has, -- which is the @n@ in @Array n a@. -- O(1) time. rank :: (Shape sh, KnownNat (Rank sh)) => Array sh a -> Int@@ -109,23 +109,27 @@ -- | Convert to a list with the elements in the linearization order. -- O(n) time.+{-# INLINABLE toList #-} toList :: forall sh a . (Unbox a, Shape sh) => Array sh a -> [a] toList = G.toList . unA -- | Convert from a list with the elements given in the linearization order. -- Fails if the given shape does not have the same number of elements as the list. -- O(n) time.+{-# INLINABLE fromList #-} fromList :: forall sh a . (HasCallStack, Unbox a, Shape sh) => [a] -> Array sh a fromList = A . G.fromList -- | Convert to a vector with the elements in the linearization order. -- O(n) or O(1) time (the latter if the vector is already in the linearization order).+{-# INLINABLE toVector #-} toVector :: (Unbox a, Shape sh) => Array sh a -> V.Vector a toVector = G.toVector . unA -- | Convert from a vector with the elements given in the linearization order. -- Fails if the given shape does not have the same number of elements as the list. -- O(1) time.+{-# INLINABLE fromVector #-} fromVector :: forall sh a . (HasCallStack, Unbox a, Shape sh) => V.Vector a -> Array sh a fromVector = A . G.fromVector @@ -136,7 +140,7 @@ normalize :: (Unbox a, Shape sh) => Array sh a -> Array sh a normalize = A . G.normalize . unA --- | Change the shape of an array. Fails if the arrays have different number of elements.+-- | Change the shape of an array. Type error if the arrays have different number of elements. -- O(n) or O(1) time. reshape :: forall sh' sh a . (Unbox a, Shape sh, Shape sh', Size sh ~ Size sh') => Array sh a -> Array sh' a@@ -208,12 +212,14 @@ -- | Turn a rank-1 array of arrays into a single array by making the outer array into the outermost -- dimension of the result array. All the arrays must have the same shape. -- O(n) time.+{-# INLINABLE ravel #-} ravel :: (Unbox a, Shape sh, KnownNat s) => S.Array '[s] (Array sh a) -> Array (s:sh) a ravel = A . G.ravel . G.mapA unA . S.unA -- | Turn an array into a nested array, this is the inverse of 'ravel'. -- I.e., @ravel . unravel == id@.+{-# INLINABLE unravel #-} unravel :: (Unbox a, Shape sh, KnownNat s) => Array (s:sh) a -> S.Array '[s] (Array sh a) unravel = S.A . G.mapA A . G.unravel . unA@@ -240,8 +246,8 @@ -- | Extract a slice of an array. -- The first argument is a list of (offset, length) pairs.--- The length of the slicing argument must not exceed the rank of the arrar.--- The extracted slice mul fall within the array dimensions.+-- The length of the slicing argument must not exceed the rank of the array.+-- The extracted slice must fall within the array dimensions. -- E.g. @slice [1,2] (fromList [4] [1,2,3,4]) == [2,3]@. -- O(1) time. slice :: forall sl sh' sh a .
Data/Array/Internal/ShapedU.hs view
@@ -94,7 +94,7 @@ shapeL :: (Shape sh) => Array sh a -> ShapeL shapeL = G.shapeL . unA --- | The rank of an array, i.e., the number if dimensions it has,+-- | The rank of an array, i.e., the number of dimensions it has, -- which is the @n@ in @Array n a@. -- O(1) time. rank :: (Shape sh, KnownNat (Rank sh)) => Array sh a -> Int@@ -134,7 +134,7 @@ normalize :: (Unbox a, Shape sh) => Array sh a -> Array sh a normalize = A . G.normalize . unA --- | Change the shape of an array. Fails if the arrays have different number of elements.+-- | Change the shape of an array. Type error if the arrays have different number of elements. -- O(n) or O(1) time. reshape :: forall sh' sh a . (Unbox a, Shape sh, Shape sh', Size sh ~ Size sh') => Array sh a -> Array sh' a@@ -238,8 +238,8 @@ -- | Extract a slice of an array. -- The first argument is a list of (offset, length) pairs.--- The length of the slicing argument must not exceed the rank of the arrar.--- The extracted slice mul fall within the array dimensions.+-- The length of the slicing argument must not exceed the rank of the array.+-- The extracted slice must fall within the array dimensions. -- E.g. @slice [1,2] (fromList [4] [1,2,3,4]) == [2,3]@. -- O(1) time. slice :: forall sl sh' sh a .
README.md view
@@ -84,6 +84,8 @@ fromList [2,3] [1,2,3,4,5,6] > shapeL m [2,3]+> rank m+2 > size m 6 ```@@ -116,4 +118,135 @@ 13 14 15 16 17 18 19 20 21 22 23 24+```++Indexing into an array removes the outermost dimension of it by selecting a subarray with the given index.++```+> pp $ index v 1+8+> shapeL $ index v 1+[]+> pp $ index a 1+13 14 15 16+17 18 19 20+21 22 23 24+> pp $ a `index` 1 `index` 2 `index` 0+21+```++The `scalar` and `unScalar` functions can be used to convert an element to/from and array.+```+> :type scalar 42+scalar 42 :: Num a => Array a+> :type index v 1+index v 1 :: Num a => Array a+> :type unScalar (index v 1)+unScalar (index v 1) :: Num a => a+```++The `constant` function makes an array with all identical elements.++```+> pp $ constant [2,3] 8+8 8 8+8 8 8+```++Arrays are also instances of `Functor`, `Foldable`, and `Traversable`.++```+> pp $ fmap succ v+ 8 9 10+foldr (+) 0 a+300+```++The `transpose` operation can be used to rearrange the dimensions of an array.+The first argument describes how to transpose.++```+> shapeL a+[2,3,4]+> shapeL (transpose [1,0,2] a)+[3,2,4]+> pp $ transpose [1,0,2] a+ 1 2 3 4+13 14 15 16++ 5 6 7 8+17 18 19 20++ 9 10 11 12+21 22 23 24+```++The `reshape` operation keeps the elements of an array,+but changes its shape.++```+> pp $ reshape [3,8] a+ 1 2 3 4 5 6 7 8+ 9 10 11 12 13 14 15 16+17 18 19 20 21 22 23 24+```++++### Similar examples using `Shaped`++```+> import Data.Array.Shaped+> :set -XDataKinds+> :set -XTypeApplications+```++The shape is now given by the type.++```+> m :: Array [2,3] Integer; m = fromList [1..6]+> m+fromList @[2,3] [1,2,3,4,5,6]+> shapeL m+[2,3]+> rank m+2+> size m+6+```++The type information can be given in different ways.++```+> s :: Array '[] Integer; s = fromList [42]+> v = fromList [7,8,9] :: Array '[3] Integer+> m = fromList @[2,3,4] [1..24]+```++There are also numeric instances for shaped arrays.+They allow pointwise arithmetic on arrays with the same shape.+Numeric constants are automatically of the right shape.++```+> import Data.Array.Shaped.Instances+> pp $ v * 2+14 16 18+> pp $ a + a+ 2 4 6 8+10 12 14 16+18 20 22 24++26 28 30 32+34 36 38 40+42 44 46 48+```++What is value arguments for `Dynamic` arrays sometimes turn into type arguments+for shaped arrays.++```+> pp $ reshape @[3,8] a+ 1 2 3 4 5 6 7 8+ 9 10 11 12 13 14 15 16+17 18 19 20 21 22 23 24 ```
orthotope.cabal view
@@ -1,5 +1,5 @@ name: orthotope-version: 0.1.2.0+version: 0.1.4.0 synopsis: Multidimensional arrays inspired by APL license: Apache license-file: LICENSE@@ -55,12 +55,12 @@ , Data.Array.Internal.ShapedS , Data.Array.Internal.ShapedU - build-depends: base >= 4.12 && < 4.18- , deepseq- , dlist- , pretty- , QuickCheck- , vector+ build-depends: base >= 4.12 && < 4.18,+ QuickCheck >= 2.14.3 && < 2.15,+ deepseq >= 1.4.6 && < 1.5,+ pretty >= 1.1.3 && < 1.2,+ dlist >= 1.0 && < 1.1,+ vector >= 0.13.0 && < 0.14 default-language: Haskell2010 @@ -85,9 +85,9 @@ base, deepseq, orthotope,- test-framework >= 0.3.3,- test-framework-quickcheck2,- test-framework-hunit,- HUnit,+ HUnit >= 1.6.2 && < 1.7,+ test-framework >= 0.8.2 && < 0.9,+ test-framework-hunit >= 0.3.0 && < 0.4,+ test-framework-quickcheck2 >= 0.3.0 && < 0.4, QuickCheck >= 2.4.0.1, vector