[Haskell-cafe] shared oneShot IO (was top-level state proposals)
Dan Weston
westondan at imageworks.com
Tue May 29 14:47:14 EDT 2007
I was wondering why, since IO is an instance of MonadFix [1], and
therefore of ArrowLoop (Kleisli m), and since "The loop operator
expresses computations in which an output value is fed back as input,
even though the computation occurs only once." [2], the MonadFix or
ArrowLoop class (through use of mfix or loop, respectively) doesn't
appear in anyone's suggestion, where the top-level state was the thing
looped over.
Or is this more or less what is going on in the function
oneShot :: IO a -> ACIO (IO a)
oneShot io = mdo mv <- newMVar $ do a <- io
let loop = do putMVar mv loop
return a
loop
return $ do act <- takeMVar mv
act
but without explicitly using the MonadFix or ArrowLoop classes?
Dan
[1]
http://www.haskell.org/ghc/docs/6.4.1/html/libraries/base/Control-Monad-Fix.html
[2]
http://www.haskell.org/ghc/docs/6.4.1/html/libraries/base/Control-Arrow.html
Claus Reinke wrote:
>
> what we do not know is how to share IO actions themselves in a
> demand-driven way, ie how to describe an IO action that is executed at
> most once, only on demand, with shared result.
More information about the Haskell-Cafe
mailing list