packages feed

lio 0.11.5.0 → 0.11.6.0

raw patch · 16 files changed

+441/−41 lines, 16 filesdep ~basePVP: major bump suggested

API removals or changes: PVP suggests a major version bump

Dependency ranges changed: base

API changes (from Hackage documentation)

- LIO.Concurrent: relActualLabel :: ResultExceedsLabel l -> Maybe l
- LIO.Concurrent: relContext :: ResultExceedsLabel l -> [String]
- LIO.Concurrent: relDeclaredLabel :: ResultExceedsLabel l -> l
- LIO.Concurrent: relLocation :: ResultExceedsLabel l -> String
- LIO.Core: inspContext :: InsufficientPrivs -> [String]
- LIO.Core: inspFailure :: InsufficientPrivs -> String
- LIO.Core: inspNeeded :: InsufficientPrivs -> p
- LIO.Core: inspSupplied :: InsufficientPrivs -> p
- LIO.Core: instance Label l => MonadLIO l (LIO l)
- LIO.Core: lerrContext :: LabelError l -> [String]
- LIO.Core: lerrCurClearance :: LabelError l -> l
- LIO.Core: lerrCurLabel :: LabelError l -> l
- LIO.Core: lerrFailure :: LabelError l -> String
- LIO.Core: lerrLabels :: LabelError l -> [l]
- LIO.Core: lerrPrivs :: LabelError l -> [GenericPrivDesc l]
- LIO.Core: lioClearance :: LIOState l -> !l
- LIO.Core: lioLabel :: LIOState l -> !l
- LIO.DCLabel: dcIntegrity :: DCLabel -> !CNF
- LIO.DCLabel: dcSecrecy :: DCLabel -> !CNF
- LIO.DCLabel: instance Eq CNF
- LIO.DCLabel: instance Eq DCLabel
- LIO.DCLabel: instance Eq Disjunction
- LIO.DCLabel: instance Eq Principal
- LIO.DCLabel: instance Label DCLabel
- LIO.DCLabel: instance Monoid CNF
- LIO.DCLabel: instance Monoid Disjunction
- LIO.DCLabel: instance Ord CNF
- LIO.DCLabel: instance Ord DCLabel
- LIO.DCLabel: instance Ord Disjunction
- LIO.DCLabel: instance Ord Principal
- LIO.DCLabel: instance PrivDesc DCLabel CNF
- LIO.DCLabel: instance Read CNF
- LIO.DCLabel: instance Read DCLabel
- LIO.DCLabel: instance Read Disjunction
- LIO.DCLabel: instance Read Principal
- LIO.DCLabel: instance Show CNF
- LIO.DCLabel: instance Show DCLabel
- LIO.DCLabel: instance Show Disjunction
- LIO.DCLabel: instance Show Principal
- LIO.DCLabel: instance SpeaksFor CNF
- LIO.DCLabel: instance ToCNF (Priv CNF)
- LIO.DCLabel: instance ToCNF Bool
- LIO.DCLabel: instance ToCNF CNF
- LIO.DCLabel: instance ToCNF Disjunction
- LIO.DCLabel: instance ToCNF Principal
- LIO.DCLabel: instance ToCNF [Char]
- LIO.DCLabel: instance Typeable CNF
- LIO.DCLabel: instance Typeable DCLabel
- LIO.DCLabel: instance Typeable Disjunction
- LIO.DCLabel: instance Typeable Principal
- LIO.Delegate: instance Typeable2 Gate
- LIO.Error: inspContext :: InsufficientPrivs -> [String]
- LIO.Error: inspFailure :: InsufficientPrivs -> String
- LIO.Error: inspNeeded :: InsufficientPrivs -> p
- LIO.Error: inspSupplied :: InsufficientPrivs -> p
- LIO.Error: instance Annotatable (LabelError l)
- LIO.Error: instance Annotatable (ResultExceedsLabel l)
- LIO.Error: instance Annotatable AnyLabelError
- LIO.Error: instance Annotatable InsufficientPrivs
- LIO.Error: instance Exception AnyLabelError
- LIO.Error: instance Exception InsufficientPrivs
- LIO.Error: instance Label l => Exception (LabelError l)
- LIO.Error: instance Label l => Exception (ResultExceedsLabel l)
- LIO.Error: instance Show (GenericPrivDesc l)
- LIO.Error: instance Show AnyLabelError
- LIO.Error: instance Show InsufficientPrivs
- LIO.Error: instance Show l => Show (LabelError l)
- LIO.Error: instance Show l => Show (ResultExceedsLabel l)
- LIO.Error: instance Typeable AnyLabelError
- LIO.Error: instance Typeable InsufficientPrivs
- LIO.Error: instance Typeable1 LabelError
- LIO.Error: instance Typeable1 ResultExceedsLabel
- LIO.Error: lerrContext :: LabelError l -> [String]
- LIO.Error: lerrCurClearance :: LabelError l -> l
- LIO.Error: lerrCurLabel :: LabelError l -> l
- LIO.Error: lerrFailure :: LabelError l -> String
- LIO.Error: lerrLabels :: LabelError l -> [l]
- LIO.Error: lerrPrivs :: LabelError l -> [GenericPrivDesc l]
- LIO.Error: relActualLabel :: ResultExceedsLabel l -> Maybe l
- LIO.Error: relContext :: ResultExceedsLabel l -> [String]
- LIO.Error: relDeclaredLabel :: ResultExceedsLabel l -> l
- LIO.Error: relLocation :: ResultExceedsLabel l -> String
- LIO.Exception: SomeException :: e -> SomeException
- LIO.Label: instance Label l => PrivDesc l NoPrivs
- LIO.Label: instance Monoid NoPrivs
- LIO.Label: instance PrivDesc l p => PrivDesc l (Priv p)
- LIO.Label: instance Read NoPrivs
- LIO.Label: instance Show NoPrivs
- LIO.Label: instance SpeaksFor NoPrivs
- LIO.Label: instance SpeaksFor p => SpeaksFor (Priv p)
- LIO.Label: instance Typeable NoPrivs
- LIO.Run: lioClearance :: LIOState l -> !l
- LIO.Run: lioLabel :: LIOState l -> !l
- LIO.TCB: instance (Show l, Show a) => Show (LResStatus l a)
- LIO.TCB: instance (Show l, Show a) => ShowTCB (Labeled l a)
- LIO.TCB: instance Applicative (LIO l)
- LIO.TCB: instance Eq a => Eq (Priv a)
- LIO.TCB: instance Eq l => Eq (LIOState l)
- LIO.TCB: instance Exception UncatchableTCB
- LIO.TCB: instance Functor (LIO l)
- LIO.TCB: instance LabelOf Labeled
- LIO.TCB: instance LabelOf LabeledResult
- LIO.TCB: instance Monad (LIO l)
- LIO.TCB: instance Monoid p => Monoid (Priv p)
- LIO.TCB: instance Read l => Read (LIOState l)
- LIO.TCB: instance Show UncatchableTCB
- LIO.TCB: instance Show a => Show (Priv a)
- LIO.TCB: instance Show l => Show (LIOState l)
- LIO.TCB: instance Typeable UncatchableTCB
- LIO.TCB: instance Typeable1 Priv
- LIO.TCB: instance Typeable2 LIO
- LIO.TCB: instance Typeable2 Labeled
- LIO.TCB: lioClearance :: LIOState l -> !l
- LIO.TCB: lioLabel :: LIOState l -> !l
- LIO.TCB: lresBlockTCB :: LabeledResult l a -> !(MVar ())
- LIO.TCB: lresLabelTCB :: LabeledResult l a -> !l
- LIO.TCB: lresStatusTCB :: LabeledResult l a -> !(IORef (LResStatus l a))
- LIO.TCB: lresThreadIdTCB :: LabeledResult l a -> !ThreadId
- LIO.TCB.LObj: instance (Label l, Show t) => ShowTCB (LObj l t)
- LIO.TCB.LObj: instance GuardIO l (IO r) (LIO l r)
- LIO.TCB.LObj: instance GuardIO l (a1 -> IO r) (a1 -> LIO l r)
- LIO.TCB.LObj: instance GuardIO l (a1 -> a2 -> IO r) (a1 -> a2 -> LIO l r)
- LIO.TCB.LObj: instance GuardIO l (a1 -> a2 -> a3 -> IO r) (a1 -> a2 -> a3 -> LIO l r)
- LIO.TCB.LObj: instance GuardIO l (a1 -> a2 -> a3 -> a4 -> IO r) (a1 -> a2 -> a3 -> a4 -> LIO l r)
- LIO.TCB.LObj: instance GuardIO l (a1 -> a2 -> a3 -> a4 -> a5 -> IO r) (a1 -> a2 -> a3 -> a4 -> a5 -> LIO l r)
- LIO.TCB.LObj: instance GuardIO l (a1 -> a2 -> a3 -> a4 -> a5 -> a6 -> IO r) (a1 -> a2 -> a3 -> a4 -> a5 -> a6 -> LIO l r)
- LIO.TCB.LObj: instance GuardIO l (a1 -> a2 -> a3 -> a4 -> a5 -> a6 -> a7 -> IO r) (a1 -> a2 -> a3 -> a4 -> a5 -> a6 -> a7 -> LIO l r)
- LIO.TCB.LObj: instance GuardIO l (a1 -> a2 -> a3 -> a4 -> a5 -> a6 -> a7 -> a8 -> IO r) (a1 -> a2 -> a3 -> a4 -> a5 -> a6 -> a7 -> a8 -> LIO l r)
- LIO.TCB.LObj: instance GuardIO l (a1 -> a2 -> a3 -> a4 -> a5 -> a6 -> a7 -> a8 -> a9 -> IO r) (a1 -> a2 -> a3 -> a4 -> a5 -> a6 -> a7 -> a8 -> a9 -> LIO l r)
- LIO.TCB.LObj: instance GuardIO l (a1 -> a2 -> a3 -> a4 -> a5 -> a6 -> a7 -> a8 -> a9 -> a10 -> IO r) (a1 -> a2 -> a3 -> a4 -> a5 -> a6 -> a7 -> a8 -> a9 -> a10 -> LIO l r)
- LIO.TCB.LObj: instance LabelOf LObj
- LIO.TCB.LObj: instance Typeable2 LObj
- LIO.TCB.MLObj: instance LabelIO l (IO r) (LIO l r)
- LIO.TCB.MLObj: instance LabelIO l (a1 -> IO r) (a1 -> LIO l r)
- LIO.TCB.MLObj: instance LabelIO l (a1 -> a2 -> IO r) (a1 -> a2 -> LIO l r)
- LIO.TCB.MLObj: instance LabelIO l (a1 -> a2 -> a3 -> IO r) (a1 -> a2 -> a3 -> LIO l r)
- LIO.TCB.MLObj: instance LabelIO l (a1 -> a2 -> a3 -> a4 -> IO r) (a1 -> a2 -> a3 -> a4 -> LIO l r)
- LIO.TCB.MLObj: instance LabelIO l (a1 -> a2 -> a3 -> a4 -> a5 -> IO r) (a1 -> a2 -> a3 -> a4 -> a5 -> LIO l r)
- LIO.TCB.MLObj: instance LabelIO l (a1 -> a2 -> a3 -> a4 -> a5 -> a6 -> IO r) (a1 -> a2 -> a3 -> a4 -> a5 -> a6 -> LIO l r)
- LIO.TCB.MLObj: instance LabelIO l (a1 -> a2 -> a3 -> a4 -> a5 -> a6 -> a7 -> IO r) (a1 -> a2 -> a3 -> a4 -> a5 -> a6 -> a7 -> LIO l r)
- LIO.TCB.MLObj: instance LabelIO l (a1 -> a2 -> a3 -> a4 -> a5 -> a6 -> a7 -> a8 -> IO r) (a1 -> a2 -> a3 -> a4 -> a5 -> a6 -> a7 -> a8 -> LIO l r)
- LIO.TCB.MLObj: instance LabelIO l (a1 -> a2 -> a3 -> a4 -> a5 -> a6 -> a7 -> a8 -> a9 -> IO r) (a1 -> a2 -> a3 -> a4 -> a5 -> a6 -> a7 -> a8 -> a9 -> LIO l r)
- LIO.TCB.MLObj: instance LabelIO l (a1 -> a2 -> a3 -> a4 -> a5 -> a6 -> a7 -> a8 -> a9 -> a10 -> IO r) (a1 -> a2 -> a3 -> a4 -> a5 -> a6 -> a7 -> a8 -> a9 -> a10 -> LIO l r)
- LIO.TCB.MLObj: instance MLabelOf MLObj
- LIO.TCB.MLObj: instance MLabelPolicy ExternalML l
- LIO.TCB.MLObj: instance MLabelPolicy InternalML l
- LIO.TCB.MLObj: instance MLabelPolicyDefault ExternalML
- LIO.TCB.MLObj: instance MLabelPolicyDefault InternalML
- LIO.TCB.MLObj: instance Show ExternalML
- LIO.TCB.MLObj: instance Show InternalML
- LIO.TCB.MLObj: instance Typeable ExternalML
- LIO.TCB.MLObj: instance Typeable InternalML
- LIO.TCB.MLObj: instance Typeable2 MLabel
- LIO.TCB.MLObj: instance Typeable3 MLObj
- LIO.TCB.MLObj: mlLabel :: MLabel policy l -> !(IORef l)
- LIO.TCB.MLObj: mlLabelLabel :: MLabel policy l -> !l
- LIO.TCB.MLObj: mlPolicy :: MLabel policy l -> policy
- LIO.TCB.MLObj: mlUsers :: MLabel policy l -> !(MVar (Map Unique (l -> IO Bool)))
+ LIO.Concurrent: [relActualLabel] :: ResultExceedsLabel l -> Maybe l
+ LIO.Concurrent: [relContext] :: ResultExceedsLabel l -> [String]
+ LIO.Concurrent: [relDeclaredLabel] :: ResultExceedsLabel l -> l
+ LIO.Concurrent: [relLocation] :: ResultExceedsLabel l -> String
+ LIO.Concurrent.LChan.Trans: dupLChan :: (MonadLIO l m, Label l) => LChan l a -> m (LChan l a)
+ LIO.Concurrent.LChan.Trans: dupLChanP :: (MonadLIO l m, PrivDesc l p) => Priv p -> LChan l a -> m (LChan l a)
+ LIO.Concurrent.LChan.Trans: newLChan :: (MonadLIO l m, Label l) => l -> m (LChan l a)
+ LIO.Concurrent.LChan.Trans: newLChanP :: (MonadLIO l m, PrivDesc l p) => Priv p -> l -> m (LChan l a)
+ LIO.Concurrent.LChan.Trans: readLChan :: (MonadLIO l m, Label l) => LChan l a -> m a
+ LIO.Concurrent.LChan.Trans: readLChanP :: (MonadLIO l m, PrivDesc l p) => Priv p -> LChan l a -> m a
+ LIO.Concurrent.LChan.Trans: writeLChan :: (MonadLIO l m, Label l) => LChan l a -> a -> m ()
+ LIO.Concurrent.LChan.Trans: writeLChanP :: (MonadLIO l m, PrivDesc l p) => Priv p -> LChan l a -> a -> m ()
+ LIO.Concurrent.LMVar.Trans: isEmptyLMVar :: (MonadLIO l m, Label l) => LMVar l a -> m Bool
+ LIO.Concurrent.LMVar.Trans: isEmptyLMVarP :: (MonadLIO l m, PrivDesc l p) => Priv p -> LMVar l a -> m Bool
+ LIO.Concurrent.LMVar.Trans: newEmptyLMVar :: (MonadLIO l m, Label l) => l -> m (LMVar l a)
+ LIO.Concurrent.LMVar.Trans: newEmptyLMVarP :: (MonadLIO l m, PrivDesc l p) => Priv p -> l -> m (LMVar l a)
+ LIO.Concurrent.LMVar.Trans: newLMVar :: (MonadLIO l m, Label l) => l -> a -> m (LMVar l a)
+ LIO.Concurrent.LMVar.Trans: newLMVarP :: (MonadLIO l m, PrivDesc l p) => Priv p -> l -> a -> m (LMVar l a)
+ LIO.Concurrent.LMVar.Trans: putLMVar :: (MonadLIO l m, Label l) => LMVar l a -> a -> m ()
+ LIO.Concurrent.LMVar.Trans: putLMVarP :: (MonadLIO l m, PrivDesc l p) => Priv p -> LMVar l a -> a -> m ()
+ LIO.Concurrent.LMVar.Trans: readLMVar :: (MonadLIO l m, Label l) => LMVar l a -> m a
+ LIO.Concurrent.LMVar.Trans: readLMVarP :: (MonadLIO l m, PrivDesc l p) => Priv p -> LMVar l a -> m a
+ LIO.Concurrent.LMVar.Trans: swapLMVar :: (MonadLIO l m, Label l) => LMVar l a -> a -> m a
+ LIO.Concurrent.LMVar.Trans: swapLMVarP :: (MonadLIO l m, PrivDesc l p) => Priv p -> LMVar l a -> a -> m a
+ LIO.Concurrent.LMVar.Trans: takeLMVar :: (MonadLIO l m, Label l) => LMVar l a -> m a
+ LIO.Concurrent.LMVar.Trans: takeLMVarP :: (MonadLIO l m, PrivDesc l p) => Priv p -> LMVar l a -> m a
+ LIO.Concurrent.LMVar.Trans: tryPutLMVar :: (MonadLIO l m, Label l) => LMVar l a -> a -> m Bool
+ LIO.Concurrent.LMVar.Trans: tryPutLMVarP :: (MonadLIO l m, PrivDesc l p) => Priv p -> LMVar l a -> a -> m Bool
+ LIO.Concurrent.LMVar.Trans: tryTakeLMVar :: (MonadLIO l m, Label l) => LMVar l a -> m (Maybe a)
+ LIO.Concurrent.LMVar.Trans: tryTakeLMVarP :: (MonadLIO l m, PrivDesc l p) => Priv p -> LMVar l a -> m (Maybe a)
+ LIO.Core: [inspContext] :: InsufficientPrivs -> [String]
+ LIO.Core: [inspFailure] :: InsufficientPrivs -> String
+ LIO.Core: [inspNeeded] :: InsufficientPrivs -> p
+ LIO.Core: [inspSupplied] :: InsufficientPrivs -> p
+ LIO.Core: [lerrContext] :: LabelError l -> [String]
+ LIO.Core: [lerrCurClearance] :: LabelError l -> l
+ LIO.Core: [lerrCurLabel] :: LabelError l -> l
+ LIO.Core: [lerrFailure] :: LabelError l -> String
+ LIO.Core: [lerrLabels] :: LabelError l -> [l]
+ LIO.Core: [lerrPrivs] :: LabelError l -> [GenericPrivDesc l]
+ LIO.Core: [lioClearance] :: LIOState l -> !l
+ LIO.Core: [lioLabel] :: LIOState l -> !l
+ LIO.Core.Trans: getClearance :: (MonadLIO l m, Label l) => m l
+ LIO.Core.Trans: getLabel :: (MonadLIO l m, Label l) => m l
+ LIO.Core.Trans: guardAlloc :: (MonadLIO l m, Label l) => l -> m ()
+ LIO.Core.Trans: guardAllocP :: (MonadLIO l m, PrivDesc l p) => Priv p -> l -> m ()
+ LIO.Core.Trans: guardWrite :: (MonadLIO l m, Label l) => l -> m ()
+ LIO.Core.Trans: guardWriteP :: (MonadLIO l m, PrivDesc l p) => Priv p -> l -> m ()
+ LIO.Core.Trans: setClearance :: (MonadLIO l m, Label l) => l -> m ()
+ LIO.Core.Trans: setClearanceP :: (MonadLIO l m, PrivDesc l p) => Priv p -> l -> m ()
+ LIO.Core.Trans: setLabel :: (MonadLIO l m, Label l) => l -> m ()
+ LIO.Core.Trans: setLabelP :: (MonadLIO l m, PrivDesc l p) => Priv p -> l -> m ()
+ LIO.Core.Trans: taint :: (MonadLIO l m, Label l) => l -> m ()
+ LIO.Core.Trans: taintP :: (MonadLIO l m, PrivDesc l p) => Priv p -> l -> m ()
+ LIO.DCLabel: [dcIntegrity] :: DCLabel -> !CNF
+ LIO.DCLabel: [dcSecrecy] :: DCLabel -> !CNF
+ LIO.DCLabel: infix 6 %%
+ LIO.DCLabel: infixl 7 \/
+ LIO.DCLabel: infixr 7 /\
+ LIO.DCLabel: instance GHC.Base.Monoid LIO.DCLabel.CNF
+ LIO.DCLabel: instance GHC.Base.Monoid LIO.DCLabel.Disjunction
+ LIO.DCLabel: instance GHC.Classes.Eq LIO.DCLabel.CNF
+ LIO.DCLabel: instance GHC.Classes.Eq LIO.DCLabel.DCLabel
+ LIO.DCLabel: instance GHC.Classes.Eq LIO.DCLabel.Disjunction
+ LIO.DCLabel: instance GHC.Classes.Eq LIO.DCLabel.Principal
+ LIO.DCLabel: instance GHC.Classes.Ord LIO.DCLabel.CNF
+ LIO.DCLabel: instance GHC.Classes.Ord LIO.DCLabel.DCLabel
+ LIO.DCLabel: instance GHC.Classes.Ord LIO.DCLabel.Disjunction
+ LIO.DCLabel: instance GHC.Classes.Ord LIO.DCLabel.Principal
+ LIO.DCLabel: instance GHC.Read.Read LIO.DCLabel.CNF
+ LIO.DCLabel: instance GHC.Read.Read LIO.DCLabel.DCLabel
+ LIO.DCLabel: instance GHC.Read.Read LIO.DCLabel.Disjunction
+ LIO.DCLabel: instance GHC.Read.Read LIO.DCLabel.Principal
+ LIO.DCLabel: instance GHC.Show.Show LIO.DCLabel.CNF
+ LIO.DCLabel: instance GHC.Show.Show LIO.DCLabel.DCLabel
+ LIO.DCLabel: instance GHC.Show.Show LIO.DCLabel.Disjunction
+ LIO.DCLabel: instance GHC.Show.Show LIO.DCLabel.Principal
+ LIO.DCLabel: instance LIO.DCLabel.ToCNF (LIO.TCB.Priv LIO.DCLabel.CNF)
+ LIO.DCLabel: instance LIO.DCLabel.ToCNF GHC.Types.Bool
+ LIO.DCLabel: instance LIO.DCLabel.ToCNF LIO.DCLabel.CNF
+ LIO.DCLabel: instance LIO.DCLabel.ToCNF LIO.DCLabel.Disjunction
+ LIO.DCLabel: instance LIO.DCLabel.ToCNF LIO.DCLabel.Principal
+ LIO.DCLabel: instance LIO.DCLabel.ToCNF [GHC.Types.Char]
+ LIO.DCLabel: instance LIO.Label.Label LIO.DCLabel.DCLabel
+ LIO.DCLabel: instance LIO.Label.PrivDesc LIO.DCLabel.DCLabel LIO.DCLabel.CNF
+ LIO.DCLabel: instance LIO.Label.SpeaksFor LIO.DCLabel.CNF
+ LIO.Error: [inspContext] :: InsufficientPrivs -> [String]
+ LIO.Error: [inspFailure] :: InsufficientPrivs -> String
+ LIO.Error: [inspNeeded] :: InsufficientPrivs -> p
+ LIO.Error: [inspSupplied] :: InsufficientPrivs -> p
+ LIO.Error: [lerrContext] :: LabelError l -> [String]
+ LIO.Error: [lerrCurClearance] :: LabelError l -> l
+ LIO.Error: [lerrCurLabel] :: LabelError l -> l
+ LIO.Error: [lerrFailure] :: LabelError l -> String
+ LIO.Error: [lerrLabels] :: LabelError l -> [l]
+ LIO.Error: [lerrPrivs] :: LabelError l -> [GenericPrivDesc l]
+ LIO.Error: [relActualLabel] :: ResultExceedsLabel l -> Maybe l
+ LIO.Error: [relContext] :: ResultExceedsLabel l -> [String]
+ LIO.Error: [relDeclaredLabel] :: ResultExceedsLabel l -> l
+ LIO.Error: [relLocation] :: ResultExceedsLabel l -> String
+ LIO.Error: instance GHC.Exception.Exception LIO.Error.AnyLabelError
+ LIO.Error: instance GHC.Exception.Exception LIO.Error.InsufficientPrivs
+ LIO.Error: instance GHC.Show.Show (LIO.Error.GenericPrivDesc l)
+ LIO.Error: instance GHC.Show.Show LIO.Error.AnyLabelError
+ LIO.Error: instance GHC.Show.Show LIO.Error.InsufficientPrivs
+ LIO.Error: instance GHC.Show.Show l => GHC.Show.Show (LIO.Error.LabelError l)
+ LIO.Error: instance GHC.Show.Show l => GHC.Show.Show (LIO.Error.ResultExceedsLabel l)
+ LIO.Error: instance LIO.Error.Annotatable (LIO.Error.LabelError l)
+ LIO.Error: instance LIO.Error.Annotatable (LIO.Error.ResultExceedsLabel l)
+ LIO.Error: instance LIO.Error.Annotatable LIO.Error.AnyLabelError
+ LIO.Error: instance LIO.Error.Annotatable LIO.Error.InsufficientPrivs
+ LIO.Error: instance LIO.Label.Label l => GHC.Exception.Exception (LIO.Error.LabelError l)
+ LIO.Error: instance LIO.Label.Label l => GHC.Exception.Exception (LIO.Error.ResultExceedsLabel l)
+ LIO.Error.Trans: labelError :: (MonadLIO l m, Label l) => String -> [l] -> m a
+ LIO.Error.Trans: labelErrorP :: (MonadLIO l m, Label l, PrivDesc l p) => String -> Priv p -> [l] -> m a
+ LIO.Exception: [SomeException] :: SomeException
+ LIO.Exception: displayException :: Exception e => e -> String
+ LIO.LIORef.Trans: atomicModifyLIORef :: (MonadLIO l m, Label l) => LIORef l a -> (a -> (a, b)) -> m b
+ LIO.LIORef.Trans: atomicModifyLIORefP :: (MonadLIO l m, PrivDesc l p) => Priv p -> LIORef l a -> (a -> (a, b)) -> m b
+ LIO.LIORef.Trans: modifyLIORef :: (MonadLIO l m, Label l) => LIORef l a -> (a -> a) -> m ()
+ LIO.LIORef.Trans: modifyLIORefP :: (MonadLIO l m, PrivDesc l p) => Priv p -> LIORef l a -> (a -> a) -> m ()
+ LIO.LIORef.Trans: newLIORef :: (MonadLIO l m, Label l) => l -> a -> m (LIORef l a)
+ LIO.LIORef.Trans: newLIORefP :: (MonadLIO l m, PrivDesc l p) => Priv p -> l -> a -> m (LIORef l a)
+ LIO.LIORef.Trans: readLIORef :: (MonadLIO l m, Label l) => LIORef l a -> m a
+ LIO.LIORef.Trans: readLIORefP :: (MonadLIO l m, PrivDesc l p) => Priv p -> LIORef l a -> m a
+ LIO.LIORef.Trans: writeLIORef :: (MonadLIO l m, Label l) => LIORef l a -> a -> m ()
+ LIO.LIORef.Trans: writeLIORefP :: (MonadLIO l m, PrivDesc l p) => Priv p -> LIORef l a -> a -> m ()
+ LIO.Label: instance GHC.Base.Monoid LIO.Label.NoPrivs
+ LIO.Label: instance GHC.Read.Read LIO.Label.NoPrivs
+ LIO.Label: instance GHC.Show.Show LIO.Label.NoPrivs
+ LIO.Label: instance LIO.Label.Label l => LIO.Label.PrivDesc l LIO.Label.NoPrivs
+ LIO.Label: instance LIO.Label.PrivDesc l p => LIO.Label.PrivDesc l (LIO.TCB.Priv p)
+ LIO.Label: instance LIO.Label.SpeaksFor LIO.Label.NoPrivs
+ LIO.Label: instance LIO.Label.SpeaksFor p => LIO.Label.SpeaksFor (LIO.TCB.Priv p)
+ LIO.Labeled.Trans: lAp :: (MonadLIO l m, Label l) => Labeled l (a -> b) -> Labeled l a -> m (Labeled l b)
+ LIO.Labeled.Trans: lFmap :: (MonadLIO l m, Label l) => Labeled l a -> (a -> b) -> m (Labeled l b)
+ LIO.Labeled.Trans: label :: (MonadLIO l m, Label l) => l -> a -> m (Labeled l a)
+ LIO.Labeled.Trans: labelP :: (MonadLIO l m, PrivDesc l p) => Priv p -> l -> a -> m (Labeled l a)
+ LIO.Labeled.Trans: relabelLabeledP :: (MonadLIO l m, PrivDesc l p) => Priv p -> l -> Labeled l a -> m (Labeled l a)
+ LIO.Labeled.Trans: taintLabeled :: (MonadLIO l m, Label l) => l -> Labeled l a -> m (Labeled l a)
+ LIO.Labeled.Trans: taintLabeledP :: (MonadLIO l m, PrivDesc l p) => Priv p -> l -> Labeled l a -> m (Labeled l a)
+ LIO.Labeled.Trans: unlabel :: (MonadLIO l m, Label l) => Labeled l a -> m a
+ LIO.Labeled.Trans: unlabelP :: (MonadLIO l m, PrivDesc l p) => Priv p -> Labeled l a -> m a
+ LIO.Monad: class (Label l, Monad m) => MonadLIO l m | m -> l
+ LIO.Monad: instance LIO.Label.Label l => LIO.Monad.MonadLIO l (LIO.TCB.LIO l)
+ LIO.Monad: liftLIO :: MonadLIO l m => LIO l a -> m a
+ LIO.Run: [lioClearance] :: LIOState l -> !l
+ LIO.Run: [lioLabel] :: LIOState l -> !l
+ LIO.TCB: [lioClearance] :: LIOState l -> !l
+ LIO.TCB: [lioLabel] :: LIOState l -> !l
+ LIO.TCB: [lresBlockTCB] :: LabeledResult l a -> !(MVar ())
+ LIO.TCB: [lresLabelTCB] :: LabeledResult l a -> !l
+ LIO.TCB: [lresStatusTCB] :: LabeledResult l a -> !(IORef (LResStatus l a))
+ LIO.TCB: [lresThreadIdTCB] :: LabeledResult l a -> !ThreadId
+ LIO.TCB: instance (GHC.Show.Show a, GHC.Show.Show l) => GHC.Show.Show (LIO.TCB.LResStatus l a)
+ LIO.TCB: instance (GHC.Show.Show l, GHC.Show.Show a) => LIO.TCB.ShowTCB (LIO.TCB.Labeled l a)
+ LIO.TCB: instance GHC.Base.Applicative (LIO.TCB.LIO l)
+ LIO.TCB: instance GHC.Base.Functor (LIO.TCB.LIO l)
+ LIO.TCB: instance GHC.Base.Monad (LIO.TCB.LIO l)
+ LIO.TCB: instance GHC.Base.Monoid p => GHC.Base.Monoid (LIO.TCB.Priv p)
+ LIO.TCB: instance GHC.Classes.Eq a => GHC.Classes.Eq (LIO.TCB.Priv a)
+ LIO.TCB: instance GHC.Classes.Eq l => GHC.Classes.Eq (LIO.TCB.LIOState l)
+ LIO.TCB: instance GHC.Exception.Exception LIO.TCB.UncatchableTCB
+ LIO.TCB: instance GHC.Read.Read l => GHC.Read.Read (LIO.TCB.LIOState l)
+ LIO.TCB: instance GHC.Show.Show LIO.TCB.UncatchableTCB
+ LIO.TCB: instance GHC.Show.Show a => GHC.Show.Show (LIO.TCB.Priv a)
+ LIO.TCB: instance GHC.Show.Show l => GHC.Show.Show (LIO.TCB.LIOState l)
+ LIO.TCB: instance LIO.TCB.LabelOf LIO.TCB.Labeled
+ LIO.TCB: instance LIO.TCB.LabelOf LIO.TCB.LabeledResult
+ LIO.TCB.LObj: instance (LIO.Label.Label l, GHC.Show.Show t) => LIO.TCB.ShowTCB (LIO.TCB.LObj.LObj l t)
+ LIO.TCB.LObj: instance LIO.TCB.LObj.GuardIO l (GHC.Types.IO r) (LIO.TCB.LIO l r)
+ LIO.TCB.LObj: instance LIO.TCB.LObj.GuardIO l (a1 -> GHC.Types.IO r) (a1 -> LIO.TCB.LIO l r)
+ LIO.TCB.LObj: instance LIO.TCB.LObj.GuardIO l (a1 -> a2 -> GHC.Types.IO r) (a1 -> a2 -> LIO.TCB.LIO l r)
+ LIO.TCB.LObj: instance LIO.TCB.LObj.GuardIO l (a1 -> a2 -> a3 -> GHC.Types.IO r) (a1 -> a2 -> a3 -> LIO.TCB.LIO l r)
+ LIO.TCB.LObj: instance LIO.TCB.LObj.GuardIO l (a1 -> a2 -> a3 -> a4 -> GHC.Types.IO r) (a1 -> a2 -> a3 -> a4 -> LIO.TCB.LIO l r)
+ LIO.TCB.LObj: instance LIO.TCB.LObj.GuardIO l (a1 -> a2 -> a3 -> a4 -> a5 -> GHC.Types.IO r) (a1 -> a2 -> a3 -> a4 -> a5 -> LIO.TCB.LIO l r)
+ LIO.TCB.LObj: instance LIO.TCB.LObj.GuardIO l (a1 -> a2 -> a3 -> a4 -> a5 -> a6 -> GHC.Types.IO r) (a1 -> a2 -> a3 -> a4 -> a5 -> a6 -> LIO.TCB.LIO l r)
+ LIO.TCB.LObj: instance LIO.TCB.LObj.GuardIO l (a1 -> a2 -> a3 -> a4 -> a5 -> a6 -> a7 -> GHC.Types.IO r) (a1 -> a2 -> a3 -> a4 -> a5 -> a6 -> a7 -> LIO.TCB.LIO l r)
+ LIO.TCB.LObj: instance LIO.TCB.LObj.GuardIO l (a1 -> a2 -> a3 -> a4 -> a5 -> a6 -> a7 -> a8 -> GHC.Types.IO r) (a1 -> a2 -> a3 -> a4 -> a5 -> a6 -> a7 -> a8 -> LIO.TCB.LIO l r)
+ LIO.TCB.LObj: instance LIO.TCB.LObj.GuardIO l (a1 -> a2 -> a3 -> a4 -> a5 -> a6 -> a7 -> a8 -> a9 -> GHC.Types.IO r) (a1 -> a2 -> a3 -> a4 -> a5 -> a6 -> a7 -> a8 -> a9 -> LIO.TCB.LIO l r)
+ LIO.TCB.LObj: instance LIO.TCB.LObj.GuardIO l (a1 -> a2 -> a3 -> a4 -> a5 -> a6 -> a7 -> a8 -> a9 -> a10 -> GHC.Types.IO r) (a1 -> a2 -> a3 -> a4 -> a5 -> a6 -> a7 -> a8 -> a9 -> a10 -> LIO.TCB.LIO l r)
+ LIO.TCB.LObj: instance LIO.TCB.LabelOf LIO.TCB.LObj.LObj
+ LIO.TCB.MLObj: [mlLabelLabel] :: MLabel policy l -> !l
+ LIO.TCB.MLObj: [mlLabel] :: MLabel policy l -> !(IORef l)
+ LIO.TCB.MLObj: [mlPolicy] :: MLabel policy l -> policy
+ LIO.TCB.MLObj: [mlUsers] :: MLabel policy l -> !(MVar (Map Unique (l -> IO Bool)))
+ LIO.TCB.MLObj: instance GHC.Show.Show LIO.TCB.MLObj.ExternalML
+ LIO.TCB.MLObj: instance GHC.Show.Show LIO.TCB.MLObj.InternalML
+ LIO.TCB.MLObj: instance LIO.TCB.MLObj.LabelIO l (GHC.Types.IO r) (LIO.TCB.LIO l r)
+ LIO.TCB.MLObj: instance LIO.TCB.MLObj.LabelIO l (a1 -> GHC.Types.IO r) (a1 -> LIO.TCB.LIO l r)
+ LIO.TCB.MLObj: instance LIO.TCB.MLObj.LabelIO l (a1 -> a2 -> GHC.Types.IO r) (a1 -> a2 -> LIO.TCB.LIO l r)
+ LIO.TCB.MLObj: instance LIO.TCB.MLObj.LabelIO l (a1 -> a2 -> a3 -> GHC.Types.IO r) (a1 -> a2 -> a3 -> LIO.TCB.LIO l r)
+ LIO.TCB.MLObj: instance LIO.TCB.MLObj.LabelIO l (a1 -> a2 -> a3 -> a4 -> GHC.Types.IO r) (a1 -> a2 -> a3 -> a4 -> LIO.TCB.LIO l r)
+ LIO.TCB.MLObj: instance LIO.TCB.MLObj.LabelIO l (a1 -> a2 -> a3 -> a4 -> a5 -> GHC.Types.IO r) (a1 -> a2 -> a3 -> a4 -> a5 -> LIO.TCB.LIO l r)
+ LIO.TCB.MLObj: instance LIO.TCB.MLObj.LabelIO l (a1 -> a2 -> a3 -> a4 -> a5 -> a6 -> GHC.Types.IO r) (a1 -> a2 -> a3 -> a4 -> a5 -> a6 -> LIO.TCB.LIO l r)
+ LIO.TCB.MLObj: instance LIO.TCB.MLObj.LabelIO l (a1 -> a2 -> a3 -> a4 -> a5 -> a6 -> a7 -> GHC.Types.IO r) (a1 -> a2 -> a3 -> a4 -> a5 -> a6 -> a7 -> LIO.TCB.LIO l r)
+ LIO.TCB.MLObj: instance LIO.TCB.MLObj.LabelIO l (a1 -> a2 -> a3 -> a4 -> a5 -> a6 -> a7 -> a8 -> GHC.Types.IO r) (a1 -> a2 -> a3 -> a4 -> a5 -> a6 -> a7 -> a8 -> LIO.TCB.LIO l r)
+ LIO.TCB.MLObj: instance LIO.TCB.MLObj.LabelIO l (a1 -> a2 -> a3 -> a4 -> a5 -> a6 -> a7 -> a8 -> a9 -> GHC.Types.IO r) (a1 -> a2 -> a3 -> a4 -> a5 -> a6 -> a7 -> a8 -> a9 -> LIO.TCB.LIO l r)
+ LIO.TCB.MLObj: instance LIO.TCB.MLObj.LabelIO l (a1 -> a2 -> a3 -> a4 -> a5 -> a6 -> a7 -> a8 -> a9 -> a10 -> GHC.Types.IO r) (a1 -> a2 -> a3 -> a4 -> a5 -> a6 -> a7 -> a8 -> a9 -> a10 -> LIO.TCB.LIO l r)
+ LIO.TCB.MLObj: instance LIO.TCB.MLObj.MLabelOf LIO.TCB.MLObj.MLObj
+ LIO.TCB.MLObj: instance LIO.TCB.MLObj.MLabelPolicy LIO.TCB.MLObj.ExternalML l
+ LIO.TCB.MLObj: instance LIO.TCB.MLObj.MLabelPolicy LIO.TCB.MLObj.InternalML l
+ LIO.TCB.MLObj: instance LIO.TCB.MLObj.MLabelPolicyDefault LIO.TCB.MLObj.ExternalML
+ LIO.TCB.MLObj: instance LIO.TCB.MLObj.MLabelPolicyDefault LIO.TCB.MLObj.InternalML
- LIO.Delegate: delegate :: SpeaksFor p => Priv p -> p -> Priv p
+ LIO.Delegate: delegate :: (SpeaksFor p) => Priv p -> p -> Priv p
- LIO.Delegate: guardGate :: SpeaksFor p => String -> p -> a -> Gate p a
+ LIO.Delegate: guardGate :: (SpeaksFor p) => String -> p -> a -> Gate p a
- LIO.Error: insufficientPrivs :: SpeaksFor p => String -> p -> p -> a
+ LIO.Error: insufficientPrivs :: (SpeaksFor p) => String -> p -> p -> a
- LIO.Error: labelError :: Label l => String -> [l] -> LIO l a
+ LIO.Error: labelError :: (Label l) => String -> [l] -> LIO l a
- LIO.Error: lerrFromException :: Exception e => SomeException -> Maybe e
+ LIO.Error: lerrFromException :: (Exception e) => SomeException -> Maybe e
- LIO.Exception: class (Typeable e, Show e) => Exception e
+ LIO.Exception: class (Typeable * e, Show e) => Exception e
- LIO.Label: isPriv :: Typeable p => p -> Bool
+ LIO.Label: isPriv :: (Typeable p) => p -> Bool
- LIO.Run: privInit :: SpeaksFor p => p -> IO (Priv p)
+ LIO.Run: privInit :: (SpeaksFor p) => p -> IO (Priv p)
- LIO.TCB.MLObj: mlObjTCB :: MLabelPolicyDefault policy => l -> l -> a -> LIO l (MLObj policy l a)
+ LIO.TCB.MLObj: mlObjTCB :: (MLabelPolicyDefault policy) => l -> l -> a -> LIO l (MLObj policy l a)
- LIO.TCB.MLObj: newMLabelP :: PrivDesc l p => Priv p -> policy -> l -> l -> LIO l (MLabel policy l)
+ LIO.TCB.MLObj: newMLabelP :: (PrivDesc l p) => Priv p -> policy -> l -> l -> LIO l (MLabel policy l)
- LIO.TCB.MLObj: readMLabelP :: PrivDesc l p => Priv p -> MLabel policy l -> LIO l l
+ LIO.TCB.MLObj: readMLabelP :: (PrivDesc l p) => Priv p -> MLabel policy l -> LIO l l
- LIO.TCB.MLObj: withMLabelP :: PrivDesc l p => Priv p -> MLabel policy l -> LIO l a -> LIO l a
+ LIO.TCB.MLObj: withMLabelP :: (PrivDesc l p) => Priv p -> MLabel policy l -> LIO l a -> LIO l a

