blob: 3b9b832453f556ab5259b7f294bd806329f8f609 (
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
|
(;module:
lux
(lux (control monad)
[macro #+ Monad<Lux>]
(type ["TC" check]))
(luxc ["&" base]
(lang ["la" analysis #+ Analysis])))
## [Analysers]
(def: #export (analyse-check analyse eval type value)
(-> &;Analyser &;Eval Code Code (Lux Analysis))
(do Monad<Lux>
[actual (eval Type type)
#let [actual (:! Type actual)]
expected macro;expected-type
_ (&;within-type-env
(TC;check expected actual))]
(&;with-expected-type actual
(analyse value))))
(def: #export (analyse-coerce analyse eval type value)
(-> &;Analyser &;Eval Code Code (Lux Analysis))
(do Monad<Lux>
[actual (eval Type type)
expected macro;expected-type
_ (&;within-type-env
(TC;check expected (:! Type actual)))]
(&;with-expected-type Top
(analyse value))))
|