Dealing with configuration data
Hal Daume III
hdaume@ISI.EDU
Wed, 25 Sep 2002 16:09:24 -0700 (PDT)
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 | hdaume@isi.edu
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 | hdaume@isi.edu
> 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
> Haskell-Cafe@haskell.org
> http://www.haskell.org/mailman/listinfo/haskell-cafe
>