~/bend-docscommunity

lib.bend checks

raw source on the hub · import 0x92b0674fe90445059e34a1165b692b0e/lib.bend as Lib

Tree — foundational binary tree for Bend. Publish entry for this package. Depends only on Base.

Encoding: Leaf{} (empty) | Node{left, value, right}. Values live at nodes. Quantity: Tree<a, A> is Kind(a), same convention as List/Maybe. Map uses parallel fork on subtrees (Array.map style) when both sides recurse.

1 import
import Base

Types

type Tree source · line 9 · raw

@-a:Quant -> @-A:Kind(a) -> Kind(a)

Definitions

def Tree.empty source · line 13 · raw

@-a:Quant -> @-A:Kind(a) -> Tree<a, A>

def Tree.leaf source · line 17 · raw

@-a:Quant -> @-A:Kind(a) -> Tree<a, A>

Alias for the empty leaf constructor (values live on Node).

def Tree.singleton source · line 20 · raw

@-a:Quant -> @-A:Kind(a) -> @x:A -> Tree<a, A>

def Tree.is_empty source · line 23 · raw

@-a:Quant -> @-A:Kind(a) -> @t:Tree<a, A> -> Bool

def Tree.size source · line 30 · raw

@-a:Quant -> @-A:Kind(a) -> @t:Tree<a, A> -> Nat

def Tree.to_list source · line 72 · raw

@-a:Quant -> @-A:Kind(a) -> @t:Tree<a, A> -> List<a, A>

In-order flattening.

Templates

template Tree.map source · line 39 · raw

@-A:Type -> @-B:Type -> @-f:(@_:A -> B) -> @t:Tree<&1, A> -> Tree<&1, B>

Template map, same shape as List.map (affine Tree<A> = Tree<&1, A>). Subtrees mapped in parallel via nl nr = ... ....

template Tree.fold source · line 48 · raw

@-a:Quant -> @-A:Kind(a) -> @-B:Type -> @-leaf:B -> @-node:(@_:B -> @_:A -> @_:B -> B) -> @t:Tree<a, A> -> B

Catamorphism: ~leaf/~node so both branches can reuse them (tree fan-out).

template Tree.reduce.node source · line 62 · raw

@-A:Type -> @-f:(@_:A -> @_:A -> A) -> @lv:A -> @x:A -> @rv:A -> A

Combiner for reduce: (left ⊕ value) ⊕ right.

template Tree.reduce source · line 66 · raw

@-a:Quant -> @-A:Kind(a) -> @-f:(@_:A -> @_:A -> A) -> @-z:A -> @t:Tree<a, A> -> A

Monoid-style reduce with zero (~z duplicated across branches).