packages feed

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