packages feed

bound-0.1.3: bound.cabal

name:          bound
category:      Language, Compilers/Interpreters
version:       0.1.3
license:       BSD3
cabal-version: >= 1.6
license-file:  LICENSE
author:        Edward A. Kmett
maintainer:    Edward A. Kmett <ekmett@gmail.com>
stability:     experimental
homepage:      http://github.com/ekmett/bound/
bug-reports:   http://github.com/ekmett/bound/issues
copyright:     Copyright (C) 2012 Edward A. Kmett
synopsis:      Combinators for manipulating locally-nameless generalized de Bruijn terms
description:
  The goal of this package is to make it as easy as possible to deal with name binding without forcing an
  awkward monadic style on the user. To that end we provide haskell 98 combinators for manipulating
  locally-nameless generalized de Bruijn terms, build over user-supplied term types. A generalized
  de Bruijn term is one where you can 'succ' whole trees instead of just individual variables.
  .
  The approach was first elaborated in Bird and Patterson, \"de Bruijn notation as a nested data type\":
  .
  <http://www.cs.uwyo.edu/~jlc/courses/5000_fall_08/debruijn_as_nested_datatype.pdf>
  .
  However, the combinators they used required higher rank types. Here we use a monad transformer to encapsulate
  the novel recursion pattern in their generalized de Bruijn representation. It is named Scope to match up
  with the terminology from Conor McBride and James McKinna's \"I am not a number: I am a free variable\",
  while providing stronger type safety guarantees.
  .
  <http://www.cs.st-andrews.ac.uk/~james/RESEARCH/notanum.pdf>
  .
  There are three worked examples in the examples folder:
  .
  * /Simple.hs/ provides an untyped lambda calculus with recursive let bindings.
  .
  * /Derived.hs/ shows how much of the API can be automated with DeriveTraversable
    and adds combinators for building binders with pattern matching.
  .
  * /Overkill.hs/ provides very strongly typed pattern matching many modern type extensions, including
    polymorphic kinds to ensure type safety. In general, the approach taken by Derived seems to deliver 
    a better power to weight ratio.

build-type:    Simple
extra-source-files: .travis.yml examples/Simple.hs examples/Deriving.hs examples/Overkill.hs

source-repository head
  type: git
  location: git://github.com/ekmett/bound.git

library
  build-depends:
    base           >= 4     && < 5,
    bifunctors     >= 0.1.3 && < 0.2,
    prelude-extras >= 0.2   && < 0.3,
    transformers   >= 0.2   && < 0.4

  exposed-modules:
    Bound
    Bound.Class
    Bound.Scope
    Bound.Term
    Bound.Var

  ghc-options: -Wall