Commit 6aa2bf20 authored by simonpj's avatar simonpj
Browse files

[project @ 2002-02-14 14:56:04 by simonpj]

---------------------------------------
	Record updates are ok for types involving
	existential data constructors, so long as the
	existential ones aren't the ones updated.
	---------------------------------------

This check was already in the type checker, but
the desugarer had an over-zealous assert.
parent 0d8a0e7f
......@@ -454,7 +454,7 @@ dictionaries.
dsExpr (RecordUpdOut record_expr record_in_ty record_out_ty dicts [])
= dsExpr record_expr
dsExpr (RecordUpdOut record_expr record_in_ty record_out_ty dicts rbinds)
dsExpr expr@(RecordUpdOut record_expr record_in_ty record_out_ty dicts rbinds)
= getSrcLocDs `thenDs` \ src_loc ->
dsExpr record_expr `thenDs` \ record_expr' ->
......@@ -488,7 +488,9 @@ dsExpr (RecordUpdOut record_expr record_in_ty record_out_ty dicts rbinds)
src_loc)
in
-- Record stuff doesn't work for existentials
ASSERT( all (not . isExistentialDataCon) data_cons )
-- The type checker checks for this, but we need
-- worry only about the constructors that are to be updated
ASSERT2( all (not . isExistentialDataCon) cons_to_upd, ppr expr )
-- It's important to generate the match with matchWrapper,
-- and the right hand sides with applications of the wrapper Id
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment