content: {-# 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
  