module HIndent.Ast.Declaration.Foreign.Safety
  ( Safety
  , mkSafety
  ) where

import qualified GHC.Types.ForeignCall as GHC
import HIndent.Ast.NodeComments
import {-# SOURCE #-} HIndent.Pretty
import HIndent.Pretty.Combinators
import HIndent.Pretty.NodeComments

data Safety
  = Safe
  | Interruptible
  | Unsafe

instance CommentExtraction Safety where
  nodeComments :: Safety -> NodeComments
nodeComments Safety
_ = [LEpaComment] -> [LEpaComment] -> [LEpaComment] -> NodeComments
NodeComments [] [] []

instance Pretty Safety where
  pretty' :: Safety -> Printer ()
pretty' Safety
Safe = HasCallStack => String -> Printer ()
String -> Printer ()
string String
"safe"
  pretty' Safety
Interruptible = HasCallStack => String -> Printer ()
String -> Printer ()
string String
"interruptible"
  pretty' Safety
Unsafe = HasCallStack => String -> Printer ()
String -> Printer ()
string String
"unsafe"

mkSafety :: GHC.Safety -> Safety
mkSafety :: Safety -> Safety
mkSafety Safety
GHC.PlaySafe = Safety
Safe
mkSafety Safety
GHC.PlayInterruptible = Safety
Interruptible
mkSafety Safety
GHC.PlayRisky = Safety
Unsafe