module Argo.Internal.Type.Optional where

newtype Optional a
    = Optional (Maybe a)
    deriving (Optional a -> Optional a -> Bool
forall a. Eq a => Optional a -> Optional a -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Optional a -> Optional a -> Bool
$c/= :: forall a. Eq a => Optional a -> Optional a -> Bool
== :: Optional a -> Optional a -> Bool
$c== :: forall a. Eq a => Optional a -> Optional a -> Bool
Eq, Int -> Optional a -> ShowS
forall a. Show a => Int -> Optional a -> ShowS
forall a. Show a => [Optional a] -> ShowS
forall a. Show a => Optional a -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [Optional a] -> ShowS
$cshowList :: forall a. Show a => [Optional a] -> ShowS
show :: Optional a -> String
$cshow :: forall a. Show a => Optional a -> String
showsPrec :: Int -> Optional a -> ShowS
$cshowsPrec :: forall a. Show a => Int -> Optional a -> ShowS
Show)

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

toMaybe :: Optional a -> Maybe a
toMaybe :: forall a. Optional a -> Maybe a
toMaybe (Optional Maybe a
x) = Maybe a
x

nothing :: Optional a
nothing :: forall a. Optional a
nothing = forall a. Maybe a -> Optional a
fromMaybe forall a. Maybe a
Nothing

just :: a -> Optional a
just :: forall a. a -> Optional a
just = forall a. Maybe a -> Optional a
fromMaybe forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a. a -> Maybe a
Just