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