rerefined-0.4.0: Refinement types, again
Safe HaskellSafe-Inferred
LanguageGHC2021

Rerefined.Predicate.Logical.And

Synopsis

Documentation

data And l r Source #

Logical conjunction. Also AND logic gate.

Instances

Instances details
(Predicate l, Predicate r) => Predicate (And l r :: Type) Source #

Precedence of 3 (matching &&).

Instance details

Defined in Rerefined.Predicate.Logical.And

Associated Types

type PredicateName d (And l r) :: Symbol Source #

(Refine l a, Refine r a, KnownPredicateName (And l r)) => Refine (And l r :: Type) a Source # 
Instance details

Defined in Rerefined.Predicate.Logical.And

Methods

validate :: Proxy# (And l r) -> a -> Maybe RefineFailure Source #

type PredicateName d (And l r :: Type) Source # 
Instance details

Defined in Rerefined.Predicate.Logical.And

type PredicateName d (And l r :: Type) = PredicateNameBOp " \8743 " 3 d l r

rerefineAndL :: Refined (And l r) a -> Refined l a Source #

Take just the left predicate from an And.

rerefineAndR :: Refined (And l r) a -> Refined r a Source #

Take just the right predicate from an And.

eliminateAndLR :: Refined (And l r) a -> Refined r (Refined l a) Source #

Eliminate an And by applying the left predicate, then the right.

eliminateAndRL :: Refined (And l r) a -> Refined l (Refined r a) Source #

Eliminate an And by applying the right predicate, then the left.

introduceAndLR :: Refined r (Refined l a) -> Refined (And l r) a Source #

Introduce an And given a double-Refined. Inner is left.

introduceAndRL :: Refined l (Refined r a) -> Refined (And l r) a Source #

Introduce an And given a double-Refined. Inner is right.