Hi Mark, I recently ported Conrad Barski's 'Casting SPELs in Lisp' to Haskell (a text adventure game).
I had some of these problems as well, and you can find my code on Hackage (the package is called Advgame). Some things in there might be of some help. Cheers, - Tim On Sun, Jan 17, 2010 at 7:30 AM, Mark Spezzano <mark.spezz...@chariot.net.au > wrote: > Hi, > > I am writing a Text Adventure game in Haskell (like Zork) > > I have all of the basic parser stuff written as described in Hutton's > Programming in Haskell and his associated papers. (I'm trying to avoid using > 3rd party libraries, so that I can learn this myself) > > Everything that I have works (so far...) except for the following problem: > > I want to define a grammar using a series of Verbs like this: > > data Verb = Go | Get | Jump | Climb | Give etc, etc deriving (Show, Read) > > and then have my parser "get" one of these Verb tokens if possible; > otherwise it should do something (?) else like give an error message stating > "I don't know that command" > > Now, Hutton gives examples of parsing strings into string whereas I want to > parse Strings into my Verbs > > So, if the user types "get sword" then it will tokenise "get" as type > Verb's data constructor Get and perhaps "sword" into a Noun called Sword > > My parser is defined like this: > > newtype Parser a = Parser (String -> [(a, String)]) > > So I CAN give it a Verb type > > but this is where I run into a problem.... > > I've written a Parser called keyword > > keyword :: Parser Verb > keyword = do x <- many1 letter > return (read x) > > (read this as > "take-at-least-one-alphabetic-letter-and-convert-to-a-Verb-type") > > which DOES work provided that the user types in one of my Verbs. If they > don't, well, the whole thing fails with an Exception and halts processing, > returning to GHCi prompt. > > Question: Am I going about this the right way? I want to put together lots > of "data" types like Verb and Noun etc so that I can build a kind of "BNF > grammar". > > Question: If I am going about this the right way then what do I about the > "read x" bit failing when the user stops typing in a recognised keyword. I > could catch the exception, but typing an incorrect sentence is just a typo, > not really appropriate for an exception, I shouldn't think. If it IS > appropriate to do this in Haskell, then how do I catch this exception and > continue processing. > > I thought that exceptions should be for exceptional circumstances, and it > would seem that I might be misusing them in this context. > > Thanks > > Mark Spezzano > > _______________________________________________ > Haskell-Cafe mailing list > Haskell-Cafe@haskell.org > http://www.haskell.org/mailman/listinfo/haskell-cafe >
_______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe