module Type.Constrain.Literal where
import AST.Annotation
import AST.Literal
import Type.Type
import Type.Environment as Env
constrain :: Environment -> Region -> Literal -> Type -> IO TypeConstraint
constrain env region literal tipe =
do tipe' <- litType
return . A region $ CEqual tipe tipe'
where
prim name = return (Env.get env Env.types name)
litType =
case literal of
IntNum _ -> varN `fmap` variable (Is Number)
FloatNum _ -> prim "Float"
Chr _ -> prim "Char"
Str _ -> prim "String"
Boolean _ -> prim "Bool"