packages feed

bound-0.6: bound.cabal

name:          bound
category:      Language, Compilers/Interpreters
version:       0.6
license:       BSD3
cabal-version: >= 1.9.2
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:      Making de Bruijn Succ Less
build-type:    Custom
description:
   We represent the target language itself as an ideal monad supplied by the
   user, and provide a 'Scope' monad transformer for introducing bound variables
   in user supplied terms. Users supply a 'Monad' and 'Traversable' instance,
   and we traverse to find free variables, and use the Monad to perform
   substitution that avoids bound variables.
   .
   Slides describing and motivating this approach to name binding are available 
   online at:
   .
   <http://www.slideshare.net/ekmett/bound-making-de-bruijn-succ-less>
   .
   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.
   .
   With generalized de Bruijn term you can 'lift' whole trees instead of just
   applying 'succ' to individual variables, weakening the all variables bound
   by a scope and greatly speeding up instantiation. By giving binders more
   structure we permit easy simultaneous substitution and further speed up 
   instantiation.

extra-source-files:
  .travis.yml
  examples/Simple.hs
  examples/Deriving.hs
  examples/Overkill.hs
  tests/doctests.hs
  README.markdown
  CHANGELOG.markdown

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

library
  hs-source-dirs: src

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

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

  ghc-options: -Wall -O2 -fspec-constr -fdicts-cheap -funbox-strict-fields
  if impl(ghc>=7.4)
    build-depends: ghc-prim

-- Stating these, despite being more correct, causes spurious warnings to
-- end-users of older Cabal versions, so we don't.

--  other-extensions: CPP
--  if impl(ghc)
--    other-extensions: DeriveDataTypeable
--  if impl(ghc>=7.4)
--    other-extensions: DeriveGeneric DefaultSignatures

test-suite Simple
  type: exitcode-stdio-1.0
  main-is: Simple.hs
  hs-source-dirs: examples
  ghc-options -Wall -threaded
  if impl(ghc<7.6.1)
    ghc-options: -Werror
  build-depends:
    base,
    bound,
    prelude-extras,
    transformers

-- Verify the results of the examples
test-suite doctests
  type:    exitcode-stdio-1.0
  main-is: doctests.hs
  hs-source-dirs: tests
  ghc-options: -Wall -threaded
  if impl(ghc<7.6.1)
    ghc-options: -Werror
  build-depends:
    base,
    directory >= 1.0 && < 1.3,
    doctest   >= 0.9 && < 0.10,
    filepath,
    vector    >= 0.9 && < 0.11