Sorry, I should also mention implicit parameters, if you're willing to use that extension. I don't like them, though, and my impression from SPJ is that it's very unclear whether they will get into Haskell 2 or not...
-- Hal Daume III "Computer science is no more about computers | [EMAIL PROTECTED] than astronomy is about telescopes." -Dijkstra | www.isi.edu/~hdaume On Wed, 25 Sep 2002, Hal Daume III wrote: > AFAIK, the global variable (so-called), passing around, and lifting the IO > monad are your only options. I almost always use the global variable > method since I know that in this case the unsafePerformIO is actually > safe, since writing to the variable will always occur before the call to > upIO and that it will only be written once. I don't feel bad about doing > this because GHC does this itself for its own configuration :). > > -- > Hal Daume III > > "Computer science is no more about computers | [EMAIL PROTECTED] > than astronomy is about telescopes." -Dijkstra | www.isi.edu/~hdaume > > On Thu, 26 Sep 2002, Liyang Hu wrote: > > > Evening, > > > > I'm trying to write a utility that reads in some user preferences from > > a pre-determined file, does some work, and exits. Sounds simple enough. > > > > The problem I'm having is with the preferences: How do I make it > > available throughout the entire program? (FWIW, most of the work is > > effectively done inside the IO monad.) I could explicitly pass the > > record around everywhere, but that seems a trifle inelegant. > > > > My current solution is to use a global ('scuse my terminology, I'm not > > sure that's the right word to use here) variable of type IORef Config > > obtained through unsafePerformIO. It works, but strikes me as a rather > > barbaric solution to a seemingly tame enough problem... > > > > Intuition tells me I should be able to `embed', if you will, the config > > record somehow within or alongside the IO state, and retrieve it at > > will. (Is this what MonadState is for?) However it also tells me that > > this will /probably/ involve lots of needless lifting and rewriting of > > the existing code, which makes it even less enticing than passing > > everything around explicitly. > > > > Any opinions or suggestions? > > > > Cheers, > > /Liyang > > -- > > .--{ Liyang HU }--{ http://nerv.cx/ }--{ Caius@Cam }--{ ICQ: 39391385 }--. > > | :: zettai unmei mokusiroku :::: absolute destined apocalypse ::::::::: | > > > > _______________________________________________ > Haskell-Cafe mailing list > [EMAIL PROTECTED] > http://www.haskell.org/mailman/listinfo/haskell-cafe > _______________________________________________ Haskell-Cafe mailing list [EMAIL PROTECTED] http://www.haskell.org/mailman/listinfo/haskell-cafe