safe-access-0.1.0.0: A simple environment to control access to data

Safe HaskellSafe-Inferred

Control.SafeAccess

Synopsis

Documentation

ensureAccess :: MonadSafeAccess m d => d -> m ()Source

Check that the access is legal or make the monad "fail".

newtype Capability d Source

Allow things to be accessed. See ensureAccess.

d is the type describing an access.

Constructors

MkCapability 

data AccessDecision Source

Control the decision process.

The constructors are ordered by prevalence. For instance, if two capabilities respectively return AccessGranted and AccessDenied, the final decision will be AccessDenied.

Constructors

AccessDeniedSoft

No but another Capability can still decide to grant

AccessGranted

Final yes (see explanation)

AccessDenied

Final no

Instances

newtype SafeAccessT d m a Source

A simple monad (transformer) to ensure that data are accessed legitimately.

The return value is either the description of an access having been denied (left) or the result of the normal computation (right).

Constructors

SafeAccessT 

Fields

runSafeAccessT :: Capabilities d -> m (Either d a)
 

Instances

MonadTrans (SafeAccessT d) 
(AccessDescriptor d, Monad m) => Monad (SafeAccessT d m) 
Functor f => Functor (SafeAccessT d f) 
Applicative f => Applicative (SafeAccessT d f) 
(AccessDescriptor d, MonadIO m) => MonadIO (SafeAccessT d m) 
(AccessDescriptor d, Monad m) => MonadSafeAccess (SafeAccessT d m) d 

class AccessDescriptor d whereSource

It is needed by fail on SafeAccessT to put the string into the Either d a returned.

Methods

descrMsg :: String -> dSource

class (AccessDescriptor d, Monad m) => MonadSafeAccess m d whereSource

Instances

(AccessDescriptor d, Monad m) => MonadSafeAccess (SafeAccessT d m) d 

liftErrorT :: ErrorT d m a -> SafeAccessT d m aSource

Lift an action from ErrorT to SafeAccessT.