module DDC.Core.Lite.Convert.Base
( ConvertM
, Error (..))
where
import DDC.Core.Exp
import DDC.Base.Pretty
import DDC.Core.Check (AnTEC(..))
import qualified DDC.Core.Lite.Name as L
import qualified DDC.Control.Monad.Check as G
type ConvertM a x = G.CheckM (Error a) x
data Error a
= ErrorMainHasNoMain
| ErrorMalformed String
| ErrorMistyped (Exp (AnTEC a L.Name) L.Name)
| ErrorNotNormalized String
| ErrorBotAnnot
| ErrorUnexpectedSum
| ErrorInvalidBinder L.Name
| ErrorInvalidBound (Bound L.Name)
| ErrorInvalidAlt
instance Show a => Pretty (Error a) where
ppr err
= case err of
ErrorMalformed str
-> vcat [ text "Module is malformed."
, text str ]
ErrorMistyped xx
-> vcat [ text "Module is mistyped." <> (text $ show xx) ]
ErrorNotNormalized str
-> vcat [ text "Module is not in a-normal form."
, text str ]
ErrorBotAnnot
-> vcat [ text "Found bottom type annotation."
, text " Code should be type-checked before converting Lite -> Salt" ]
ErrorUnexpectedSum
-> vcat [ text "Unexpected type sum."]
ErrorInvalidBinder n
-> vcat [ text "Invalid name used in bidner " <> ppr n ]
ErrorInvalidBound n
-> vcat [ text "Invalid name used in bound occurrence " <> ppr n ]
ErrorInvalidAlt
-> vcat [ text "Invalid alternative" ]
ErrorMainHasNoMain
-> vcat [ text "Main module has no 'main' function" ]