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

Reply via email to