packages feed

listlike-instances 0.2 → 0.2.1

raw patch · 5 files changed

+111/−7 lines, 5 filesPVP ok

version bump matches the API change (PVP)

API changes (from Hackage documentation)

+ Data.ListLike.Vector.Generic: instance [overlap ok] (Eq (v Char), Vector v Char) => StringLike (v Char)
+ Data.ListLike.Vector.Generic: instance [overlap ok] (Monoid (v a), Eq (v a), Vector v a) => ListLike (v a) a
+ Data.ListLike.Vector.Generic: instance [overlap ok] Vector v a => FoldableLL (v a) a

Files

listlike-instances.cabal view
@@ -1,5 +1,5 @@ Name:                listlike-instances-Version:             0.2+Version:             0.2.1 Synopsis:            Extra instances of the ListLike class Description:         Provides ListLike instances for Vector and Text types Homepage:            http://jwlato.webfactional.com/haskell/listlike-instances@@ -20,6 +20,7 @@                      Data.ListLike.Text.Text                      Data.ListLike.Text.TextLazy                      Data.ListLike.Vector+                     Data.ListLike.Vector.Generic                      Data.ListLike.Vector.Storable                      Data.ListLike.Vector.Unboxed                      Data.ListLike.Vector.Vector
src/Data/ListLike/Text/Text.hs view
@@ -7,7 +7,7 @@  import qualified Data.Text as T import qualified Data.Text.IO as TI-import           Data.Text.Encoding (decodeASCII)+import           Data.Text.Encoding (decodeUtf8) import           Data.ListLike import           Data.ListLike.String @@ -73,8 +73,8 @@ instance ListLikeIO T.Text Char where     hGetLine = TI.hGetLine     hGetContents = TI.hGetContents-    hGet h c = BS.hGet h c >>= return . decodeASCII-    hGetNonBlocking h i = BS.hGetNonBlocking h i >>= return . decodeASCII+    hGet h c = BS.hGet h c >>= return . decodeUtf8+    hGetNonBlocking h i = BS.hGetNonBlocking h i >>= return . decodeUtf8     hPutStr = TI.hPutStr     hPutStrLn = TI.hPutStrLn     getLine = TI.getLine
src/Data/ListLike/Text/TextLazy.hs view
@@ -7,7 +7,7 @@  import qualified Data.Text.Lazy as T import qualified Data.Text.Lazy.IO as TI-import           Data.Text.Encoding (decodeASCII)+import           Data.Text.Encoding (decodeUtf8) import           Data.ListLike import           Data.ListLike.String @@ -71,8 +71,8 @@ instance ListLikeIO T.Text Char where     hGetLine = TI.hGetLine     hGetContents = TI.hGetContents-    hGet h = fmap (T.fromStrict . decodeASCII) . BS.hGet h-    hGetNonBlocking h = fmap (T.fromStrict . decodeASCII) . BS.hGetNonBlocking h+    hGet h = fmap (T.fromStrict . decodeUtf8) . BS.hGet h+    hGetNonBlocking h = fmap (T.fromStrict . decodeUtf8) . BS.hGetNonBlocking h     hPutStr = TI.hPutStr     hPutStrLn = TI.hPutStrLn     getLine = TI.getLine
src/Data/ListLike/Vector.hs view
@@ -1,3 +1,7 @@+-- | 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 (   module Data.ListLike.Vector.Storable  ,module Data.ListLike.Vector.Unboxed
+ src/Data/ListLike/Vector/Generic.hs view
@@ -0,0 +1,99 @@+{-# LANGUAGE MultiParamTypeClasses+            ,FlexibleContexts+            ,FlexibleInstances+            ,OverlappingInstances+            ,UndecidableInstances #-}++-- | ListLike instance for any type supporting the @Data.Vector.Generic@+-- interface.  To avoid collisions with other Vector instances, this module+-- must be imported directly.+module Data.ListLike.Vector.Generic ()++where++import qualified Data.Vector.Generic as V+import           Data.Vector.Generic ((!))+import           Data.ListLike+import           Data.ListLike.String++import           Data.Monoid++instance V.Vector v a => FoldableLL (v a) a where+    foldl = V.foldl+    foldl' = V.foldl'+    foldl1 = V.foldl1+    foldr = V.foldr+    foldr' = V.foldr'+    foldr1 = V.foldr1++instance (Monoid (v a), Eq (v a), V.Vector v a) => ListLike (v a) a where+    empty = V.empty+    singleton = V.singleton+    cons = V.cons+    snoc = V.snoc+    append = mappend+    head = V.head+    last = V.last+    tail = V.tail+    init = V.init+    null = V.null+    length = V.length+    rigidMap = V.map+    reverse = V.reverse+    --intersperse =+    concat = V.concat . toList+    rigidConcatMap = V.concatMap+    any = V.any+    all = V.all+    maximum = V.maximum+    minimum = V.minimum+    replicate = V.replicate+    take = V.take+    drop = V.drop+    --splitAt =+    takeWhile = V.takeWhile+    dropWhile = V.dropWhile+    span = V.span+    break = V.break+    --group =+    --inits =+    --tails =+    isPrefixOf = isPrefixOf'+    isSuffixOf = isSuffixOf'+    elem = V.elem+    find = V.find+    filter = V.filter+    index = (!)+    findIndex = V.findIndex+    toList = V.toList+    fromList = V.fromList+    fromListLike = fromList . toList+    --groupBy f = +    genericLength = fromInteger . fromIntegral . V.length+    genericTake i = V.take (fromIntegral i)+    genericDrop i = V.drop (fromIntegral i)+    --genericSplitAt i = +    genericReplicate i = V.replicate (fromIntegral i)++instance (Eq (v Char), V.Vector v Char) => StringLike (v Char) where+    toString = V.toList+    fromString = V.fromList+    --words =+    --lines =+    unwords = let sp = V.singleton ' ' in V.concat . intersperse sp . toList+    unlines = let eol = V.singleton '\n' in V.concat . intersperse eol . toList++isPrefixOf' needle haystack+  | V.null needle = True+  | V.length needle < V.length haystack =+            needle == V.slice 0 (V.length needle) haystack+  | V.length needle == V.length haystack = needle == haystack+  | otherwise = False+isSuffixOf' needle haystack+  | V.null needle = True+  | V.length needle < V.length haystack =+        needle == V.slice (V.length haystack - V.length needle)+                          (V.length needle)+                          haystack+  | V.length needle == V.length haystack = needle == haystack+  | otherwise = False