diff options
author | Eduardo Julian | 2015-04-26 16:51:17 -0400 |
---|---|---|
committer | Eduardo Julian | 2015-04-26 16:51:17 -0400 |
commit | 8b7f5c6d38d45c1f38aa2c416afbd8c38f0bfafb (patch) | |
tree | 9aaebc94ac723daebb9fbd879da7651bbf0bea7c /src | |
parent | 50d36ed6fb12545c429f981ae4b382dc0913697d (diff) |
Made a correction to lux.lux and the analyser regarding how to handle type-vars.
Diffstat (limited to 'src')
-rw-r--r-- | src/lux/analyser/lux.clj | 3 | ||||
-rw-r--r-- | src/lux/type.clj | 15 |
2 files changed, 13 insertions, 5 deletions
diff --git a/src/lux/analyser/lux.clj b/src/lux/analyser/lux.clj index c9244a91e..1761ec1a2 100644 --- a/src/lux/analyser/lux.clj +++ b/src/lux/analyser/lux.clj @@ -267,7 +267,8 @@ [["lux;VarT" ?id]] (|do [? (&type/bound? ?id)] (if ? - (fail "[Analyser Error] Can't use type-var in any type-specific way inside polymorphic functions.") + (|do [dtype (&type/deref ?id)] + (fail (str "[Analyser Error] Can't use type-var in any type-specific way inside polymorphic functions: " ?id (&type/show-type dtype)))) (return output))))))) [_] diff --git a/src/lux/type.clj b/src/lux/type.clj index 82a405977..dcaf0bf5e 100644 --- a/src/lux/type.clj +++ b/src/lux/type.clj @@ -138,10 +138,17 @@ (defn bound? [id] (fn [state] - (if-let [type* (->> state (&/get$ &/$TYPES) (&/get$ &/$MAPPINGS) (&/|get id))] - (matchv ::M/objects [type*] - [["lux;Some" _]] - (return* state true) + (if-let [type (->> state (&/get$ &/$TYPES) (&/get$ &/$MAPPINGS) (&/|get id))] + (matchv ::M/objects [type] + [["lux;Some" type*]] + (matchv ::M/objects [type*] + [["lux;VarT" ?id]] + (&/run-state (&/try-all% (&/|list (bound? ?id) + (return false))) + state) + + [_] + (return* state true)) [["lux;None" _]] (return* state false)) |