content: {-# 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
  