pipes-text 0.0.0.10 → 0.0.0.11
raw patch · 4 files changed
+62/−52 lines, 4 filesdep +streaming-commonsdep −text-stream-decodedep ~bytestringdep ~pipes-parsedep ~pipes-safe
Dependencies added: streaming-commons
Dependencies removed: text-stream-decode
Dependency ranges changed: bytestring, pipes-parse, pipes-safe, transformers
Files
- Pipes/Text.hs +23/−23
- Pipes/Text/Encoding.hs +21/−16
- changelog +4/−0
- pipes-text.cabal +14/−13
Pipes/Text.hs view
@@ -104,7 +104,6 @@ import qualified Data.Text as T import Data.Text (Text) import qualified Data.Text.Lazy as TL-import Data.Text.Lazy.Internal (foldrChunks, defaultChunkSize) import Data.ByteString (ByteString) import Data.Functor.Constant (Constant(Constant, getConstant)) import Data.Functor.Identity (Identity)@@ -115,10 +114,12 @@ import qualified Pipes.Group as PG import qualified Pipes.Parse as PP import Pipes.Parse (Parser)+import Pipes.Text.Encoding (Lens'_, Iso'_) import qualified Pipes.Prelude as P import Data.Char (isSpace) import Data.Word (Word8)-+import Foreign.Storable (sizeOf)+import Data.Bits (shiftL) import Prelude hiding ( all, any,@@ -227,7 +228,7 @@ are a distraction. The lens combinators to keep in mind, the ones that make sense for our lenses, are @view@ \/ @(^.)@), @over@ \/ @(%~)@ , and @zoom@. - One need only keep in mind that if @l@ is a @Lens' a b@, then:+ One need only keep in mind that if @l@ is a @Lens'_ a b@, then: -} {- $view@@ -365,7 +366,7 @@ One might think that -> lines :: Monad m => Lens' (Producer Text m r) (FreeT (Producer Text m) m r)+> lines :: Monad m => Lens'_ (Producer Text m r) (FreeT (Producer Text m) m r) > view . lines :: Monad m => Producer Text m r -> FreeT (Producer Text m) m r should really have the type@@ -419,14 +420,10 @@ -- | Convert a lazy 'TL.Text' into a 'Producer' of strict 'Text's fromLazy :: (Monad m) => TL.Text -> Producer' Text m ()-fromLazy = foldrChunks (\e a -> yield e >> a) (return ()) +fromLazy = TL.foldrChunks (\e a -> yield e >> a) (return ()) {-# INLINE fromLazy #-} -type Lens' a b = forall f . Functor f => (b -> f b) -> (a -> f a)--type Iso' a b = forall f p . (Functor f, Profunctor p) => p b (f b) -> p a (f a)- (^.) :: a -> ((b -> Constant b b) -> (a -> Constant b a)) -> b a ^. lens = getConstant (lens Constant a) @@ -788,7 +785,7 @@ splitAt :: (Monad m, Integral n) => n- -> Lens' (Producer Text m r)+ -> Lens'_ (Producer Text m r) (Producer Text m (Producer Text m r)) splitAt n0 k p0 = fmap join (k (go n0 p0)) where@@ -817,7 +814,7 @@ span :: (Monad m) => (Char -> Bool)- -> Lens' (Producer Text m r)+ -> Lens'_ (Producer Text m r) (Producer Text m (Producer Text m r)) span predicate k p0 = fmap join (k (go p0)) where@@ -842,7 +839,7 @@ break :: (Monad m) => (Char -> Bool)- -> Lens' (Producer Text m r)+ -> Lens'_ (Producer Text m r) (Producer Text m (Producer Text m r)) break predicate = span (not . predicate) {-# INLINABLE break #-}@@ -853,7 +850,7 @@ groupBy :: (Monad m) => (Char -> Char -> Bool)- -> Lens' (Producer Text m r)+ -> Lens'_ (Producer Text m r) (Producer Text m (Producer Text m r)) groupBy equals k p0 = fmap join (k ((go p0))) where go p = do@@ -867,7 +864,7 @@ -- | Improper lens that splits after the first succession of identical 'Char' s group :: Monad m - => Lens' (Producer Text m r)+ => Lens'_ (Producer Text m r) (Producer Text m (Producer Text m r)) group = groupBy (==) {-# INLINABLE group #-}@@ -877,7 +874,7 @@ Unlike 'words', this does not drop leading whitespace -} word :: (Monad m) - => Lens' (Producer Text m r)+ => Lens'_ (Producer Text m r) (Producer Text m (Producer Text m r)) word k p0 = fmap join (k (to p0)) where@@ -888,7 +885,7 @@ line :: (Monad m) - => Lens' (Producer Text m r)+ => Lens'_ (Producer Text m r) (Producer Text m (Producer Text m r)) line = break (== '\n') @@ -920,7 +917,7 @@ -- | Improper isomorphism between a 'Producer' of 'ByteString's and 'Word8's-packChars :: Monad m => Iso' (Producer Char m x) (Producer Text m x)+packChars :: Monad m => Iso'_ (Producer Char m x) (Producer Text m x) packChars = Data.Profunctor.dimap to (fmap from) where -- to :: Monad m => Producer Char m x -> Producer Text m x@@ -932,13 +929,16 @@ -- from :: Monad m => Producer Text m x -> Producer Char m x from p = for p (each . T.unpack)+ {-# INLINABLE packChars #-} +defaultChunkSize :: Int+defaultChunkSize = 16384 - (sizeOf (undefined :: Int) `shiftL` 1) -- | Split a text stream into 'FreeT'-delimited text streams of fixed size chunksOf :: (Monad m, Integral n)- => n -> Lens' (Producer Text m r) + => n -> Lens'_ (Producer Text m r) (FreeT (Producer Text m) m r) chunksOf n k p0 = fmap concats (k (FreeT (go p0))) where@@ -984,7 +984,7 @@ -- | Split a text stream using the given 'Char' as the delimiter splits :: (Monad m) => Char- -> Lens' (Producer Text m r)+ -> Lens'_ (Producer Text m r) (FreeT (Producer Text m) m r) splits c k p = fmap (PG.intercalates (yield (T.singleton c))) (k (splitsWith (c ==) p))@@ -996,7 +996,7 @@ groupsBy :: Monad m => (Char -> Char -> Bool)- -> Lens' (Producer Text m x) (FreeT (Producer Text m) m x)+ -> Lens'_ (Producer Text m x) (FreeT (Producer Text m) m x) groupsBy equals k p0 = fmap concats (k (FreeT (go p0))) where go p = do x <- next p case x of Left r -> return (Pure r)@@ -1011,7 +1011,7 @@ -- | Like 'groupsBy', where the equality predicate is ('==') groups :: Monad m- => Lens' (Producer Text m x) (FreeT (Producer Text m) m x)+ => Lens'_ (Producer Text m x) (FreeT (Producer Text m) m x) groups = groupsBy (==) {-# INLINABLE groups #-} @@ -1020,7 +1020,7 @@ {-| Split a text stream into 'FreeT'-delimited lines -} lines- :: (Monad m) => Iso' (Producer Text m r) (FreeT (Producer Text m) m r)+ :: (Monad m) => Iso'_ (Producer Text m r) (FreeT (Producer Text m) m r) lines = Data.Profunctor.dimap _lines (fmap _unlines) where _lines p0 = FreeT (go0 p0) @@ -1051,7 +1051,7 @@ -- | Split a text stream into 'FreeT'-delimited words words- :: (Monad m) => Iso' (Producer Text m r) (FreeT (Producer Text m) m r)+ :: (Monad m) => Iso'_ (Producer Text m r) (FreeT (Producer Text m) m r) words = Data.Profunctor.dimap go (fmap _unwords) where go p = FreeT $ do
Pipes/Text/Encoding.hs view
@@ -41,10 +41,13 @@ , decodeAscii , encodeIso8859_1 , decodeIso8859_1+ , Lens'_+ , Iso'_ ) where import Data.Functor.Constant (Constant(..))+import Data.Profunctor (Profunctor) import Data.Char (ord) import Data.ByteString as B import Data.ByteString (ByteString)@@ -52,20 +55,22 @@ import Data.Text (Text) import qualified Data.Text as T import qualified Data.Text.Encoding as TE -import Data.Text.StreamDecoding+import qualified Data.Streaming.Text as Stream+import Data.Streaming.Text (DecodeResult(..)) import Control.Monad (join) import Data.Word (Word8) import Pipes -type Lens' a b = forall f . Functor f => (b -> f b) -> (a -> f a)+type Lens'_ a b = forall f . Functor f => (b -> f b) -> (a -> f a)+type Iso'_ a b = forall f p . (Functor f, Profunctor p) => p b (f b) -> p a (f a) {- $lenses The 'Codec' type is a simple specializion of - the @Lens'@ type synonymn used by the standard lens libraries, + the @Lens'_@ type synonymn used by the standard lens libraries, <http://hackage.haskell.org/package/lens lens> and <http://hackage.haskell.org/package/lens-family lens-family>. That type, -> type Lens' a b = forall f . Functor f => (b -> f b) -> (a -> f a)+> type Lens'_ a b = forall f . Functor f => (b -> f b) -> (a -> f a) is just an alias for a Prelude type. Thus you use any particular codec with the @view@ / @(^.)@ , @zoom@ and @over@ functions from either of those libraries;@@ -76,7 +81,7 @@ type Codec = forall m r . Monad m- => Lens' (Producer ByteString m r)+ => Lens'_ (Producer ByteString m r) (Producer Text m (Producer ByteString m r)) {- | 'decode' is just the ordinary @view@ or @(^.)@ of the lens libraries;@@ -202,27 +207,27 @@ decodeUtf8 :: Monad m => Producer ByteString m r -> Producer Text m (Producer ByteString m r)-decodeUtf8 = decodeStream streamUtf8+decodeUtf8 = decodeStream Stream.decodeUtf8 {-# INLINE decodeUtf8 #-} decodeUtf8Pure :: Monad m => Producer ByteString m r -> Producer Text m (Producer ByteString m r)-decodeUtf8Pure = decodeStream streamUtf8Pure+decodeUtf8Pure = decodeStream Stream.decodeUtf8Pure {-# INLINE decodeUtf8Pure #-} decodeUtf16LE :: Monad m => Producer ByteString m r -> Producer Text m (Producer ByteString m r)-decodeUtf16LE = decodeStream streamUtf16LE+decodeUtf16LE = decodeStream Stream.decodeUtf16LE {-# INLINE decodeUtf16LE #-} decodeUtf16BE :: Monad m => Producer ByteString m r -> Producer Text m (Producer ByteString m r)-decodeUtf16BE = decodeStream streamUtf16BE+decodeUtf16BE = decodeStream Stream.decodeUtf16BE {-# INLINE decodeUtf16BE #-} decodeUtf32LE :: Monad m => Producer ByteString m r -> Producer Text m (Producer ByteString m r)-decodeUtf32LE = decodeStream streamUtf32LE+decodeUtf32LE = decodeStream Stream.decodeUtf32LE {-# INLINE decodeUtf32LE #-} decodeUtf32BE :: Monad m => Producer ByteString m r -> Producer Text m (Producer ByteString m r)-decodeUtf32BE = decodeStream streamUtf32BE+decodeUtf32BE = decodeStream Stream.decodeUtf32BE {-# INLINE decodeUtf32BE #-} @@ -242,15 +247,15 @@ using the encoding functions from Data.Text.Encoding -} -encodeUtf8 :: Monad m => Text -> Producer ByteString m ()+encodeUtf8 :: Monad m => Text -> Producer' ByteString m () encodeUtf8 = yield . TE.encodeUtf8-encodeUtf16LE :: Monad m => Text -> Producer ByteString m ()+encodeUtf16LE :: Monad m => Text -> Producer' ByteString m () encodeUtf16LE = yield . TE.encodeUtf16LE-encodeUtf16BE :: Monad m => Text -> Producer ByteString m ()+encodeUtf16BE :: Monad m => Text -> Producer' ByteString m () encodeUtf16BE = yield . TE.encodeUtf16BE-encodeUtf32LE :: Monad m => Text -> Producer ByteString m ()+encodeUtf32LE :: Monad m => Text -> Producer' ByteString m () encodeUtf32LE = yield . TE.encodeUtf32LE-encodeUtf32BE :: Monad m => Text -> Producer ByteString m ()+encodeUtf32BE :: Monad m => Text -> Producer' ByteString m () encodeUtf32BE = yield . TE.encodeUtf32BE mkCodec :: (forall r m . Monad m =>
changelog view
@@ -1,3 +1,7 @@+# Version 0.0.0.11++* Updated to use streaming-commons in place of text-stream-decoding.+ # Version 0.0.0.10 * Documentation changes.
pipes-text.cabal view
@@ -1,5 +1,5 @@ name: pipes-text-version: 0.0.0.10+version: 0.0.0.11 synopsis: Text pipes. description: * This package will be in a draft, or testing, phase until version 0.0.1. Please report any installation difficulties, or any wisdom about the api, on the github page or the <https://groups.google.com/forum/#!forum/haskell-pipes pipes list> .@@ -9,7 +9,7 @@ . Familiarity with the other three packages should give one an idea what to expect where. The package has three modules, @Pipes.Text@ , @Pipes.Text.Encoding@ and @Pipes.Text.IO@; the division has more or less the significance it has in the @text@ library. .- Note that the module @Pipes.Text.IO@ is present as a convenience (as is @Data.Text.IO@). Official pipes IO would use @Pipes.ByteString@ and the decoding functions present here, based on the new Michael Snoyman's new @text-stream-decoding@ package. In particular, the @Pipes.Text.IO@ functions use Text exceptions. + Note that the module @Pipes.Text.IO@ is present as a convenience (as is @Data.Text.IO@). Official pipes IO would use @Pipes.ByteString@ together with the bytestring decoding functions present here, based on Michael Snoyman's excellent @streaming-commons@ package. In particular, the @Pipes.Text.IO@ functions use Text exceptions. . @Pipes.Text.IO@ uses version 0.11.3 or later of the @text@ library. It thus works with the version of @text@ that came with the 2013 Haskell Platform. To use an older @text@, install with the flag @-fnoio@ @@ -34,17 +34,18 @@ library exposed-modules: Pipes.Text, Pipes.Text.Encoding- build-depends: base >= 4 && < 5 ,- bytestring >= 0.9 ,- text >=0.11.2 && < 1.2,- text-stream-decode >= 0.1 && < 0.2, - profunctors >= 3.1.1 && < 4.1,- pipes >=4.0 && < 4.2,- pipes-group >= 1.0.0 && < 1.1,- pipes-parse >=2.0 && < 3.1,- pipes-safe, - pipes-bytestring >= 1.0 && < 2.1,- transformers >= 0.2.0.0 && < 0.4+ build-depends: base >= 4 && < 5 ,+ bytestring >= 0.9.2.1 && < 0.11,+ text >= 0.11.2 && < 1.2 ,+ streaming-commons >= 0.1 && < 0.2 , + profunctors >= 3.1.1 && < 4.1 ,+ pipes >= 4.0 && < 4.2 ,+ pipes-group >= 1.0.0 && < 1.1 ,+ pipes-parse >= 3.0.0 && < 3.1 ,+ pipes-safe >= 2.1 && < 2.3 , + pipes-bytestring >= 1.0 && < 2.1 ,+ transformers >= 0.2.0.0 && < 0.5+ other-extensions: RankNTypes default-language: Haskell2010 ghc-options: -O2