aboutsummaryrefslogtreecommitdiff
path: root/stdlib/source/library/lux/tool/compiler.lux
blob: 1acd9aeea4e5cfe99f5d2fe2b2d753dfd4902f72 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
(.module:
  [library
   [lux (#- Module Code)
    [control
     ["." try (#+ Try)]
     ["." exception (#+ exception:)]]
    [data
     [binary (#+ Binary)]
     ["." text]
     [collection
      ["." row (#+ Row)]]]
    [world
     ["." file (#+ Path)]]]]
  [/
   [meta
    ["." archive (#+ Output Archive)
     [key (#+ Key)]
     [descriptor (#+ Descriptor Module)]
     [document (#+ Document)]]]])

(type: #export Code
  Text)

(type: #export Parameter
  Text)

(type: #export Input
  {#module Module
   #file Path
   #hash Nat
   #code Code})

(type: #export (Compilation s d o)
  {#dependencies (List Module)
   #process (-> s Archive
                (Try [s (Either (Compilation s d o)
                                [Descriptor (Document d) Output])]))})

(type: #export (Compiler s d o)
  (-> Input (Compilation s d o)))

(type: #export (Instancer s d o)
  (-> (Key d) (List Parameter) (Compiler s d o)))

(exception: #export (cannot_compile {module Module})
  (exception.report
   ["Module" module]))