cluss-0.1: cluss.cabal
name: cluss
category: type system, constraints
version: 0.1
license: BSD3
license-file: LICENSE
cabal-version: >= 1.10
tested-with: GHC==7.8.3
author: Yusuke Matsushita
maintainer: Yusuke Matsushita <y.skm24t@gmail.com>
stability: provinsional
homepage: https://github.com/Kinokkory/cluss
bug-reports: https://github.com/Kinokkory/cluss/issues
copyright: Copyright (C) 2014 Yusuke Matsushita
synopsis: Simple Alternative to Type Classes
description:
A /cluss/ enables you to achieve /function overloading/, or ad-hoc polymorphism,
without creating a new type class.
.
In order to give ad-hoc polymorphism to a type variable @a@,
you simply use @In@ with a list of "type patterns" like @In [Type T, ...] a@,
which indicates that the type matches some of the patterns;
which is analogous to a type class indicating that a type matches some of its "instances".
The constraint @In [Type T, ...] a@ is what we call a "cluss".
.
Cluss instances are /closed/ and cluss methods are /open/,
unlike type classes, whose instances are open and whose methods are closed.
.
Clusses can easily be used in a nested way,
and can even be /recursive/, just like recursive type classes,
and therefore clusses are expressive enough to imitate Haskell-98-style type classes.
.
More information can be found in the Haddock or the comments in the source code.
build-type: Simple
source-repository head
type: git
location: git@github.com:Kinokkory/cluss.git
library
hs-source-dirs: src
default-language: Haskell2010
other-extensions:
TypeFamilies
PolyKinds
DataKinds
TypeOperators
MultiParamTypeClasses
FlexibleInstances
ScopedTypeVariables
UndecidableInstances
FlexibleContexts
ConstraintKinds
RankNTypes
build-depends: base == 4.*
exposed-modules: Type.Cluss
ghc-options: -Wall