2019-10-19 17:20:06 +00:00
|
|
|
|
require "language/haskell"
|
|
|
|
|
|
|
|
|
|
class Cedille < Formula
|
|
|
|
|
include Language::Haskell::Cabal
|
|
|
|
|
|
|
|
|
|
desc "Language based on the Calculus of Dependent Lambda Eliminations"
|
|
|
|
|
homepage "https://cedille.github.io/"
|
|
|
|
|
|
|
|
|
|
stable do
|
|
|
|
|
url "https://github.com/cedille/cedille/archive/v1.1.2.tar.gz"
|
|
|
|
|
sha256 "cf6578256105c7042b99a70a897c1ed60f856b28628b79205eb95730863b71cb"
|
|
|
|
|
|
|
|
|
|
resource "ial" do
|
|
|
|
|
url "https://github.com/cedille/ial/archive/v1.5.0.tar.gz"
|
|
|
|
|
sha256 "f003a785aba6743f4d76dcaafe3bc08bf879b2e1a7a198a4f192ced12b558f46"
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
2019-12-28 15:41:43 +00:00
|
|
|
|
bottle do
|
|
|
|
|
sha256 "252f230e6168e64ac2832307427c11019dee14a14367aa551d3e8932c8d81661" => :mojave
|
|
|
|
|
sha256 "dcc55582c930e81fbefeda86831834f3d0f2d1b785343f32ade15a2d63efb7f9" => :high_sierra
|
|
|
|
|
end
|
|
|
|
|
|
2019-10-19 17:20:06 +00:00
|
|
|
|
head do
|
|
|
|
|
url "https://github.com/cedille/cedille.git"
|
|
|
|
|
|
|
|
|
|
resource "ial" do
|
|
|
|
|
url "https://github.com/cedille/ial.git"
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
depends_on "agda" => :build
|
|
|
|
|
depends_on "cabal-install" => :build
|
|
|
|
|
depends_on "ghc"
|
|
|
|
|
|
|
|
|
|
def install
|
|
|
|
|
resource("ial").stage buildpath/"ial"
|
|
|
|
|
|
|
|
|
|
cabal_sandbox do
|
|
|
|
|
# build tools
|
|
|
|
|
cabal_install_tools "alex", "happy", "cpphs"
|
|
|
|
|
|
|
|
|
|
# build dependencies
|
|
|
|
|
cabal_install "ieee754"
|
|
|
|
|
|
|
|
|
|
# use the sandbox when building with Agda
|
|
|
|
|
ENV["GHC_PACKAGE_PATH"] = "#{buildpath/Dir[".cabal-sandbox/*packages.conf.d/"].first}:"
|
|
|
|
|
|
|
|
|
|
# build
|
|
|
|
|
system "make", "core/cedille-core", "cedille-mac"
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
# binaries and elisp
|
|
|
|
|
bin.install "core/cedille-core"
|
|
|
|
|
bin.install "cedille-mac" => "cedille"
|
|
|
|
|
elisp.install "cedille-mode.el", "cedille-mode", "se-mode"
|
|
|
|
|
|
|
|
|
|
# standard libraries
|
|
|
|
|
(lib/"cedille").install "lib", "new-lib"
|
|
|
|
|
|
|
|
|
|
# documentation
|
|
|
|
|
doc.install Dir["docs/html/*"]
|
|
|
|
|
(doc/"semantics").install "docs/semantics/paper.pdf"
|
|
|
|
|
info.install "docs/info/cedille-info-main.info"
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
test do
|
|
|
|
|
coretest = testpath/"core-test.ced"
|
|
|
|
|
coretest.write <<~EOS
|
|
|
|
|
module core-test.
|
|
|
|
|
|
|
|
|
|
id = Λ X: ★. λ x: X. x.
|
|
|
|
|
|
|
|
|
|
cNat : ★ = ∀ X: ★. Π _: X. Π _: Π _: X. X. X.
|
|
|
|
|
czero = Λ X: ★. λ x: X. λ f: Π _: X. X. x.
|
|
|
|
|
csucc = λ n: cNat. Λ X: ★. λ x: X. λ f: Π _: X. X. f (n ·X x f).
|
|
|
|
|
|
|
|
|
|
iNat : Π n: cNat. ★
|
|
|
|
|
= λ n: cNat. ∀ P: Π _: cNat. ★.
|
|
|
|
|
Π _: P czero. Π _: ∀ n: cNat. Π p: P n. P (csucc n). P n.
|
|
|
|
|
izero
|
|
|
|
|
= Λ P: Π _: cNat. ★.
|
|
|
|
|
λ base: P czero. λ step: ∀ n: cNat. Π p: P n. P (csucc n). base.
|
|
|
|
|
isucc
|
|
|
|
|
= Λ n: cNat. λ i: iNat n. Λ P: Π _: cNat. ★.
|
|
|
|
|
λ base: P czero. λ step: ∀ n: cNat. Π p: P n. P (csucc n).
|
|
|
|
|
step -n (i ·P base step).
|
|
|
|
|
|
|
|
|
|
Nat : ★ = ι x: cNat. iNat x.
|
|
|
|
|
zero = [ czero, izero @ x. iNat x ].
|
|
|
|
|
succ = λ n: Nat. [ csucc n.1, isucc -n.1 n.2 @x. iNat x ].
|
|
|
|
|
EOS
|
|
|
|
|
|
|
|
|
|
cedilletest = testpath/"cedille-test.ced"
|
|
|
|
|
cedilletest.write <<~EOS
|
|
|
|
|
module cedille-test.
|
|
|
|
|
|
|
|
|
|
id : ∀ X: ★. X ➔ X = Λ X. λ x. x.
|
|
|
|
|
|
|
|
|
|
cNat : ★ = ∀ X: ★. X ➔ (X ➔ X) ➔ X.
|
|
|
|
|
czero : cNat = Λ X. λ x. λ f. x.
|
|
|
|
|
csucc : cNat ➔ cNat = λ n. Λ X. λ x. λ f. f (n x f).
|
|
|
|
|
|
|
|
|
|
iNat : cNat ➔ ★
|
|
|
|
|
= λ n: cNat. ∀ P: cNat ➔ ★.
|
|
|
|
|
P czero ➔ (∀ n: cNat. P n ➔ P (csucc n)) ➔ P n.
|
|
|
|
|
izero : iNat czero = Λ P. λ base. λ step. base.
|
|
|
|
|
isucc : ∀ n: cNat. iNat n ➔ iNat (csucc n)
|
|
|
|
|
= Λ n. λ i. Λ P. λ base. λ step. step -n (i base step).
|
|
|
|
|
|
|
|
|
|
Nat : ★ = ι n: cNat. iNat n.
|
|
|
|
|
zero : Nat = [ czero, izero ].
|
|
|
|
|
succ : Nat ➔ Nat = λ n. [ csucc n.1, isucc -n.1 n.2 ].
|
|
|
|
|
EOS
|
|
|
|
|
|
|
|
|
|
# test cedille-core
|
|
|
|
|
system bin/"cedille-core", coretest
|
|
|
|
|
|
|
|
|
|
# test cedille
|
|
|
|
|
system bin/"cedille", cedilletest
|
|
|
|
|
end
|
|
|
|
|
end
|