lib.bend checks
raw source on the hub · import 0x8d2ea06277454348c1b3fdaf2e31ed48/lib.bend as Lib
NonEmpty (aka NEList) — foundational non-empty list for Bend. Publish entry for this package. Depends only on Base (does not reimplement List).
Encoding: head + List tail. Emptiness is unrepresentable by construction. Quantity: NonEmpty<a, A> is Kind(a), same convention as List/Maybe.
1 import
import Base
Types
type NonEmpty source · line 8 · raw
@-a:Quant -> @-A:Kind(a) -> Kind(a)
NE@-a:Quant -> @-A:Kind(a) -> @head:A -> @tail:List<a, A> -> NonEmpty<a, A>
Definitions
def NonEmpty.one source · line 11 · raw
@-a:Quant -> @-A:Kind(a) -> @x:A -> NonEmpty<a, A>
def NonEmpty.cons source · line 14 · raw
@-a:Quant -> @-A:Kind(a) -> @x:A -> @xs:NonEmpty<a, A> -> NonEmpty<a, A>
def NonEmpty.from_list source · line 19 · raw
@-a:Quant -> @-A:Kind(a) -> @xs:List<a, A> -> Maybe<a, NonEmpty<a, A>>
def NonEmpty.to_list source · line 26 · raw
@-a:Quant -> @-A:Kind(a) -> @xs:NonEmpty<a, A> -> List<a, A>
def NonEmpty.head source · line 31 · raw
@-a:Quant -> @-A:Kind(a) -> @xs:NonEmpty<a, A> -> A
def NonEmpty.tail source · line 36 · raw
@-a:Quant -> @-A:Kind(a) -> @xs:NonEmpty<a, A> -> List<a, A>
def NonEmpty.length source · line 41 · raw
@-a:Quant -> @-A:Kind(a) -> @xs:NonEmpty<a, A> -> Nat
def NonEmpty.append source · line 52 · raw
@-a:Quant -> @-A:Kind(a) -> @xs:NonEmpty<a, A> -> @ys:NonEmpty<a, A> -> NonEmpty<a, A>
def NonEmpty.snoc source · line 60 · raw
@-a:Quant -> @-A:Kind(a) -> @xs:NonEmpty<a, A> -> @y:A -> NonEmpty<a, A>
Templates
template NonEmpty.map source · line 47 · raw
@-A:Type -> @-B:Type -> @-f:(@_:A -> B) -> @xs:NonEmpty<&1, A> -> NonEmpty<&1, B>
Template map, same shape as List.map (affine NonEmpty<A> = NonEmpty<&1, A>).