Hi Richard, > Yeek. Why do you want to do _that_?
Heh. I've got a parser and I want to check what I've parsed (it's an exercise in Write Yourself a Scheme in 48 Hours). > check (Atom _) (Atom _) = True > check (Bool _) (Bool _) = True > check _ _ = False Yes I came up with this too, but it seemed ugly to create unnecessary new values just to take them apart again. > is_atom (Atom _) = True > is_atom _ = False This is nicer. It still requires listing out the possible constructors (Bool, Atom ... the real code obviously has more). I don't like that, because I've already listed them out once, in the type declaration itself. Surely, I shouldn't have to list them out again? > There are various meta-programming ("Scrap Your Boilerplate", > "Template Haskell") approaches you can use to automate some of > these. You hit the nail on the head. "Why I am doing this" is because of boilerplate. Boilerplate gives me rashes and bulbous spots on the nose. Consider the following Ruby code: def check(zeClass, zeValue) zeValue.is_a? zeClass end This does not require a new function for every class defined in Ruby. (To be fair, though, the class of a Ruby object tells you precious little, compared to a Haskell type constructor). I figured there would be a clever Haskell idiom that would give me a similarly concise route. Does it really require Template Haskell? I can barely parse regular Haskell as it is.. Cheers, - Dan _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe