packages feed

ds-kanren-0.2.0.0: ds-kanren.cabal

name:                ds-kanren
version:             0.2.0.0
synopsis:            A subset of the miniKanren language
description:
  ds-kanren is an implementation of the <http://minikanren.org miniKanren> language.
  .
  == What's in ds-kanren?
  .
  ['disconj']
    Try the left and the right and gather solutions that satisfy
    either one.
  ['fresh']
    Create a fresh logical variable
  ['===']
    Equate two terms. This will backtrack if we can't unify
    them in this branch.
  ['run']
    Actually run a logical computation and return results and
    the constraints on them.
  .
  In addition to these core combinators, we also export a few
  supplimentary tools.
  .
  ['=/=']
    The opposite of '===', ensure that the left and right
    never unify.
  .
  == The Classic Example
  .
  We can define the classic @appendo@ relationship by encoding
  lists in the Lisp "bunch-o-pairs" method.
  .
  > appendo :: Term -> Term -> Term -> Predicate
  > appendo l r o =
  >   conde [ program [l === "nil",  o === r]
  >         , manyFresh $ \h t o ->
  >             program [ Pair h t === l
  >                     , appendo t r o
  >                     , Pair h o === o ]]
  .
  Once we have a relationship, we can run it backwards and forwards
  as we can with most logic programs.
  .
  >>> let l = list ["foo", "bar"]
  .
  >>> map fst . runN 1 $ \t -> appendo t l l
  [nil]
  >>> map fst . runN 1 $ \t -> appendo l t l
  [nil]
  >>> map fst . runN 1 $ \t -> appendo l l t
  [(foo, (bar, (foo, (bar, nil))))]
  .
  == Related Links
  .
  Some good places to start learning about miniKanren would be
  .
     * <http://www.amazon.com/The-Reasoned-Schemer-Daniel-Friedman/DP/0262562146 The Reasoned Schemer>
     * <http://www.infoq.com/presentations/miniKanren A presentation at StrangeLoop>
     * <https://github.com/miniKanren/miniKanren The canonical implementation>
license:             MIT
license-file:        LICENSE
author:              Danny Gratzer
maintainer:          jozefg@cmu.edu
category:            Language
build-type:          Simple
cabal-version:       >=1.10
source-repository head
  type:     hg
  location: http://bitbucket.org/jozefg/ds-kanren

library
  exposed-modules:     Language.DSKanren
                     , Language.DSKanren.Core
                     , Language.DSKanren.Sugar
  build-depends:       base >=4 && <5
                     , containers >=0.4
                     , logict
  hs-source-dirs:      src
  default-language:    Haskell2010
Test-Suite test-unify:
  hs-source-dirs: test
  type:               exitcode-stdio-1.0
  main-is:            Unify.hs
  hs-source-dirs:     test
  build-depends:      ds-kanren
                    , tasty
                    , tasty-quickcheck
                    , QuickCheck
                    , base >=4 && <5
  default-language:    Haskell2010
Test-Suite test-list-ops:
  hs-source-dirs: test
  type:               exitcode-stdio-1.0
  main-is:            List.hs
  hs-source-dirs:     test
  build-depends:      ds-kanren
                    , tasty
                    , tasty-quickcheck
                    , QuickCheck
                    , base >=4 && <5
  default-language:    Haskell2010