packages feed

trivial-constraint-0.7.0.0: trivial-constraint.cabal

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