G'day all.
Quoting Bjorn Buckwalter <[EMAIL PROTECTED]>:
I'd store the constants in a data structure along the lines of:
data AstroData a = AstroData
{ mu_Earth :: GravitationalParameter a
, leapSeconds :: LeapSecondTable
}
I would like to know if there is any consensus on what is the best way
to make such a data structure accessible in pure functions. Passing it
explicitly would be a mess.
In this situation, there isn't necessarily any shame in using a
top-level unsafePerformIO as long as it's well-hidden:
module AstroData (AstroData(..), globalAstroData) where
data AstroData = AstroData Int
-- You really don't want this function inlined. You also
-- really don't want this function to be polymorphic.
{-# NOINLINE globalAstroData #-}
globalAstroData :: AstroData
globalAstroData = unsafePerformIO $ do
d <- return 42 -- Or whatever
return (AstroData d)
Cheers,
Andrew Bromage
_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe