aboutsummaryrefslogtreecommitdiff
path: root/gen
diff options
context:
space:
mode:
authorAlice Dee <alice.dee@guardian.co.uk>2019-09-17 12:37:06 +0100
committerLouis Pilfold <louis@lpil.uk>2019-09-17 12:59:32 +0100
commit198beba763f8bc0fd35b5b6ba36e42c5926ecc8c (patch)
tree5c2262db87b91b8a804f7c0fc97fb365022bcb9b /gen
parent9d282d68b5a2764ab73c2dead1df0b0ab8b8edaa (diff)
downloadgleam_stdlib-198beba763f8bc0fd35b5b6ba36e42c5926ecc8c.tar.gz
gleam_stdlib-198beba763f8bc0fd35b5b6ba36e42c5926ecc8c.zip
Create Pair datatype (remove Tuple)
Diffstat (limited to 'gen')
-rw-r--r--gen/src/gleam@any.erl6
-rw-r--r--gen/src/gleam@pair.erl16
-rw-r--r--gen/test/gleam@any_test.erl24
-rw-r--r--gen/test/gleam@pair_test.erl13
4 files changed, 43 insertions, 16 deletions
diff --git a/gen/src/gleam@any.erl b/gen/src/gleam@any.erl
index 5bd9157..4b2d17d 100644
--- a/gen/src/gleam@any.erl
+++ b/gen/src/gleam@any.erl
@@ -1,7 +1,7 @@
-module(gleam@any).
-compile(no_auto_import).
--export([from/1, unsafe_coerce/1, string/1, int/1, float/1, atom/1, bool/1, thunk/1, list/2, struct2/1, field/2]).
+-export([from/1, unsafe_coerce/1, string/1, int/1, float/1, atom/1, bool/1, thunk/1, list/2, pair/1, field/2]).
from(A) ->
gleam__stdlib:identity(A).
@@ -36,8 +36,8 @@ list(Any, Decode) ->
fun(Capture1) -> gleam@list:traverse(Capture1, Decode) end
).
-struct2(A) ->
- gleam__stdlib:decode_struct2(A).
+pair(A) ->
+ gleam__stdlib:decode_pair(A).
field(A, B) ->
gleam__stdlib:decode_field(A, B).
diff --git a/gen/src/gleam@pair.erl b/gen/src/gleam@pair.erl
new file mode 100644
index 0000000..887adb9
--- /dev/null
+++ b/gen/src/gleam@pair.erl
@@ -0,0 +1,16 @@
+-module(gleam@pair).
+-compile(no_auto_import).
+
+-export([first/1, second/1, swap/1]).
+
+first(Tup) ->
+ {A, _} = Tup,
+ A.
+
+second(Tup) ->
+ {_, A} = Tup,
+ A.
+
+swap(Tup) ->
+ {A, B} = Tup,
+ {B, A}.
diff --git a/gen/test/gleam@any_test.erl b/gen/test/gleam@any_test.erl
index e915fe7..59a5067 100644
--- a/gen/test/gleam@any_test.erl
+++ b/gen/test/gleam@any_test.erl
@@ -1,7 +1,7 @@
-module(gleam@any_test).
-compile(no_auto_import).
--export([string_test/0, int_test/0, float_test/0, thunk_test/0, bool_test/0, atom_test/0, list_test/0, struct2_test/0, field_test/0]).
+-export([string_test/0, int_test/0, float_test/0, thunk_test/0, bool_test/0, atom_test/0, list_test/0, pair_test/0, field_test/0]).
string_test() ->
gleam@expect:equal(gleam@any:string(gleam@any:from(<<"">>)), {ok, <<"">>}),
@@ -117,32 +117,30 @@ list_test() ->
)
).
-struct2_test() ->
+pair_test() ->
gleam@expect:equal(
- gleam@any:struct2(gleam@any:from({1, []})),
+ gleam@any:pair(gleam@any:from({1, []})),
{ok, {gleam@any:from(1), gleam@any:from([])}}
),
gleam@expect:equal(
- gleam@any:struct2(gleam@any:from({<<"ok">>, <<"ok">>})),
+ gleam@any:pair(gleam@any:from({<<"ok">>, <<"ok">>})),
{ok, {gleam@any:from(<<"ok">>), gleam@any:from(<<"ok">>)}}
),
- gleam@expect:is_error(gleam@any:struct2(gleam@any:from({1}))),
- gleam@expect:is_error(gleam@any:struct2(gleam@any:from({1, 2, 3}))),
gleam@expect:equal(
gleam@result:then(
gleam@result:then(
- gleam@any:struct2(gleam@any:from({1, 2.0})),
+ gleam@any:pair(gleam@any:from({1, 2.0})),
fun(X) ->
gleam@result:map(
- gleam@any:int(gleam@tuple:first(X)),
- fun(F) -> {F, gleam@tuple:second(X)} end
+ gleam@any:int(gleam@pair:first(X)),
+ fun(F) -> {F, gleam@pair:second(X)} end
)
end
),
fun(X) ->
gleam@result:map(
- gleam@any:float(gleam@tuple:second(X)),
- fun(F) -> {gleam@tuple:first(X), F} end
+ gleam@any:float(gleam@pair:second(X)),
+ fun(F) -> {gleam@pair:first(X), F} end
)
end
),
@@ -151,7 +149,7 @@ struct2_test() ->
field_test() ->
{ok, OkAtom} = gleam@atom:from_string(<<"ok">>),
- {ok, EarlierAtom} = gleam@atom:from_string(<<"earlier">>),
+ {ok, ErrorAtom} = gleam@atom:from_string(<<"error">>),
gleam@expect:equal(
gleam@any:field(
gleam@any:from(gleam@map:put(gleam@map:new(), OkAtom, 1)),
@@ -164,7 +162,7 @@ field_test() ->
gleam@any:from(
gleam@map:put(
gleam@map:put(gleam@map:new(), OkAtom, 3),
- EarlierAtom,
+ ErrorAtom,
1
)
),
diff --git a/gen/test/gleam@pair_test.erl b/gen/test/gleam@pair_test.erl
new file mode 100644
index 0000000..63a329a
--- /dev/null
+++ b/gen/test/gleam@pair_test.erl
@@ -0,0 +1,13 @@
+-module(gleam@pair_test).
+-compile(no_auto_import).
+
+-export([first_test/0, second_test/0, swap_test/0]).
+
+first_test() ->
+ gleam@expect:equal(gleam@pair:first({1, 2}), 1).
+
+second_test() ->
+ gleam@expect:equal(gleam@pair:second({1, 2}), 2).
+
+swap_test() ->
+ gleam@expect:equal(gleam@pair:swap({1, <<"2">>}), {<<"2">>, 1}).