Fix off-by-one error in GHCi line reporting (Trac #10578)
authorÖmer Sinan Ağacan <omeragacan@gmail.com>
Thu, 16 Jul 2015 22:06:28 +0000 (00:06 +0200)
committerBen Gamari <ben@smart-cactus.org>
Thu, 16 Jul 2015 22:08:10 +0000 (00:08 +0200)
Test Plan: I couldn't add tests because apparently line number
reporting was already working correctly when loading script files. I
don't know how to test by running commands using stdin, is this
supported?

Reviewers: austin, thomie, bgamari

Reviewed By: thomie, bgamari

Subscribers: hvr, thomie

Differential Revision: https://phabricator.haskell.org/D1067

48 files changed:
ghc/InteractiveUI.hs
testsuite/tests/ghci.debugger/scripts/break003.stderr
testsuite/tests/ghci.debugger/scripts/break006.stderr
testsuite/tests/ghci.debugger/scripts/print019.stderr
testsuite/tests/ghci/prog009/ghci.prog009.stderr
testsuite/tests/ghci/prog013/prog013.stderr
testsuite/tests/ghci/scripts/Defer02.stderr
testsuite/tests/ghci/scripts/T10248.stderr
testsuite/tests/ghci/scripts/T2182ghci.stderr
testsuite/tests/ghci/scripts/T2182ghci2.stderr
testsuite/tests/ghci/scripts/T2816.stderr
testsuite/tests/ghci/scripts/T4127a.stderr
testsuite/tests/ghci/scripts/T5564.stderr
testsuite/tests/ghci/scripts/T6027ghci.stdout
testsuite/tests/ghci/scripts/T7730.stdout
testsuite/tests/ghci/scripts/T7872.stdout
testsuite/tests/ghci/scripts/T7873.stdout
testsuite/tests/ghci/scripts/T8485.stderr
testsuite/tests/ghci/scripts/T8579.stdout
testsuite/tests/ghci/scripts/T8649.stderr
testsuite/tests/ghci/scripts/T8959.stderr
testsuite/tests/ghci/scripts/T9140.stdout
testsuite/tests/ghci/scripts/T9293.stderr
testsuite/tests/ghci/scripts/ghci012.stdout
testsuite/tests/ghci/scripts/ghci040.stdout
testsuite/tests/ghci/scripts/ghci041.stdout
testsuite/tests/ghci/scripts/ghci042.stdout
testsuite/tests/ghci/scripts/ghci044.stderr
testsuite/tests/ghci/scripts/ghci047.stderr
testsuite/tests/ghci/scripts/ghci048.stderr
testsuite/tests/ghci/scripts/ghci050.stderr
testsuite/tests/ghci/scripts/ghci051.stderr
testsuite/tests/ghci/scripts/ghci051.stdout
testsuite/tests/ghci/scripts/ghci052.stderr
testsuite/tests/ghci/scripts/ghci053.stderr
testsuite/tests/ghci/scripts/ghci057.stderr
testsuite/tests/ghci/should_run/T9914.stdout
testsuite/tests/ghci/should_run/T9915.stderr
testsuite/tests/patsyn/should_run/ghci.stderr
testsuite/tests/patsyn/should_run/ghci.stdout
testsuite/tests/safeHaskell/ghci/p10.stderr
testsuite/tests/safeHaskell/ghci/p13.stderr
testsuite/tests/safeHaskell/ghci/p14.stderr
testsuite/tests/safeHaskell/ghci/p16.stderr
testsuite/tests/safeHaskell/ghci/p4.stderr
testsuite/tests/safeHaskell/ghci/p6.stderr
testsuite/tests/safeHaskell/ghci/p9.stderr
testsuite/tests/th/T7276a.stdout

index cd58fc2..d834523 100644 (file)
@@ -424,7 +424,10 @@ interactiveUI config srcs maybe_exprs = do
                    stop               = default_stop,
                    editor             = default_editor,
                    options            = [],
-                   line_number        = 1,
+                   -- We initialize line number as 0, not 1, because we use
+                   -- current line number while reporting errors which is
+                   -- incremented after reading a line.
+                   line_number        = 0,
                    break_ctr          = 0,
                    breaks             = [],
                    tickarrays         = emptyModuleEnv,
@@ -536,7 +539,7 @@ runGHCi paths maybe_exprs = do
   let show_prompt = verbosity dflags > 0 || is_tty
 
   -- reset line number
-  modifyGHCiState $ \st -> st{line_number=1}
+  modifyGHCiState $ \st -> st{line_number=0}
 
   case maybe_exprs of
         Nothing ->
@@ -745,7 +748,7 @@ runCommands' eh sourceErrorHandler gCmd = gmask $ \unmask -> do
     case b of
       Nothing -> return Nothing
       Just success -> do
-        when (not success) $ maybe (return ()) lift sourceErrorHandler
+        unless success $ maybe (return ()) lift sourceErrorHandler
         unmask $ runCommands' eh sourceErrorHandler gCmd
 
 -- | Evaluate a single line of user input (either :<command> or Haskell code).
index 00d4237..bf3d2ef 100644 (file)
@@ -1,5 +1,5 @@
 
-<interactive>:5:1: error:
+<interactive>:4:1: error:
     No instance for (Show (t -> t1)) arising from a use of ‘print’
       (maybe you haven't applied a function to enough arguments?)
     In a stmt of an interactive GHCi command: print it
index 8a90905..9822dd7 100644 (file)
@@ -1,9 +1,9 @@
 \r
-<interactive>:6:1:\r
+<interactive>:5:1:\r
     No instance for (Show t1) arising from a use of ‘print’\r
     Cannot resolve unknown runtime type ‘t1’\r
     Use :print or :force to determine these types\r
-    Relevant bindings include it :: t1 (bound at <interactive>:6:1)\r
+    Relevant bindings include it :: t1 (bound at <interactive>:5:1)\r
     Note: there are several potential instances:\r
       instance (Show a, Show b) => Show (Either a b)\r
         -- Defined in ‘Data.Either’\r
       ...plus 33 others\r
     In a stmt of an interactive GHCi command: print it\r
 \r
-<interactive>:8:1:\r
+<interactive>:7:1:\r
     No instance for (Show t1) arising from a use of ‘print’\r
     Cannot resolve unknown runtime type ‘t1’\r
     Use :print or :force to determine these types\r
-    Relevant bindings include it :: t1 (bound at <interactive>:8:1)\r
+    Relevant bindings include it :: t1 (bound at <interactive>:7:1)\r
     Note: there are several potential instances:\r
       instance (Show a, Show b) => Show (Either a b)\r
         -- Defined in ‘Data.Either’\r
index 0c92dba..15c9f83 100644 (file)
@@ -1,9 +1,9 @@
 
-<interactive>:11:1:
+<interactive>:10:1:
     No instance for (Show a1) arising from a use of ‘print’
     Cannot resolve unknown runtime type ‘a1’
     Use :print or :force to determine these types
-    Relevant bindings include it :: a1 (bound at <interactive>:11:1)
+    Relevant bindings include it :: a1 (bound at <interactive>:10:1)
     Note: there are several potential instances:
       instance Show TyCon -- Defined in ‘Data.Typeable.Internal’
       instance Show TypeRep -- Defined in ‘Data.Typeable.Internal’
index 2ad634d..b2072f6 100644 (file)
@@ -1,7 +1,7 @@
 \r
 A.hs:1:16: error: parse error on input ‘where’\r
 \r
-<interactive>:26:1: error:\r
+<interactive>:25:1: error:\r
     Variable not in scope: yan\r
     Perhaps you meant ‘tan’ (imported from Prelude)\r
 \r
index ce8827f..a1b5651 100644 (file)
@@ -8,7 +8,7 @@ Bad.hs:3:8: error:
 Bad.hs:3:8: error:
     lexical error in string/character literal at character '\n'
 
-<interactive>:10:1: error: parse error on input ‘+’
+<interactive>:9:1: error: parse error on input ‘+’
 
 Bad.hs:3:8: error:
     lexical error in string/character literal at character '\n'
index b5b3373..4a92236 100644 (file)
     In an equation for ‘b’: b x = x == x
 (deferred type error)
 
-<interactive>:8:11: error:
+<interactive>:7:11: error:
     Couldn't match type ‘Bool’ with ‘Int’
     Expected type: C Int
       Actual type: C Bool
     In an equation for ‘j’: j = myOp 23
 (deferred type error)
 
-<interactive>:14:8: error:
+<interactive>:13:8: error:
     Couldn't match expected type ‘Bool’ with actual type ‘Int’
     In the first argument of ‘print’, namely ‘(k 2)’
     In the expression: print (k 2)
index b54412e..59b0b29 100644 (file)
@@ -1,12 +1,12 @@
 \r
-<interactive>:3:10: warning:\r
+<interactive>:2:10: warning:\r
     Found hole: _ :: IO ()\r
     In the second argument of ‘(<$>)’, namely ‘_’\r
     In the first argument of ‘ghciStepIO :: IO a -> IO a’, namely\r
       ‘Just <$> _’\r
     In a stmt of an interactive GHCi command:\r
       it <- ghciStepIO :: IO a -> IO a (Just <$> _)\r
-*** Exception: <interactive>:3:10: error:\r
+*** Exception: <interactive>:2:10: error:\r
     Found hole: _ :: IO ()\r
     In the second argument of ‘(<$>)’, namely ‘_’\r
     In the first argument of ‘ghciStepIO :: IO a -> IO a’, namely\r
index 470e729..f5eafdf 100644 (file)
@@ -1,25 +1,25 @@
 
-<interactive>:3:1: error:
+<interactive>:2:1: error:
     No instance for (Show (t0 -> t0)) arising from a use of ‘print’
       (maybe you haven't applied a function to enough arguments?)
     In a stmt of an interactive GHCi command: print it
 
-<interactive>:11:1: error:
+<interactive>:10:1: error:
     No instance for (Show (t0 -> t0)) arising from a use of ‘print’
       (maybe you haven't applied a function to enough arguments?)
     In a stmt of an interactive GHCi command: print it
 
-<interactive>:20:1: error:
+<interactive>:19:1: error:
     No instance for (Show (t0 -> t0)) arising from a use of ‘print’
       (maybe you haven't applied a function to enough arguments?)
     In a stmt of an interactive GHCi command: print it
 
-<interactive>:29:1: error:
+<interactive>:28:1: error:
     No instance for (Show (t0 -> t0)) arising from a use of ‘print’
       (maybe you haven't applied a function to enough arguments?)
     In a stmt of an interactive GHCi command: print it
 
-<interactive>:50:1: error:
+<interactive>:49:1: error:
     No instance for (Show (t0 -> t0)) arising from a use of ‘print’
       (maybe you haven't applied a function to enough arguments?)
     In a stmt of an interactive GHCi command: print it
index f850e1d..fde88e3 100644 (file)
@@ -1,8 +1,8 @@
 \r
-<interactive>:8:1:\r
+<interactive>:7:1:\r
     No instance for (Show Float) arising from a use of ‘print’\r
     In a stmt of an interactive GHCi command: print it\r
 \r
-<interactive>:16:1:\r
+<interactive>:15:1:\r
     No instance for (Show Float) arising from a use of ‘print’\r
     In a stmt of an interactive GHCi command: print it\r
index 69d8349..bc9fa44 100644 (file)
@@ -1,2 +1,2 @@
 \r
-<interactive>:2:1: error: Variable not in scope: α\r
+<interactive>:1:1: error: Variable not in scope: α\r
index 58d1bb6..829ae2f 100644 (file)
@@ -1,8 +1,8 @@
 
-<interactive>:3:68:
+<interactive>:2:68:
     Multiple declarations of ‘f’
-    Declared at: <interactive>:3:32
-                 <interactive>:3:68
+    Declared at: <interactive>:2:32
+                 <interactive>:2:68
     In the Template Haskell quotation
       [d| f = undefined
           class Foo x where
index 309ff1e..a63bcc8 100644 (file)
@@ -1,10 +1,10 @@
 \r
-<interactive>:3:1: error:\r
+<interactive>:2:1: error:\r
     Variable not in scope: git\r
-    Perhaps you meant ‘it’ (line 2)\r
+    Perhaps you meant ‘it’ (line 1)\r
 \r
-<interactive>:5:1: error:\r
+<interactive>:4:1: error:\r
     Variable not in scope: fit\r
     Perhaps you meant one of these:\r
       ‘fst’ (imported from Prelude), ‘Ghci1.it’ (imported from Ghci1),\r
-      ‘it’ (line 4)\r
+      ‘it’ (line 3)\r
index 2cc6934..be1034b 100644 (file)
@@ -1 +1 @@
-data (?)       -- Defined at <interactive>:3:1
+data (?)       -- Defined at <interactive>:2:1
index e3a08c1..d91d058 100644 (file)
@@ -1,8 +1,8 @@
 type role A phantom phantom
 data A (x :: k) (y :: k1)
-       -- Defined at <interactive>:3:1
+       -- Defined at <interactive>:2:1
 A :: k -> k1 -> *
 type role T phantom
 data T (a :: k) where
   MkT :: forall (k :: BOX) (a :: k) a1. a1 -> T a
-       -- Defined at <interactive>:7:1
+       -- Defined at <interactive>:6:1
index 81d9609..4c577ce 100644 (file)
@@ -1,2 +1,2 @@
-type T = forall a. a -> a      -- Defined at <interactive>:3:1
-data D = MkT (forall b. b -> b)        -- Defined at <interactive>:4:1
+type T = forall a. a -> a      -- Defined at <interactive>:2:1
+data D = MkT (forall b. b -> b)        -- Defined at <interactive>:3:1
index 215757b..79a75ec 100644 (file)
@@ -1,7 +1,7 @@
 data D1 where
   MkD1 :: (forall (k1 :: BOX) (p :: k1 -> *) (a :: k1). p a -> Int)
           -> D1
-       -- Defined at <interactive>:3:1
+       -- Defined at <interactive>:2:1
 data D2 where
   MkD2 :: (forall (p :: k -> *) (a :: k). p a -> Int) -> D2
-       -- Defined at <interactive>:4:1
+       -- Defined at <interactive>:3:1
index bbef720..d1c005b 100644 (file)
@@ -1,4 +1,4 @@
 
-<interactive>:3:11: error:
+<interactive>:2:11: error:
     The role annotation for ‘X’ lacks an accompanying binding
       (The role annotation must be given where ‘X’ is declared)
index 5220e7e..2db09d7 100644 (file)
@@ -1,2 +1,2 @@
-data A = Y     -- Defined at <interactive>:3:1
-data A = Y     -- Defined at <interactive>:3:1
+data A = Y     -- Defined at <interactive>:2:1
+data A = Y     -- Defined at <interactive>:2:1
index 257b112..ae766e5 100644 (file)
@@ -1,8 +1,8 @@
 
-<interactive>:5:4: error:
+<interactive>:4:4: error:
     Couldn't match expected type ‘Ghci1.X’
                 with actual type ‘X’
-    NB: ‘X’ is defined at <interactive>:4:1-25
-        ‘Ghci1.X’ is defined at <interactive>:2:1-14
+    NB: ‘X’ is defined at <interactive>:3:1-25
+        ‘Ghci1.X’ is defined at <interactive>:1:1-14
     In the first argument of ‘f’, namely ‘(Y 3)’
     In the expression: f (Y 3)
index b3995c3..3f5707b 100644 (file)
@@ -3,7 +3,7 @@
     Arrow command found where an expression was expected:
       () >- () -< () >>- () -<< ()
 
-<interactive>:7:15:
+<interactive>:6:15:
     Couldn't match expected type ‘()’ with actual type ‘Bool’
     In the pattern: True
     In a stmt of a pattern guard for
@@ -15,7 +15,7 @@
     Arrow command found where an expression was expected:
       () ↣ () ↢ () ⤜ () ⤛ ()
 
-<interactive>:14:15:
+<interactive>:13:15:
     Couldn't match expected type ‘()’ with actual type ‘Bool’
     In the pattern: True
     In a stmt of a pattern guard for
@@ -27,7 +27,7 @@
     Arrow command found where an expression was expected:
       () >- () -< () >>- () -<< ()
 
-<interactive>:21:15:
+<interactive>:20:15:
     Couldn't match expected type ‘()’ with actual type ‘Bool’
     In the pattern: True
     In a stmt of a pattern guard for
index 401c874..d9520c0 100644 (file)
@@ -1,10 +1,10 @@
 
-<interactive>:3:5:
+<interactive>:2:5:
     You can't mix polymorphic and unlifted bindings
       a = (# 1 #)
       Probable fix: use a bang pattern
 
-<interactive>:4:5:
+<interactive>:3:5:
     You can't mix polymorphic and unlifted bindings
       a = (# 1, 3 #)
       Probable fix: use a bang pattern
index a663562..8c7ac45 100644 (file)
@@ -1,5 +1,5 @@
 \r
-<interactive>:5:1: error:\r
+<interactive>:4:1: error:\r
     Illegal generalised algebraic data declaration for ‘T’\r
       (Use GADTs to allow GADTs)\r
     In the data declaration for ‘T’\r
index d19785b..0fc695c 100644 (file)
@@ -1 +1 @@
-($$$) :: [a -> c] -> [a] -> [c]        -- Defined at <interactive>:2:8
+($$$) :: [a -> c] -> [a] -> [c]        -- Defined at <interactive>:1:8
index b440ef4..d9ebd9c 100644 (file)
@@ -1 +1 @@
-data Ghci1.T = A | ...         -- Defined at <interactive>:3:10
+data Ghci1.T = A | ...         -- Defined at <interactive>:2:10
index daf48fc..14b8726 100644 (file)
@@ -1 +1 @@
-data R = A | ...       -- Defined at <interactive>:4:10
+data R = A | ...       -- Defined at <interactive>:3:10
index 2a75ecb..5cb84f6 100644 (file)
@@ -1,6 +1,6 @@
-data T = A {...}       -- Defined at <interactive>:3:10
-data T = A {a :: Int}  -- Defined at <interactive>:3:13
-a :: Integer   -- Defined at <interactive>:6:5
+data T = A {...}       -- Defined at <interactive>:2:10
+data T = A {a :: Int}  -- Defined at <interactive>:2:13
+a :: Integer   -- Defined at <interactive>:5:5
 3
-data R = B {a :: Int}  -- Defined at <interactive>:9:13
-data T = A {Ghci1.a :: Int}    -- Defined at <interactive>:3:1
+data R = B {a :: Int}  -- Defined at <interactive>:8:13
+data T = A {Ghci1.a :: Int}    -- Defined at <interactive>:2:1
index b49978d..9ff8acc 100644 (file)
@@ -1,8 +1,8 @@
 
-<interactive>:10:1: error:
+<interactive>:9:1: error:
     Overlapping instances for C [Int] arising from a use of ‘f’
     Matching instances:
-      instance [safe] C [Int] -- Defined at <interactive>:7:10
-      instance [safe] C a => C [a] -- Defined at <interactive>:9:10
+      instance [safe] C [Int] -- Defined at <interactive>:6:10
+      instance [safe] C a => C [a] -- Defined at <interactive>:8:10
     In the expression: f [4 :: Int]
     In an equation for ‘it’: it = f [4 :: Int]
index 9428dbc..dc8dfc9 100644 (file)
@@ -1,5 +1,5 @@
 
-<interactive>:39:1:
+<interactive>:38:1:
     Couldn't match type ‘HFalse’ with ‘HTrue’
     Expected type: HTrue
       Actual type: Or HFalse HFalse
@@ -7,7 +7,7 @@
     In the expression: f $ Baz 'a'
     In an equation for ‘it’: it = f $ Baz 'a'
 
-<interactive>:40:1:
+<interactive>:39:1:
     Couldn't match type ‘HFalse’ with ‘HTrue’
     Expected type: HTrue
       Actual type: Or HFalse HFalse
index 1b96e5d..27cc18f 100644 (file)
@@ -1,10 +1,10 @@
 
-<interactive>:4:16:
+<interactive>:3:16:
     Multiple declarations of ‘A’
-    Declared at: <interactive>:4:12
-                 <interactive>:4:16
+    Declared at: <interactive>:3:12
+                 <interactive>:3:16
 
-<interactive>:6:16:
+<interactive>:5:16:
     Multiple declarations of ‘A’
-    Declared at: <interactive>:6:12
-                 <interactive>:6:16
+    Declared at: <interactive>:5:12
+                 <interactive>:5:16
index d1df9b8..4b454bd 100644 (file)
@@ -1,13 +1,13 @@
 
-<interactive>:6:49: error:
+<interactive>:5:49: error:
     Couldn't match expected type ‘ListableElem (a, a)’
                 with actual type ‘a’
     ‘a’ is a rigid type variable bound by
-        the instance declaration at <interactive>:6:10
+        the instance declaration at <interactive>:5:10
     Relevant bindings include
-      b :: a (bound at <interactive>:6:43)
-      a :: a (bound at <interactive>:6:41)
+      b :: a (bound at <interactive>:5:43)
+      a :: a (bound at <interactive>:5:41)
       asList :: (a, a) -> [ListableElem (a, a)]
-        (bound at <interactive>:6:33)
+        (bound at <interactive>:5:33)
     In the expression: a
     In the expression: [a, b]
index 2a528e8..7a33dd5 100644 (file)
@@ -1,9 +1,9 @@
 
-<interactive>:7:9: error:
+<interactive>:6:9: error:
     Couldn't match type ‘T’
                    with ‘Ghci1.T’
-    NB: ‘Ghci1.T’ is defined at <interactive>:3:1-14
-        ‘T’ is defined at <interactive>:6:1-16
+    NB: ‘Ghci1.T’ is defined at <interactive>:2:1-14
+        ‘T’ is defined at <interactive>:5:1-16
     Expected type: T'
       Actual type: T
     In the expression: C :: T'
index f69b0e2..a354286 100644 (file)
@@ -1,9 +1,9 @@
-data T = C | D         -- Defined at <interactive>:9:1
-type T' = Ghci1.T      -- Defined at <interactive>:4:1
-data Ghci1.T = A | ...         -- Defined at <interactive>:3:10
-data Ghci4.T = B | ...         -- Defined at <interactive>:6:12
-data T = C | ...       -- Defined at <interactive>:9:14
-data T = ... | D       -- Defined at <interactive>:9:18
-b :: T'        -- Defined at <interactive>:5:5
-c :: Ghci4.T   -- Defined at <interactive>:8:5
-d :: T         -- Defined at <interactive>:10:5
+data T = C | D         -- Defined at <interactive>:8:1
+type T' = Ghci1.T      -- Defined at <interactive>:3:1
+data Ghci1.T = A | ...         -- Defined at <interactive>:2:10
+data Ghci4.T = B | ...         -- Defined at <interactive>:5:12
+data T = C | ...       -- Defined at <interactive>:8:14
+data T = ... | D       -- Defined at <interactive>:8:18
+b :: T'        -- Defined at <interactive>:4:5
+c :: Ghci4.T   -- Defined at <interactive>:7:5
+d :: T         -- Defined at <interactive>:9:5
index ce22188..4464891 100644 (file)
@@ -1,32 +1,32 @@
 
-<interactive>:9:4: error:
+<interactive>:8:4: error:
     Couldn't match expected type ‘Ghci1.Planet’
                 with actual type ‘Planet’
-    NB: ‘Planet’ is defined at <interactive>:8:1-36
-        ‘Ghci1.Planet’ is defined at <interactive>:5:1-37
+    NB: ‘Planet’ is defined at <interactive>:7:1-36
+        ‘Ghci1.Planet’ is defined at <interactive>:4:1-37
     In the first argument of ‘pn’, namely ‘Mercury’
     In the expression: pn Mercury
 
-<interactive>:10:4: error:
+<interactive>:9:4: error:
     Couldn't match expected type ‘Ghci1.Planet’
                 with actual type ‘Planet’
-    NB: ‘Planet’ is defined at <interactive>:8:1-36
-        ‘Ghci1.Planet’ is defined at <interactive>:5:1-37
+    NB: ‘Planet’ is defined at <interactive>:7:1-36
+        ‘Ghci1.Planet’ is defined at <interactive>:4:1-37
     In the first argument of ‘pn’, namely ‘Venus’
     In the expression: pn Venus
 
-<interactive>:11:4: error:
+<interactive>:10:4: error:
     Couldn't match expected type ‘Ghci1.Planet’
                 with actual type ‘Planet’
-    NB: ‘Planet’ is defined at <interactive>:8:1-36
-        ‘Ghci1.Planet’ is defined at <interactive>:5:1-37
+    NB: ‘Planet’ is defined at <interactive>:7:1-36
+        ‘Ghci1.Planet’ is defined at <interactive>:4:1-37
     In the first argument of ‘pn’, namely ‘Mars’
     In the expression: pn Mars
 
-<interactive>:13:44: error:
+<interactive>:12:44: error:
     Couldn't match expected type ‘Planet’
                 with actual type ‘Ghci1.Planet’
-    NB: ‘Ghci1.Planet’ is defined at <interactive>:5:1-37
-        ‘Planet’ is defined at <interactive>:8:1-36
+    NB: ‘Ghci1.Planet’ is defined at <interactive>:4:1-37
+        ‘Planet’ is defined at <interactive>:7:1-36
     In the pattern: Earth
     In an equation for ‘pn’: pn Earth = "E"
index fe6d6c9..bb038fa 100644 (file)
@@ -1,16 +1,16 @@
 
-<interactive>:10:12: error:
+<interactive>:9:12: error:
     Couldn't match expected type ‘Ghci1.Planet’
                 with actual type ‘Planet’
-    NB: ‘Planet’ is defined at <interactive>:8:1-41
-        ‘Ghci1.Planet’ is defined at <interactive>:5:1-49
+    NB: ‘Planet’ is defined at <interactive>:7:1-41
+        ‘Ghci1.Planet’ is defined at <interactive>:4:1-49
     In the second argument of ‘(==)’, namely ‘Mercury’
     In the expression: mercury == Mercury
 
-<interactive>:12:10: error:
+<interactive>:11:10: error:
     Couldn't match expected type ‘Planet’
                 with actual type ‘Ghci1.Planet’
-    NB: ‘Ghci1.Planet’ is defined at <interactive>:5:1-49
-        ‘Planet’ is defined at <interactive>:8:1-41
+    NB: ‘Ghci1.Planet’ is defined at <interactive>:4:1-49
+        ‘Planet’ is defined at <interactive>:7:1-41
     In the second argument of ‘(==)’, namely ‘Earth’
     In the expression: Venus == Earth
index a663562..8c7ac45 100644 (file)
@@ -1,5 +1,5 @@
 \r
-<interactive>:5:1: error:\r
+<interactive>:4:1: error:\r
     Illegal generalised algebraic data declaration for ‘T’\r
       (Use GADTs to allow GADTs)\r
     In the data declaration for ‘T’\r
index 3dd5aff..d9407d3 100644 (file)
@@ -1,5 +1,5 @@
 1
 2
 2
-data T1 = MkT1         -- Defined at <interactive>:7:1
-data T2 = MkT2         -- Defined at <interactive>:9:2
+data T1 = MkT1         -- Defined at <interactive>:6:1
+data T2 = MkT2         -- Defined at <interactive>:8:2
index 333f17a..95f5758 100644 (file)
@@ -1,5 +1,5 @@
 
-<interactive>:3:9: error:
+<interactive>:2:9: error:
     parse error on input ‘=’
     Perhaps you need a 'let' in a 'do' block?
     e.g. 'let x = 5' instead of 'x = 5'
index 9593b15..9740d06 100644 (file)
@@ -1,2 +1,2 @@
-*** Exception: <interactive>:6:5-35: Non-exhaustive patterns in function foo
+*** Exception: <interactive>:5:5-35: Non-exhaustive patterns in function foo
 
index e434de3..3dcecbc 100644 (file)
@@ -1,3 +1,3 @@
-pattern Single :: t -> [t]     -- Defined at <interactive>:4:1
+pattern Single :: t -> [t]     -- Defined at <interactive>:3:1
 foo :: [Bool] -> [Bool]
 [False]
index e20f84f..5104dd6 100644 (file)
@@ -1,2 +1,2 @@
 \r
-<interactive>:10:1: error: Variable not in scope: b\r
+<interactive>:9:1: error: Variable not in scope: b\r
index f7e8b85..7ba149a 100644 (file)
@@ -1,10 +1,10 @@
 
-<interactive>:11:1: error:
+<interactive>:10:1: error:
     Unsafe overlapping instances for Pos [Int]
       arising from a use of ‘res’
     The matching instance is:
       instance [overlapping] [safe] Pos [Int]
-        -- Defined at <interactive>:9:30
+        -- Defined at <interactive>:8:30
     It is compiled in a Safe module and as such can only
     overlap instances from the same module, however it
     overlaps the following instances from different modules:
index 4d0b14e..b015016 100644 (file)
@@ -1,2 +1,2 @@
 
-<interactive>:10:1: parse error on input ‘{-# RULES’
+<interactive>:9:1: parse error on input ‘{-# RULES’
index 9540119..e14727b 100644 (file)
@@ -2,14 +2,14 @@
 <no location info>: warning:\r
     -XGeneralizedNewtypeDeriving is not allowed in Safe Haskell; ignoring -XGeneralizedNewtypeDeriving\r
 \r
-<interactive>:16:29: error:\r
+<interactive>:15:29: error:\r
     Can't make a derived instance of ‘Op T2’:\r
       ‘Op’ is not a derivable class\r
       Try GeneralizedNewtypeDeriving for GHC's newtype-deriving extension\r
     In the newtype declaration for ‘T2’\r
 \r
-<interactive>:19:9: error:\r
+<interactive>:18:9: error:\r
     Data constructor not in scope: T2 :: T -> t\r
-    Perhaps you meant ‘T1’ (line 13)\r
+    Perhaps you meant ‘T1’ (line 12)\r
 \r
-<interactive>:22:4: error: Variable not in scope: y\r
+<interactive>:21:4: error: Variable not in scope: y\r
index 2160c00..5d70969 100644 (file)
@@ -1,8 +1,8 @@
 \r
-<interactive>:6:9: error:\r
+<interactive>:5:9: error:\r
     Not in scope: ‘System.IO.Unsafe.unsafePerformIO’\r
 \r
-<interactive>:7:9: error:\r
+<interactive>:6:9: error:\r
     Variable not in scope: x :: IO Integer -> t\r
 \r
-<interactive>:8:1: error: Variable not in scope: y\r
+<interactive>:7:1: error: Variable not in scope: y\r
index 8334302..8cca54e 100644 (file)
@@ -1,10 +1,10 @@
 \r
-<interactive>:12:1: error:\r
+<interactive>:11:1: error:\r
     Unacceptable result type in foreign declaration:\r
       Safe Haskell is on, all FFI imports must be in the IO monad\r
     When checking declaration:\r
       foreign import ccall safe "static sin" c_sin :: Double -> Double\r
 \r
-<interactive>:13:1: error:\r
+<interactive>:12:1: error:\r
     Variable not in scope: c_sin :: Integer -> t\r
-    Perhaps you meant ‘c_sin'’ (line 8)\r
+    Perhaps you meant ‘c_sin'’ (line 7)\r
index e20f84f..5104dd6 100644 (file)
@@ -1,2 +1,2 @@
 \r
-<interactive>:10:1: error: Variable not in scope: b\r
+<interactive>:9:1: error: Variable not in scope: b\r
index 6aad44f..3e8c487 100644 (file)
@@ -1,5 +1,5 @@
 
-<interactive>:4:9: Warning:
+<interactive>:3:9: Warning:
     Couldn't match type ‘[Dec]’ with ‘Exp’
     Expected type: Q Exp
       Actual type: DecsQ
@@ -8,7 +8,7 @@
 
 <interactive>:1:1:
     Exception when trying to run compile-time code:
-      <interactive>:4:9:
+      <interactive>:3:9:
     Couldn't match type ‘[Dec]’ with ‘Exp’
     Expected type: Q Exp
       Actual type: DecsQ