fix: replace unneeded parTraverse with traverse
This commit is contained in:
parent
cda17f8d3c
commit
5f8a82c8d8
@ -33,7 +33,6 @@ package:
|
|||||||
- nullable: ">=6.0.0 <7.0.0"
|
- nullable: ">=6.0.0 <7.0.0"
|
||||||
- numbers: ">=9.0.1 <10.0.0"
|
- numbers: ">=9.0.1 <10.0.0"
|
||||||
- ordered-collections: ">=3.2.0 <4.0.0"
|
- ordered-collections: ">=3.2.0 <4.0.0"
|
||||||
- parallel: ">=6.0.0 <7.0.0"
|
|
||||||
- precise-datetime: ">=7.0.0 <8.0.0"
|
- precise-datetime: ">=7.0.0 <8.0.0"
|
||||||
- prelude: ">=6.0.1 <7.0.0"
|
- prelude: ">=6.0.1 <7.0.0"
|
||||||
- record: ">=4.0.0 <5.0.0"
|
- record: ">=4.0.0 <5.0.0"
|
||||||
|
@ -3,7 +3,6 @@ module Node.Stream.CSV.Parse where
|
|||||||
import Prelude hiding (join)
|
import Prelude hiding (join)
|
||||||
|
|
||||||
import Control.Alt ((<|>))
|
import Control.Alt ((<|>))
|
||||||
import Control.Alternative (class Alternative)
|
|
||||||
import Control.Monad.Error.Class (liftEither)
|
import Control.Monad.Error.Class (liftEither)
|
||||||
import Control.Monad.Except (runExcept)
|
import Control.Monad.Except (runExcept)
|
||||||
import Control.Monad.Fork.Class (class MonadFork, fork, join)
|
import Control.Monad.Fork.Class (class MonadFork, fork, join)
|
||||||
@ -11,7 +10,6 @@ import Control.Monad.Maybe.Trans (MaybeT(..), runMaybeT)
|
|||||||
import Control.Monad.Rec.Class (class MonadRec, tailRecM, Step(..), whileJust)
|
import Control.Monad.Rec.Class (class MonadRec, tailRecM, Step(..), whileJust)
|
||||||
import Control.Monad.ST.Global as ST
|
import Control.Monad.ST.Global as ST
|
||||||
import Control.Monad.Trans.Class (lift)
|
import Control.Monad.Trans.Class (lift)
|
||||||
import Control.Parallel (class Parallel, parTraverse)
|
|
||||||
import Data.Array as Array
|
import Data.Array as Array
|
||||||
import Data.Array.ST as Array.ST
|
import Data.Array.ST as Array.ST
|
||||||
import Data.Bifunctor (lmap)
|
import Data.Bifunctor (lmap)
|
||||||
@ -24,6 +22,7 @@ import Data.Maybe (Maybe(..))
|
|||||||
import Data.Newtype (wrap)
|
import Data.Newtype (wrap)
|
||||||
import Data.Nullable (Nullable)
|
import Data.Nullable (Nullable)
|
||||||
import Data.Nullable as Nullable
|
import Data.Nullable as Nullable
|
||||||
|
import Data.Traversable (traverse)
|
||||||
import Effect (Effect)
|
import Effect (Effect)
|
||||||
import Effect.Aff (Canceler(..), delay, makeAff)
|
import Effect.Aff (Canceler(..), delay, makeAff)
|
||||||
import Effect.Aff.Class (class MonadAff, liftAff)
|
import Effect.Aff.Class (class MonadAff, liftAff)
|
||||||
@ -90,7 +89,7 @@ make :: forall @r rl @config @missing @extra. RowToList r rl => ReadCSVRecord r
|
|||||||
make = makeImpl <<< unsafeToForeign <<< Object.union (recordToForeign { columns: false, cast: false, cast_date: false }) <<< recordToForeign
|
make = makeImpl <<< unsafeToForeign <<< Object.union (recordToForeign { columns: false, cast: false, cast_date: false }) <<< recordToForeign
|
||||||
|
|
||||||
-- | Synchronously parse a CSV string
|
-- | Synchronously parse a CSV string
|
||||||
parse :: forall @r rl @config missing extra m p f. Parallel p m => MonadFork f m => Alternative p => MonadAff m => MonadRec m => RowToList r rl => ReadCSVRecord r rl => Union config missing (Config extra) => { | config } -> String -> m (Array { | r })
|
parse :: forall @r rl @config missing extra m f. MonadFork f m => MonadAff m => MonadRec m => RowToList r rl => ReadCSVRecord r rl => Union config missing (Config extra) => { | config } -> String -> m (Array { | r })
|
||||||
parse config csv = do
|
parse config csv = do
|
||||||
stream <- liftEffect $ make @r @config @missing @extra config
|
stream <- liftEffect $ make @r @config @missing @extra config
|
||||||
void $ liftEffect $ Stream.writeString stream UTF8 csv
|
void $ liftEffect $ Stream.writeString stream UTF8 csv
|
||||||
@ -98,7 +97,7 @@ parse config csv = do
|
|||||||
readAll stream
|
readAll stream
|
||||||
|
|
||||||
-- | Loop until the stream is closed, invoking the callback with each record as it is parsed.
|
-- | Loop until the stream is closed, invoking the callback with each record as it is parsed.
|
||||||
foreach :: forall @r rl x m f p. Parallel p m => Alternative p => MonadFork f m => MonadRec m => MonadAff m => RowToList r rl => ReadCSVRecord r rl => CSVParser r x -> ({ | r } -> m Unit) -> m Unit
|
foreach :: forall @r rl x m f. MonadFork f m => MonadRec m => MonadAff m => RowToList r rl => ReadCSVRecord r rl => CSVParser r x -> ({ | r } -> m Unit) -> m Unit
|
||||||
foreach stream cb = whileJust do
|
foreach stream cb = whileJust do
|
||||||
isReadable <- liftEffect $ Stream.readable stream
|
isReadable <- liftEffect $ Stream.readable stream
|
||||||
liftAff $ when (not isReadable) $ makeAff \res -> do
|
liftAff $ when (not isReadable) $ makeAff \res -> do
|
||||||
@ -112,7 +111,7 @@ foreach stream cb = whileJust do
|
|||||||
f <- fork (cb r')
|
f <- fork (cb r')
|
||||||
pure $ Loop $ fibers <> [ f ]
|
pure $ Loop $ fibers <> [ f ]
|
||||||
Nothing -> pure $ Done fibers
|
Nothing -> pure $ Done fibers
|
||||||
void $ parTraverse join fibers
|
void $ traverse join fibers
|
||||||
isClosed <- liftEffect $ Stream.closed stream
|
isClosed <- liftEffect $ Stream.closed stream
|
||||||
pure $ if isClosed then Nothing else Just unit
|
pure $ if isClosed then Nothing else Just unit
|
||||||
|
|
||||||
@ -128,7 +127,7 @@ read stream = runMaybeT do
|
|||||||
liftEither $ lmap (error <<< show) $ runExcept $ readCSVRecord @r @rl cols raw
|
liftEither $ lmap (error <<< show) $ runExcept $ readCSVRecord @r @rl cols raw
|
||||||
|
|
||||||
-- | Collect all parsed records into an array
|
-- | Collect all parsed records into an array
|
||||||
readAll :: forall @r rl a m p f. Parallel p m => MonadFork f m => Alternative p => MonadRec m => MonadAff m => RowToList r rl => ReadCSVRecord r rl => CSVParser r a -> m (Array { | r })
|
readAll :: forall @r rl a m f. MonadFork f m => MonadRec m => MonadAff m => RowToList r rl => ReadCSVRecord r rl => CSVParser r a -> m (Array { | r })
|
||||||
readAll stream = do
|
readAll stream = do
|
||||||
records <- liftEffect $ ST.toEffect $ Array.ST.new
|
records <- liftEffect $ ST.toEffect $ Array.ST.new
|
||||||
foreach stream $ void <<< liftEffect <<< ST.toEffect <<< flip Array.ST.push records
|
foreach stream $ void <<< liftEffect <<< ST.toEffect <<< flip Array.ST.push records
|
||||||
|
Loading…
Reference in New Issue
Block a user