Skip to content
Snippets Groups Projects
Commit 2476a859 authored by Simon Peyton Jones's avatar Simon Peyton Jones
Browse files

[project @ 1999-02-09 08:53:05 by simonpj]

Fix typechecker bug so that

	main :: a
	main = error "Urk"

gives a sensible error message rather than crashing the compiler
parent a4e86278
No related merge requests found
......@@ -692,17 +692,24 @@ now (ToDo).
\begin{code}
checkSigMatch top_lvl binder_names mono_ids sigs
| main_bound_here
= mapTc check_one_sig sigs `thenTc_`
mapTc check_main_ctxt sigs `thenTc_`
-- Now unify the main_id with IO t, for any old t
= -- First unify the main_id with IO t, for any old t
tcSetErrCtxt mainTyCheckCtxt (
tcLookupTyCon ioTyCon_NAME `thenTc` \ ioTyCon ->
newTyVarTy boxedTypeKind `thenNF_Tc` \ t_tv ->
unifyTauTy ((mkTyConApp ioTyCon [t_tv]))
(idType main_mono_id)
) `thenTc_`
returnTc (Just ([], emptyLIE))
-- Now check the signatures
-- Must do this after the unification with IO t,
-- in case of a silly signature like
-- main :: forall a. a
-- The unification to IO t will bind the type variable 'a',
-- which is just waht check_one_sig looks for
mapTc check_one_sig sigs `thenTc_`
mapTc check_main_ctxt sigs `thenTc_`
returnTc (Just ([], emptyLIE))
| not (null sigs)
= mapTc check_one_sig sigs `thenTc_`
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment