packages feed

polysemy-hasql-0.0.1.0: lib/Polysemy/Hasql/Data/InitDb.hs

module Polysemy.Hasql.Data.InitDb where

import Hasql.Connection (Connection)

newtype ClientTag =
  ClientTag { unInitTag :: Text }
  deriving stock (Eq, Show, Generic)
  deriving newtype (IsString, Ord)

data InitDb m =
  InitDb {
    tag :: ClientTag,
    once :: Bool,
    thunk :: Connection -> m ()
  }
  deriving stock (Generic)

instance Applicative m => Default (InitDb m) where
  def =
    InitDb "global" True (const unit)

hoistInitDb :: (m () -> n ()) -> InitDb m -> InitDb n
hoistInitDb f (InitDb t o th) =
  InitDb t o (f . th)

raiseInitDb :: InitDb (Sem r) -> InitDb (Sem (e : r))
raiseInitDb =
  hoistInitDb raise