@@ -62,19 +62,29 @@ runparser p i inputname s =
6262
6363{- * Parse errors -}
6464
65−newtype ParseError = ParseError (P.ParseErrorBundle String Void)
65+newtype ParseError = ParseError { unParseError :: P.ParseErrorBundle String Void }
66+
67+parseError :: ParseError -> P.ParseError String Void
68+parseError = NonEmpty.head . P.bundleErrors . unParseError
69+
70+parseErrorPosState :: ParseError -> P.PosState String
71+parseErrorPosState = P.bundlePosState . unParseError
72+
73+parseErrorOffset :: ParseError -> Int
74+parseErrorOffset = P.errorOffset . parseError
6675
6776instance Message ParseError where
68− messageExtent (ParseError err) = sourcePositionFC pos
77+ messageExtent err = sourcePositionFC pos
78+ where
79+ (pos, _) = P.reachOffsetNoLine (parseErrorOffset err) (parseErrorPosState err)
80+ messageText = PP.text . init . P.parseErrorTextPretty . parseError
81+ messageSource err = Just sline
6982 where
70− (pos, _) = P.reachOffsetNoLine (P.errorOffset err') (P.bundlePosState err)
71− err' = NonEmpty.head . P.bundleErrors $ err
72− messageText (ParseError err) = PP.text . init . P.errorBundlePretty $ err
73− messageSource (ParseError err) = Just . P.sourceName . P.pstateSourcePos . P.bundlePosState $ err
83+ (_, sline, _) = P.reachOffset (parseErrorOffset err) (parseErrorPosState err)
7484
7585-- | A fully formatted parse error, with caret and bar, etc.
76−prettyError :: ParseError -> String
77−prettyError (ParseError err) = P.errorBundlePretty err
86+prettyError :: ParseError -> String
87+prettyError = P.errorBundlePretty . unParseError
7888
7989{- * Mark and restore -}
8090