aboutsummaryrefslogtreecommitdiffhomepage
path: root/examples/lines_url.hs
blob: b6766566277897cdce7a5736895b542e916e29f4 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
{-# LANGUAGE OverloadedStrings #-}
-- https://gist.github.com/michaelt/88e1fac12876857deefe
-- following
-- https://gist.github.com/gelisam/c769d186493221d7ebbe and associated controversy.

module Main where
 
import Prelude hiding (lines)
import Lens.Family
import Pipes
import Pipes.Group
import Pipes.HTTP
import Pipes.Text
import Pipes.Text.Encoding
import Pipes.Text.IO (toHandle,stdout)
import qualified System.IO as IO
import Data.Functor (void)
import qualified Data.Text as T

main = do
  req <- parseUrl "https://gist.github.com/gelisam/c769d186493221d7ebbe"
                -- "http://www.example.com"
                -- "http://www.gutenberg.org/files/10/10-h/10-h.htm"
  withManager tlsManagerSettings $ \m ->
    withHTTP req m $ \resp ->  void $ runEffect $ 
         number_lines_of (responseBody resp ^. utf8 . lines) >-> toHandle IO.stdout

number_lines_of :: Monad m => FreeT (Producer Text m) m bad -> Producer Text m bad 
number_lines_of  = number_loop (1 :: Int) where
  number_loop n freeProducers = do
        freeProducer <- lift $ runFreeT freeProducers
        case freeProducer of
          Pure badbytes -> do yield $ T.pack "\n"
                              return badbytes -- these could be inspected ... 
          Free p -> do yield $ T.pack ("\n" ++ show n ++ "  ") 
                       nextFreeProducers <- p
                       number_loop (n+1) nextFreeProducers