module DDC.Core.Tetra.Prim.OpError
( OpError (..)
, readOpErrorFlag
, typeOpErrorFlag)
where
import DDC.Core.Tetra.Prim.TyConTetra
import DDC.Core.Tetra.Prim.TyConPrim
import DDC.Core.Tetra.Prim.Base
import DDC.Type.Compounds
import DDC.Type.Exp
import DDC.Base.Pretty
import Control.DeepSeq
instance NFData OpError where
rnf op
= case op of
OpErrorDefault -> ()
instance Pretty OpError where
ppr op
= case op of
OpErrorDefault -> text "default#"
readOpErrorFlag :: String -> Maybe (OpError, Bool)
readOpErrorFlag str
= case str of
"default#" -> Just (OpErrorDefault, False)
"default##" -> Just (OpErrorDefault, True)
_ -> Nothing
typeOpErrorFlag :: OpError -> Bool -> Type Name
typeOpErrorFlag err False
= case err of
OpErrorDefault
-> tForall kData $ \t -> tTextLit `tFun` tNat `tFun` t
typeOpErrorFlag err True
= case err of
OpErrorDefault
-> tForall kData $ \t -> tUnboxed tTextLit `tFun` tUnboxed tNat `tFun` t