Packages

A porting of some parts of fp-ts to Gleam

Current section

Files

Jump to
fp_gl src fp_gl@non_empty_list.erl
Raw

src/fp_gl@non_empty_list.erl

-module(fp_gl@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(ELX) :: {non_empty_list, ELX, list(ELX)}.
-spec 'of'(EMA) -> non_empty_list(EMA).
'of'(Head) ->
{non_empty_list, Head, []}.
-spec append(non_empty_list(EMC), EMC) -> non_empty_list(EMC).
append(Init, End) ->
{non_empty_list,
erlang:element(2, Init),
gleam@list:append(erlang:element(3, Init), [End])}.
-spec append_list(list(EMF), EMF) -> non_empty_list(EMF).
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(EMI)) -> list(EMI).
to_list(It) ->
gleam@list:append([erlang:element(2, It)], erlang:element(3, It)).
-spec prepend(non_empty_list(EML), EML) -> non_empty_list(EML).
prepend(Tail, Head) ->
{non_empty_list,
Head,
gleam@list:append([erlang:element(2, Tail)], erlang:element(3, Tail))}.
-spec prepend_list(list(EMO), EMO) -> non_empty_list(EMO).
prepend_list(Tail, Head) ->
{non_empty_list, Head, Tail}.