MyNixOS website logo
Description

Functions and newtype wrappers for traversing Trees.

The tree-traversals package defines in-order, pre-order, post-order, level-order, and reversed level-order traversals for tree-like types:

inorder, preorder, postorder, levelorder, rlevelorder
  :: (TreeLike tree, Applicative f) => (a -> f b) -> tree a -> f (tree b)

The package also provides newtype wrappers for the various traversals so they may be used with traverse, i.e.

traverse f (InOrder tree) = inorder f tree
traverse f (PreOrder tree) = preorder f tree
traverse f (PostOrder tree) = postorder f tree
traverse f (LevelOrder tree) = levelorder f tree
traverse f (RLevelOrder tree) = rlevelorder f tree

To implement the various orders, the tree-traversals package provides the Control.Applicative.Phases.Phases applicative transformer for organizing effects into distinct phases.

Instances of Data.Traversable.TreeLike.TreeLike are provided for rose trees (Data.Tree.Tree), binary trees (Data.BinaryTree.BinaryTree), forests (Data.Traversable.TreeLike.Forest), and algebraic combinations of trees (Data.Functor.Compose.Compose outerTree innerTree, Data.Functor.Product fstTree sndTree, Data.Functor.Sum leftTree rightTree).

The tree-traversals package defines in-order, pre-order, post-order, level-order, and reversed level-order traversals for tree-like types:

inorder, preorder, postorder, levelorder, rlevelorder
  :: (TreeLike tree, Applicative f) => (a -> f b) -> tree a -> f (tree b) 

The package also provides newtype wrappers for the various traversals so they may be used with traverse, i.e.

traverse f (InOrder tree) = inorder f tree
traverse f (PreOrder tree) = preorder f tree
traverse f (PostOrder tree) = postorder f tree
traverse f (LevelOrder tree) = levelorder f tree
traverse f (RLevelOrder tree) = rlevelorder f tree

To implement the various orders, the tree-traversals package provides the Phases applicative transformer for organizing effects into distinct phases.

Instances of TreeLike are provided for rose trees (Tree from Data.Tree), binary trees (BinaryTree from this package's Data.BinaryTree), forests (Forest from this package's Data.Traversable.TreeLike), and algebraic combinations of trees (Compose outerTree innerTree, Product fstTree sndTree, Sum leftTree rightTree).

Metadata

Version

0.1.2.0

License

Platforms (75)

    Darwin
    FreeBSD
    Genode
    GHCJS
    Linux
    MMIXware
    NetBSD
    none
    OpenBSD
    Redox
    Solaris
    WASI
    Windows
Show all
  • aarch64-darwin
  • aarch64-genode
  • aarch64-linux
  • aarch64-netbsd
  • aarch64-none
  • aarch64_be-none
  • arm-none
  • armv5tel-linux
  • armv6l-linux
  • armv6l-netbsd
  • armv6l-none
  • armv7a-darwin
  • armv7a-linux
  • armv7a-netbsd
  • armv7l-linux
  • armv7l-netbsd
  • avr-none
  • i686-cygwin
  • i686-darwin
  • i686-freebsd
  • i686-genode
  • i686-linux
  • i686-netbsd
  • i686-none
  • i686-openbsd
  • i686-windows
  • javascript-ghcjs
  • loongarch64-linux
  • m68k-linux
  • m68k-netbsd
  • m68k-none
  • microblaze-linux
  • microblaze-none
  • microblazeel-linux
  • microblazeel-none
  • mips-linux
  • mips-none
  • mips64-linux
  • mips64-none
  • mips64el-linux
  • mipsel-linux
  • mipsel-netbsd
  • mmix-mmixware
  • msp430-none
  • or1k-none
  • powerpc-netbsd
  • powerpc-none
  • powerpc64-linux
  • powerpc64le-linux
  • powerpcle-none
  • riscv32-linux
  • riscv32-netbsd
  • riscv32-none
  • riscv64-linux
  • riscv64-netbsd
  • riscv64-none
  • rx-none
  • s390-linux
  • s390-none
  • s390x-linux
  • s390x-none
  • vc4-none
  • wasm32-wasi
  • wasm64-wasi
  • x86_64-cygwin
  • x86_64-darwin
  • x86_64-freebsd
  • x86_64-genode
  • x86_64-linux
  • x86_64-netbsd
  • x86_64-none
  • x86_64-openbsd
  • x86_64-redox
  • x86_64-solaris
  • x86_64-windows