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 +2/−1
- src/Data/ListLike/Text/Text.hs +3/−3
- src/Data/ListLike/Text/TextLazy.hs +3/−3
- src/Data/ListLike/Vector.hs +4/−0
- src/Data/ListLike/Vector/Generic.hs +99/−0
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