{-# LANGUAGE DataKinds #-}
{-# LANGUAGE GADTSyntax #-}
{-# LANGUAGE KindSignatures #-}
{-# LANGUAGE MagicHash #-}
{-# LANGUAGE PatternSynonyms #-}
{-# LANGUAGE RankNTypes #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE UnboxedTuples #-}
{-# LANGUAGE UnliftedNewtypes #-}
{-# LANGUAGE ViewPatterns #-}
module Data.Maybe.Word16
( MaybeWord16# (..)
, pattern JustWord16#
, pattern NothingWord16#
) where
import GHC.Exts
newtype MaybeWord16# :: TYPE 'WordRep where
MaybeWord16# :: Word# -> MaybeWord16#
pattern JustWord16# :: Word16# -> MaybeWord16#
pattern $mJustWord16# :: forall {r}. MaybeWord16# -> (Word16# -> r) -> ((# #) -> r) -> r
$bJustWord16# :: Word16# -> MaybeWord16#
JustWord16# a <- (helper -> (# 0#, a #))
where
JustWord16# Word16#
w = Word# -> MaybeWord16#
MaybeWord16# (Word16# -> Word#
word16ToWord# Word16#
w)
helper :: MaybeWord16# -> (# Int#, Word16# #)
{-# INLINE helper #-}
helper :: MaybeWord16# -> (# Int#, Word16# #)
helper (MaybeWord16# Word#
x) = (# Word# -> Word# -> Int#
eqWord# Word#
x Word#
65536##, Word# -> Word16#
wordToWord16# Word#
x #)
pattern NothingWord16# :: MaybeWord16#
pattern $mNothingWord16# :: forall {r}. MaybeWord16# -> ((# #) -> r) -> ((# #) -> r) -> r
$bNothingWord16# :: (# #) -> MaybeWord16#
NothingWord16# = MaybeWord16# 65536##