module Hasql.Pipes ( pipesQuery, ) where -- transformers import Control.Monad.Trans.Class -- pipes import Pipes import qualified Pipes.Prelude as Pipes -- hasql import Hasql.Statement -- hasql-transaction-io import Hasql.CursorTransactionIO -- hasql-streams-core import Hasql.Streams -- | Run a `Statement`, but return a `Producer` instead of a list pipesQuery :: Statement params [a] -> params -> Producer a (CursorTransactionIO s) () pipesQuery stmt params = cursorStreamQuery stmt params foldPipesStream foldPipesStream :: CursorStreamFold s a (Producer a (CursorTransactionIO s) ()) foldPipesStream step init = lift init >>= Pipes.unfoldr (fmap maybeToEither . step) maybeToEither :: Maybe a -> Either () a maybeToEither = maybe (Left ()) Right