
I've got a function which takes in two chars, describing a playing card and a suit. An example would be 4C or TH for a 4 of Clubs or a Ten of Hearts. I need to be able to compare the ranks of a card (e.g. a King is 13), so a Card is a tuple of rank and suit. The function which parses a Card is type String -> Maybe Card. I'm writing unit tests for this using HUnit, and ideally I'd go with a table-driven[1] approach, where each test case is a tuple of the input and the expected output. (Possibly I could expand this to a triple, or simply a list, to allow for an error message for each test case.) Then all the test function has to do is run through each case and assert as necessary. Example: [("TH", Just (Hearts, 10)), ("XH", Nothing)]. The problem, of course, is that I've no clue how to make this work. I still don't *quite* grok do notation well enough to understand how I can bind a monadic value (in this case a Maybe Card), pattern match on such as the Integer in there, and then assertEqual. I suspect I'm just thinking about this all wrong. Any suggestions? Thanks again! [1]: http://code.google.com/p/go-wiki/wiki/TableDrivenTests