module Hasql.Streamly (
streamlyQuery,
) where
-- transformers
import Control.Monad.Trans.Class
-- streamly
import qualified Streamly.Prelude as Streamly
import qualified Streamly.Internal.Data.Stream.Serial as Serial
-- hasql
import Hasql.Statement
-- hasql-transaction-io
import Hasql.CursorTransactionIO
-- hasql-streams-core
import Hasql.Streams
-- | Run a `Statement`, but return a instance of `Streamly.IsStream` instead of a list
streamlyQuery ::
(Streamly.IsStream t) =>
Statement params [a] -> params -> t (CursorTransactionIO s) a
streamlyQuery stmt params = cursorStreamQuery stmt params foldStreamlyStream
foldStreamlyStream ::
(Streamly.IsStream t) =>
CursorStreamFold s a (t (CursorTransactionIO s) a)
foldStreamlyStream step init = Streamly.adapt (lift init >>= Serial.unfoldrM step)