I'm writing a wiki parser using haskell and I have run into this wierd problem. My code right now looks like this
import System.Environment
import Control.Applicative hiding ((<|>), many)
import Control.Monad
import Text.Parsec
import Text.Parsec.String
import Text.Parsec.ByteString.Lazy
data RichText = UText String
| DText String
deriving (Show)
parseBold = do
string "\'\'\'"
manyTill anyChar (try (string "\'\'\'"))
parseItalic = do
string "\'\'"
manyTill anyChar (try (string "\'\'"))
parsefunc content = do
case (parse parseItalic "parsing" content) of
Right result -> return result
Left error -> return "some error!"
main = do
content:_ <- getArgs
result <- parsefunc content
print result
If I comment out parseItalic and use parseBold, it works. If I comment out parseBold and use parseItalic, it works. But both don't work at the same time... It throws an error
No instance for (Stream s0 m0 Char) arising from a use of `string'
The type variables `s0', `m0' are ambiguous
Relevant bindings include
parseBold :: ParsecT s0 u m0 [Char] (bound at wi.hs:13:1)
Note: there are several potential instances:
instance Monad m => Stream [tok] m tok
-- Defined in `Text.Parsec.String'
instance Monad m =>
Stream Data.ByteString.Lazy.Internal.ByteString m Char
-- Defined in `Text.Parsec.ByteString.Lazy'
instance Monad m =>
Stream Data.ByteString.Internal.ByteString m Char
-- Defined in `Text.Parsec.ByteString'
In a stmt of a 'do' block: string "'''"
In the expression:
do { string "'''";
manyTill anyChar (try (string "'''")) }
In an equation for `parseBold':
parseBold
= do { string "'''";
manyTill anyChar (try (string "'''")) }
I'm not able to understand what is this error. Obviously my type is a string (which is nothing but [Char]) but why is the compiler complaining that it is Char?