···11+opam-version: "2.0"
22+maintainer: "Enrico Tassi <enrico.tassi@inria.fr>"
33+authors: [ "Claudio Sacerdoti Coen" "Enrico Tassi" ]
44+license: "LGPL-2.1-or-later"
55+homepage: "https://github.com/LPCIC/elpi"
66+doc: "https://LPCIC.github.io/elpi/"
77+dev-repo: "git+https://github.com/LPCIC/elpi.git"
88+bug-reports: "https://github.com/LPCIC/elpi/issues"
99+1010+build: [
1111+ ["dune" "subst"] {dev}
1212+ ["dune" "build" "-p" name "-j" jobs]
1313+ [make "tests" "DUNE_OPTS=-p %{name}%" "SKIP=performance_HO" "SKIP+=performance_FO" "SKIP+=elpi_api_performance"] {with-test & os != "macos" & os-distribution != "alpine" & os-distribution != "freebsd"}
1414+]
1515+1616+depends: [
1717+ "ocaml" {>= "4.13.0" }
1818+ "stdlib-shims"
1919+ "ppxlib" {>= "0.12.0" }
2020+ "menhir" {>= "20211230" }
2121+ "re" {>= "1.7.2"}
2222+ "ppx_deriving" {>= "4.3"}
2323+ "ANSITerminal" {with-test}
2424+ "cmdliner" {with-test}
2525+ "fileutils" {with-test}
2626+ "dune" {>= "2.8.0"}
2727+ "conf-time" {with-test}
2828+ "atdgen" {>= "2.10.0"}
2929+ "atdts" {>= "2.10.0"}
3030+ "odoc" {with-doc}
3131+]
3232+synopsis: "ELPI - Embeddable λProlog Interpreter"
3333+description: """
3434+ELPI implements a variant of λProlog enriched with Constraint Handling Rules,
3535+a programming language well suited to manipulate syntax trees with binders.
3636+3737+ELPI is designed to be embedded into larger applications written in OCaml as
3838+an extension language. It comes with an API to drive the interpreter and
3939+with an FFI for defining built-in predicates and data types, as well as
4040+quotations and similar goodies that are handy to adapt the language to the host
4141+application.
4242+4343+This package provides both a command line interpreter (elpi) and a library to
4444+be linked in other applications (eg by passing -package elpi to ocamlfind).
4545+4646+The ELPI programming language has the following features:
4747+4848+- Native support for variable binding and substitution, via an Higher Order
4949+ Abstract Syntax (HOAS) embedding of the object language. The programmer
5050+ does not need to care about technical devices to handle bound variables,
5151+ like De Bruijn indices.
5252+5353+- Native support for hypothetical context. When moving under a binder one can
5454+ attach to the bound variable extra information that is collected when the
5555+ variable gets out of scope. For example when writing a type-checker the
5656+ programmer needs not to care about managing the typing context.
5757+5858+- Native support for higher order unification variables, again via HOAS.
5959+ Unification variables of the meta-language (λProlog) can be reused to
6060+ represent the unification variables of the object language. The programmer
6161+ does not need to care about the unification-variable assignment map and
6262+ cannot assign to a unification variable a term containing variables out of
6363+ scope, or build a circular assignment.
6464+6565+- Native support for syntactic constraints and their meta-level handling rules.
6666+ The generative semantics of Prolog can be disabled by turning a goal into a
6767+ syntactic constraint (suspended goal). A syntactic constraint is resumed as
6868+ soon as relevant variables gets assigned. Syntactic constraints can be
6969+ manipulated by constraint handling rules (CHR).
7070+7171+- Native support for backtracking. To ease implementation of search.
7272+7373+- The constraint store is extensible. The host application can declare
7474+ non-syntactic constraints and use custom constraint solvers to check their
7575+ consistency.
7676+7777+- Clauses are graftable. The user is free to extend an existing program by
7878+ inserting/removing clauses, both at runtime (using implication) and at
7979+ "compilation" time by accumulating files.
8080+8181+ELPI is free software released under the terms of LGPL 2.1 or above."""
8282+url {
8383+ src:
8484+ "https://github.com/LPCIC/elpi/releases/download/v2.0.2/elpi-2.0.2.tbz"
8585+ checksum: [
8686+ "sha256=0b5b1f2eeed6b310bfa02039cede5fa51d0008f8d9ff47b51a63bc3e55200b53"
8787+ "sha512=4e757b70215082293053c33e4047dd9ba52b90d3ec80662d4fc1df656071edfb433b62ea2168331e9a52eddd6b0232549918631377eb4a74df5c043d089494dc"
8888+ ]
8989+}
9090+x-commit-hash: "20af6bb6e63d3120c7e1a08099dafd7a14bf8233"