-- 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