-
Notifications
You must be signed in to change notification settings - Fork 22
/
error.tao
37 lines (29 loc) · 898 Bytes
/
error.tao
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
import "value.tao"
import "fmt.tao"
data Result A, E =
| Ok A
\ Err E
data Never =|
# TODO: Reenable when coherence checker is cleverer
# for A member Result A Never of From A =
# => from = fn x => Ok x
# TODO: Reenable when coherence checker is cleverer
# for A member A of From (Result A Never) =
# => from = fn Ok x => x
for A < Show, E < Show member Result A E of Show =
=> show = fn
| Ok x => x->show
\ Err e => "error: " ++ e->show
for A < Debug, E < Debug member Result A E of Debug =
=> debug = fn
| Ok x => "Ok " ++ x->debug
\ Err e => "Err " ++ e->debug
for A, B, E, e member Result A E of Map A B e =
=> Output = e ~ Result B E
=> map = fn
| f, Ok a => Ok a->f!
\ _, Err e => Err e
$[util]
fn map_err A, E, F : (E -> F) -> Result A E -> Result A F =
| _, Ok x => Ok x
\ f, Err e => Err e->f