summaryrefslogtreecommitdiff
path: root/lib/std/try.myr
blob: c7a1c1f33a9f327ad9030a384e663502ff28e10a (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
use "result"
use "option"
use "fmt"

pkg std =
	generic try : (v : result(@a, @b) -> @a)
	generic tryv : (v : result(@a, @b), d : @a -> @a)
	generic get : (v : option(@a) -> @a)
	generic getv : (v : option(@a), d : @a -> @a)
	generic canget	: (o : option(@a) -> bool)
;;

generic try = {v
	match v
	| `Ok x:	-> x
	| `Err m:	fatal("error: {}\n", m)
	;;
}

generic tryv = {v, d
	match v
	| `Ok x:	-> x
	| `Err m:	-> d
	;;
}

generic canget = {o
	match o
	| `None: -> false
	| `Some _: -> true
	;;
}

generic get = {v
	match v
	| `Some x:	-> x
	| `None:	fatal("error: option had `None\n")
	;;
}

generic getv = {v, d
	match v
	| `Some x:	-> x
	| `None:	-> d
	;;
}