ranged-list 0.1.0.0 → 0.1.0.1
raw patch · 8 files changed
+35/−29 lines, 8 filesPVP: major bump suggested
API removals or changes: PVP suggests a major version bump
API changes (from Hackage documentation)
- Data.List.Range: instance (Data.List.Range.RangeL.PushL (v GHC.TypeNats.- 1) (w GHC.TypeNats.- 1), Data.List.Range.RangeL.LoosenLMax v w (m GHC.TypeNats.+ w), Data.List.Range.RightToLeft 0 (m GHC.TypeNats.- 1) v (w GHC.TypeNats.+ 1)) => Data.List.Range.RightToLeft 0 m v w
- Data.List.Range: instance (Data.List.Range.RangeR.PushR (n GHC.TypeNats.- 1) (m GHC.TypeNats.- 1), Data.List.Range.RangeR.LoosenRMax n m (m GHC.TypeNats.+ w), Data.List.Range.LeftToRight n (m GHC.TypeNats.+ 1) 0 (w GHC.TypeNats.- 1)) => Data.List.Range.LeftToRight n m 0 w
+ Data.List.Range: instance (1 GHC.TypeNats.<= n, Data.List.Range.RangeR.PushR (n GHC.TypeNats.- 1) (m GHC.TypeNats.- 1), Data.List.Range.RangeR.LoosenRMax n m (m GHC.TypeNats.+ w), Data.List.Range.LeftToRight n (m GHC.TypeNats.+ 1) 0 (w GHC.TypeNats.- 1)) => Data.List.Range.LeftToRight n m 0 w
+ Data.List.Range: instance (1 GHC.TypeNats.<= v, Data.List.Range.RangeL.PushL (v GHC.TypeNats.- 1) (w GHC.TypeNats.- 1), Data.List.Range.RangeL.LoosenLMax v w (m GHC.TypeNats.+ w), Data.List.Range.RightToLeft 0 (m GHC.TypeNats.- 1) v (w GHC.TypeNats.+ 1)) => Data.List.Range.RightToLeft 0 m v w
- Data.List.Length: repeatL :: Unfoldr 0 n n => a -> LengthL n a
+ Data.List.Length: repeatL :: (0 <= n, Unfoldr 0 n n) => a -> LengthL n a
- Data.List.Length: repeatR :: Unfoldl 0 n n => a -> LengthR n a
+ Data.List.Length: repeatR :: (0 <= n, Unfoldl 0 n n) => a -> LengthR n a
- Data.List.Length: unfoldl :: Unfoldl 0 n n => (s -> (s, a)) -> s -> LengthR n a
+ Data.List.Length: unfoldl :: (0 <= n, Unfoldl 0 n n) => (s -> (s, a)) -> s -> LengthR n a
- Data.List.Length: unfoldlM :: (Monad m, Unfoldl 0 n n) => m a -> m (LengthR n a)
+ Data.List.Length: unfoldlM :: (Monad m, 0 <= n, Unfoldl 0 n n) => m a -> m (LengthR n a)
- Data.List.Length: unfoldr :: Unfoldr 0 n n => (s -> (a, s)) -> s -> LengthL n a
+ Data.List.Length: unfoldr :: (0 <= n, Unfoldr 0 n n) => (s -> (a, s)) -> s -> LengthL n a
- Data.List.Length: unfoldrM :: (Monad m, Unfoldr 0 n n) => m a -> m (LengthL n a)
+ Data.List.Length: unfoldrM :: (Monad m, 0 <= n, Unfoldr 0 n n) => m a -> m (LengthL n a)
- Data.List.Range.Nat: natL :: Unfoldr 0 n n => RangedNatL n n
+ Data.List.Range.Nat: natL :: (0 <= n, Unfoldr 0 n n) => RangedNatL n n
- Data.List.Range.Nat: natR :: Unfoldl 0 n n => RangedNatR n n
+ Data.List.Range.Nat: natR :: (0 <= n, Unfoldl 0 n n) => RangedNatR n n
Files
- ranged-list.cabal +3/−3
- src/Data/List/Length.hs +4/−2
- src/Data/List/Length/LengthL.hs +3/−3
- src/Data/List/Length/LengthR.hs +3/−3
- src/Data/List/Range.hs +2/−2
- src/Data/List/Range/Nat.hs +6/−2
- src/Data/List/Range/RangeL.hs +7/−7
- src/Data/List/Range/RangeR.hs +7/−7
ranged-list.cabal view
@@ -1,13 +1,13 @@ cabal-version: 1.12 --- This file has been generated from package.yaml by hpack version 0.33.0.+-- This file has been generated from package.yaml by hpack version 0.34.4. -- -- see: https://github.com/sol/hpack ----- hash: 42c7def6fb4ed75b8b978a1de4cdf116653323fb1cee0e251bceaa00ef7be780+-- hash: 349e85c819f827a30071512b7dc4e2e3b2add699054a5d970f833e60ce71577d name: ranged-list-version: 0.1.0.0+version: 0.1.0.1 synopsis: The list like structure whose length or range of length can be specified description: Please see the README on GitHub at <https://github.com/YoshikuniJujo/ranged-list#readme> category: List
src/Data/List/Length.hs view
@@ -57,6 +57,8 @@ LengthR, unfoldl, unfoldlWithBase, unfoldlM, unfoldlMWithBase, ListToLengthR, listToLengthR ) +import GHC.TypeNats+ --------------------------------------------------------------------------- -- LENGTH LEFT@@ -66,7 +68,7 @@ -- LENGTH LEFT --------------------------------------------------------------------------- -repeatL :: Unfoldr 0 n n => a -> LengthL n a+repeatL :: (0 <= n, Unfoldr 0 n n) => a -> LengthL n a repeatL = fillL NilL {-^@@ -128,7 +130,7 @@ -- LENGTH RIGHT --------------------------------------------------------------------------- -repeatR :: Unfoldl 0 n n => a -> LengthR n a+repeatR :: (0 <= n, Unfoldl 0 n n) => a -> LengthR n a repeatR = (`fillR` NilR) {-^
src/Data/List/Length/LengthL.hs view
@@ -27,7 +27,7 @@ -- UNFOLDR --------------------------------------------------------------------------- -unfoldr :: Unfoldr 0 n n => (s -> (a, s)) -> s -> LengthL n a+unfoldr :: (0 <= n, Unfoldr 0 n n) => (s -> (a, s)) -> s -> LengthL n a unfoldr = unfoldrWithBase NilL {-^@@ -56,7 +56,7 @@ -} -unfoldrM :: (Monad m, Unfoldr 0 n n) => m a -> m (LengthL n a)+unfoldrM :: (Monad m, 0 <= n, Unfoldr 0 n n) => m a -> m (LengthL n a) unfoldrM = unfoldrMWithBase NilL {-^@@ -114,7 +114,7 @@ splitL = \case [] -> Left NilL; x : xs -> Right (x :. NilL, xs) instance {-# OVERLAPPABLE #-}- (1 <= n, 1 <= (n - 1), ListToLengthL (n - 1)) => ListToLengthL n where+ (1 <= n, 1 <= (n - 1), 0 <= (n - 1), ListToLengthL (n - 1)) => ListToLengthL n where splitL = \case [] -> Left NilL x : xs -> (x :..) +++ ((x :.) `first`) $ splitL xs
src/Data/List/Length/LengthR.hs view
@@ -39,7 +39,7 @@ -- UNFOLDL --------------------------------------------------------------------------- -unfoldl :: Unfoldl 0 n n => (s -> (s, a)) -> s -> LengthR n a+unfoldl :: (0 <= n, Unfoldl 0 n n) => (s -> (s, a)) -> s -> LengthR n a unfoldl f s = unfoldlWithBase f s NilR {-^@@ -68,7 +68,7 @@ -} -unfoldlM :: (Monad m, Unfoldl 0 n n) => m a -> m (LengthR n a)+unfoldlM :: (Monad m, 0 <= n, Unfoldl 0 n n) => m a -> m (LengthR n a) unfoldlM = (`unfoldlMWithBase` NilR) {-^@@ -125,7 +125,7 @@ listToLengthR = \case [] -> Left NilR; x : xs -> Right (NilR :+ x, xs) instance {-# OVERLAPPABLE #-}- (1 <= n, 1 <= (n - 1), ListToLengthR (n - 1)) => ListToLengthR n where+ (1 <= n, 1 <= (n - 1), 0 <= (n - 1), ListToLengthR (n - 1)) => ListToLengthR n where listToLengthR = \case [] -> Left NilR x : xs -> (:++ x) +++ ((:+ x) `first`) $ listToLengthR xs
src/Data/List/Range.hs view
@@ -279,7 +279,7 @@ instance LeftToRight n m 0 0 where n ++.+ _ = n instance {-# OVERLAPPABLE #-} (- PushR (n - 1) (m - 1), LoosenRMax n m (m + w),+ 1 <= n, PushR (n - 1) (m - 1), LoosenRMax n m (m + w), LeftToRight n (m + 1) 0 (w - 1) ) => LeftToRight n m 0 w where (++.+) n = \case NilL -> loosenRMax n; x :.. v -> n .:++ x ++.+ v @@ -339,7 +339,7 @@ instance RightToLeft 0 0 v w where _ ++.. v = v instance {-# OVERLAPPABLE #-} (- PushL (v - 1) (w - 1), LoosenLMax v w (m + w),+ 1 <= v, PushL (v - 1) (w - 1), LoosenLMax v w (m + w), RightToLeft 0 (m - 1) v (w + 1) ) => RightToLeft 0 m v w where (++..) = \case NilR -> loosenLMax; n :++ x -> (n ++..) . (x .:..)
src/Data/List/Range/Nat.hs view
@@ -3,6 +3,8 @@ {-# LANGUAGE FlexibleContexts #-} {-# OPTIONS_GHC -Wall -fno-warn-tabs #-} +{-# LANGUAGE GADTs #-}+ module Data.List.Range.Nat ( -- * RangedNatL RangedNatL, natL, toIntL, fromIntL, splitAtL,@@ -16,6 +18,8 @@ RangeL, Unfoldr, unfoldrRangeMaybe, ZipL, zipWithL, RangeR, Unfoldl, unfoldlRangeMaybe, ZipR, zipWithR ) +import GHC.TypeNats+ --------------------------------------------------------------------------- -- * RANGED NAT LEFT@@ -27,7 +31,7 @@ type RangedNatL n m = RangeL n m () -natL :: Unfoldr 0 n n => RangedNatL n n+natL :: (0 <= n, Unfoldr 0 n n) => RangedNatL n n natL = repeatL () {-^@@ -92,7 +96,7 @@ type RangedNatR n m = RangeR n m () -natR :: Unfoldl 0 n n => RangedNatR n n+natR :: (0 <= n, Unfoldl 0 n n) => RangedNatR n n natR = repeatR () {-^
src/Data/List/Range/RangeL.hs view
@@ -276,7 +276,7 @@ loosenLMin (x :. xs) = x :.. loosenLMin xs instance {-# OVERLAPPABLE #-}- (1 <= n, LoosenLMin (n - 1) (m - 1) (v - 1)) => LoosenLMin n m v where+ (1 <= n, 1 <= v, LoosenLMin (n - 1) (m - 1) (v - 1)) => LoosenLMin n m v where loosenLMin (x :. xs) = x :. loosenLMin xs -- LOOSEN LEFT MAX@@ -302,11 +302,11 @@ instance LoosenLMax 0 0 w where loosenLMax NilL = NilL instance {-# OVERLAPPABLE #-}- LoosenLMax 0 (m - 1) (w - 1) => LoosenLMax 0 m w where+ (1 <= w, LoosenLMax 0 (m - 1) (w - 1)) => LoosenLMax 0 m w where loosenLMax = \case NilL -> NilL; (x :.. xs) -> x :.. loosenLMax xs instance {-# OVERLAPPABLE #-}- (1 <= n, LoosenLMax (n - 1) (m - 1) (w - 1)) => LoosenLMax n m w where+ (1 <= n, 1 <= w, LoosenLMax (n - 1) (m - 1) (w - 1)) => LoosenLMax n m w where loosenLMax (x :. xs) = x :. loosenLMax xs ---------------------------------------------------------------------------@@ -362,7 +362,7 @@ unfoldrMRangeWithBase NilL _ _ = pure NilL unfoldrMRangeMaybeWithBase NilL p _ = bool (Just NilL) Nothing <$> p -instance {-# OVERLAPPABLE #-} Unfoldr 0 0 (w - 1) => Unfoldr 0 0 w where+instance {-# OVERLAPPABLE #-} (1 <= w, Unfoldr 0 0 (w - 1)) => Unfoldr 0 0 w where unfoldrMRangeWithBase NilL p f = (p >>=) . bool (pure NilL) $ f >>= \x -> (x :..) <$> unfoldrMRangeWithBase NilL p f@@ -376,7 +376,7 @@ ((x :..) <$>) <$> unfoldrMRangeMaybeWithBase xs p f instance {-# OVERLAPPABLE #-}- Unfoldr 0 (v - 1) (w - 1) => Unfoldr 0 v w where+ (1 <= v, 1 <= w, Unfoldr 0 (v - 1) (w - 1)) => Unfoldr 0 v w where unfoldrMRangeWithBase NilL p f = f >>= \x -> (x :.) <$> unfoldrMRangeWithBase NilL p f unfoldrMRangeWithBase (x :.. xs) p f =@@ -389,7 +389,7 @@ ((x :.) <$>) <$> unfoldrMRangeMaybeWithBase xs p f instance {-# OVERLAPPABLE #-}- (1 <= n, Unfoldr (n - 1) (v - 1) (w - 1)) => Unfoldr n v w where+ (1 <= n, 1 <= v, Unfoldr (n - 1) (v - 1) (w - 1)) => Unfoldr n v w where unfoldrMRangeWithBase (x :. xs) p f = (x :.) <$> unfoldrMRangeWithBase xs p f @@ -588,7 +588,7 @@ instance ZipL 0 0 v w where zipWithML _ NilL = pure . (NilL ,) instance {-# OVERLAPPABLE #-} (- 1 <= v, LoosenLMin v w (v - m), LoosenLMax (v - m) (w - 1) w,+ 1 <= v, m <= v, LoosenLMin v w (v - m), LoosenLMax (v - m) (w - 1) w, ZipL 0 (m - 1) (v - 1) (w - 1) ) => ZipL 0 m v w where zipWithML _ NilL ys = pure (NilL, loosenLMin ys) zipWithML (%) (x :.. xs) (y :. ys) =
src/Data/List/Range/RangeR.hs view
@@ -267,7 +267,7 @@ loosenRMin (xs :+ x) = loosenRMin xs :++ x instance {-# OVERLAPPABLE #-}- (1 <= n, LoosenRMin (n - 1) (m - 1) (v - 1)) => LoosenRMin n m v where+ (1 <= n, 1 <= v, LoosenRMin (n - 1) (m - 1) (v - 1)) => LoosenRMin n m v where loosenRMin (xs :+ x) = loosenRMin xs :+ x -- LOOSEN RIGHT MAX@@ -293,11 +293,11 @@ instance LoosenRMax 0 0 m where loosenRMax NilR = NilR instance {-# OVERLAPPABLE #-}- LoosenRMax 0 (m - 1) (w - 1) => LoosenRMax 0 m w where+ (1 <= w, LoosenRMax 0 (m - 1) (w - 1)) => LoosenRMax 0 m w where loosenRMax = \case NilR -> NilR; xs :++ x -> loosenRMax xs :++ x instance {-# OVERLAPPABLE #-}- (1 <= n, LoosenRMax (n - 1) (m - 1) (w - 1)) => LoosenRMax n m w where+ (1 <= n, 1 <= w, LoosenRMax (n - 1) (m - 1) (w - 1)) => LoosenRMax n m w where loosenRMax (xs :+ x) = loosenRMax xs :+ x ---------------------------------------------------------------------------@@ -354,7 +354,7 @@ unfoldlMRangeWithBase _ _ NilR = pure NilR unfoldlMRangeMaybeWithBase p _ NilR = bool (Just NilR) Nothing <$> p -instance {-# OVERLAPPABLE #-} Unfoldl 0 0 (w - 1) => Unfoldl 0 0 w where+instance {-# OVERLAPPABLE #-} (1 <= w, Unfoldl 0 0 (w - 1)) => Unfoldl 0 0 w where unfoldlMRangeWithBase p f = \case NilR -> (p >>=) . bool (pure NilR) $ f >>= \x -> (:++ x) <$> unfoldlMRangeWithBase p f NilR@@ -365,7 +365,7 @@ ((:++ x) <$>) <$> unfoldlMRangeMaybeWithBase p f NilR xs :++ x -> ((:++ x) <$>) <$> unfoldlMRangeMaybeWithBase p f xs -instance {-# OVERLAPPABLE #-} Unfoldl 0 (v - 1) (w - 1) => Unfoldl 0 v w where+instance {-# OVERLAPPABLE #-} (1 <= v, 1 <= w, Unfoldl 0 (v - 1) (w - 1)) => Unfoldl 0 v w where unfoldlMRangeWithBase p f = \case NilR -> f >>= \x -> (:+ x) <$> unfoldlMRangeWithBase p f NilR xs :++ x -> (:+ x) <$> unfoldlMRangeWithBase p f xs@@ -376,7 +376,7 @@ xs :++ x -> ((:+ x) <$>) <$> unfoldlMRangeMaybeWithBase p f xs instance {-# OVERLAPPABLE #-}- (1 <= n, Unfoldl (n - 1) (v - 1) (w - 1)) => Unfoldl n v w where+ (1 <= n, 1 <= v, Unfoldl (n - 1) (v - 1) (w - 1)) => Unfoldl n v w where unfoldlMRangeWithBase p f (xs :+ x) = (:+ x) <$> unfoldlMRangeWithBase p f xs @@ -572,7 +572,7 @@ instance ZipR n m 0 0 where zipWithMR _ xs NilR = pure (xs, NilR) instance {-# OVERLAPPABLE #-} (- 1 <= n, LoosenRMin n m (n - w), LoosenRMax (n - w) (m - 1) m,+ 1 <= n, 1 <= m, w <= n, LoosenRMin n m (n - w), LoosenRMax (n - w) (m - 1) m, ZipR (n - 1) (m - 1) 0 (w - 1) ) => ZipR n m 0 w where zipWithMR _ xs NilR = pure (loosenRMin xs, NilR) zipWithMR (%) (xs :+ x) (ys :++ y) =