Joachim Breitner <[email protected]> writes: > Hi Cafe, > > this is an idea that has been floating in my head for a while, and I’m > wondering about its feasibility and, if feasible, complexity (in the > range from „trivial“ over “blog post” over “paper” to “thesis”). > > Application authors in Haskell often face the problem of run-time > constants, e.g. values that are expected to be determined once during > program start and then stay fixed for the remainder of the run. Good > examples are user configuration values (--verbose, certain paths, > debugging level, etc.).
There are two aspects to this, both of which have potential solutions that I’ve been thinking about on and off for a long time. The first is command line arguments. As far as I’m concerned they ought to be passed as a parameter to the whole programme. So instead of main being a value exported to the outside world and all importing of values being done through the IO monad, we would have main going out and argv::[String] as a global variable (which, of course would not change during any run of the programme). The alternative version of this, to make main::[String] -> IO ExitCode has a superficial cleanliness but doesn’t help with the general problem of having to pass these things about, and in fact makes no real difference to the referential transparancy of a programme. The second is configuration data in files. This seems to fall into two parts: the data that can be fixed at link time and the data that changes from run to run. For the former, a simple solution would be to have a facility to compile a module from non-haskell data. This can be done with template Haskell doing IO. So that leaves configuration data that changes from run to run. -- Jón Fairbairn [email protected] http://www.chaos.org.uk/~jf/Stuff-I-dont-want.html (updated 2010-09-14) _______________________________________________ Haskell-Cafe mailing list [email protected] http://www.haskell.org/mailman/listinfo/haskell-cafe
