hydra-0.13.0: src/main/haskell/Hydra/Dsl/Meta/Lib/Flows.hs
{-# LANGUAGE FlexibleContexts #-}
-- | Phantom-typed term DSL for the hydra.lib.flows library
module Hydra.Dsl.Meta.Lib.Flows where
import Hydra.Compute
import Hydra.Phantoms
import Hydra.Dsl.AsTerm
import Hydra.Dsl.Meta.Phantoms
import qualified Hydra.Dsl.Terms as Terms
import qualified Hydra.Dsl.Types as Types
import Hydra.Sources.Libraries
import qualified Data.Map as M
import qualified Data.Set as S
apply :: TTerm (Flow s (x -> y)) -> TTerm (Flow s x) -> TTerm (Flow s y)
apply = primitive2 _flows_apply
bind :: (AsTerm t (Flow s x), AsTerm f (x -> Flow s y)) => t -> f -> TTerm (Flow s y)
bind fx f = primitive2 _flows_bind (asTerm fx) (asTerm f)
fail :: AsTerm f String => f -> TTerm (Flow s x)
fail = primitive1 _flows_fail . asTerm
foldl :: TTerm (x -> y -> Flow s x) -> TTerm x -> TTerm [y] -> TTerm (Flow s x)
foldl = primitive3 _flows_foldl
map :: (AsTerm f (x -> y), AsTerm t (Flow s x)) => f -> t -> TTerm (Flow s y)
map f fx = primitive2 _flows_map (asTerm f) (asTerm fx)
mapElems :: TTerm (v1 -> Flow s v2) -> TTerm (M.Map k v1) -> TTerm (Flow s (M.Map k v2))
mapElems = primitive2 _flows_mapElems
mapKeys :: TTerm (k1 -> Flow s k2) -> TTerm (M.Map k1 v) -> TTerm (Flow s (M.Map k2 v))
mapKeys = primitive2 _flows_mapKeys
mapList :: AsTerm f (x -> Flow s y) => f -> TTerm [x] -> TTerm (Flow s [y])
mapList f = primitive2 _flows_mapList (asTerm f)
mapMaybe :: AsTerm f (x -> Flow s y) => f -> TTerm (Maybe x) -> TTerm (Flow s (Maybe y))
mapMaybe f = primitive2 _flows_mapMaybe (asTerm f)
mapSet :: TTerm (x -> Flow s y) -> TTerm (S.Set x) -> TTerm (Flow s (S.Set y))
mapSet = primitive2 _flows_mapSet
pure :: AsTerm t x => t -> TTerm (Flow s x)
pure x = primitive1 _flows_pure (asTerm x)
sequence :: TTerm [Flow s a] -> TTerm (Flow s [a])
sequence = primitive1 _flows_sequence
withDefault :: AsTerm t x => t -> TTerm (Flow s x) -> TTerm (Flow s x)
withDefault fallback flow = primitive2 _flows_withDefault (asTerm fallback) flow