úΨ,      !"#$%&'()*+Safe9;<=? IA 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).Control the decision process.cThe constructors are ordered by prevalence. For instance, if two capabilities respectively return   and  , the final decision will be  .No but another   can still decide to grant Final yes (see explanation) Final no !Allow things to be accessed. See .d" is the type describing an access.4Create a capability which only allows a given access4Create a capability which only allows given accessesEA special capability which allows every access. Be careful with this!8Check that the access is legal or make the monad "fail".BAllow certain accesses regardless of the capabilities. (unsecure!)Lift an action from ErrorT to ., ,- !"#$%&'()     "  ,- !"#$%&'().      !"#$%&'()*+,-./*safe-access-0.3.2.1-4gGwD6wo9VyEBL2pTCXef0Control.SafeAccessMonadSafeAccessgetCapabilitiesliftSub denyAccess SafeAccessTrunSafeAccessTAccessDecisionAccessDeniedSoft AccessGranted AccessDenied Capabilities Capability MkCapability runCapabilitysingleCapabilitysomeCapabilitiespassthroughCapability ensureAccess unsecureAllow liftExceptTliftCapability$fMonadSafeAccessdWriterTs$fMonadSafeAccessdRWSTs$fMonadSafeAccessdReaderTs$fMonadSafeAccessdMaybeTs$fMonadSafeAccessdListTs$fMonadSafeAccessdIdentityTs$fMonadSafeAccessdExceptTs$fMonadSafeAccessdContTs$fMonadWriterwSafeAccessT$fMonadStatesSafeAccessT$fMonadReaderrSafeAccessT$fMonadErroreSafeAccessT$fMonadSafeAccessdSafeAccessTm$fMonadIOSafeAccessT$fMonadTransSafeAccessT$fMonadSafeAccessT$fApplicativeSafeAccessT$fFunctorSafeAccessT$fMonoidAccessDecision$fMonoidCapability$fShowAccessDecision$fEqAccessDecisiongetCapabilities' denyAccess'