@@ -411,15 +411,20 @@ constrainUpdate rtv region name expr fields expected =
411411 do extVar <- mkFlexVar
412412 fieldDict <- Map.traverseWithKey (constrainUpdateField rtv region) fields
413413
414− let recordType = RecordN (Map.map (\(_,t,_) -> t) fieldDict) (VarN extVar)
414+ recordVar <- mkFlexVar
415+ let recordType = VarN recordVar
416+ let fieldsType = RecordN (Map.map (\(_,t,_) -> t) fieldDict) (VarN extVar)
417+
418+ -- NOTE: fieldsType is separate so that Error propagates better
419+ let fieldsCon = CEqual region Record recordType (NoExpectation fieldsType)
415420 let recordCon = CEqual region Record recordType expected
416421
417− let vars = Map.foldr (\(v,_,_) vs -> v:vs) [extVar] fieldDict
422+ let vars = Map.foldr (\(v,_,_) vs -> v:vs) [recordVar,extVar] fieldDict
418423 let cons = Map.foldr (\(_,_,c) cs -> c:cs) [recordCon] fieldDict
419424
420425 con <- constrain rtv expr (FromContext region (RecordUpdateKeys name fields) recordType)
421426
422− return $ exists vars $ CAnd (con:cons)
427+ return $ exists vars $ CAnd (fieldsCon:con:cons)
423428
424429
425430constrainUpdateField :: RTV -> R.Region -> N.Name -> Can.FieldUpdate -> IO (Variable, Type, Constraint)