sequence 0.9.4 → 0.9.5
raw patch · 5 files changed
+49/−12 lines, 5 filesdep +transformers
Dependencies added: transformers
Files
- ChangeLog +1/−0
- Data/Sequence/FastQueue.hs +8/−1
- Data/Sequence/Queue.hs +28/−0
- Data/Sequence/ToCatQueue.hs +10/−9
- sequence.cabal +2/−2
ChangeLog view
@@ -1,3 +1,4 @@+0.9.5: Added traversable instances (thanks dolio!) 0.9.4: More fixing docs 0.9.3: Fix docs 0.9.2: Fix error in cabal file
Data/Sequence/FastQueue.hs view
@@ -18,11 +18,13 @@ ----------------------------------------------------------------------------- module Data.Sequence.FastQueue(module Data.SequenceClass, FastQueue) where+import Control.Applicative (pure, (<$>), (<*>))+import Control.Applicative.Backwards import Data.SequenceClass import Data.Foldable+import Data.Traversable import Prelude hiding (foldr,foldl) - revAppend l r = rotate l r [] -- precondtion : |a| = |f| - (|r| - 1) -- postcondition: |a| = |f| - |r|@@ -60,4 +62,9 @@ viewl (RQ [] [] []) = EmptyL viewl (RQ (h : t) f a) = h :< queue t f a +instance Traversable FastQueue where+ sequenceA q = case viewl q of+ EmptyL -> pure empty+ h :< t -> (<|) <$> h <*> sequenceA t+
Data/Sequence/Queue.hs view
@@ -20,7 +20,10 @@ -- ----------------------------------------------------------------------------- module Data.Sequence.Queue(module Data.SequenceClass,Queue) where+import Control.Applicative (pure, (<*>), (<$>)) import Data.Foldable+import Data.Monoid ((<>))+import Data.Traversable import Prelude hiding (foldr,foldl) import Data.SequenceClass @@ -29,6 +32,14 @@ instance Functor P where fmap f (a :* b) = f a :* f b +instance Foldable P where+ foldl f z (a :* b) = f (f z a) b+ foldr f z (a :* b) = f a (f b z)+ foldMap f (a :* b) = f a <> f b++instance Traversable P where+ traverse f (a :* b) = (:*) <$> f a <*> f b+ data B a where B1 :: a -> B a B2 :: !(P a) -> B a@@ -37,6 +48,18 @@ fmap phi (B1 c) = B1 (phi c) fmap phi (B2 p) = B2 (fmap phi p) +instance Foldable B where+ foldl f z (B1 x) = f z x+ foldl f z (B2 p) = foldl f z p+ foldr f z (B1 x) = f x z+ foldr f z (B2 p) = foldr f z p+ foldMap f (B1 x) = f x+ foldMap f (B2 p) = foldMap f p++instance Traversable B where+ traverse f (B1 x) = B1 <$> f x+ traverse f (B2 p) = B2 <$> traverse f p+ data Queue a where Q0 :: Queue a Q1 :: a -> Queue a@@ -56,6 +79,11 @@ where toRevList s = case viewl s of EmptyL -> [] h :< t -> h : toRevList t++instance Traversable Queue where+ traverse f Q0 = pure Q0+ traverse f (Q1 x) = Q1 <$> f x+ traverse f (QN b1 q b2) = QN <$> traverse f b1 <*> traverse (traverse f) q <*> traverse f b2 instance Sequence Queue where empty = Q0
Data/Sequence/ToCatQueue.hs view
@@ -20,7 +20,9 @@ ----------------------------------------------------------------------------- module Data.Sequence.ToCatQueue(module Data.SequenceClass,ToCatQueue) where+import Control.Applicative (pure, (<*>), (<$>)) import Data.Foldable+import Data.Traversable import Prelude hiding (foldr,foldl) import Data.SequenceClass @@ -34,15 +36,11 @@ fmap f C0 = C0 fmap f (CN l m) = CN (f l) (fmap (fmap f) m) -instance Sequence q => Foldable (ToCatQueue q) where- foldl f = loop where- loop i s = case viewl s of- EmptyL -> i- h :< t -> loop (f i h) t- foldr f i s = foldr f i (reverse $ toRevList s)- where toRevList s = case viewl s of- EmptyL -> []- h :< t -> h : toRevList t+instance Foldable q => Foldable (ToCatQueue q) where+ foldl f z C0 = z+ foldl f z (CN x qs) = foldl (foldl f) (f z x) qs+ foldr f z C0 = z+ foldr f z (CN x qs) = x `f` foldr (\q z -> foldr f z q) z qs instance Sequence q => Sequence (ToCatQueue q) where empty = C0@@ -61,3 +59,6 @@ snoc q C0 = q snoc q r = q |> r +instance Traversable q => Traversable (ToCatQueue q) where+ traverse f C0 = pure C0+ traverse f (CN x qs) = CN <$> f x <*> traverse (traverse f) qs
sequence.cabal view
@@ -1,5 +1,5 @@ Name: sequence-Version: 0.9.4+Version: 0.9.5 Synopsis: A type class for sequences and various sequence data structures. Description: A type class for sequences and various sequence data structures. License: BSD3@@ -13,7 +13,7 @@ Category: Data, Data Structures Tested-With: GHC==7.6.3 Library- Build-Depends: base >= 2 && <= 6, containers+ Build-Depends: base >= 2 && <= 6, containers, transformers Exposed-modules: Data.SequenceClass, Data.Sequence.Queue, Data.Sequence.FastQueue, Data.Sequence.FastCatQueue, Data.Sequence.ToCatQueue Extensions: