dataframe-csv-th-1.0.0.0: src/DataFrame/TH/CSV.hs
{-# LANGUAGE FlexibleContexts #-}
{- |
Module : DataFrame.TH.CSV
License : MIT
CSV-file-based 'DataFrame.TH' splices. Splits out the CSV ingest path so
@dataframe-th@ stays IO-agnostic.
-}
module DataFrame.TH.CSV (
declareColumnsFromCsvFile,
declareColumnsFromCsvWithOpts,
) where
import Control.Monad.IO.Class (liftIO)
import Language.Haskell.TH
import qualified DataFrame.IO.CSV as CSV
import DataFrame.TH.Records (declareColumns)
{- | Splice a binding for every column of the 'DataFrame' read from a CSV
file. Each binding has type @Expr T@ where @T@ is the inferred column
type.
-}
declareColumnsFromCsvFile :: String -> DecsQ
declareColumnsFromCsvFile path = do
df <-
liftIO
( CSV.readSeparated
(CSV.defaultReadOptions{CSV.numColumns = Just 100})
path
)
declareColumns df
-- | Like 'declareColumnsFromCsvFile' but with custom 'CSV.ReadOptions'.
declareColumnsFromCsvWithOpts :: CSV.ReadOptions -> String -> DecsQ
declareColumnsFromCsvWithOpts opts path = do
df <- liftIO (CSV.readSeparated opts path)
declareColumns df