Frames-streamly-0.3.1.0: src/Frames/Streamly/LoadInCore.hs
{-# LANGUAGE AllowAmbiguousTypes #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE TypeApplications #-}
{-|
Module : Frames.Streamly.LoadInCore
Description : Load directly from file to Frame
Copyright : (c) Adam Conner-Sax 2021
License : BSD-3-Clause
Maintainer : adam_conner_sax@yahoo.com
Stability : experimental
-}
module Frames.Streamly.LoadInCore
(
loadInCore
-- , loadInCore2
)
where
import qualified Frames
import qualified Data.Vinyl as V
import qualified Frames.Streamly.InCore as FS
import qualified Frames.Streamly.CSV as FS
--import qualified Data.Strict.Maybe as Strict.Maybe
import Frames.Streamly.Streaming.Class (StreamFunctions(..), StreamFunctionsIO(..))
loadInCore :: forall s m rs rs'.(StreamFunctionsIO s m, V.RMap rs, FS.StrictReadRec rs, FS.RecVec rs, FS.RecVec rs')
=> FS.ParserOptions
-> FilePath
-> (Frames.Record rs -> Maybe (Frames.Record rs'))
-> (IOSafe s m) (Frames.FrameRec rs')
loadInCore po fp t = FS.inCoreAoS $ sMapMaybe t $ FS.readTableOpt @rs @s @m po fp
{-# INLINEABLE loadInCore #-}
{-
loadInCore2 :: forall s m rs rs'.(StreamFunctionsIO s m, V.RMap rs, FS.StrictReadRec rs, FS.RecVec rs, FS.RecVec rs')
=> FS.ParserOptions -> FilePath -> (Frames.Record rs -> Maybe (Frames.Record rs')) -> (IOSafe s m) (Frames.FrameRec rs')
loadInCore2 po fp t = sReadScanMAndFold @s @m fp (FS.parsingScanF po $ FS.parseOne po) (return FS.AccInitial) fld where
fromScan :: FS.Acc (Frames.Record rs) -> Maybe (Frames.Record rs')
fromScan x = FS.accToMaybe x >>= t
{-# INLINE fromScan #-}
fld :: FoldType s (IOSafe s m) (FS.Acc (Frames.Record rs)) (Frames.FrameRec rs')
fld = sLMapFoldM @s (return . fromScan) $ sFoldMaybe @s (FS.inCoreAoS_F @_ @s @(IOSafe s m))
{-# INLINE fld #-}
{-# INLINE loadInCore2 #-}
-}