Keean,

As far as I can tell, both your solutions to the "one-shot" problem require that:

(a) the expression to be one-shotted is in the IO monad. That seems reasonable, since why else does one care (semantically speaking)?

(b) they depend on the host operating system platform (semaphores, process id, environment variables) rather than pure Haskell language features.

Wouldn't it be easier to simply define "once" as a common Haskell library function?

#g
--

At 23:36 10/11/04 +0000, Keean Schupke wrote:
Hi,
   Here's another completely safe (and simpler way) to limit
a computation to only happen once:

   once' :: IO () -> IO ()
   once' f = do
      k <- getProcessID
      a <- getEnv (showString "MyApp.Main" $ show k)
      case a of
         Just _ -> return ()
         _ -> do
            f
            setEnv (showString "MyApp.Main" $ show k) "" False

Actually both this and the semaphore example show that there is probably
an alternative to allowing top-level '<-' type definitions - and that would be
to have named-MVars in Haskell. It would be quite easy to code these as a
small C library - and then FFI import the bindings to Haskell. I don't know
whether from a 'purists' point of view whether this represents anything better
than module-initialisations - but it does remove the diamond-inheritance style
problem you get (if B imports A and C imports A and Main imports B and C,
does A's init get run twice? are there two copies of the variables, each initialised
once, or one copy that gets initialised twice?). But either way the idea could
be implemented without requiring changes to the language spec or the
compilers, and would just be a library which you could use.


   Keean.

_______________________________________________
Haskell-Cafe mailing list
[EMAIL PROTECTED]
http://www.haskell.org/mailman/listinfo/haskell-cafe

------------ Graham Klyne For email: http://www.ninebynine.org/#Contact

_______________________________________________
Haskell-Cafe mailing list
[EMAIL PROTECTED]
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to