Packages

Data structures in pure Gleam! Including tree, heap, non empty list, map, set, and priority queue.

Current section

Files

Jump to
gleamy_structures src gleamy@non_empty_list.erl
Raw

src/gleamy@non_empty_list.erl

-module(gleamy@non_empty_list).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch]).
-export([fold/3, count/1, filter/2, to_list/1, from_list/1, reverse/1, map/2]).
-export_type([non_empty_list/1]).
-type non_empty_list(HHE) :: {'end', HHE} | {next, HHE, non_empty_list(HHE)}.
-file("/home/julian/projects/gleamy_structures/src/gleamy/non_empty_list.gleam", 16).
-spec fold(non_empty_list(HHF), HHH, fun((HHH, HHF) -> HHH)) -> HHH.
fold(List, Initial, Fun) ->
case List of
{'end', Item} ->
Fun(Initial, Item);
{next, X, Xs} ->
fold(Xs, Fun(Initial, X), Fun)
end.
-file("/home/julian/projects/gleamy_structures/src/gleamy/non_empty_list.gleam", 29).
-spec count(non_empty_list(any())) -> integer().
count(List) ->
fold(List, 0, fun(Acc, _) -> Acc + 1 end).
-file("/home/julian/projects/gleamy_structures/src/gleamy/non_empty_list.gleam", 46).
-spec filter(non_empty_list(HHO), fun((HHO) -> boolean())) -> list(HHO).
filter(List, Predicate) ->
_pipe = fold(List, [], fun(Acc, Item) -> case Predicate(Item) of
true ->
[Item | Acc];
false ->
Acc
end end),
lists:reverse(_pipe).
-file("/home/julian/projects/gleamy_structures/src/gleamy/non_empty_list.gleam", 57).
-spec to_list(non_empty_list(HHR)) -> list(HHR).
to_list(List) ->
_pipe = fold(List, [], fun(Acc, Item) -> [Item | Acc] end),
lists:reverse(_pipe).
-file("/home/julian/projects/gleamy_structures/src/gleamy/non_empty_list.gleam", 64).
-spec from_list(list(HHU)) -> {ok, non_empty_list(HHU)} | {error, nil}.
from_list(List) ->
case List of
[] ->
{error, nil};
[X | Xs] ->
{ok,
gleam@list:fold(
Xs,
{'end', X},
fun(Acc, Item) -> {next, Item, Acc} end
)}
end.
-file("/home/julian/projects/gleamy_structures/src/gleamy/non_empty_list.gleam", 72).
-spec reverse(non_empty_list(HHZ)) -> non_empty_list(HHZ).
reverse(List) ->
case List of
{'end', _} ->
List;
{next, X, Xs} ->
fold(Xs, {'end', X}, fun(Acc, X@1) -> {next, X@1, Acc} end)
end.
-file("/home/julian/projects/gleamy_structures/src/gleamy/non_empty_list.gleam", 35).
-spec map(non_empty_list(HHK), fun((HHK) -> HHM)) -> non_empty_list(HHM).
map(List, Transform) ->
case List of
{'end', X} ->
{'end', Transform(X)};
{next, X@1, Xs} ->
_pipe = fold(
Xs,
{'end', Transform(X@1)},
fun(Acc, Item) -> {next, Transform(Item), Acc} end
),
reverse(_pipe)
end.