trivial-constraint: Constraints that any type, resp. no type fulfills
Since GHC 7.4, constraints are first-class: we have the constraint
kind, and thus type-classes have a kind of form
k -> Constraint,
k -> l -> m -> ... -> Constraint for a multi-param type class.
Such type-level functions can be used as arguments to data types, or
as instances for other type classes.
For any given arity, the constraint-valued functions form a semigroup with respect to “constraint intersection”, which Haskell supports with tuple syntax, e.g.
type NewCstrt¹ a = (Cstrt¹₀ a, Cstrt¹₁ a)
NewCstrt¹ :: * -> Constraint requires that for
any given parameter both
Cstrt¹₁ be fulfilled.
It is intuitive enough that this type-level semigroup can be extended
to a monoid, but out of the box this is only possible for arity 0,
Cstrt⁰ :: Constraint
(Cstrt⁰, ()) ~ ((), Cstrt⁰) ~ Cstrt⁰
For higher arity, this would require type-level lambdas, like for
Cstrt² :: * -> * -> Constraint
(Cstrt², \a b -> ()) ~ (\a b -> (), Cstrt²) ~ Cstrt²
which is not valid Haskell syntax. It is easy enough to define the lambdas in an ad-hoc manner as
type Unconstrained² a b = ()
(Cstrt², Unconstrained²) ~ (Unconstrained², Cstrt²) ~ Cstrt²
This library provides those trivial constraints in a single, documented place, and it uses classes instead of type-synonyms (which would be problematic when it comes to partial application). Arities 0-9 are provided.
They can be useful in any construction that is parameterised over a constrainer-class, when you do not wish to actually constrain the domain with it.
The other thing this library provides are the opposite classes,
\a b ... -> Impossible, constraints which can never be
fulfilled. They are essentially dual to the
and can likewise be useful as parameters that should completely
“disable” a conditional feature.
|Versions [faq]||0.1.0.0, 0.2.0.0, 0.3.0.0, 0.4.0.0, 0.5.0.0, 0.5.1.0, 0.6.0.0|
|Dependencies||base (>=4.5 && <5) [details]|
|Source repo||head: git clone git://github.com/leftaroundabout/trivial-constraint.git|
|Uploaded||by leftaroundabout at Fri Jul 12 10:06:12 UTC 2019|
|Downloads||1911 total (155 in the last 30 days)|
|Rating||(no votes yet) [estimated by rule of succession]|
Docs available [build log]
Last success reported on 2019-07-12 [all 1 reports]
For package maintainers and hackage trustees