on master help sign in
Improve the BadUnderscore error message
c0800bcEvan Czaplicki
src/Parse/Primitives.hs+3
@@ -55,6 +55,9 @@ runAt startRow startColumn (Parser parser) (B.PS fp offset length) =
55 E.BadEscape width _ ->
55 E.BadEscape width _ ->
56 mkError (R.Region pos (R.Position row (col + width))) Nothing
56 mkError (R.Region pos (R.Position row (col + width))) Nothing
57
57
58+ E.BadUnderscore badCol ->
59+ mkError (R.Region pos (R.Position row badCol)) Nothing
60+
58 E.BadOp _ ((_, start) : _) ->
61 E.BadOp _ ((_, start) : _) ->
59 mkError (R.Region start pos) (Just (R.Region pos pos))
62 mkError (R.Region start pos) (Just (R.Region pos pos))
60
63
src/Parse/Primitives/Symbol.hs+3−2
@@ -1,5 +1,5 @@
1{-# OPTIONS_GHC -Wall #-}
1{-# OPTIONS_GHC -Wall #-}
2−{-# LANGUAGE BangPatterns, OverloadedStrings #-}
2+{-# LANGUAGE BangPatterns, UnboxedTuples, OverloadedStrings #-}
3module Parse.Primitives.Symbol
3module Parse.Primitives.Symbol
4 ( underscore
4 ( underscore
5 , binop
5 , binop
@@ -45,7 +45,8 @@ underscore =
45 !newCol = col + 1
45 !newCol = col + 1
46 in
46 in
47 if Var.getInnerWidth fp newOffset terminal > 0 then
47 if Var.getInnerWidth fp newOffset terminal > 0 then
48+ let (# _, badCol #) = Var.chompInnerChars fp newOffset terminal newCol in
48− cerr (E.ParseError row newCol E.BadUnderscore)
49+ cerr (E.ParseError row newCol (E.BadUnderscore badCol))
49 else
50 else
50 let !newState = State fp newOffset terminal indent row newCol ctx in
51 let !newState = State fp newOffset terminal indent row newCol ctx in
51 cok () newState noError
52 cok () newState noError
src/Type/Unify.hs+13
@@ -293,11 +293,24 @@ guardedUnify orientation left right =
293 else
293 else
294 do leftDesc <- UF.get left
294 do leftDesc <- UF.get left
295 rightDesc <- UF.get right
295 rightDesc <- UF.get right
296+ putStrLn (toString leftDesc ++ " vs " ++ toString rightDesc)
296 case actuallyUnify (Context orientation left leftDesc right rightDesc) of
297 case actuallyUnify (Context orientation left leftDesc right rightDesc) of
297 Unify k ->
298 Unify k ->
298 k vars ok err
299 k vars ok err
299
300
300
301
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+
301subUnify :: Context -> Variable -> Variable -> Unify ()
314subUnify :: Context -> Variable -> Variable -> Unify ()
302subUnify context var1 var2 =
315subUnify context var1 var2 =
303 guardedUnify (_orientation context) var1 var2
316 guardedUnify (_orientation context) var1 var2