homebrew-core/Formula/cedille.rb

123 lines
3.6 KiB
Ruby
Raw Normal View History

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
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