two things I wanted from TH today
Isaac Jones <[email protected]>
| Newsgroups | gmane.comp.lang.haskell.template |
|---|---|
| Message-ID | <[email protected]> |
Greetings. FYI, I ran into two problems while trying to write something in TH today that I thought I'd mention. I'm not saying that these are vital features, but that this is perhaps a vote for these :) I wanted to write code to generate a function like this: > foo :: Dynamic -> String > foo val > | Just (a::String) <- fromDynamic val > = a > | Just (a::Int) <- fromDynamic val > = show a > | Just (a::Float) <- fromDynamic val > = show a But it doesn't look like Pattern Guards are available in THSyntax yet. I bravely started writing something to do this, but gave up, as did someone else on IRC, since what I really want is a lot simpler. So then I decided to settle for code like this: > foo'' :: Dynamic -> String > foo'' val > = case fromDynamic val of > Just (a::String) -> a > _ -> (case fromDynamic val of > Just (a::Int) -> show a > _ -> (case fromDynamic val of > Just (a::Float) -> show a > _ -> "")) But then I found that type signatures on patterns also aren't available. In the end, I expect to be able to generate code like this: > foo' :: Dynamic -> String > foo' val > = case fromDynamic val of > Just a -> (a::String) > _ -> (case fromDynamic val of > Just a -> show (a::Int) > _ -> (case fromDynamic val of > Just a -> show (a::Float) > _ -> "")) peace, isaac p.s. As an aside, pattern guards are cool! I've been avoiding almost all extensions in my work projects, and am temporarily lifting that self-imposed restriction. I've learned some neat stuff in the past week :)