aboutsummaryrefslogtreecommitdiff
path: root/stdlib/source/lux/target/jvm/type/category.lux
blob: 3bbf0378339041e00602cf483f965aeefe3034ba (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
(.module:
  [lux #*
   [macro
    ["." template]]
   [type
    abstract]])

(abstract: #export Void' {} Any)
(abstract: #export (Value' kind) {} Any)
(abstract: #export (Return' kind) {} Any)
(abstract: #export Method {} Any)

(type: #export Return (<| Return' Any))
(type: #export Value (<| Return' Value' Any))
(type: #export Void (<| Return' Void'))

(abstract: #export (Object' brand) {} Any)
(type: #export Object (<| Return' Value' Object' Any))

(abstract: #export (Parameter' brand) {} Any)
(type: #export Parameter (<| Return' Value' Object' Parameter' Any))

(template [<parents> <child>]
  [(with-expansions [<raw> (template.identifier [<child> "'"])]
     (abstract: #export <raw> {} Any)
     (type: #export <child>
       (`` (<| Return' Value' (~~ (template.splice <parents>)) <raw>))))]

  [[] Primitive]
  [[Object' Parameter'] Class]
  [[Object'] Array]
  )