Files

+ LIO/Concurrent/LChan/Trans.hs view
@@ -0,0 +1,50 @@+{-# LANGUAGE Safe #-}++{- | 'MonadLIO' generalizations for "LIO.Concurrent.LChan". -}+module LIO.Concurrent.LChan.Trans (+    newLChan+  , newLChanP+  , writeLChan+  , writeLChanP+  , readLChan+  , readLChanP+  , dupLChan+  , dupLChanP+  ) where++import safe LIO.Core+import safe LIO.Label++import safe qualified LIO.Concurrent.LChan as C++-- | See 'LIO.Concurrent.LChan.newLChan'.+newLChan :: (MonadLIO l m, Label l) => l -> m (C.LChan l a)+newLChan = liftLIO . C.newLChan++-- | See 'LIO.Concurrent.LChan.newLChanP'.+newLChanP :: (MonadLIO l m, PrivDesc l p) => Priv p -> l -> m (C.LChan l a)+newLChanP p = liftLIO . C.newLChanP p++-- | See 'LIO.Concurrent.LChan.writeLChan'.+writeLChan :: (MonadLIO l m, Label l) => C.LChan l a -> a -> m ()+writeLChan c = liftLIO . C.writeLChan c++-- | See 'LIO.Concurrent.LChan.writeLChanP'.+writeLChanP :: (MonadLIO l m, PrivDesc l p) => Priv p -> C.LChan l a -> a -> m ()+writeLChanP p c = liftLIO . C.writeLChanP p c++-- | See 'LIO.Concurrent.LChan.readLChan'.+readLChan :: (MonadLIO l m, Label l) => C.LChan l a -> m a+readLChan = liftLIO . C.readLChan++-- | See 'LIO.Concurrent.LChan.readLChanP'.+readLChanP :: (MonadLIO l m, PrivDesc l p) => Priv p -> C.LChan l a -> m a+readLChanP p = liftLIO . C.readLChanP p++-- | See 'LIO.Concurrent.LChan.dupLChan'.+dupLChan :: (MonadLIO l m, Label l) => C.LChan l a -> m (C.LChan l a)+dupLChan = liftLIO . C.dupLChan++-- | See 'LIO.Concurrent.LChan.dupLChanP'.+dupLChanP :: (MonadLIO l m, PrivDesc l p) => Priv p -> C.LChan l a -> m (C.LChan l a)+dupLChanP p = liftLIO . C.dupLChanP p
+ LIO/Concurrent/LMVar/Trans.hs view
@@ -0,0 +1,100 @@+{-# LANGUAGE Safe #-}++{- | 'MonadLIO' generalizations for "LIO.Concurrent.LMVar". -}+module LIO.Concurrent.LMVar.Trans+  ( newEmptyLMVar+  , newEmptyLMVarP+  , newLMVar+  , newLMVarP+  , takeLMVar+  , takeLMVarP+  , tryTakeLMVar+  , tryTakeLMVarP+  , putLMVar+  , putLMVarP+  , tryPutLMVar+  , tryPutLMVarP+  , readLMVar+  , readLMVarP+  , swapLMVar+  , swapLMVarP+  , isEmptyLMVar+  , isEmptyLMVarP+  ) where++import safe LIO.Core+import safe LIO.Label++import safe qualified LIO.Concurrent.LMVar as M++-- | See 'LIO.Concurrent.LMVar.newEmptyLMVar'.+newEmptyLMVar :: (MonadLIO l m, Label l) => l -> m (M.LMVar l a)+newEmptyLMVar = liftLIO . M.newEmptyLMVar++-- | See 'LIO.Concurrent.LMVar.newEmptyLMVarP'.+newEmptyLMVarP :: (MonadLIO l m, PrivDesc l p) => Priv p -> l -> m (M.LMVar l a)+newEmptyLMVarP p = liftLIO . M.newEmptyLMVarP p++-- | See 'LIO.Concurrent.LMVar.newLMVar'.+newLMVar :: (MonadLIO l m, Label l) => l -> a -> m (M.LMVar l a)+newLMVar l = liftLIO . M.newLMVar l++-- | See 'LIO.Concurrent.LMVar.newLMVarP'.+newLMVarP :: (MonadLIO l m, PrivDesc l p) => Priv p -> l -> a -> m (M.LMVar l a)+newLMVarP p l = liftLIO . M.newLMVarP p l++-- | See 'LIO.Concurrent.LMVar.takeLMVar'.+takeLMVar :: (MonadLIO l m, Label l) => M.LMVar l a -> m a+takeLMVar = liftLIO . M.takeLMVar++-- | See 'LIO.Concurrent.LMVar.takeLMVarP'.+takeLMVarP :: (MonadLIO l m, PrivDesc l p) => Priv p -> M.LMVar l a -> m a+takeLMVarP p = liftLIO . M.takeLMVarP p++-- | See 'LIO.Concurrent.LMVar.tryTakeLMVar'.+tryTakeLMVar :: (MonadLIO l m, Label l) => M.LMVar l a -> m (Maybe a)+tryTakeLMVar = liftLIO . M.tryTakeLMVar++-- | See 'LIO.Concurrent.LMVar.tryTakeLMVarP'.+tryTakeLMVarP :: (MonadLIO l m, PrivDesc l p) => Priv p -> M.LMVar l a -> m (Maybe a)+tryTakeLMVarP p = liftLIO . M.tryTakeLMVarP p++-- | See 'LIO.Concurrent.LMVar.putLMVar'.+putLMVar :: (MonadLIO l m, Label l) => M.LMVar l a -> a -> m ()+putLMVar mvar = liftLIO . M.putLMVar mvar++-- | See 'LIO.Concurrent.LMVar.putLMVarP'.+putLMVarP :: (MonadLIO l m, PrivDesc l p) => Priv p -> M.LMVar l a -> a -> m ()+putLMVarP p mvar = liftLIO . M.putLMVarP p mvar++-- | See 'LIO.Concurrent.LMVar.tryPutLMVar'.+tryPutLMVar :: (MonadLIO l m, Label l) => M.LMVar l a -> a -> m Bool+tryPutLMVar mvar = liftLIO . M.tryPutLMVar mvar++-- | See 'LIO.Concurrent.LMVar.tryPutLMVarP'.+tryPutLMVarP :: (MonadLIO l m, PrivDesc l p) => Priv p -> M.LMVar l a -> a -> m Bool+tryPutLMVarP p mvar = liftLIO . M.tryPutLMVarP p mvar++-- | See 'LIO.Concurrent.LMVar.readLMVar'.+readLMVar :: (MonadLIO l m, Label l) => M.LMVar l a -> m a+readLMVar = liftLIO . M.readLMVar++-- | See 'LIO.Concurrent.LMVar.readLMVarP'.+readLMVarP :: (MonadLIO l m, PrivDesc l p) => Priv p -> M.LMVar l a -> m a+readLMVarP p = liftLIO . M.readLMVarP p++-- | See 'LIO.Concurrent.LMVar.swapLMVar'.+swapLMVar :: (MonadLIO l m, Label l) => M.LMVar l a -> a -> m a+swapLMVar mvar = liftLIO . M.swapLMVar mvar++-- | See 'LIO.Concurrent.LMVar.swapLMVarP'.+swapLMVarP :: (MonadLIO l m, PrivDesc l p) => Priv p -> M.LMVar l a -> a -> m a+swapLMVarP p mvar = liftLIO . M.swapLMVarP p mvar++-- | See 'LIO.Concurrent.LMVar.isEmptyLMVar'.+isEmptyLMVar :: (MonadLIO l m, Label l) => M.LMVar l a -> m Bool+isEmptyLMVar = liftLIO . M.isEmptyLMVar++-- | See 'LIO.Concurrent.LMVar.isEmptyLMVarP'.+isEmptyLMVarP :: (MonadLIO l m, PrivDesc l p) => Priv p -> M.LMVar l a -> m Bool+isEmptyLMVarP p = liftLIO . M.isEmptyLMVarP p
LIO/Core.hs view
@@ -41,7 +41,7 @@ label to ensure that @l_r ``canFlowTo`` l_cur@.  This is acomplished using a function such as 'taint'. -The second purpose of the current label is to prevent inforation leaks+The second purpose of the current label is to prevent information leaks into public channels. Specifically, it is only permissible to modify or write to data labeled @l_w@ when @l_cur``canFlowTo`` l_w@. Thus, the following attempt to leak the @val@ after reading it from a secret@@ -91,6 +91,7 @@ import safe LIO.Error import safe LIO.Exception import safe LIO.Label+import safe LIO.Monad(MonadLIO(..)) import safe LIO.Run import LIO.TCB @@ -316,8 +317,13 @@ -- -- > guardWrite l = guardAlloc l >> taint l ----- This guarantees that @l@ ``canFlowTo`` the current label (and--- clearance), and that the current label ``canFlowTo`` @l@.+-- The 'guardAlloc' ensures that we can write(-only) to the object+-- labeled @l@, i.e., the current label ``canFlowTo`` @l@ (and @l@+-- ``canFlowTo`` the current clearance). If this check succeeds then+-- we raise the current label with 'taint' to reflect the fact that+-- this is a also a read effect. Note that if the write-only guard+-- succeeds, the 'taint' will always suceed (we're simply raising the+-- current label to a label that is below the clearance). -- guardWrite :: Label l => l -> LIO l () guardWrite newl = withContext "guardWrite" $ do@@ -330,16 +336,3 @@ guardWriteP p newl = withContext "guardWriteP" $ do   guardAllocP p newl   taintP p newl------- Monad base------- | Synonym for monad in which 'LIO' is the base monad.-class (Label l, Monad m) => MonadLIO l m | m -> l where-  -- | Lift an 'LIO' computation.-  liftLIO :: LIO l a -> m a--instance Label l => MonadLIO l (LIO l) where-  liftLIO = id-
+ LIO/Core/Trans.hs view
@@ -0,0 +1,73 @@+{-# LANGUAGE Safe #-}+{-# LANGUAGE MultiParamTypeClasses #-}+{-# LANGUAGE FunctionalDependencies #-}+{-# LANGUAGE FlexibleInstances #-}++{- | 'MonadLIO' generalizations for "LIO.Core". -}+module LIO.Core.Trans (+    getLabel+  , setLabel+  , setLabelP+  , getClearance+  , setClearance+  , setClearanceP+  , guardAlloc+  , guardAllocP+  , taint+  , taintP+  , guardWrite+  , guardWriteP+  ) where++import safe LIO.Label+import safe LIO.Monad++import safe qualified LIO.Core as C++-- | See 'LIO.Core.getLabel'.+getLabel :: (MonadLIO l m, Label l) => m l+getLabel = liftLIO C.getLabel++-- | See 'LIO.Core.setLabel'.+setLabel :: (MonadLIO l m, Label l) => l -> m ()+setLabel = liftLIO . C.setLabel++-- | See 'LIO.Core.setLabelP'.+setLabelP :: (MonadLIO l m, PrivDesc l p) => Priv p -> l -> m ()+setLabelP p = liftLIO . C.setLabelP p++-- | See 'LIO.Core.getClearance'.+getClearance :: (MonadLIO l m, Label l) => m l+getClearance = liftLIO C.getClearance++-- | See 'LIO.Core.setClearance'.+setClearance :: (MonadLIO l m, Label l) => l -> m ()+setClearance = liftLIO . C.setClearance++-- | See 'LIO.Core.setClearanceP'.+setClearanceP :: (MonadLIO l m, PrivDesc l p) => Priv p -> l -> m ()+setClearanceP p = liftLIO . C.setClearanceP p++-- | See 'LIO.Core.guardAlloc'.+guardAlloc :: (MonadLIO l m, Label l) => l -> m ()+guardAlloc = liftLIO . C.guardAlloc++-- | See 'LIO.Core.guardAllocP'.+guardAllocP :: (MonadLIO l m, PrivDesc l p) => Priv p -> l -> m ()+guardAllocP p = liftLIO . C.guardAllocP p++-- | See 'LIO.Core.taint'.+taint :: (MonadLIO l m, Label l) => l -> m ()+taint = liftLIO . C.taint++-- | See 'LIO.Core.taintP'.+taintP :: (MonadLIO l m, PrivDesc l p) => Priv p -> l -> m ()+taintP p = liftLIO . C.taintP p++-- | See 'LIO.Core.guardWrite'.+guardWrite :: (MonadLIO l m, Label l) => l -> m ()+guardWrite = liftLIO . C.guardWrite++-- | See 'LIO.Core.guardWriteP'.+guardWriteP :: (MonadLIO l m, PrivDesc l p) => Priv p -> l -> m ()+guardWriteP p = liftLIO . C.guardWriteP p
LIO/DCLabel.hs view
@@ -1,4 +1,4 @@-{-# LANGUAGE Trustworthy #-}+{-# LANGUAGE Safe #-} {-# LANGUAGE DeriveDataTypeable #-} {-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE MultiParamTypeClasses #-}@@ -110,13 +110,12 @@   , cTrue, cFalse, cToSet, cFromList   ) where -import safe Control.Applicative import safe Control.Monad import safe Data.Bits import safe qualified Data.ByteString as S import Data.Hashable import safe Data.List-import safe Data.Monoid+import safe Data.Monoid () import safe Data.Set (Set) import safe qualified Data.Set as Set import safe Data.String
+ LIO/Error/Trans.hs view
@@ -0,0 +1,29 @@+{-# LANGUAGE Safe #-}+{-# LANGUAGE DeriveDataTypeable #-}+{-# LANGUAGE ExistentialQuantification #-}++{- | 'MonadLIO' generalizations for "LIO.Error". -}+module LIO.Error.Trans (+    labelError+  , labelErrorP+  ) where++import safe LIO.Label+import safe LIO.Monad++import safe qualified LIO.Error as E++-- | See 'LIO.Error.labelError'.+labelError :: (MonadLIO l m, Label l)+    => String -- ^ Function that failed.+    -> [l]    -- ^ Labels involved in error.+    -> m a+labelError fl = liftLIO . E.labelError fl++-- | See 'LIO.Error.labelErrorP'.+labelErrorP :: (MonadLIO l m, Label l, PrivDesc l p)+    => String  -- ^ Function that failed.+    -> Priv p  -- ^ Privileges involved.+    -> [l]     -- ^ Labels involved.+    -> m a+labelErrorP fl p = liftLIO . E.labelErrorP fl p
+ LIO/LIORef/Trans.hs view
@@ -0,0 +1,71 @@+{-# LANGUAGE Safe #-}+{-# LANGUAGE ConstraintKinds,+             FlexibleContexts #-}++{- | 'MonadLIO' generalizations for "LIO.LIORef". -}+module LIO.LIORef.Trans (+    newLIORef+  , newLIORefP+  , readLIORef+  , readLIORefP+  , writeLIORef+  , writeLIORefP+  , modifyLIORef+  , modifyLIORefP+  , atomicModifyLIORef+  , atomicModifyLIORefP+  ) where++import safe LIO.Core+import safe LIO.Label++import safe LIO.LIORef (LIORef)+import safe qualified LIO.LIORef as R++-- | See 'LIO.LIORef.newLIORef'.+newLIORef :: (MonadLIO l m, Label l)+          => l                  -- ^ Label of reference+          -> a                  -- ^ Initial value+          -> m (LIORef l a) -- ^ Mutable reference+newLIORef l = liftLIO . R.newLIORef l++-- | See 'LIO.LIORef.newLIORefP'.+newLIORefP :: (MonadLIO l m, PrivDesc l p) => Priv p -> l -> a -> m (LIORef l a)+newLIORefP p l = liftLIO . R.newLIORefP p l++-- | See 'LIO.LIORef.readLIORef'.+readLIORef :: (MonadLIO l m, Label l) => LIORef l a -> m a+readLIORef = liftLIO . R.readLIORef++-- | See 'LIO.LIORef.readLIORefP'.+readLIORefP :: (MonadLIO l m, PrivDesc l p) => Priv p -> LIORef l a -> m a+readLIORefP priv = liftLIO . R.readLIORefP priv++-- | See 'LIO.LIORef.writeLIORef'.+writeLIORef :: (MonadLIO l m, Label l) => LIORef l a -> a -> m ()+writeLIORef ref = liftLIO . R.writeLIORef ref++-- | See 'LIO.LIORef.writeLIORefP'.+writeLIORefP :: (MonadLIO l m, PrivDesc l p) => Priv p -> LIORef l a -> a -> m ()+writeLIORefP priv ref = liftLIO . R.writeLIORefP priv ref++-- | See 'LIO.LIORef.modifyLIORef'.+modifyLIORef :: (MonadLIO l m, Label l)+             => LIORef l a             -- ^ Labeled reference+             -> (a -> a)               -- ^ Modifier+             -> m ()+modifyLIORef ref = liftLIO . R.modifyLIORef ref++-- | See 'LIO.LIORef.modifyLIORefP'.+modifyLIORefP :: (MonadLIO l m, PrivDesc l p)+              =>  Priv p -> LIORef l a -> (a -> a) -> m ()+modifyLIORefP priv ref = liftLIO . R.modifyLIORefP priv ref++-- | See 'LIO.LIORef.atomicModifyLIORef'.+atomicModifyLIORef :: (MonadLIO l m, Label l) => LIORef l a -> (a -> (a, b)) -> m b+atomicModifyLIORef ref = liftLIO . R.atomicModifyLIORef ref++-- | See 'LIO.LIORef.atomicModifyLIORefP'.+atomicModifyLIORefP :: (MonadLIO l m, PrivDesc l p)+                    => Priv p -> LIORef l a -> (a -> (a, b)) -> m b+atomicModifyLIORefP priv ref = liftLIO . R.atomicModifyLIORefP priv ref
LIO/Label.hs view
@@ -18,7 +18,7 @@   , NoPrivs(..), noPrivs   ) where -import safe Data.Monoid+import safe Data.Monoid () import safe Data.Typeable  import LIO.TCB@@ -46,7 +46,7 @@ with current label @lcur@ observes data labeled @l1@, it must hold that @l1 ``canFlowTo`` lcur@.  If the thread is later permitted to modify an object labeled @l2@, it must hold that @lcur ``canFlowTo``-l2@.  By transitifity of the ``canFlowTo`` relation, it holds that @l1+l2@.  By transitivity of the ``canFlowTo`` relation, it holds that @l1 ``canFlowTo`` l2@.  -}@@ -221,10 +221,6 @@     -- Less formally, @downgradeP p l@ returns a label representing     -- the furthest you can downgrade data labeled @l@ given     -- privileges described by @p@.-    ---    -- Yet another way to view this function is that @downgradeP p l@-    -- returns the greatest lower bound (under 'canFlowTo') of the set-    -- of all labels @l'@ such that @'canFlowToP' p l' l@.     downgradeP :: p     -- ^ Privilege description                   -> l  -- ^ Label to downgrade                   -> l  -- ^ Lowest label equivelent to input
+ LIO/Labeled/Trans.hs view
@@ -0,0 +1,58 @@+{-# LANGUAGE Trustworthy #-}++{- | 'MonadLIO' generalizations for "LIO.Labeled". -}+module LIO.Labeled.Trans (+    label+  , labelP+  , unlabel+  , unlabelP+  , relabelLabeledP+  , taintLabeled+  , taintLabeledP+  , lFmap+  , lAp+  ) where++import safe LIO.Label+import safe LIO.Core+import LIO.TCB++import safe qualified LIO.Labeled as L++-- | See 'LIO.Labeled.label'.+label :: (MonadLIO l m, Label l) => l -> a -> m (Labeled l a)+label l = liftLIO . L.label l++-- | See 'LIO.Labeled.labelP'.+labelP :: (MonadLIO l m, PrivDesc l p) => Priv p -> l -> a -> m (Labeled l a)+labelP p l = liftLIO . L.labelP p l++-- | See 'LIO.Labeled.unlabel'.+unlabel :: (MonadLIO l m, Label l) => Labeled l a -> m a+unlabel = liftLIO . L.unlabel++-- | See 'LIO.Labeled.unlabelP'.+unlabelP :: (MonadLIO l m, PrivDesc l p) => Priv p -> Labeled l a -> m a+unlabelP p = liftLIO . L.unlabelP p++-- | See 'LIO.Labeled.relabelLabeledP'.+relabelLabeledP :: (MonadLIO l m, PrivDesc l p)+                => Priv p -> l -> Labeled l a -> m (Labeled l a)+relabelLabeledP p newl = liftLIO . L.relabelLabeledP p newl++-- | See 'LIO.Labeled.taintLabeled'.+taintLabeled :: (MonadLIO l m, Label l) => l -> Labeled l a -> m (Labeled l a)+taintLabeled l = liftLIO . L.taintLabeled l++-- | See 'LIO.Labeled.taintLabeledP'.+taintLabeledP :: (MonadLIO l m, PrivDesc l p)+              => Priv p -> l -> Labeled l a -> m (Labeled l a)+taintLabeledP p l = liftLIO . L.taintLabeledP p l++-- | See 'LIO.Labeled.lFmap'.+lFmap :: (MonadLIO l m, Label l) => Labeled l a -> (a -> b) -> m (Labeled l b)+lFmap l = liftLIO . L.lFmap l++-- | See 'LIO.Labeled.lAp'.+lAp :: (MonadLIO l m, Label l) => Labeled l (a -> b) -> Labeled l a -> m (Labeled l b)+lAp lf = liftLIO . L.lAp lf
+ LIO/Monad.hs view
@@ -0,0 +1,19 @@+{-# LANGUAGE Trustworthy #-}+{-# LANGUAGE MultiParamTypeClasses #-}+{-# LANGUAGE FunctionalDependencies #-}+{-# LANGUAGE FlexibleInstances #-}++module LIO.Monad (+    MonadLIO(..)+  ) where++import safe LIO.Label+import LIO.TCB++-- | Synonym for monad in which 'LIO' is the base monad.+class (Label l, Monad m) => MonadLIO l m | m -> l where+  -- | Lift an 'LIO' computation.+  liftLIO :: LIO l a -> m a++instance Label l => MonadLIO l (LIO l) where+  liftLIO = id
LIO/TCB.hs view
@@ -34,11 +34,11 @@   , LabeledResult(..), LResStatus(..)   ) where -import safe Control.Applicative+import safe Control.Applicative () import safe Control.Exception (Exception(..), SomeException(..)) import safe qualified Control.Concurrent as IO import safe Control.Monad-import safe Data.Monoid+import safe Data.Monoid () import safe Data.IORef import safe Data.Typeable 
examples/channel.hs view
@@ -9,15 +9,18 @@  import LIO.TCB (ioTCB) +main :: IO () main = evalDC $ do-  log <- newLChan ("Logger" %% True)+  logger <- newLChan ("Logger" %% True)   forkLIO $ forever $ do-    msg  <- readLChan log+    msg  <- readLChan logger     lcur <- getLabel     ioTCB $ putStrLn $ show lcur ++ " > " ++ msg   forkLIO $ do-    writeLChan log "in them alternate threads"+    writeLChan logger "in them alternate threads"   forkLIO $ do     taint ("Alice" %% True)-    writeLChan log "i has failed"-  forM_ [1..10] $ \i -> writeLChan log $ "yo "++ show  i+    writeLChan logger "i has failed"+  forM_ oneToTen $ \i -> writeLChan logger $ "yo "++ show  i+    where oneToTen :: [Int]+          oneToTen = [1..10]
examples/dclabel.hs view
@@ -24,6 +24,7 @@ p :: DCPriv p = PrivTCB  $ "Alice" /\ "Carla" +main :: IO () main = do   putStrLn $ "Label 1: " ++ show l1   putStrLn $ "Label 2: " ++ show l2
examples/gate.hs view
@@ -1,5 +1,4 @@ import LIO-import LIO.Delegate import LIO.DCLabel  import LIO.TCB@@ -18,6 +17,7 @@ bob   = PrivTCB . toCNF $ "Bob" clark = PrivTCB . toCNF $ "Clark" +main :: IO () main = putStrLn . show $    [ callGate addGate alice 1 2 -- Just 3   , callGate addGate bob   3 4 -- Just 7
examples/waitAndCatch.hs view
@@ -2,19 +2,18 @@  module Main (main) where -import Prelude hiding (catch)+import Prelude import LIO import LIO.TCB (ioTCB) import LIO.DCLabel import LIO.Concurrent-import Control.Exception (SomeException)  -l,m,h :: DCLabel+l,m :: DCLabel l = "A" \/ "B" %% True m = "M" %% True-h = "A" /\ "B" %% True +main :: IO () main =  do   lr <- evalDC $ do     lb <- label m (6 :: Int)
lio.cabal view
@@ -1,13 +1,15 @@ Name:           lio-Version:        0.11.5.0+Version:        0.11.6.0 Cabal-Version:  >= 1.8 Build-type:     Simple License:        GPL License-File:   LICENSE Author:         Hails team-Maintainer:	Hails team <hails at scs dot stanford dot edu>+Maintainer:     Deian Stefan <deian at cs dot ucsd dot edu> Synopsis:       Labeled IO Information Flow Control Library Category:       Security+Homepage:       https://github.com/plsyssec/lio+Bug-Reports:    https://github.com/plsyssec/lio/issues Description:    The /Labeled IO/ (LIO) library is an information flow control (IFC)@@ -60,11 +62,11 @@  Source-repository head   Type:     git-  Location: git://github.com/scslab/lio.git+  Location: https://github.com/PLSysSec/lio.git  Library   Build-Depends:-    base          >= 4.5     && < 5.0+    base          >= 4.5     && < 6.0    ,containers    ,bytestring    >= 0.10    ,hashable      >= 1.2@@ -80,18 +82,25 @@     LIO.Label     -- * Core library     LIO.Core+    LIO.Core.Trans+    LIO.Monad     LIO.Error+    LIO.Error.Trans     LIO.Exception     -- * Labeled values     LIO.Labeled+    LIO.Labeled.Trans     -- * Labeled IORefs     LIO.LIORef+    LIO.LIORef.Trans     -- * LIO privileges     LIO.Delegate     -- * Concurrency     LIO.Concurrent     LIO.Concurrent.LMVar+    LIO.Concurrent.LMVar.Trans     LIO.Concurrent.LChan+    LIO.Concurrent.LChan.Trans     -- * DCLabels     LIO.DCLabel     -- * Privileged internals