Current section

Files

Jump to
parser_gleam src fp2 non_empty_list.gleam
Raw

src/fp2/non_empty_list.gleam

import gleam/list
pub type NonEmptyList(a) {
NonEmptyList(head: a, tail: List(a))
}
pub fn of(head: a) -> NonEmptyList(a) {
NonEmptyList(head, [])
}
pub fn append(init: NonEmptyList(a), end: a) {
NonEmptyList(init.head, list.append(init.tail, [end]))
}
pub fn append_list(init: List(a), end: a) {
case init {
[] -> NonEmptyList(end, [])
[x, ..xs] -> NonEmptyList(x, list.append(xs, [end]))
}
}
pub fn to_list(it: NonEmptyList(a)) -> List(a) {
list.append([it.head], it.tail)
}
pub fn prepend(tail: NonEmptyList(a), head: a) {
NonEmptyList(head, list.append([tail.head], tail.tail))
}
pub fn prepend_list(tail: List(a), head: a) {
NonEmptyList(head, tail)
}