packages feed

ListLike 4.0.2 → 4.1.0

raw patch · 7 files changed

+175/−15 lines, 7 filesdep +dlistdep +fmlistdep ~base

Dependencies added: dlist, fmlist

Dependency ranges changed: base

Files

ListLike.cabal view
@@ -1,5 +1,5 @@ Name: ListLike-Version: 4.0.2+Version: 4.1.0 License: BSD3 Maintainer: John Lato <jwlato@gmail.com> Author: John Goerzen@@ -25,13 +25,13 @@  Library   Hs-Source-Dirs: src-  Exposed-Modules: Data.ListLike,-          Data.ListLike.Base,-          Data.ListLike.CharString,-          Data.ListLike.FoldableLL,-          Data.ListLike.IO,-          Data.ListLike.Instances,-          Data.ListLike.String,+  Exposed-Modules: Data.ListLike+          Data.ListLike.Base+          Data.ListLike.CharString+          Data.ListLike.FoldableLL+          Data.ListLike.IO+          Data.ListLike.Instances+          Data.ListLike.String           Data.ListLike.Text           Data.ListLike.Text.Text           Data.ListLike.Text.TextLazy@@ -41,6 +41,8 @@           Data.ListLike.Vector.Storable           Data.ListLike.Vector.Unboxed           Data.ListLike.Vector.Vector+          Data.ListLike.DList+          Data.ListLike.FMList   -- Other-Modules: Data.ConfigFile.Lexer   Build-Depends: base       >= 3     && < 5                 ,containers >= 0.3   && < 0.6@@ -48,6 +50,8 @@                 ,array      >= 0.3   && < 0.6                 ,text       >= 0.11  && < 1.2                 ,vector     >= 0.5   && < 0.11+                ,dlist      >= 0.7   && < 0.9+                ,fmlist     >= 0.8   && < 0.9    Test-suite listlike-tests   Hs-source-dirs: src testsrc@@ -63,6 +67,8 @@                   ,array                   ,bytestring                   ,containers+                  ,dlist+                  ,fmlist                   ,text                   ,vector 
README.md view
@@ -3,16 +3,18 @@ ListLike ======== -The ListLike package provides typeclasses and instances to allow+The `ListLike` package provides typeclasses and instances to allow polymorphism over many common datatypes.  Installation ------------ -The package can be built/installed with Cabal.  If you have cabal-install,-simply run "cabal install ListLike" to install the package.  Without-cabal-install, execute the following commands:+The package can be built/installed with Cabal.  If you have `cabal-install`,+simply run `cabal install ListLike` to install the package.  Without+`cabal-install`, execute the following commands: +``` $ runghc Setup.hs configure $ runghc Setup.hs build $ runghc Setup.hs install+```
src/Data/ListLike.hs view
@@ -121,6 +121,8 @@ import Data.ListLike.CharString import Data.ListLike.FoldableLL import Data.ListLike.Instances()+import Data.ListLike.DList+import Data.ListLike.FMList import Data.ListLike.String import Data.ListLike.Utils import Data.ListLike.IO
+ src/Data/ListLike/DList.hs view
@@ -0,0 +1,48 @@+{-# LANGUAGE NoImplicitPrelude, MultiParamTypeClasses, FlexibleInstances #-}+-- | 'Data.ListLike.ListLike' instances for 'Data.DList.DList'+module Data.ListLike.DList () where+import qualified Prelude as P+import Data.ListLike.Base+import Data.ListLike.FoldableLL+import Data.ListLike.IO+import Data.ListLike.String+import Data.DList (DList(..))+import qualified Data.DList as D+import Data.Foldable (Foldable)+import qualified Data.Foldable as F+import Data.Traversable (Traversable)+import qualified Data.Traversable as T+import Data.String (IsString)+import qualified Data.String as S+import Control.Category+import Data.Char (Char(..))++instance FoldableLL (DList a) a where+  foldl = F.foldl+  foldr = D.foldr+  foldl1 = F.foldl1+  foldr1 = F.foldr1+  foldl' = F.foldl'+  foldr' = F.foldr'++instance ListLike (DList a) a where+  empty = D.empty+  singleton = D.singleton+  cons = D.cons+  snoc = D.snoc+  append = D.append+  head = D.head+  tail = D.tail+  rigidMap = D.map+  null = null . D.toList+  toList = D.toList+  fromList = D.fromList+  replicate = D.replicate++instance StringLike (DList Char) where+  toString = D.toList+  fromString = D.fromList+  lines = map D.fromList . S.lines . D.toList+  words = map D.fromList . S.words . D.toList+  unlines = D.fromList . S.unlines . map D.toList+  unwords = D.fromList . S.unwords . map D.toList
+ src/Data/ListLike/FMList.hs view
@@ -0,0 +1,69 @@+{-# LANGUAGE MultiParamTypeClasses, FlexibleInstances #-}+-- | 'Data.ListLike.ListLike' instances for 'Data.FMList.FMList'+module Data.ListLike.FMList () where+import qualified Prelude as P+import Data.ListLike.Base+import Data.ListLike.FoldableLL+import Data.ListLike.IO+import Data.ListLike.String+import Data.FMList (FMList(..))+import qualified Data.FMList as FM+import Data.Foldable (Foldable)+import qualified Data.Foldable as F+import Data.Traversable (Traversable)+import qualified Data.Traversable as T+import Data.String (IsString)+import qualified Data.String as S+import Control.Monad.Zip (MonadZip)+import qualified Control.Monad.Zip as Z+import Data.Function+import Data.Char (Char(..))++instance FoldableLL (FMList a) a where+  foldl = F.foldl+  foldr = F.foldr+  foldl1 = F.foldl1+  foldr1 = F.foldr1+  foldl' = F.foldl'+  foldr' = F.foldr'++instance ListLike (FMList a) a where+  empty = FM.empty+  singleton = FM.singleton+  cons = FM.cons+  snoc = FM.snoc+  append = FM.append+  head = FM.head+  tail = FM.tail+  last = FM.last+  init = FM.init+  fromList = FM.fromList+  toList = FM.toList+  null = FM.null+  genericLength = FM.genericLength+  length = FM.length+  reverse = FM.reverse+  filter = FM.filter+  take = FM.take+  takeWhile = FM.takeWhile+  drop = FM.drop+  dropWhile = FM.dropWhile++instance InfiniteListLike (FMList a) a where+  iterate = FM.iterate+  repeat = FM.repeat+  cycle a = (a `FM.append` cycle a) `FM.append` a++instance IsString (FMList Char) where+  fromString = FM.fromList++instance StringLike (FMList Char) where+  fromString = FM.fromList+  toString = FM.toList+  lines = map FM.fromList . S.lines . FM.toList+  words = map FM.fromList . S.words . FM.toList+  unlines = FM.fromList . S.unlines . map FM.toList+  unwords = FM.fromList . S.unwords . map FM.toList++instance MonadZip FMList where+  mzipWith = FM.zipWith
src/Data/ListLike/Vector.hs view
@@ -1,5 +1,5 @@--- | ListLike instances for several @Data.Vector@ types.--- The `Data.ListLike.Vector.Generic` instances are not exported from this+-- | 'Data.ListLike.ListLike' instances for several @Data.Vector@ types.+-- The @Data.ListLike.Vector.Generic@ instances are not exported from this -- module in order to prevent collisions. -- module Data.ListLike.Vector (
testsrc/TestInfrastructure.hs view
@@ -25,6 +25,8 @@ import qualified Data.ByteString.Lazy as BSL import qualified Data.ListLike as LL import qualified Data.Array as A+import qualified Data.DList as DL+import qualified Data.FMList as FM import qualified Data.Sequence as S import qualified Data.Foldable as F import qualified Data.Text as T@@ -36,10 +38,16 @@ import System.IO import qualified Test.HUnit as HU import Text.Printf+import Data.Function (on) import Data.Word import Data.List import Data.Monoid +simpleArb :: (LL.ListLike f i, Arbitrary i) => Gen f+simpleArb = sized (\n -> choose (0, n) >>= myVector)+    where myVector n = do+            arblist <- vector n+            return (LL.fromList arblist)  instance (Arbitrary i) => Arbitrary (MyList i) where     arbitrary = sized (\n -> choose (0, n) >>= myVector)@@ -51,6 +59,20 @@ instance (CoArbitrary i) => CoArbitrary (MyList i) where     coarbitrary l = coarbitrary (LL.toList l) +instance (Arbitrary i) => Arbitrary (DL.DList i) where+    arbitrary = simpleArb+    shrink = map LL.fromList . shrink . LL.toList++instance (CoArbitrary i) => CoArbitrary (DL.DList i) where+    coarbitrary l = coarbitrary (LL.toList l)++instance (Arbitrary i) => Arbitrary (FM.FMList i) where+    arbitrary = simpleArb+    shrink = map LL.fromList . shrink . LL.toList++instance (CoArbitrary i) => CoArbitrary (FM.FMList i) where+    coarbitrary l = coarbitrary (LL.toList l)+ instance (Arbitrary i) => Arbitrary (S.Seq i) where     arbitrary = sized (\n -> choose (0, n) >>= myVector)         where myVector n =@@ -150,8 +172,12 @@  instance (Arbitrary a, Show a, Eq a) => TestLL [a] a where -instance (Arbitrary a, Show a, Eq a) => TestLL (MyList a) a where+instance (Arbitrary a, Show a, Eq a) => TestLL (MyList a) a +instance (Arbitrary a, Show a, Eq a) => TestLL (DL.DList a) a++instance (Arbitrary a, Show a, Eq a) => TestLL (FM.FMList a) a+ instance TestLL BS.ByteString Word8 where  instance TestLL BSL.ByteString Word8 where@@ -170,6 +196,9 @@  instance (Arbitrary a, Show a, Eq a, VU.Unbox a) => TestLL (VU.Vector a) a where +instance Eq a => Eq (FM.FMList a) where+    (==) = (==) `on` FM.toList+ mapRemoveDups :: (Eq k1) => [(k1, v1)] -> [(k1, v1)] mapRemoveDups = nubBy (\(k1, _) (k2, _) -> k1 == k2) @@ -266,6 +295,8 @@      w "Array Int Int" (x::LLTest (A.Array Int Int) Int),      w "Array Int Bool" (x::LLTest (A.Array Int Bool) Bool),      w "Array (Just Int)" (x::LLTest (A.Array Int (Maybe Int)) (Maybe Int)),+     w "DList Int" (x::LLTest (DL.DList Int) Int),+     -- w "FMList Int" (x::LLTest (FM.FMList Int) Int),      w "Vector Int" (x::LLTest (V.Vector Int) Int),      w "StorableVector Int" (x::LLTest (VS.Vector Int) Int),      w "UnboxVector Int" (x::LLTest (VU.Vector Int) Int),@@ -282,6 +313,8 @@     [w "String" (x::LLTest String Char),      w "MyList Char" (x::LLTest (MyList Char) Char),      w "Sequence Char" (x::LLTest (S.Seq Char) Char),+     w "DList Char" (x::LLTest (DL.DList Char) Char),+     -- w "FMList Char" (x::LLTest (FM.FMList Char) Char),      w "ByteString" (x::LLTest BS.ByteString Word8),      w "ByteString.Lazy" (x::LLTest BSL.ByteString Word8),      w "Array Int Char" (x::LLTest (A.Array Int Char) Char),