aboutsummaryrefslogtreecommitdiff
path: root/frontend/check.icl
diff options
context:
space:
mode:
Diffstat (limited to 'frontend/check.icl')
-rw-r--r--frontend/check.icl16
1 files changed, 16 insertions, 0 deletions
diff --git a/frontend/check.icl b/frontend/check.icl
index fe7ed0c..0482532 100644
--- a/frontend/check.icl
+++ b/frontend/check.icl
@@ -473,6 +473,22 @@ where
build_type_subst {bind_src,bind_dst} type_heaps
# (_, bind_src, type_heaps) = substitute bind_src type_heaps
+// RWS ...
+/*
+ FIXME: this is a patch for the following incorrect function type (in a dcl module)
+
+
+ f :: a | c a b special
+ a=[], b = Int
+ a=T, b = Char
+
+ The type variable b doesn't occur in f's type, but this is checked in a later
+ phase. Probably it's a better solution to change the order of checking.
+
+*/
+ | isNilPtr bind_dst.tv_info_ptr
+ = type_heaps
+// ... RWS
= { type_heaps & th_vars = writePtr bind_dst.tv_info_ptr (TVI_Type bind_src) type_heaps.th_vars}
build_var_subst var (free_vars, type_var_heap)