{-# LANGUAGE UnboxedSums #-}
{-# LANGUAGE UnboxedTuples #-}
{-# LANGUAGE MagicHash #-}

module Mikan.Utils.Maybe.Unboxable where

data Maybe# a = Maybe# (# a | (# #) #)

pattern Nothing# :: Maybe# a
pattern $bNothing# :: forall a. Maybe# a
$mNothing# :: forall {r} {a}. Maybe# a -> ((# #) -> r) -> ((# #) -> r) -> r
Nothing# = Maybe# (# | (# #) #)
pattern Just# :: a -> Maybe# a
pattern $bJust# :: forall a. a -> Maybe# a
$mJust# :: forall {r} {a}. Maybe# a -> (a -> r) -> ((# #) -> r) -> r
Just# a = Maybe# (# a | #)
{-# COMPLETE Nothing#, Just# #-}