-- http://hackage.haskell.org/trac/ghc/wiki/Commentary/CodingStyle#Warnings
-- for details
-module HaddockParse (parseHaddockParagraphs, parseHaddockString) where
+module HaddockParse (
+ parseHaddockParagraphs,
+ parseHaddockString,
+ EitherString(..)
+) where
import {-# SOURCE #-} HaddockLex
import HsSyn
']' { TokDefEnd }
DQUO { TokSpecial '\"' }
URL { TokURL $$ }
+ PIC { TokPic $$ }
ANAME { TokAName $$ }
+ '/../' { TokEmphasis $$ }
'-' { TokBullet }
'(n)' { TokNumber }
'>..' { TokBirdTrack $$ }
PARA { TokPara }
STRING { TokString $$ }
-%monad { Either String }
+%monad { EitherString }
%name parseHaddockParagraphs doc
%name parseHaddockString seq
| '@' seq1 '@' { DocMonospaced $2 }
seq1 :: { HsDoc RdrName }
- : elem1 seq1 { docAppend $1 $2 }
+ : PARA seq1 { docAppend (DocString "\n") $2 }
+ | elem1 seq1 { docAppend $1 $2 }
| elem1 { $1 }
elem1 :: { HsDoc RdrName }
: STRING { DocString $1 }
- | '/' strings '/' { DocEmphasis (DocString $2) }
+ | '/../' { DocEmphasis (DocString $1) }
| URL { DocURL $1 }
+ | PIC { DocPic $1 }
| ANAME { DocAName $1 }
| IDENT { DocIdentifier $1 }
| DQUO strings DQUO { DocModule $2 }
| STRING strings { $1 ++ $2 }
{
-happyError :: [Token] -> Either String a
-happyError toks =
--- Left ("parse error in doc string: " ++ show (take 3 toks))
- Left ("parse error in doc string")
-
--- Either monad (we can't use MonadError because GHC < 5.00 has
--- an older incompatible version).
-instance Monad (Either String) where
- return = Right
- Left l >>= _ = Left l
- Right r >>= k = k r
- fail msg = Left msg
+happyError :: [Token] -> EitherString a
+happyError toks = MyLeft ("parse error in doc string")
+
+-- We don't want to make an instance for Either String,
+-- since every user of the GHC API would get that instance
+
+-- But why use non-Haskell98 instances when MyEither String
+-- is the only MyEither we're intending to use anyway? --Isaac Dupree
+--data MyEither a b = MyLeft a | MyRight b
+data EitherString b = MyLeft String | MyRight b
+
+instance Monad EitherString where
+ return = MyRight
+ MyLeft l >>= _ = MyLeft l
+ MyRight r >>= k = k r
+ fail msg = MyLeft msg
}