-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.