module Argo.Internal.Type.Nullable where

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

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

toMaybe :: Nullable a -> Maybe a
toMaybe :: Nullable a -> Maybe a
toMaybe (Nullable Maybe a
x) = Maybe a
x

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

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