Frames-0.6.2: test/NoHeader.hs
{-# LANGUAGE DataKinds, FlexibleContexts, OverloadedLabels, TemplateHaskell, TypeApplications #-}
module NoHeader where
import Control.Arrow ( (&&&) )
import Data.Vinyl.Derived
import Frames
import Frames.TH ( rowGen
, RowGen(..)
)
import Pipes ( Producer
, (>->)
)
import qualified Pipes.Prelude as P
tableTypes' (rowGen "test/data/prestigeNoHeader.csv")
{ rowTypeName = "Row"
, columnNames = [ "job"
, "schooling"
, "money"
, "females"
, "respect"
, "census"
, "category" ] }
loadData :: MonadSafe m => Producer Row m ()
loadData = readTableOpt rowParser "test/data/prestigeNoHeader.csv"
-- | Extract the @Job@ and @Schooling@ columns of the indicated row.
getJobAndSchooling :: Int -> IO (Maybe (Text, Double))
getJobAndSchooling n =
fmap (fmap aux) . runSafeEffect . P.head $ loadData >-> P.drop (max n 0)
where
aux :: Row -> (Text, Double)
aux = rvalf #job &&& rvalf #schooling