{-| Module : Pipes.KeyValueCsv.Csv Copyright : (c) Marcin Mrotek, 2015 License : BSD3 Maintainer : marcin.jan.mrotek@gmail.com Stability : experimental Parsing the main CSV body. -} {-# LANGUAGE DataKinds , FlexibleContexts , PolyKinds , RankNTypes , TypeOperators #-} module Pipes.KeyValueCsv.Csv ( parseCsv , WrapParser(..) , wrapParser ) where import Pipes.KeyValueCsv.Internal.Csv import Pipes.KeyValueCsv.Internal.Types import Pipes.KeyValueCsv.Common import Pipes.KeyValueCsv.Types.Common import Pipes.KeyValueCsv.Types.Csv import Control.Lens import Data.Reflection import Data.Vinyl import Data.Vinyl.Functor import qualified Pipes.Group as Group parseCsv :: forall (m :: * -> *) (f :: k -> *) (rs :: [k]) (r :: *) . ( Given Delimiter , Monad m ) => CsvOptions m f rs -> Lines m r -> Producer (Rec (WithCsvError :. f) rs) m r -- ^Parse a stream of lines. parseCsv options = Group.concats . Group.maps (parseLine $ options^.csvParser) . unLines