I'm trying to write a function that builds a series of results in a very complicated way. Eventually I ended up writing things like

> newtype Dye = Dye String deriving (Eq, Show)
>
> instance Num Dye where
>   (Dye x) + (Dye y) = Dye (x ++ " + " ++ y)
>   (Dye x) - (Dye y) = Dye (x ++ " - " ++ y)
>   (Dye x) * (Dye y) = Dye (x ++ " * " ++ y)
>   abs (Dye x) = Dye ("abs " ++ x)

and so on. In this way, you can do something like

> sum [Dye "x", Dye "y", Dye"z"]

and get "0 + x + y + z" as the result. (In reality you probably want to keep track of bracketing and so forth.) In this way, you can take functions that accept any Num instance and feed the "dye" through them to see what they're actually computing on a given run.

Has anybody ever put anything like this on Hackage? I'd prefer to not invent this stuff if somebody has already done it...

(The small problem with the approach above, of course, is that as soon as the function wants to do comparisons or take flow control decisions, you've got trouble. It's not impossible to solve, but it *is* a lot of work...)

_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to