-- | Haskell implementations of hydra/lib/optionals primitives

module Hydra.Lib.Optionals where

import qualified Data.Maybe as Y


apply :: Y.Maybe (a -> b) -> Y.Maybe a -> Y.Maybe b
apply :: forall a b. Maybe (a -> b) -> Maybe a -> Maybe b
apply = Maybe (a -> b) -> Maybe a -> Maybe b
forall a b. Maybe (a -> b) -> Maybe a -> Maybe b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
(<*>)

bind :: Y.Maybe a -> (a -> Y.Maybe b) -> Y.Maybe b
bind :: forall a b. Maybe a -> (a -> Maybe b) -> Maybe b
bind = Maybe a -> (a -> Maybe b) -> Maybe b
forall a b. Maybe a -> (a -> Maybe b) -> Maybe b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
(>>=)

cat :: [Y.Maybe a] -> [a]
cat :: forall a. [Maybe a] -> [a]
cat = [Maybe a] -> [a]
forall a. [Maybe a] -> [a]
Y.catMaybes

fromMaybe :: a -> Y.Maybe a -> a
fromMaybe :: forall a. a -> Maybe a -> a
fromMaybe = a -> Maybe a -> a
forall a. a -> Maybe a -> a
Y.fromMaybe

isJust :: Y.Maybe a -> Bool
isJust :: forall a. Maybe a -> Bool
isJust = Maybe a -> Bool
forall a. Maybe a -> Bool
Y.isJust

isNothing :: Y.Maybe a -> Bool
isNothing :: forall a. Maybe a -> Bool
isNothing = Maybe a -> Bool
forall a. Maybe a -> Bool
Y.isNothing

map :: (a -> b) -> Y.Maybe a -> Y.Maybe b
map :: forall a b. (a -> b) -> Maybe a -> Maybe b
map = (a -> b) -> Maybe a -> Maybe b
forall a b. (a -> b) -> Maybe a -> Maybe b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap

maybe :: b -> (a -> b) -> Y.Maybe a -> b
maybe :: forall b a. b -> (a -> b) -> Maybe a -> b
maybe = b -> (a -> b) -> Maybe a -> b
forall b a. b -> (a -> b) -> Maybe a -> b
Y.maybe

pure :: a -> Y.Maybe a
pure :: forall a. a -> Maybe a
pure = a -> Maybe a
forall a. a -> Maybe a
Just