]> git.immae.eu Git - github/fretlink/text-pipes.git/blame - examples/decode.hs
documentation
[github/fretlink/text-pipes.git] / examples / decode.hs
CommitLineData
955edd33 1-- http://www.haskellforall.com/2014/02/pipes-parse-30-lens-based-parsing.html
2
3import Data.ByteString (ByteString)
4import Data.Text (Text)
5import Lens.Family.State.Strict (zoom)
8197d6e0 6
955edd33 7import Pipes
8import Pipes.Parse
9import qualified Pipes.ByteString as ByteString
8197d6e0 10import qualified Pipes.Text as Text
11import qualified Pipes.Text.Encoding as Text
955edd33 12
13-- Retrieve all `Text` chunks up to 10 characters
14parser :: Monad m => Parser ByteString m [Text]
8197d6e0 15parser = zoom (Text.utf8 . Text.splitAt 10) drawAll
955edd33 16
17main = do
18 (textChunks, leftovers) <- runStateT parser ByteString.stdin
19 print textChunks
20
21 -- Now print the remaining `ByteString` chunks
22 byteChunks <- evalStateT drawAll leftovers
23 print byteChunks
24{-
25$ ./decode
26Hello, 世界!!!<Enter>
27["Hello, \19990\30028!"]
28abcdefg<Enter>
29<Ctrl-D>
30["!!\n","abcdefg\n"]
31
32-}