Skip to content

Commit 1d8395b

Browse files
committed
basic result type and functions
1 parent f7b71df commit 1d8395b

File tree

2 files changed

+60
-0
lines changed

2 files changed

+60
-0
lines changed

.gitignore

+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
.rebar3
2+
_build
3+
_checkouts

src/result.alp

+57
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
{- Basic result type.
2+
-}
3+
module result
4+
5+
import_type option.option
6+
7+
export_type result
8+
9+
type result 'a 'b = Ok 'a | Err 'b
10+
11+
let is_ok r =
12+
match r with
13+
Ok _ -> true
14+
| Err _ -> false
15+
16+
let is_ok r =
17+
match r with
18+
Ok _ -> false
19+
| Err _ -> true
20+
21+
test "Applying `is_ok` to Ok x should return true" =
22+
assert.equal (true) (is_ok (Ok 1))
23+
24+
let map f (Ok x) = Ok (f x)
25+
26+
let map _ (Err x) = Err x
27+
28+
test "mapping the identity function to Ok x should return Ok x" =
29+
let f x = x in
30+
assert.equal (Ok 1) (map f (Ok 1))
31+
32+
let of_option opt e =
33+
match opt with
34+
Some x -> Ok x
35+
| None -> Err e
36+
37+
let andThen callback (Ok value) = callback value
38+
let andThen _ (Err msg) = Err msg
39+
40+
test "andThen test with Ok x" =
41+
let f x = (Ok x) in
42+
assert.equal (Ok 1) (andThen f (Ok 1))
43+
44+
test "andThen with Err x and identity function is Err x" =
45+
let f x = (Ok x) in
46+
assert.equal (Err "msg") (andThen f (Err "msg"))
47+
48+
let withDefault _ (Ok x) = x
49+
let withDefault default (Err _) = default
50+
51+
test "withdefault test with Ok result" =
52+
let f x = (Ok x) in
53+
assert.equal (1) (withDefault 0 (f 1))
54+
55+
test "withdefault test with Err returning default" =
56+
let f _ = (Err "error") in
57+
assert.equal (0) (withDefault 0 (f 1))

0 commit comments

Comments
 (0)