hydra-0.13.0: src/main/haskell/Hydra/Dsl/Meta/Lib/Maybes.hs
{-# LANGUAGE FlexibleContexts #-}
-- | Phantom-typed term DSL for the hydra.lib.maybes library
module Hydra.Dsl.Meta.Lib.Maybes where
import Hydra.Phantoms
import Hydra.Dsl.AsTerm
import Hydra.Dsl.Meta.Phantoms
import qualified Hydra.Dsl.Terms as Terms
import Hydra.Sources.Libraries
apply :: TTerm (Maybe (a -> b)) -> TTerm (Maybe a) -> TTerm (Maybe b)
apply = primitive2 _maybes_apply
bind :: TTerm (Maybe a) -> TTerm (a -> Maybe b) -> TTerm (Maybe b)
bind = primitive2 _maybes_bind
cases :: TTerm (Maybe a) -> TTerm b -> TTerm (a -> b) -> TTerm b
cases = primitive3 _maybes_cases
cat :: TTerm [Maybe a] -> TTerm [a]
cat = primitive1 _maybes_cat
compose :: TTerm (a -> Maybe b) -> TTerm (b -> Maybe c) -> TTerm (a -> Maybe c)
compose = primitive2 _maybes_compose
fromJust :: TTerm (Maybe a) -> TTerm a
fromJust = primitive1 _maybes_fromJust
fromMaybe :: TTerm a -> TTerm (Maybe a) -> TTerm a
fromMaybe = primitive2 _maybes_fromMaybe
isJust :: TTerm (Maybe a) -> TTerm Bool
isJust = primitive1 _maybes_isJust
isNothing :: TTerm (Maybe a) -> TTerm Bool
isNothing = primitive1 _maybes_isNothing
map :: AsTerm f (a -> b) => f -> TTerm (Maybe a) -> TTerm (Maybe b)
map f = primitive2 _maybes_map (asTerm f)
mapMaybe :: TTerm (a -> Maybe b) -> TTerm [a] -> TTerm [b]
mapMaybe = primitive2 _maybes_mapMaybe
maybe :: (AsTerm t1 b, AsTerm t2 (a -> b)) => t1 -> t2 -> TTerm (Maybe a) -> TTerm b
maybe def f = primitive3 _maybes_maybe (asTerm def) (asTerm f)
pure :: TTerm a -> TTerm (Maybe a)
pure = primitive1 _maybes_pure