{-# LANGUAGE RoleAnnotations #-}
module Data.MonoidMap.Internal.NonNull.Unsafe
( NonNull (UnsafeNonNull)
, nonNull
, unwrap
)
where
import Prelude hiding
( null )
import Control.DeepSeq
( NFData )
import Data.Monoid.Null
( MonoidNull (null) )
newtype NonNull v = UnsafeNonNull v
deriving newtype NonNull v -> ()
(NonNull v -> ()) -> NFData (NonNull v)
forall v. NFData v => NonNull v -> ()
forall a. (a -> ()) -> NFData a
$crnf :: forall v. NFData v => NonNull v -> ()
rnf :: NonNull v -> ()
NFData
type role NonNull nominal
nonNull :: MonoidNull v => v -> Maybe (NonNull v)
nonNull :: forall v. MonoidNull v => v -> Maybe (NonNull v)
nonNull !v
v
| v -> Bool
forall m. MonoidNull m => m -> Bool
null v
v = Maybe (NonNull v)
forall a. Maybe a
Nothing
| Bool
otherwise = NonNull v -> Maybe (NonNull v)
forall a. a -> Maybe a
Just (v -> NonNull v
forall v. v -> NonNull v
UnsafeNonNull v
v)
{-# INLINE nonNull #-}
unwrap :: NonNull v -> v
unwrap :: forall v. NonNull v -> v
unwrap (UnsafeNonNull v
v) = v
v
{-# INLINE unwrap #-}