fallible ergonomics
This commit is contained in:
@@ -8,6 +8,8 @@ DetailError :: union(enum) {
|
||||
empty void
|
||||
}
|
||||
|
||||
BasicOrDetail :: alias BasicError | DetailError
|
||||
|
||||
Left :: enum {
|
||||
left
|
||||
}
|
||||
@@ -30,6 +32,7 @@ Box :: alias BoxA | BoxB
|
||||
|
||||
maybe func(value i32) i32 ! BasicError {
|
||||
if (value == 0) return .bad
|
||||
if (value < 0) return .worse
|
||||
return value + 1
|
||||
}
|
||||
|
||||
@@ -44,6 +47,41 @@ with_detail func(value i32) i32 ! DetailError {
|
||||
return value
|
||||
}
|
||||
|
||||
via_widen func(value i32) i32 ! BasicOrDetail {
|
||||
unwrapped :: try maybe(value)
|
||||
return unwrapped + 2
|
||||
}
|
||||
|
||||
catch_basic func(value i32) i32 {
|
||||
return maybe(value) catch |e| {
|
||||
if (e == .bad) {
|
||||
yield 21
|
||||
} else {
|
||||
yield 22
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
catch_detail func(value i32) i32 {
|
||||
return with_detail(value) catch |e| {
|
||||
match e {
|
||||
.code |n|: yield n + 30
|
||||
.empty: yield 40
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
catch_widen func(value i32) i32 {
|
||||
return via_widen(value) catch |e| {
|
||||
match e {
|
||||
.bad: yield 50
|
||||
.worse: yield 51
|
||||
.code |n|: yield n
|
||||
.empty: yield 52
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
pick func(value Both) i32 {
|
||||
match value {
|
||||
.left: return 10
|
||||
@@ -67,8 +105,15 @@ main func() i32 {
|
||||
d :: via_try(0) catch 11
|
||||
e :: with_detail(0) catch 13
|
||||
f :: with_detail(2) catch 99
|
||||
g :: catch_basic(0)
|
||||
h :: catch_basic(-1)
|
||||
i :: catch_detail(0)
|
||||
j :: catch_detail(1)
|
||||
k :: via_widen(3) catch 99
|
||||
l :: catch_widen(0)
|
||||
m :: catch_widen(-1)
|
||||
|
||||
acc = acc + a + b + c + d + e + f
|
||||
acc = acc + a + b + c + d + e + f + g + h + i + j + k + l + m
|
||||
acc = acc + pick(.left)
|
||||
r Right = .right
|
||||
acc = acc + pick(r)
|
||||
@@ -77,6 +122,6 @@ main func() i32 {
|
||||
empty BoxB = .b
|
||||
acc = acc + payload(empty)
|
||||
|
||||
# 7 + 5 + 5 + 11 + 13 + 2 + 10 + 20 + 8 + 3 = 84
|
||||
return acc - 84
|
||||
# 7 + 5 + 5 + 11 + 13 + 2 + 21 + 22 + 35 + 40 + 6 + 50 + 51 + 10 + 20 + 8 + 3 = 309
|
||||
return acc - 309
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user