Safe Haskell | Trustworthy |
---|---|
Language | Haskell98 |
This module contains functions to launch LIO
computations from
within the IO
monad. These functions are not useful from within
LIO
code (but not harmful either, since their types are in the
IO
monad).
This module is intended to be imported into your Main module, for
use in invoking LIO
code. The functions are also available via
LIO and LIO.Core, but those modules will clutter your namespace
with symbols you don't need in the IO
monad.
Documentation
Internal state of an LIO
computation.
LIOState | |
|
evalLIO :: LIO l a -> LIOState l -> IO a Source #
Given an LIO
computation and some initial state, return an IO
action which, when executed, will perform the IFC-safe LIO
computation.
Because untrusted code cannot execute IO
computations, this function
should only be useful within trusted code. No harm is done from
exposing the evalLIO
symbol to untrusted code. (In general,
untrusted code is free to produce IO
computations, but it cannot
execute them.)
Unlike runLIO
, this function throws an exception if the
underlying LIO
action terminates with an exception.
privInit :: SpeaksFor p => p -> IO (Priv p) Source #
Initialize some privileges (within the IO
monad) that can be
passed to LIO
computations run with runLIO
or evalLIO
. This
is a pure function, but the result is encapsulated in IO
to
make the return value inaccessible from LIO
computations.
Note the same effect can be achieved using the PrivTCB
constructor, but PrivTCB
is easier to misuse and is only available by
importing LIO.TCB.