aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/HaddockParse.y8
-rw-r--r--src/Main.hs8
2 files changed, 13 insertions, 3 deletions
diff --git a/src/HaddockParse.y b/src/HaddockParse.y
index 668e7d28..0c5ebf49 100644
--- a/src/HaddockParse.y
+++ b/src/HaddockParse.y
@@ -3,6 +3,8 @@ module HaddockParse (parseParas, parseString) where
import HaddockLex
import HaddockTypes
+
+import MonadError
}
%tokentype { Token }
@@ -18,6 +20,8 @@ import HaddockTypes
PARA { TokPara }
STRING { TokString $$ }
+%monad { Either String }
+
%name parseParas doc
%name parseString seq
@@ -53,5 +57,7 @@ elem :: { ParsedDoc }
| '[' seq ']' { DocMonospaced $2 }
{
-happyError toks = error ("parse error in doc string: " ++ show (take 3 toks))
+happyError :: [Token] -> Either String a
+happyError toks =
+ throwError ("parse error in doc string: " ++ show (take 3 toks))
}
diff --git a/src/Main.hs b/src/Main.hs
index 796f4939..19941ed1 100644
--- a/src/Main.hs
+++ b/src/Main.hs
@@ -465,12 +465,16 @@ formatDocString :: (String -> Maybe HsQName) -> DocString
-> (Doc,[String])
formatDocString lookup string = format parseParas lookup string
-format :: ([Token] -> ParsedDoc)
+format :: ([Token] -> Either String ParsedDoc)
-> (String -> Maybe HsQName)
-> DocString
-> (Doc, [String])
format parse lookup string
- = runRn lookup $ resolveDoc $ parse $ tokenise $ string
+ = case parse (tokenise string) of
+ Left error -> trace ("Warning: parse error in doc string beginning:\n\
+ \ " ++ take 40 string) (DocEmpty, [])
+ Right doc -> runRn lookup (resolveDoc doc)
+
-- ---------------------------------------------------------------------------
-- Looking up names in documentation