Module

Yoga.Om.Layer

Package
purescript-yoga-om-layer
Repository
rowtype-yoga/purescript-yoga-om-layer

#OmLayer Source

newtype OmLayer :: Row Type -> Row Type -> Row Type -> Typenewtype OmLayer req prov err

A layer that requires dependencies (req) and provides services (prov)

Constructors

Instances

#makeLayer Source

makeLayer :: forall req prov err. Om (Record req) err (Record prov) -> OmLayer req prov err

Helper to create a layer from an Om computation

#runLayer Source

runLayer :: forall req prov err available. CheckAllProvided req available => Record available -> OmLayer req prov err -> Om (Record available) err (Record prov)

Run a layer with a given context, with custom error if requirements aren't met

#combineRequirements Source

combineRequirements :: forall req1 req2 prov1 prov2 err1 err2 provMerged provMergedRaw reqMerged reqDeduped _req1 _req2 _err1 _err2. Union req1 req2 reqMerged => Nub reqMerged reqDeduped => Union req1 _req1 reqDeduped => Union req2 _req2 reqDeduped => Union err1 _err1 () => Union err2 _err2 () => Union prov1 prov2 provMergedRaw => Nub provMergedRaw provMerged => Keys req1 => Keys req2 => OmLayer req1 prov1 err1 -> OmLayer req2 prov2 err2 -> OmLayer reqDeduped provMerged ()

The key function: combine two layers with automatic deduplication

#provide Source

provide :: forall req prov1 prov2 err1 err2 _req _prov1 _err1 _err2. Union req _req req => Union prov1 _prov1 prov1 => Union err1 _err1 () => Union err2 _err2 () => Keys req => Keys prov1 => OmLayer prov1 prov2 err2 -> OmLayer req prov1 err1 -> OmLayer req prov2 ()

Vertical composition: feed output of one layer into input of another This is the >>> operator from ZIO ZLayer

Example: postgresLive :: OmLayer (config :: Config) (postgres :: SQL) () userRepoLive :: OmLayer (postgres :: SQL) (userRepo :: UserRepo) ()

composed = userRepoLive provide postgresLive -- Result: OmLayer (config :: Config) (userRepo :: UserRepo) ()

#(>->) Source

Operator alias for Yoga.Om.Layer.provide (left-associative / precedence 9)

#CheckAllProvided Source

class CheckAllProvided :: Row Type -> Row Type -> Constraintclass CheckAllProvided (required :: Row Type) (available :: Row Type) 

Check if all required dependencies are provided

Instances

#CheckAllLabelsExist Source

class CheckAllLabelsExist :: RowList Type -> RowList Type -> Row Type -> Row Type -> Constraintclass CheckAllLabelsExist (required :: RowList Type) (available :: RowList Type) (requiredRow :: Row Type) (availableRow :: Row Type) 

Check that all labels in required RowList exist in available RowList

Instances

#CheckLabelExists Source

class CheckLabelExists :: Symbol -> Type -> RowList Type -> Row Type -> Row Type -> Constraintclass CheckLabelExists (label :: Symbol) (ty :: Type) (available :: RowList Type) (requiredRow :: Row Type) (availableRow :: Row Type) 

Check if a single label exists in the available RowList

Instances

Modules
Yoga.Om.Layer