packages feed

hasql-streams-pipes-0.1.0.0: library/Hasql/Pipes.hs

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