diff options
Diffstat (limited to 'gen/src')
-rw-r--r-- | gen/src/any.erl | 46 | ||||
-rw-r--r-- | gen/src/atom.erl | 13 | ||||
-rw-r--r-- | gen/src/bool.erl | 40 | ||||
-rw-r--r-- | gen/src/expect.erl | 25 | ||||
-rw-r--r-- | gen/src/http.erl | 6 | ||||
-rw-r--r-- | gen/src/iodata.erl | 61 | ||||
-rw-r--r-- | gen/src/list.erl | 173 | ||||
-rw-r--r-- | gen/src/map_dict.erl | 49 | ||||
-rw-r--r-- | gen/src/order.erl | 73 | ||||
-rw-r--r-- | gen/src/result.erl | 67 | ||||
-rw-r--r-- | gen/src/set.erl | 6 | ||||
-rw-r--r-- | gen/src/str.erl | 37 | ||||
-rw-r--r-- | gen/src/tuple.erl | 28 |
13 files changed, 624 insertions, 0 deletions
diff --git a/gen/src/any.erl b/gen/src/any.erl new file mode 100644 index 0000000..62f1a77 --- /dev/null +++ b/gen/src/any.erl @@ -0,0 +1,46 @@ +-module(any). +-compile(no_auto_import). + +-export([from/1, unsafeCoerce/1, string/1, int/1, float/1, atom/1, bool/1, thunk/1, list/2, tuple/1, field/2]). + +list_module() -> + list. + +from(A) -> + gleam__stdlib:identity(A). + +unsafeCoerce(A) -> + gleam__stdlib:identity(A). + +string(A) -> + gleam__stdlib:decode_string(A). + +int(A) -> + gleam__stdlib:decode_int(A). + +float(A) -> + gleam__stdlib:decode_float(A). + +atom(A) -> + gleam__stdlib:decode_atom(A). + +bool(A) -> + gleam__stdlib:decode_bool(A). + +thunk(A) -> + gleam__stdlib:decode_thunk(A). + +list_any(A) -> + gleam__stdlib:decode_list(A). + +list(Any, Decode) -> + result:then(list_any(Any), + fun(Capture1) -> + (list_module()):traverse(Capture1, Decode) + end). + +tuple(A) -> + gleam__stdlib:decode_tuple(A). + +field(A, B) -> + gleam__stdlib:decode_field(A, B). diff --git a/gen/src/atom.erl b/gen/src/atom.erl new file mode 100644 index 0000000..450245a --- /dev/null +++ b/gen/src/atom.erl @@ -0,0 +1,13 @@ +-module(atom). +-compile(no_auto_import). + +-export([from_string/1, create_from_string/1, to_string/1]). + +from_string(A) -> + gleam__stdlib:atom_from_string(A). + +create_from_string(A) -> + gleam__stdlib:atom_create_from_string(A). + +to_string(A) -> + gleam__stdlib:atom_to_string(A). diff --git a/gen/src/bool.erl b/gen/src/bool.erl new file mode 100644 index 0000000..e4e1108 --- /dev/null +++ b/gen/src/bool.erl @@ -0,0 +1,40 @@ +-module(bool). +-compile(no_auto_import). + +-export([negate/1, max/2, min/2, to_int/1]). + +negate(Bool) -> + case Bool of + true -> + false; + + false -> + true + end. + +max(A, B) -> + case A of + true -> + true; + + false -> + B + end. + +min(A, B) -> + case A of + false -> + false; + + true -> + B + end. + +to_int(Bool) -> + case Bool of + false -> + 0; + + true -> + 1 + end. diff --git a/gen/src/expect.erl b/gen/src/expect.erl new file mode 100644 index 0000000..602f3fb --- /dev/null +++ b/gen/src/expect.erl @@ -0,0 +1,25 @@ +-module(expect). +-compile(no_auto_import). + +-export([equal/2, not_equal/2, true/1, false/1, is_ok/1, is_error/1, fail/0]). + +equal(A, B) -> + gleam__stdlib:expect_equal(A, B). + +not_equal(A, B) -> + gleam__stdlib:expect_not_equal(A, B). + +true(A) -> + gleam__stdlib:expect_true(A). + +false(A) -> + gleam__stdlib:expect_false(A). + +is_ok(A) -> + gleam__stdlib:expect_is_ok(A). + +is_error(A) -> + gleam__stdlib:expect_is_error(A). + +fail() -> + true(false). diff --git a/gen/src/http.erl b/gen/src/http.erl new file mode 100644 index 0000000..6d2e42a --- /dev/null +++ b/gen/src/http.erl @@ -0,0 +1,6 @@ +-module(http). +-compile(no_auto_import). + +-export([]). + + diff --git a/gen/src/iodata.erl b/gen/src/iodata.erl new file mode 100644 index 0000000..540af1b --- /dev/null +++ b/gen/src/iodata.erl @@ -0,0 +1,61 @@ +-module(iodata). +-compile(no_auto_import). + +-export([prepend/2, append/2, prepend_iodata/2, append_iodata/2, from_strings/1, concat/1, new/1, to_string/1, byte_size/1, from_float/1, lowercase/1, uppercase/1, reverse/1, split/2, replace/3, is_equal/2, is_empty/1]). + +prepend(A, B) -> + gleam__stdlib:iodata_prepend(A, B). + +append(A, B) -> + gleam__stdlib:iodata_append(A, B). + +prepend_iodata(A, B) -> + gleam__stdlib:iodata_prepend(A, B). + +append_iodata(A, B) -> + gleam__stdlib:iodata_append(A, B). + +from_strings(A) -> + gleam__stdlib:identity(A). + +concat(A) -> + gleam__stdlib:identity(A). + +new(A) -> + gleam__stdlib:identity(A). + +to_string(A) -> + erlang:iolist_to_binary(A). + +byte_size(A) -> + erlang:iolist_size(A). + +from_float(A) -> + io_lib_format:fwrite_g(A). + +lowercase(A) -> + string:lowercase(A). + +uppercase(A) -> + string:uppercase(A). + +reverse(A) -> + string:reverse(A). + +erl_split(A, B, C) -> + string:split(A, B, C). + +split(Iodata, On) -> + erl_split(Iodata, On, all). + +erl_replace(A, B, C, D) -> + string:replace(A, B, C, D). + +replace(Iodata, Pattern, Replacement) -> + erl_replace(Iodata, Pattern, Replacement, all). + +is_equal(A, B) -> + string:equal(A, B). + +is_empty(A) -> + string:is_empty(A). diff --git a/gen/src/list.erl b/gen/src/list.erl new file mode 100644 index 0000000..b606f22 --- /dev/null +++ b/gen/src/list.erl @@ -0,0 +1,173 @@ +-module(list). +-compile(no_auto_import). + +-export([length/1, reverse/1, is_empty/1, contains/2, head/1, tail/1, filter/2, map/2, traverse/2, drop/2, take/2, new/0, append/2, flatten/1, fold/3, fold_right/3, find/2]). + +length(A) -> + erlang:length(A). + +reverse(A) -> + lists:reverse(A). + +is_empty(List) -> + List =:= []. + +contains(List, Elem) -> + case List of + [] -> + false; + + [Head | Rest] -> + Head =:= Elem orelse contains(Rest, Elem) + end. + +head(List) -> + case List of + [] -> + {error, empty}; + + [X | _] -> + {ok, X} + end. + +tail(List) -> + case List of + [] -> + {error, empty}; + + [_ | Xs] -> + {ok, Xs} + end. + +do_filter(List, Fun, Acc) -> + case List of + [] -> + reverse(Acc); + + [X | Xs] -> + NewAcc = case Fun(X) of + true -> + [X | Acc]; + + false -> + Acc + end, + do_filter(Xs, Fun, NewAcc) + end. + +filter(List, Fun) -> + do_filter(List, Fun, []). + +do_map(List, Fun, Acc) -> + case List of + [] -> + reverse(Acc); + + [X | Xs] -> + do_map(Xs, Fun, [Fun(X) | Acc]) + end. + +map(List, Fun) -> + do_map(List, Fun, []). + +do_traverse(List, Fun, Acc) -> + case List of + [] -> + {ok, reverse(Acc)}; + + [X | Xs] -> + case Fun(X) of + {ok, Y} -> + do_traverse(Xs, Fun, [Y | Acc]); + + {error, Error} -> + {error, Error} + end + end. + +traverse(List, Fun) -> + do_traverse(List, Fun, []). + +drop(List, N) -> + case N =< 0 of + true -> + List; + + false -> + case List of + [] -> + []; + + [_ | Xs] -> + drop(Xs, N - 1) + end + end. + +do_take(List, N, Acc) -> + case N =< 0 of + true -> + reverse(Acc); + + false -> + case List of + [] -> + reverse(Acc); + + [X | Xs] -> + do_take(Xs, N - 1, [X | Acc]) + end + end. + +take(List, N) -> + do_take(List, N, []). + +new() -> + []. + +append(A, B) -> + lists:append(A, B). + +do_flatten(Lists, Acc) -> + case Lists of + [] -> + Acc; + + [L | Rest] -> + do_flatten(Rest, append(Acc, L)) + end. + +flatten(Lists) -> + do_flatten(Lists, []). + +fold(List, Acc, Fun) -> + case List of + [] -> + Acc; + + [X | Rest] -> + fold(Rest, Fun(X, Acc), Fun) + end. + +fold_right(List, Acc, Fun) -> + case List of + [] -> + Acc; + + [X | Rest] -> + Fun(X, fold_right(Rest, Acc, Fun)) + end. + +find(Haystack, F) -> + case Haystack of + [] -> + {error, not_found}; + + [X | Rest] -> + case F(X) of + {ok, X1} -> + {ok, X1}; + + _ -> + find(Rest, F) + end + end. diff --git a/gen/src/map_dict.erl b/gen/src/map_dict.erl new file mode 100644 index 0000000..56fb686 --- /dev/null +++ b/gen/src/map_dict.erl @@ -0,0 +1,49 @@ +-module(map_dict). +-compile(no_auto_import). + +-export([size/1, to_list/1, from_list/1, has_key/2, new/0, fetch/2, put/3, map_values/2, keys/1, values/1, filter/2]). + +size(A) -> + maps:size(A). + +to_list(A) -> + maps:to_list(A). + +from_list(A) -> + maps:from_list(A). + +is_key(A, B) -> + maps:is_key(A, B). + +has_key(Map, Key) -> + is_key(Key, Map). + +new() -> + maps:new(). + +fetch(A, B) -> + gleam__stdlib:map_fetch(A, B). + +erl_put(A, B, C) -> + maps:put(A, B, C). + +put(Map, Key, Value) -> + erl_put(Key, Value, Map). + +erl_map_values(A, B) -> + maps:map(A, B). + +map_values(Map, Fun) -> + erl_map_values(Fun, Map). + +keys(A) -> + maps:keys(A). + +values(A) -> + maps:values(A). + +erl_filter(A, B) -> + maps:filter(A, B). + +filter(Map, Fun) -> + erl_filter(Fun, Map). diff --git a/gen/src/order.erl b/gen/src/order.erl new file mode 100644 index 0000000..7921740 --- /dev/null +++ b/gen/src/order.erl @@ -0,0 +1,73 @@ +-module(order). +-compile(no_auto_import). + +-export([reverse/1, to_int/1, compare/2, max/2, min/2]). + +reverse(Order) -> + case Order of + lt -> + gt; + + eq -> + eq; + + gt -> + lt + end. + +to_int(Order) -> + case Order of + lt -> + -1; + + eq -> + 0; + + gt -> + 1 + end. + +compare(A, B) -> + case {A, B} of + {lt, lt} -> + eq; + + {lt, _} -> + lt; + + {eq, eq} -> + eq; + + {gt, gt} -> + eq; + + {eq, gt} -> + lt; + + _ -> + gt + end. + +max(A, B) -> + case {A, B} of + {gt, _} -> + gt; + + {eq, lt} -> + eq; + + _ -> + B + end. + +min(A, B) -> + case {A, B} of + {lt, _} -> + lt; + + {eq, gt} -> + eq; + + _ -> + B + end. diff --git a/gen/src/result.erl b/gen/src/result.erl new file mode 100644 index 0000000..cd66908 --- /dev/null +++ b/gen/src/result.erl @@ -0,0 +1,67 @@ +-module(result). +-compile(no_auto_import). + +-export([is_ok/1, is_error/1, map/2, map_error/2, flatten/1, then/2, unwrap/2]). + +is_ok(Result) -> + case Result of + {error, _} -> + false; + + {ok, _} -> + true + end. + +is_error(Result) -> + case Result of + {ok, _} -> + false; + + {error, _} -> + true + end. + +map(Result, Fun) -> + case Result of + {ok, X} -> + {ok, Fun(X)}; + + {error, E} -> + {error, E} + end. + +map_error(Result, Fun) -> + case Result of + {ok, _} -> + Result; + + {error, Error} -> + {error, Fun(Error)} + end. + +flatten(Result) -> + case Result of + {ok, X} -> + X; + + {error, Error} -> + {error, Error} + end. + +then(Result, Fun) -> + case Result of + {ok, X} -> + Fun(X); + + {error, E} -> + {error, E} + end. + +unwrap(Result, Default) -> + case Result of + {ok, V} -> + V; + + {error, _} -> + Default + end. diff --git a/gen/src/set.erl b/gen/src/set.erl new file mode 100644 index 0000000..ca52d4b --- /dev/null +++ b/gen/src/set.erl @@ -0,0 +1,6 @@ +-module(set). +-compile(no_auto_import). + +-export([]). + + diff --git a/gen/src/str.erl b/gen/src/str.erl new file mode 100644 index 0000000..b492c86 --- /dev/null +++ b/gen/src/str.erl @@ -0,0 +1,37 @@ +-module(str). +-compile(no_auto_import). + +-export([length/1, lowercase/1, uppercase/1, reverse/1, split/2, replace/3, from_int/1, parse_int/1, parse_float/1, base_from_int/2, from_float/1]). + +length(A) -> + string:length(A). + +lowercase(A) -> + string:lowercase(A). + +uppercase(A) -> + string:uppercase(A). + +reverse(String) -> + iodata:to_string(iodata:reverse(iodata:new(String))). + +split(String, On) -> + list:map(iodata:split(iodata:new(String), On), fun iodata:to_string/1). + +replace(String, Pattern, With) -> + iodata:to_string(iodata:replace(iodata:new(String), Pattern, With)). + +from_int(A) -> + erlang:integer_to_binary(A). + +parse_int(A) -> + gleam__stdlib:parse_int(A). + +parse_float(A) -> + gleam__stdlib:parse_float(A). + +base_from_int(A, B) -> + erlang:integer_to_binary(A, B). + +from_float(F) -> + iodata:to_string(iodata:from_float(F)). diff --git a/gen/src/tuple.erl b/gen/src/tuple.erl new file mode 100644 index 0000000..fe3ce03 --- /dev/null +++ b/gen/src/tuple.erl @@ -0,0 +1,28 @@ +-module(tuple). +-compile(no_auto_import). + +-export([new/2, first/1, second/1, swap/1, fetch/2]). + +new(A, B) -> + {A, B}. + +first(Tup) -> + {A, _} = Tup, + A. + +second(Tup) -> + {_, A} = Tup, + A. + +swap(Tup) -> + {A, B} = Tup, + {B, A}. + +fetch(Haystack, Needle) -> + list:find(Haystack, fun(Tuple) -> case first(Tuple) =:= Needle of + true -> + {ok, second(Tuple)}; + + false -> + {error, []} + end end). |