lots of portability changes (#1405)
[ghc-hetmet.git] / compiler / parser / HaddockParse.y
index e23b4ee..d46223d 100644 (file)
@@ -6,7 +6,11 @@
 --     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
@@ -31,7 +35,7 @@ import RdrName
        PARA    { TokPara }
        STRING  { TokString $$ }
 
-%monad { Either String }
+%monad { EitherString }
 
 %name parseHaddockParagraphs  doc
 %name parseHaddockString seq
@@ -94,16 +98,20 @@ strings  :: { String }
        | 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
 }