gnu: Simplify package inputs.
[jackhill/guix/guix.git] / gnu / packages / agda.scm
1 ;;; GNU Guix --- Functional package management for GNU
2 ;;; Copyright © 2018 Alex ter Weele <alex.ter.weele@gmail.com>
3 ;;; Copyright © 2018 Ricardo Wurmus <rekado@elephly.net>
4 ;;; Copyright © 2018 Alex Vong <alexvong1995@gmail.com>
5 ;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr>
6 ;;; Copyright © 2018 John Soo <jsoo1@asu.edu>
7 ;;; Copyright © 2019 Ludovic Courtès <ludo@gnu.org>
8 ;;;
9 ;;; This file is part of GNU Guix.
10 ;;;
11 ;;; GNU Guix is free software; you can redistribute it and/or modify it
12 ;;; under the terms of the GNU General Public License as published by
13 ;;; the Free Software Foundation; either version 3 of the License, or (at
14 ;;; your option) any later version.
15 ;;;
16 ;;; GNU Guix is distributed in the hope that it will be useful, but
17 ;;; WITHOUT ANY WARRANTY; without even the implied warranty of
18 ;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19 ;;; GNU General Public License for more details.
20 ;;;
21 ;;; You should have received a copy of the GNU General Public License
22 ;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
23
24 (define-module (gnu packages agda)
25 #:use-module (gnu packages haskell-check)
26 #:use-module (gnu packages haskell-web)
27 #:use-module (gnu packages haskell-xyz)
28 #:use-module (guix build-system emacs)
29 #:use-module (guix build-system gnu)
30 #:use-module (guix build-system haskell)
31 #:use-module (guix build-system trivial)
32 #:use-module (guix download)
33 #:use-module (guix git-download)
34 #:use-module ((guix licenses) #:prefix license:)
35 #:use-module (guix packages))
36
37 (define-public agda
38 (package
39 (name "agda")
40 (version "2.6.2")
41 (source
42 (origin
43 (method url-fetch)
44 (uri (string-append
45 "https://hackage.haskell.org/package/Agda/Agda-"
46 version ".tar.gz"))
47 (sha256
48 (base32
49 "159hznnsxg7hlp80r1wqizyd7gwgnq0j13cm4d27cns0ganslb07"))))
50 (build-system haskell-build-system)
51 (inputs
52 (list ghc-aeson
53 ghc-alex
54 ghc-async
55 ghc-blaze-html
56 ghc-boxes
57 ghc-case-insensitive
58 ghc-data-hash
59 ghc-edit-distance
60 ghc-equivalence
61 ghc-gitrev
62 ghc-happy
63 ghc-hashable
64 ghc-hashtables
65 ghc-monad-control
66 ghc-murmur-hash
67 ghc-parallel
68 ghc-regex-tdfa
69 ghc-split
70 ghc-strict
71 ghc-unordered-containers
72 ghc-uri-encode
73 ghc-zlib))
74 (arguments
75 `(#:modules ((guix build haskell-build-system)
76 (guix build utils)
77 (srfi srfi-26)
78 (ice-9 match))
79 #:phases
80 (modify-phases %standard-phases
81 ;; This allows us to call the 'agda' binary before installing.
82 (add-after 'unpack 'set-ld-library-path
83 (lambda _
84 (setenv "LD_LIBRARY_PATH" (string-append (getcwd) "/dist/build"))
85 #t))
86 (add-after 'compile 'agda-compile
87 (lambda* (#:key outputs #:allow-other-keys)
88 (let* ((out (assoc-ref outputs "out"))
89 (agda-compiler (string-append out "/bin/agda")))
90 (for-each (cut invoke agda-compiler <>)
91 (find-files (string-append out "/share") "\\.agda$"))
92 #t))))))
93 (home-page "https://wiki.portal.chalmers.se/agda/")
94 (synopsis
95 "Dependently typed functional programming language and proof assistant")
96 (description
97 "Agda is a dependently typed functional programming language: it has
98 inductive families, which are similar to Haskell's GADTs, but they can be
99 indexed by values and not just types. It also has parameterised modules,
100 mixfix operators, Unicode characters, and an interactive Emacs interface (the
101 type checker can assist in the development of your code). Agda is also a
102 proof assistant: it is an interactive system for writing and checking proofs.
103 Agda is based on intuitionistic type theory, a foundational system for
104 constructive mathematics developed by the Swedish logician Per Martin-Löf. It
105 has many similarities with other proof assistants based on dependent types,
106 such as Coq, Epigram and NuPRL.")
107 ;; Agda is distributed under the MIT license, and a couple of
108 ;; source files are BSD-3. See LICENSE for details.
109 (license (list license:expat license:bsd-3))))
110
111 (define-public emacs-agda2-mode
112 (package
113 (inherit agda)
114 (name "emacs-agda2-mode")
115 (build-system emacs-build-system)
116 (inputs '())
117 (arguments
118 `(#:phases
119 (modify-phases %standard-phases
120 (add-after 'unpack 'enter-elisp-dir
121 (lambda _ (chdir "src/data/emacs-mode") #t)))))
122 (home-page "https://agda.readthedocs.io/en/latest/tools/emacs-mode.html")
123 (synopsis "Emacs mode for Agda")
124 (description "This Emacs mode enables interactive development with
125 Agda. It also aids the input of Unicode characters.")))
126
127 (define-public agda-ial
128 (package
129 (name "agda-ial")
130 (version "1.5.0")
131 (home-page "https://github.com/cedille/ial")
132 (source (origin
133 (method git-fetch)
134 (uri (git-reference (url home-page)
135 (commit (string-append "v" version))))
136 (file-name (git-file-name name version))
137 (sha256
138 (base32
139 "0dlis6v6nzbscf713cmwlx8h9n2gxghci8y21qak3hp18gkxdp0g"))))
140 (build-system gnu-build-system)
141 (inputs
142 (list agda))
143 (arguments
144 `(#:parallel-build? #f
145 #:phases
146 (modify-phases %standard-phases
147 (delete 'configure)
148 (add-before 'build 'patch-dependencies
149 (lambda _ (patch-shebang "find-deps.sh") #t))
150 (delete 'check)
151 (replace 'install
152 (lambda* (#:key outputs #:allow-other-keys)
153 (let* ((out (assoc-ref outputs "out"))
154 (include (string-append out "/include/agda/ial")))
155 (for-each (lambda (file)
156 (make-file-writable file)
157 (install-file file include))
158 (find-files "." "\\.agdai?(-lib)?$"))
159 #t))))))
160 (synopsis "The Iowa Agda Library")
161 (description
162 "The goal is to provide a concrete library focused on verification
163 examples, as opposed to mathematics. The library has a good number
164 of theorems for booleans, natural numbers, and lists. It also has
165 trees, tries, vectors, and rudimentary IO. A number of good ideas
166 come from Agda's standard library.")
167 (license license:expat)))