{-# OPTIONS_GHC -Wno-orphans #-}
module GHC.Hs.Specificity where
import Prelude
import Control.DeepSeq (NFData(..))
import GHC.Utils.Outputable
import GHC.Utils.Binary
import Language.Haskell.Syntax.Specificity
instance Outputable ForAllTyFlag where
ppr :: ForAllTyFlag -> SDoc
ppr ForAllTyFlag
Required = String -> SDoc
forall doc. IsLine doc => String -> doc
text String
"[req]"
ppr ForAllTyFlag
Specified = String -> SDoc
forall doc. IsLine doc => String -> doc
text String
"[spec]"
ppr ForAllTyFlag
Inferred = String -> SDoc
forall doc. IsLine doc => String -> doc
text String
"[infrd]"
instance Binary Specificity where
put_ :: WriteBinHandle -> Specificity -> IO ()
put_ WriteBinHandle
bh Specificity
SpecifiedSpec = WriteBinHandle -> Word8 -> IO ()
putByte WriteBinHandle
bh Word8
0
put_ WriteBinHandle
bh Specificity
InferredSpec = WriteBinHandle -> Word8 -> IO ()
putByte WriteBinHandle
bh Word8
1
get :: ReadBinHandle -> IO Specificity
get ReadBinHandle
bh = do
h <- ReadBinHandle -> IO Word8
getByte ReadBinHandle
bh
case h of
Word8
0 -> Specificity -> IO Specificity
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return Specificity
SpecifiedSpec
Word8
_ -> Specificity -> IO Specificity
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return Specificity
InferredSpec
instance Binary ForAllTyFlag where
put_ :: WriteBinHandle -> ForAllTyFlag -> IO ()
put_ WriteBinHandle
bh ForAllTyFlag
Required = WriteBinHandle -> Word8 -> IO ()
putByte WriteBinHandle
bh Word8
0
put_ WriteBinHandle
bh ForAllTyFlag
Specified = WriteBinHandle -> Word8 -> IO ()
putByte WriteBinHandle
bh Word8
1
put_ WriteBinHandle
bh ForAllTyFlag
Inferred = WriteBinHandle -> Word8 -> IO ()
putByte WriteBinHandle
bh Word8
2
get :: ReadBinHandle -> IO ForAllTyFlag
get ReadBinHandle
bh = do
h <- ReadBinHandle -> IO Word8
getByte ReadBinHandle
bh
case h of
Word8
0 -> ForAllTyFlag -> IO ForAllTyFlag
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return ForAllTyFlag
Required
Word8
1 -> ForAllTyFlag -> IO ForAllTyFlag
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return ForAllTyFlag
Specified
Word8
_ -> ForAllTyFlag -> IO ForAllTyFlag
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return ForAllTyFlag
Inferred
instance NFData Specificity where
rnf :: Specificity -> ()
rnf Specificity
SpecifiedSpec = ()
rnf Specificity
InferredSpec = ()
instance NFData ForAllTyFlag where
rnf :: ForAllTyFlag -> ()
rnf (Invisible Specificity
spec) = Specificity -> ()
forall a. NFData a => a -> ()
rnf Specificity
spec
rnf ForAllTyFlag
Required = ()