[Haskell-cafe] Parsec on TeX
Brandon S. Allbery KF8NH
allbery at ece.cmu.edu
Sun May 4 23:58:52 EDT 2008
On 2008 May 4, at 23:40, Ross Boylan wrote:
> ERROR "grammar.hsl":21 - Type error in explicitly typed binding
> *** Term : envEnd
> *** Type : String -> GenParser Char a [Char]
> *** Does not match : String -> Parser ()
Hugs is prone to error messages that obscure the problem. The trick
here is to realize that the type "Parser ()" is the same as "GenParser
Char a ()"; this then tells you that you have used a function that
returns a [Char] (aka String) where a type () (Haskell's version of
(void)) is expected.
> envEnd :: String -> Parser ()
> envEnd name = do{ reserved "\\end"
> ; braces (string name)
> }
Line 21 is "; braces (string name)"; it is producing a String, when
you need a (). One fix is to add one more line:
> envEnd :: String -> Parser ()
> envEnd name = do reserved "\\end"
> braces (string name)
> return ()
Another possible fix is to change the type of "envEnd" to "String ->
Parser String"; this may depend on how it's used.
--
brandon s. allbery [solaris,freebsd,perl,pugs,haskell] allbery at kf8nh.com
system administrator [openafs,heimdal,too many hats] allbery at ece.cmu.edu
electrical and computer engineering, carnegie mellon university KF8NH
More information about the Haskell-Cafe
mailing list