
Bjorn Buckwalter wrote:
It seems that two options are to use either a Reader monad or implicit parameters. Using a Reader monad is straight forward enough though it requires writing/converting code in/to monadic style and adds some clutter to the formulae. It seems implicit parameters could be cleaner but I've seen them referred to as everything from evil to "just what you need" and rendering the Reader monad obsolete...
What do you people recommend?
I'd go for applicative functors :) instance Applicative ((->) Constants) where pure = const f <*> x = \r -> (f r) (x r) This way, you don't have to use do-syntax and can keep an applicative look-and-feel. mu = \AstroData{mu_Earth} -> mu_Earth example = pure (*) <*> pure 5 <*> mu Lifting arithmetic operations and numbers will get annoying with the time, but that's nothing an instance Num can't solve. (If it can't, just hide (*) and (+) from the prelude and define your own.) Regards, apfelmus