module Hydra.Dsl.Lib.Optionals where

import Hydra.Phantoms
import Hydra.Sources.Libraries
import qualified Hydra.Dsl.Terms as Terms


apply :: TTerm (Maybe (a -> b) -> Maybe a -> Maybe b)
apply :: forall a b. TTerm (Maybe (a -> b) -> Maybe a -> Maybe b)
apply = Term -> TTerm (Maybe (a -> b) -> Maybe a -> Maybe b)
forall a. Term -> TTerm a
TTerm (Term -> TTerm (Maybe (a -> b) -> Maybe a -> Maybe b))
-> Term -> TTerm (Maybe (a -> b) -> Maybe a -> Maybe b)
forall a b. (a -> b) -> a -> b
$ Name -> Term
Terms.primitive Name
_optionals_apply

bind :: TTerm (Maybe a -> (a -> Maybe b) -> Maybe b)
bind :: forall a b. TTerm (Maybe a -> (a -> Maybe b) -> Maybe b)
bind = Term -> TTerm (Maybe a -> (a -> Maybe b) -> Maybe b)
forall a. Term -> TTerm a
TTerm (Term -> TTerm (Maybe a -> (a -> Maybe b) -> Maybe b))
-> Term -> TTerm (Maybe a -> (a -> Maybe b) -> Maybe b)
forall a b. (a -> b) -> a -> b
$ Name -> Term
Terms.primitive Name
_optionals_bind

cat :: TTerm ([Maybe a] -> [a])
cat :: forall a. TTerm ([Maybe a] -> [a])
cat = Term -> TTerm ([Maybe a] -> [a])
forall a. Term -> TTerm a
TTerm (Term -> TTerm ([Maybe a] -> [a]))
-> Term -> TTerm ([Maybe a] -> [a])
forall a b. (a -> b) -> a -> b
$ Name -> Term
Terms.primitive Name
_optionals_cat

compose :: TTerm ((a -> Maybe b) -> (b -> Maybe c) -> (a -> Maybe c))
compose :: forall a b c.
TTerm ((a -> Maybe b) -> (b -> Maybe c) -> a -> Maybe c)
compose = Term -> TTerm ((a -> Maybe b) -> (b -> Maybe c) -> a -> Maybe c)
forall a. Term -> TTerm a
TTerm (Term -> TTerm ((a -> Maybe b) -> (b -> Maybe c) -> a -> Maybe c))
-> Term -> TTerm ((a -> Maybe b) -> (b -> Maybe c) -> a -> Maybe c)
forall a b. (a -> b) -> a -> b
$ Name -> Term
Terms.primitive Name
_optionals_compose

fromMaybe :: TTerm (a -> Maybe a -> a)
fromMaybe :: forall a. TTerm (a -> Maybe a -> a)
fromMaybe = Term -> TTerm (a -> Maybe a -> a)
forall a. Term -> TTerm a
TTerm (Term -> TTerm (a -> Maybe a -> a))
-> Term -> TTerm (a -> Maybe a -> a)
forall a b. (a -> b) -> a -> b
$ Name -> Term
Terms.primitive Name
_optionals_fromMaybe

isJust :: TTerm (Maybe a -> Bool)
isJust :: forall a. TTerm (Maybe a -> Bool)
isJust = Term -> TTerm (Maybe a -> Bool)
forall a. Term -> TTerm a
TTerm (Term -> TTerm (Maybe a -> Bool))
-> Term -> TTerm (Maybe a -> Bool)
forall a b. (a -> b) -> a -> b
$ Name -> Term
Terms.primitive Name
_optionals_isJust

isNothing :: TTerm (Maybe a -> Bool)
isNothing :: forall a. TTerm (Maybe a -> Bool)
isNothing = Term -> TTerm (Maybe a -> Bool)
forall a. Term -> TTerm a
TTerm (Term -> TTerm (Maybe a -> Bool))
-> Term -> TTerm (Maybe a -> Bool)
forall a b. (a -> b) -> a -> b
$ Name -> Term
Terms.primitive Name
_optionals_isNothing

map :: TTerm ((a -> b) -> Maybe a -> Maybe b)
map :: forall a b. TTerm ((a -> b) -> Maybe a -> Maybe b)
map = Term -> TTerm ((a -> b) -> Maybe a -> Maybe b)
forall a. Term -> TTerm a
TTerm (Term -> TTerm ((a -> b) -> Maybe a -> Maybe b))
-> Term -> TTerm ((a -> b) -> Maybe a -> Maybe b)
forall a b. (a -> b) -> a -> b
$ Name -> Term
Terms.primitive Name
_optionals_map

maybe :: TTerm (b -> (a -> b) -> Maybe a -> b)
maybe :: forall b a. TTerm (b -> (a -> b) -> Maybe a -> b)
maybe = Term -> TTerm (b -> (a -> b) -> Maybe a -> b)
forall a. Term -> TTerm a
TTerm (Term -> TTerm (b -> (a -> b) -> Maybe a -> b))
-> Term -> TTerm (b -> (a -> b) -> Maybe a -> b)
forall a b. (a -> b) -> a -> b
$ Name -> Term
Terms.primitive Name
_optionals_maybe

pure :: TTerm (a -> Maybe a)
pure :: forall a. TTerm (a -> Maybe a)
pure = Term -> TTerm (a -> Maybe a)
forall a. Term -> TTerm a
TTerm (Term -> TTerm (a -> Maybe a)) -> Term -> TTerm (a -> Maybe a)
forall a b. (a -> b) -> a -> b
$ Name -> Term
Terms.primitive Name
_optionals_pure