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

Reply via email to