Current section
Files
Jump to
Current section
Files
src/fp2@non_empty_list.erl
-module(fp2@non_empty_list).
-compile(no_auto_import).
-export(['of'/1, append/2, append_list/2, to_list/1, prepend/2, prepend_list/2]).
-export_type([non_empty_list/1]).
-type non_empty_list(EJJ) :: {non_empty_list, EJJ, list(EJJ)}.
-spec 'of'(EJM) -> non_empty_list(EJM).
'of'(Head) ->
{non_empty_list, Head, []}.
-spec append(non_empty_list(EJO), EJO) -> non_empty_list(EJO).
append(Init, End) ->
{non_empty_list,
erlang:element(2, Init),
gleam@list:append(erlang:element(3, Init), [End])}.
-spec append_list(list(EJR), EJR) -> non_empty_list(EJR).
append_list(Init, End) ->
case Init of
[] ->
{non_empty_list, End, []};
[X | Xs] ->
{non_empty_list, X, gleam@list:append(Xs, [End])}
end.
-spec to_list(non_empty_list(EJU)) -> list(EJU).
to_list(It) ->
gleam@list:append([erlang:element(2, It)], erlang:element(3, It)).
-spec prepend(non_empty_list(EJX), EJX) -> non_empty_list(EJX).
prepend(Tail, Head) ->
{non_empty_list,
Head,
gleam@list:append([erlang:element(2, Tail)], erlang:element(3, Tail))}.
-spec prepend_list(list(EKA), EKA) -> non_empty_list(EKA).
prepend_list(Tail, Head) ->
{non_empty_list, Head, Tail}.