{-# language DataKinds #-}
{-# language ScopedTypeVariables #-}
{-# language ViewPatterns #-}
{-# language RankNTypes #-}
{-# language KindSignatures #-}
{-# language PatternSynonyms #-}
{-# language MagicHash #-}
{-# language GADTSyntax #-}
{-# language UnliftedNewtypes #-}
{-# language UnboxedTuples #-}
module Data.Maybe.Void
( MaybeVoid#(..)
, pattern JustVoid#
, pattern NothingVoid#
) where
import GHC.Exts
newtype MaybeVoid# :: TYPE ('TupleRep '[]) -> TYPE 'WordRep where
MaybeVoid# :: forall (a :: TYPE ('TupleRep '[])). Word# -> MaybeVoid# a
pattern JustVoid# :: a -> MaybeVoid# a
pattern $bJustVoid# :: forall (a :: TYPE ('TupleRep '[])). a -> MaybeVoid# a
$mJustVoid# :: forall {r} {a :: TYPE ('TupleRep '[])}.
MaybeVoid# a -> (a -> r) -> ((# #) -> r) -> r
JustVoid# a <- (helper -> (# 1##, a #)) where
JustVoid# a
_ = forall (a :: TYPE ('TupleRep '[])). Word# -> MaybeVoid# a
MaybeVoid# Word#
1##
helper :: forall (a :: TYPE ('TupleRep '[])).
MaybeVoid# a -> (# Word#, a #)
{-# inline helper #-}
helper :: forall (a :: TYPE ('TupleRep '[])). MaybeVoid# a -> (# Word#, a #)
helper (MaybeVoid# Word#
x) =
(# Word#
x, (unsafeCoerce# :: forall a b. a -> b
unsafeCoerce# :: (# #) -> a) (# #) #)
pattern NothingVoid# :: MaybeVoid# a
pattern $bNothingVoid# :: (# #) -> forall (a :: TYPE ('TupleRep '[])). MaybeVoid# a
$mNothingVoid# :: forall {r} {a :: TYPE ('TupleRep '[])}.
MaybeVoid# a -> ((# #) -> r) -> ((# #) -> r) -> r
NothingVoid# = MaybeVoid# 0##