blob: 94b7a78940a961b86c0bb372ba11f589ee9d0542 (
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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
|
(.using
[library
[lux {"-" Module}
[abstract
[monad {"+" do}]]
[control
["[0]" try]]
[data
[collection
["[0]" list ("[1]#[0]" monoid)]]]]]
[//
["[0]" analysis]
["[0]" synthesis]
["[0]" generation]
[phase
["[0]" extension]]
[///
["[0]" phase]
[meta
[archive
[module
[descriptor {"+" Module}]]]]]])
(type: .public (Component state phase)
(Record
[#state state
#phase phase]))
(type: .public (State anchor expression directive)
(Record
[#analysis (Component analysis.State+
analysis.Phase)
#synthesis (Component synthesis.State+
synthesis.Phase)
#generation (Component (generation.State+ anchor expression directive)
(generation.Phase anchor expression directive))]))
(type: .public Import
(Record
[#module Module
#alias Text]))
(type: .public Requirements
(Record
[#imports (List Import)
#referrals (List Code)]))
(def: .public no_requirements
Requirements
[#imports (list)
#referrals (list)])
(def: .public (merge_requirements left right)
(-> Requirements Requirements Requirements)
[#imports (list#composite (value@ #imports left) (value@ #imports right))
#referrals (list#composite (value@ #referrals left) (value@ #referrals right))])
(template [<special> <general>]
[(type: .public (<special> anchor expression directive)
(<general> (..State anchor expression directive) Code Requirements))]
[State+ extension.State]
[Operation extension.Operation]
[Phase extension.Phase]
[Handler extension.Handler]
[Bundle extension.Bundle]
)
(template [<name> <component> <phase>]
[(def: .public <name>
(All (_ anchor expression directive)
(Operation anchor expression directive <phase>))
(function (_ [bundle state])
{try.#Success [[bundle state] (value@ [<component> ..#phase] state)]}))]
[analysis ..#analysis analysis.Phase]
[synthesis ..#synthesis synthesis.Phase]
[generation ..#generation (generation.Phase anchor expression directive)]
)
(template [<name> <component> <operation>]
[(def: .public <name>
(All (_ anchor expression directive output)
(-> (<operation> output)
(Operation anchor expression directive output)))
(|>> (phase.sub [(value@ [<component> ..#state])
(with@ [<component> ..#state])])
extension.lifted))]
[lifted_analysis ..#analysis analysis.Operation]
[lifted_synthesis ..#synthesis synthesis.Operation]
[lifted_generation ..#generation (generation.Operation anchor expression directive)]
)
(def: .public (set_current_module module)
(All (_ anchor expression directive)
(-> Module (Operation anchor expression directive Any)))
(do phase.monad
[_ (..lifted_analysis
(analysis.set_current_module module))]
(..lifted_generation
(generation.enter_module module))))
|