-- Initial trivial-constraint.cabal generated by cabal init. For further
-- documentation, see http://haskell.org/cabal/users-guide/
name: trivial-constraint
version: 0.7.0.0
synopsis: Constraints that any type, resp. no type fulfills
description: Since GHC 7.4, constraints are first-class: we have the constraint
kind, and thus type-classes have a kind of form @k -> Constraint@,
or @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)
@
.
means that @NewCstrt¹ :: * -> Constraint@ requires that for
any given parameter both @Cstrt¹₀@ and @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,
i.e. for @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 = ()
@
.
and then
.
@
(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,
i.e. @\\a b ... -> Impossible@, constraints which can /never/ be
fulfilled. They are essentially dual to the @Unconstrained@ ones,
and can likewise be useful as parameters that should completely
“disable” a conditional feature.
license: GPL-3
license-file: LICENSE
author: Justus Sagemüller
maintainer: jsag@hvl.no
homepage: https://github.com/leftaroundabout/trivial-constraint
-- copyright:
category: Constraints
build-type: Simple
-- extra-source-files:
cabal-version: >=1.10
source-repository head
type: git
location: git://github.com/leftaroundabout/trivial-constraint.git
library
exposed-modules: Data.Constraint.Trivial
-- other-modules:
-- other-extensions:
build-depends: base>=4.5 && <5
hs-source-dirs: src
default-language: Haskell2010