Skip to content

allo-media/canopy

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

13 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Canopy

A Generic Tree API, based on the Rose Tree algebraic data type, augmented with helpers for building, querying and manipulating nodes.

Building a tree is basically done with using node and leaf:

tree : Node String
tree =
    node "root"
        [ node "foo"
            [ leaf "bar" ]
        , node "baz"
            [ leaf "qux" ]
        ]

The API focuses on node values for common operations:

tree
    |> remove "baz"
    |> append "foo" "bingo"
    == node "root"
        [ node "foo"
            [ leaf "bar"
            , leaf "bingo"
            ]
        ]

It exposes powerful helpers for working with tree data structures:

node 1
    [ node 2
        [ leaf 3, leaf 4 ]
    , node 5
        [ leaf 6 ]
    ]
    |> flatMap (value >> (*) 2)
    |> List.sum
    == 42

License

MIT.