{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE FlexibleInstances #-}
-- | Encodes a security lattice.
module SecLib.Lattice where


-- Less

class Less s s' where
  -- | This method determines that information at security level @s@ can flow to security level @s'@.
  less :: s -> s' -> ()


class Attacker s where
  {- |
       This method determines the observational power of the attacker.
       Attackers are then capable to break the abstraction of the
       security monads in module "Sec" and "SecIO" for security levels
       below or equal than @s@.
  -}
  observe :: s -> ()