Skip to content
Haskell implementation of the μKanren logic programming language.
Haskell
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
app
src
.gitignore
LICENSE
README.md
Setup.hs
mu-kanren.cabal
package.yaml

README.md

mu-kanren

Haskell implementation of μKanren, a minimalist language in the miniKanren family of relational (logic) programming languages.

It is not meant to be an actual runnable program, but rather a core library to experiment with on the repl.

Build & use

$ cabal new-repl

Examples

Some examples taken from the repository of the original Scheme implementation.

λ> takeS 2 aAndB
([(#1, 5), (#0, 7)], 2)
([(#1, 6), (#0, 7)], 2)

λ> takeS 1 (fives (num 5))
([], 0)

-- limit number of recursive calls
-- to avoid divergence.
λ> takeS' 1 10 (fives (num 3))
λ>

λ> takeS 2 callAppendo
([(#0, (#1 #2 #3)), (#2, #3), (#1, ())], 4)
([(#0, (#1 #2 #3)), (#2, #6), (#5, ()), (#3, (#4 . #6)), (#1, (#4 . #5))], 7)

λ> run 2 callAppendo
(() _.0 _.0)
((_.0) _.1 (_.0 . _.1))

λ> runAll appendoo
(() (1 2 3 4 5))
((1) (2 3 4 5))
((1 2) (3 4 5))
((1 2 3) (4 5))
((1 2 3 4) (5))
((1 2 3 4 5) ())



You can’t perform that action at this time.