Should we have primitive fill-once variables?

Joachim Breitner mail at joachim-breitner.de
Fri Jun 29 15:51:07 UTC 2018


Hi,

when reading the subject I was expecting something like this:

   -- | Creates an empty IVar
   newIVar :: IO (IVar a)

   -- | pure! but blocks until the IVar is written
   readIVar :: IVar a -> a 

   -- | tries to write to an IVar. 
   -- Succeeds if it is empty (returning True)
   -- Does nothing if it has been written to (returning False)
   writeIVar :: IVar a -> a -> IO Bool 

Alternatively:

   -- | all in one
   newIVar :: IO (a, a -> IO Bool)


Essentially a thunk, but with explicit control over filling it.
In fact, people have implemented something like this using C-- hacks
before: https://github.com/twanvl/unsafe-sequence

> This would make MonadFix's implementation much nicer, I think :)

This would suffice for MonadFix, right?

Sorry for derailing the thread :-)

Cheers,
Joachim

-- 
Joachim Breitner
  mail at joachim-breitner.de
  http://www.joachim-breitner.de/
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 833 bytes
Desc: This is a digitally signed message part
URL: <http://mail.haskell.org/pipermail/ghc-devs/attachments/20180629/cde764c4/attachment.sig>


More information about the ghc-devs mailing list