packages feed

hasql-streams-streaming-0.1.0.0: library/Hasql/Streaming.hs

module Hasql.Streaming (
  streamingQuery,
) where

-- streaming
import Streaming
import Streaming.Prelude as Streaming

-- hasql
import Hasql.Statement

-- hasql-transaction-io
import Hasql.CursorTransactionIO

-- hasql-streaming
import Hasql.Streams

-- | Run a `Statement`, but return a `Stream` instead of a list
streamingQuery :: 
  Statement params [a] -> params ->
  Stream (Of a) (CursorTransactionIO s) ()
streamingQuery stmt params = cursorStreamQuery stmt params foldStreamingStream

foldStreamingStream ::
  CursorStreamFold s a (Stream (Of a) (CursorTransactionIO s) ())
foldStreamingStream step init = lift init >>= Streaming.unfoldr (fmap maybeToEither . step)

maybeToEither :: Maybe a -> Either () a
maybeToEither = maybe (Left ()) Right