Data.Operator.Bottom
- Package
- purescript-higher-order
- Repository
- matthew-hilty/purescript-higher-order
#Bottom1 Source
class Bottom1 (f :: Type -> Type) whereThe Bottom1 typeclass represents type constructors f that have a
distinguished element bottom1 of type forall a. f a as well as an
associated partial ordering (or at least a notion thereof), for which
bottom1 is the minimum or lowest bound.
Because the notion of minimality entails the notion of comparability,
the semantics of an instance of Bottom1 must be consistent with the
definitional requirements of a partial order. In fact, many instances of
Bottom1 are also instances of PartialOrd1 (and likely Ord1 as well).
In such cases, when a type operator f is both a registered instance of
Bottom1 and one of PartialOrd1, it must satisfy the following laws:
- minimality:
x .>=? bottom1 == Just true
Likewise, if f is an instance of Bottom1 and also an instance of
Ord1, it must satisfy the following analogous law:
- minimality:
x .>= bottom1
Additionally, higher-order semiring-related laws may also be mandated.
If f is an instance of a higher-order additive semigroup-like structure
like Alt, f's bottom1 value must act as the structure's identity:
- left identity:
bottom1 + x .== x - right identity:
x + bottom1 .== x
If f is an instance of a higher-order multiplicative
semigroup-like structure like Applicative or Monad, f's bottom1
value must act as the structure's zero element:
- Left zero:
bottom1 * x .== bottom1 - Right zero:
x * bottom1 .== bottom1
Members
bottom1 :: forall a. f a
Instances
#Bottom1_ Source
class Bottom1_ (f :: Type -> Type) whereThe Bottom1_ typeclass represents type constructors f that have a
distinguished function bottom1_ of type forall a. a -> f a as well as
an associated partial ordering (or at least a notion thereof), for which
the class of evaluations of bottom1_ constitutes the minimum or lowest
bound.
Because the notion of minimality entails the notion of comparability,
the semantics of an instance of Bottom1_ must be consistent with the
definitional requirements of a partial order. In fact, many instances of
Bottom1_ are also instances of PartialOrd1 (and likely Ord1 as well).
In such cases, when a type operator f is both a registered instance of
Bottom1_ and one of PartialOrd1, it must satisfy the following laws:
- minimality:
x .>=? bottom1_ y == Just true
Likewise, if f is an instance of Bottom1_ and also an instance of
Ord1, it must satisfy the following analogous law:
- minimality:
x .>= bottom1_ y
Additionally, higher-order semiring-related laws may also be mandated.
If f is an instance of a higher-order additive semigroup-like structure
like Alt, f's bottom1_ value must act as the structure's identity:
- left identity:
bottom1_ x + y .== y - right identity:
x + bottom1_ y .== x
If f is an instance of a higher-order multiplicative
semigroup-like structure like Applicative or Monad, f's bottom1_
value must act as the structure's zero element:
- Left zero:
bottom1_ x * y .== bottom1_ x - Right zero:
x * bottom1_ y .== bottom1_ y
Members
bottom1_ :: forall a. a -> f a
Instances
#Bottom2 Source
class Bottom2 (f :: Type -> Type) (a :: Type) whereThe Bottom2 typeclass represents type constructors f that have a
distinguished function bottom2 of type forall b. a -> f b (for an
instantiated type parameter a) as well as an associated partial
ordering (or at least a notion thereof), for which the class of
evaluations of bottom2 constitutes the minimum or lowest bound.
Because the notion of minimality entails the notion of comparability,
the semantics of an instance of Bottom2 must be consistent with the
definitional requirements of a partial order. In fact, many instances of
Bottom2 are also instances of PartialOrd1 (and likely Ord1 as well).
In such cases, when a type operator f is both a registered instance of
Bottom2 and one of PartialOrd1, it must satisfy the following law:
- minimality:
x .>=? bottom2 y == Just true
Likewise, if f is an instance of Bottom2 and also an instance of
Ord1, it must satisfy the following analogous law:
- minimality:
x .>= bottom2 y
Additionally, higher-order semiring-related laws may also be mandated.
If f is an instance of a higher-order additive semigroup-like structure
like Alt, f's bottom2 value must act as the structure's identity:
- left identity:
bottom2 x + y .== y - right identity:
x + bottom2 y .== x
If f is an instance of a higher-order multiplicative
semigroup-like structure like Applicative or Monad, f's bottom2
value must act as the structure's zero element:
- Left zero:
bottom2 x * y .== bottom2 x - Right zero:
x * bottom2 y .== bottom2 y
Members
bottom2 :: forall b. a -> f b
Instances
Bottom2 (Either a) aBottom2 (EitherR a) a(Monad m) => Bottom2 (ExceptT a m) a(MonadThrow a m) => Bottom2 (MaybeT m) a(MonadThrow a m) => Bottom2 (ReaderT r m) a(MonadThrow a m, Monoid w) => Bottom2 (RWST r w s m) a(MonadThrow a m) => Bottom2 (StateT s m) a(Monoid w, MonadThrow a m) => Bottom2 (WriterT w m) a(Bottom1 f) => Bottom2 f a