lmonad-0.1.0.0: LMonad is an Information Flow Control (IFC) framework for Haskell applications.

Safe HaskellSafe
LanguageHaskell98

LMonad.TCB

Synopsis

Documentation

class Monad m => LMonad m where Source #

Minimal complete definition

lFail, lAllowLift

Methods

lFail :: m a Source #

lAllowLift :: m Bool Source #

data (Label l, Monad m, LMonad m) => LMonadT l m a Source #

Instances

(LMonad m, Label l, Functor m, MonadBase IO m) => MonadBase IO (LMonadT l m) Source # 

Methods

liftBase :: IO α -> LMonadT l m α #

(LMonad m, Label l, MonadBaseControl IO m) => MonadBaseControl IO (LMonadT l m) Source # 

Associated Types

type StM (LMonadT l m :: * -> *) a :: * #

Methods

liftBaseWith :: (RunInBase (LMonadT l m) IO -> IO a) -> LMonadT l m a #

restoreM :: StM (LMonadT l m) a -> LMonadT l m a #

(Label l, LMonad m) => Monad (LMonadT l m) Source # 

Methods

(>>=) :: LMonadT l m a -> (a -> LMonadT l m b) -> LMonadT l m b #

(>>) :: LMonadT l m a -> LMonadT l m b -> LMonadT l m b #

return :: a -> LMonadT l m a #

fail :: String -> LMonadT l m a #

(Label l, LMonad m, Functor m) => Functor (LMonadT l m) Source # 

Methods

fmap :: (a -> b) -> LMonadT l m a -> LMonadT l m b #

(<$) :: a -> LMonadT l m b -> LMonadT l m a #

(Label l, LMonad m, Functor m) => Applicative (LMonadT l m) Source # 

Methods

pure :: a -> LMonadT l m a #

(<*>) :: LMonadT l m (a -> b) -> LMonadT l m a -> LMonadT l m b #

(*>) :: LMonadT l m a -> LMonadT l m b -> LMonadT l m b #

(<*) :: LMonadT l m a -> LMonadT l m b -> LMonadT l m a #

(Label l, LMonad m, MonadIO m) => MonadIO (LMonadT l m) Source # 

Methods

liftIO :: IO a -> LMonadT l m a #

(Label l, LMonad m, MonadThrow m) => MonadThrow (LMonadT l m) Source # 

Methods

throwM :: Exception e => e -> LMonadT l m a #

(LMonad m, Label l, Monoid (m a)) => Monoid (LMonadT l m a) Source # 

Methods

mempty :: LMonadT l m a #

mappend :: LMonadT l m a -> LMonadT l m a -> LMonadT l m a #

mconcat :: [LMonadT l m a] -> LMonadT l m a #

type StM (LMonadT l m) a Source # 
type StM (LMonadT l m) a

runLMonad :: (Label l, LMonad m) => LMonadT l m a -> m a Source #

lLift :: (Label l, LMonad m) => m a -> LMonadT l m a Source #

getCurrentLabel :: (Label l, LMonad m) => LMonadT l m l Source #

getClearance :: (Label l, LMonad m) => LMonadT l m l Source #

lubCurrentLabel :: (Label l, LMonad m) => l -> LMonadT l m l Source #

canSetLabel :: (Label l, LMonad m) => l -> LMonadT l m Bool Source #

setLabel :: (Label l, LMonad m) => l -> LMonadT l m () Source #

taintLabel :: (Label l, LMonad m) => l -> LMonadT l m () Source #

setClearance :: (Label l, LMonad m) => l -> LMonadT l m () Source #

raiseClearanceTCB :: (Label l, LMonad m) => l -> LMonadT l m () Source #

lowerLabelTCB :: (Label l, LMonad m) => l -> LMonadT l m () Source #

data Label l => Labeled l a Source #

label :: (Label l, LMonad m) => l -> a -> LMonadT l m (Labeled l a) Source #

unlabel :: (Label l, LMonad m) => Labeled l a -> LMonadT l m a Source #

canUnlabel :: (Label l, LMonad m) => Labeled l a -> LMonadT l m Bool Source #

labelOf :: Label l => Labeled l a -> l Source #

toLabeledTCB :: (Label l, LMonad m) => l -> LMonadT l m a -> LMonadT l m (Labeled l a) Source #

class ToLabel t l where Source #

Type class to convert a given type to a given label.

Minimal complete definition

toConfidentialityLabel, toIntegrityLabel

swapBase :: (Label l, LMonad m, LMonad n) => (m (a, LState l) -> n (b, LState l)) -> LMonadT l m a -> LMonadT l n b Source #