Streaming csv parser using cassava and pipes
MIT License
Constant-space streaming csv parsing with cassava and pipes
Install with cabal
$ cabal install pipes-csv
{-# LANGUAGE OverloadedStrings #-}
import Pipes.Csv (decode, decodeByName)
import Pipes.ByteString (stdin, ByteString)
import Data.Csv ((.:), FromNamedRecord(..), Record)
import Pipes
import Control.Applicative
data Person = Person String Int
deriving (Show)
instance FromNamedRecord Person where
parseNamedRecord p =
Person <$> p .: "name"
<*> p .: "age"
persons :: Monad m
=> Producer ByteString m ()
-> Producer (Either String Person) m ()
persons = decodeByName
main = runEffect $ for (persons stdin) (lift . print)
MIT