on master help sign in
Improve the BadUnderscore error message
commitc0800bc99ffc28febfe70b0cd8ded27d9905ccfd authorEvan Czaplicki <evancz@users.noreply.github.com> dateWed 20 Dec 2017, 16:29 (9 years ago) parent510f529
3 files changed+19−2
src/Parse/Primitives.hs+3 src/Parse/Primitives/Symbol.hs+3−2 src/Type/Unify.hs+13
src/Parse/Primitives.hs+3
@@ -55,6 +55,9 @@ runAt startRow startColumn (Parser parser) (B.PS fp offset length) =
5555 E.BadEscape width _ ->
5656 mkError (R.Region pos (R.Position row (col + width))) Nothing
5757
58+ E.BadUnderscore badCol ->
59+ mkError (R.Region pos (R.Position row badCol)) Nothing
60+
5861 E.BadOp _ ((_, start) : _) ->
5962 mkError (R.Region start pos) (Just (R.Region pos pos))
6063
src/Parse/Primitives/Symbol.hs+3−2
@@ -1,5 +1,5 @@
11{-# OPTIONS_GHC -Wall #-}
2−{-# LANGUAGE BangPatterns, OverloadedStrings #-}
2+{-# LANGUAGE BangPatterns, UnboxedTuples, OverloadedStrings #-}
33module Parse.Primitives.Symbol
44 ( underscore
55 , binop
@@ -45,7 +45,8 @@ underscore =
4545 !newCol = col + 1
4646 in
4747 if Var.getInnerWidth fp newOffset terminal > 0 then
48− cerr (E.ParseError row newCol E.BadUnderscore)
48+ let (# _, badCol #) = Var.chompInnerChars fp newOffset terminal newCol in
49+ cerr (E.ParseError row newCol (E.BadUnderscore badCol))
4950 else
5051 let !newState = State fp newOffset terminal indent row newCol ctx in
5152 cok () newState noError
src/Type/Unify.hs+13
@@ -293,11 +293,24 @@ guardedUnify orientation left right =
293293 else
294294 do leftDesc <- UF.get left
295295 rightDesc <- UF.get right
296+ putStrLn (toString leftDesc ++ " vs " ++ toString rightDesc)
296297 case actuallyUnify (Context orientation left leftDesc right rightDesc) of
297298 Unify k ->
298299 k vars ok err
299300
300301
302+toString :: Descriptor -> String
303+toString (Descriptor content _ _ _) =
304+ case content of
305+ FlexVar _ -> "FlexVar"
306+ FlexSuper _ _ -> "FlexSuper"
307+ RigidVar _ -> "RigidVar"
308+ RigidSuper _ _ -> "RigidSuper"
309+ Alias _ _ _ _ -> "Alias"
310+ Structure _ -> "Structure"
311+ Error _ -> "Error"
312+
313+
301314subUnify :: Context -> Variable -> Variable -> Unify ()
302315subUnify context var1 var2 =
303316 guardedUnify (_orientation context) var1 var2