packages feed

Frames-0.6.2: demo/ModifyCSV.hs

{-# language DataKinds, FlexibleContexts, TemplateHaskell, TypeApplications #-}
-- | A demonstration of ingesting a CSV file, modifying the data (in
-- this case multiplying a column by 2), then writing it back out to a
-- new CSV file.
import Frames
import Frames.CSV (pipeToCSV, consumeTextLines)
import Lens.Micro
import Pipes ((>->), Effect)
import qualified Pipes.Prelude as P

tableTypes "Row" "data/data1.csv"

myFun :: Row -> Row
myFun = age %~ (*2)

myPipeline :: MonadSafe m => Effect m ()
myPipeline = readTable "data/data1.csv"
             >-> P.map myFun
             >-> pipeToCSV
             >-> consumeTextLines "data/dataMod.csv"

main :: IO ()
main = runSafeEffect myPipeline