Hi Angus,
did you get an answer for your question? (Just pressing "reply" only answers to the list, as happened to my earlier answer to your initial question.)
I don't know if WinGHCi works like ghci under linux (and I don't know which files Parsing.lhs and parser.lhs you tried to load.)
At the ghci Prompt you can type ":browse" to see which names are in scope. Maybe parser.lhs could not be loaded for some reason that I cannot reproduce. (Maybe eval is explicitly not exported?)
Cheers Christian
Am 03.01.2014 18:43, schrieb Angus Comber:
I found some notes on the authors website explaining that the book code
would no longer work. So I downloaded two files: Parsing.lhs and
parser.lhs. In WinGHCi I then issued :load on both files.
parser.lhs contains a function, eval, as follows:
<other stuff above>
> eval :: String -> Int
> eval xs = case (parse expr xs) of
> [(n,[])] -> n
> [(_,out)] -> error ("unused input
" ++ out)
> [] -> error "invalid input"
But in WinGHCi if I run: eval "2*3+4" I get error := Not in scope: `eval'
I assume this is some sort of namespaces feature of Haskell that I have
not read about? Or I somehow have to state what library modules to
use??? Can anyone help?
On 3 January 2014 15:58, Angus Comber <anguscomber@gmail.com<mailto:anguscomber@gmail.com>> wrote:
I am reading Chapter 8 of Programming Haskell by Graham Hutton and
trying to run the code in the book.
It seems that there are already defined library implementations of
Parser so I used Parser' and generally ' on the end of each
identifier to attempt to eliminate this problem.
So the code I copied from the book is:
type Parser' a = String -> [(a, String)]
return' :: a -> Parser' a
return' v = \x -> [(v, x)]
failure' :: Parser' a
failure' = \inp -> []
-- item doesn't seem to conflict with anything so no '
item :: Parser' Char
item = \inp -> case inp of
[] -> []
(x:xs) -> [(x,xs)]
parse' :: Parser' a -> String -> [(a, String)]
parse' p inp = p inp
p :: Parser' (Char, Char)
p = do x <- item
item
y <- item
return' (x,y)
When run from WinGHCi I get error:
prog_haskell.hs:458:9:
Couldn't match type `[(Char, String)]' with `Char'
Expected type: String -> [((Char, Char), String)]
Actual type: Parser' ([(Char, String)], [(Char, String)])
In the return type of a call of return'
In a stmt of a 'do' block: return' (x, y)
In the expression:
do { x <- item;
item;
y <- item;
return' (x, y) }
458.9 is line at end with return' (x,y)
Also in the chapter was the definition of >>= sequencing. as in:
(>>=) :: Parser a -> (a -> Parser b) -> Parser b
p >>= f = \inp -> case parse p inp of
[] -> []
[(v,out)] -> parse (f v) out
But I assumed this would already be in standard Haskell library and
so I didn't need to define. But even when I did add, still get same
error.
How do I fix this?
_______________________________________________
Beginners mailing list
Beginners@haskell.org
http://www.haskell.org/mailman/listinfo/beginners