packages feed

q4c12-twofinger 0.0.0.1 → 0.0.0.2

raw patch · 3 files changed

+21/−30 lines, 3 filesdep ~bifunctorsPVP: minor bump suggested

API additions: PVP suggests at least a minor version bump

Dependency ranges changed: bifunctors

API changes (from Hackage documentation)

+ Q4C12.TwoFinger.Internal: takeSingleNodeLeft :: Stream a -> Stream e -> (Node e a, Stream a, Stream e)
+ Q4C12.TwoFinger.Internal: takeSingleNodeRight :: Stream e -> Stream a -> (Node e a, Stream e, Stream a)

Files

CHANGELOG.markdown view
@@ -1,3 +1,8 @@+q4c12-twofinger 0.0.0.2 (2017-12-08)+====================================++* Loosened `bifunctors` dependency bounds.+ q4c12-twofinger 0.0.0.1 (2017-12-08) ==================================== 
q4c12-twofinger.cabal view
@@ -2,10 +2,10 @@ -- -- see: https://github.com/sol/hpack ----- hash: 170352bc018b512f91fd2fd5b865796d5ba48ca28bccf4ef9d162864f7ffa13d+-- hash: ee28f4558151511959af58b3246f5e92eff0db31bede2ae44ebfe4721ab36575  name:           q4c12-twofinger-version:        0.0.0.1+version:        0.0.0.2 synopsis:       Efficient alternating finger trees description:    This package provides efficient alternating sequences based on finger trees. These can represent sequences made up of two types of element, @e@ and @a@  where two of the same type of element cannot follow each other directly.                 .@@ -13,7 +13,7 @@                 .                 Cons-like operations are /O(1)/ amortised, and append operations are /O(log(min(n, m)))/ amortised.                 .-                For more details, please see the Haddock documentation of 'Q4C12.TwoFinger'.+                For more details, please see the Haddock documentation of "Q4C12.TwoFinger". category:       Data Structures homepage:       https://github.com/quasicomputational/mega/tree/master/packages/twofinger bug-reports:    https://github.com/quasicomputational/mega/issues@@ -54,7 +54,7 @@     , streams >=3.3 && <3.4   if impl(ghc < 8.2)     build-depends:-        bifunctors >=5.4.2 && <5.5+        bifunctors >=5.4.2 && <5.6   default-language: Haskell2010  test-suite doctests
src/Q4C12/TwoFinger/Internal.hs view
@@ -1411,6 +1411,12 @@       (y, es'', as'') = f es' as'   in (Node2 y a x, es'', as'') +takeSingleNodeLeft :: Stream a -> Stream e -> (Node e a, Stream a, Stream e)+takeSingleNodeLeft = takeNodeLeft (\as (e :> es) -> (e, as, es))++takeSingleNodeRight :: Stream e -> Stream a -> (Node e a, Stream e, Stream a)+takeSingleNodeRight = takeNodeRight (\(e :> es) as -> (e, es, as))+ infiniteOddA'   :: (Stream a -> Stream e -> (Node e' a, Stream a, Stream e))   -> (Stream e -> Stream a -> (Node e' a, Stream e, Stream a))@@ -1439,7 +1445,7 @@ -- >>> take 5 $ unfoldr (fmap swap . hush . unsnocOddA) infinite -- [(20,30),(21,31),(22,32),(23,33),(24,34)] infiniteOddA :: Stream a -> Stream e -> Stream e -> Stream a -> TwoFingerOddA e a-infiniteOddA = infiniteOddA' (takeNodeLeft (\as (e :> es) -> (e, as, es))) (takeNodeRight (\(e :> es) as -> (e, es, as)))+infiniteOddA = infiniteOddA' takeSingleNodeLeft takeSingleNodeRight  -- | Infinitely repeat the given @a@ and @e@. --@@ -1459,13 +1465,9 @@ infiniteOddE leftE leftA rightA rightE =   DeepOddE (nodeToDigit prNode) inner (nodeToDigit sfNode)   where-    f :: Stream a -> Stream e -> (Node e a, Stream a, Stream e)-    f = takeNodeLeft (\as (e :> es) -> (e, as, es))-    g :: Stream e -> Stream a -> (Node e a, Stream e, Stream a)-    g = takeNodeRight (\(e :> es) as -> (e, es, as))-    (prNode, leftE', leftA') = f leftA leftE-    (sfNode, rightA', rightE') = g rightE rightA-    inner = infiniteOddA' (takeNodeLeft f) (takeNodeRight g) leftE' leftA' rightA' rightE'+    (prNode, leftE', leftA') = takeSingleNodeLeft leftA leftE+    (sfNode, rightA', rightE') = takeSingleNodeRight rightE rightA+    inner = infiniteOddA' (takeNodeLeft takeSingleNodeLeft) (takeNodeRight takeSingleNodeRight) leftE' leftA' rightA' rightE'  -- | Infinitely repeat the given @a@ and @e@. --@@ -1483,15 +1485,7 @@ -- [(20,30),(21,31),(22,32),(23,33),(24,34)] infiniteEvenA :: Stream a -> Stream e -> Stream a -> Stream e -> TwoFingerEvenA e a infiniteEvenA (a :> leftA) leftE rightA rightE =-  DeepEvenA a (nodeToDigit prNode) inner (nodeToDigit sfNode)-  where-    f :: Stream a -> Stream e -> (Node e a, Stream a, Stream e)-    f = takeNodeLeft (\as (e :> es) -> (e, as, es))-    g :: Stream e -> Stream a -> (Node e a, Stream e, Stream a)-    g = takeNodeRight (\(e :> es) as -> (e, es, as))-    (prNode, leftE', leftA') = f leftA leftE-    (sfNode, rightA', rightE') = g rightE rightA-    inner = infiniteOddA' (takeNodeLeft f) (takeNodeRight g) leftE' leftA' rightA' rightE'+  halfconsOddE a $ infiniteOddE leftE leftA rightA rightE  -- | --@@ -1509,12 +1503,4 @@ -- [(20,30),(21,31),(22,32),(23,33),(24,34)] infiniteEvenE :: Stream e -> Stream a -> Stream e -> Stream a -> TwoFingerEvenE e a infiniteEvenE leftE leftA rightE (a :> rightA) =-  DeepEvenE (nodeToDigit prNode) inner (nodeToDigit sfNode) a-  where-    f :: Stream a -> Stream e -> (Node e a, Stream a, Stream e)-    f = takeNodeLeft (\as (e :> es) -> (e, as, es))-    g :: Stream e -> Stream a -> (Node e a, Stream e, Stream a)-    g = takeNodeRight (\(e :> es) as -> (e, es, as))-    (prNode, leftE', leftA') = f leftA leftE-    (sfNode, rightA', rightE') = g rightE rightA-    inner = infiniteOddA' (takeNodeLeft f) (takeNodeRight g) leftE' leftA' rightA' rightE'+  halfsnocOddE (infiniteOddE leftE leftA rightA rightE) a