elynx-tree-0.7.0.1: bench/Tree.hs
-- |
-- Module : Tree
-- Description : Benchmark some tree algorithms
-- Copyright : 2021 Dominik Schrempf
-- License : GPL-3.0-or-later
--
-- Maintainer : dominik.schrempf@gmail.com
-- Stability : experimental
-- Portability : portable
--
-- Creation date: Fri Jul 2 13:10:48 2021.
module Tree
( toLengthTreeTraversable,
toLengthTreeBitraversable,
)
where
import Data.Bifunctor
import Data.Bitraversable
import ELynx.Tree.Length
import ELynx.Tree.Phylogeny
import ELynx.Tree.Rooted
-- Compare speed of bitraversal and special traversal instances.
toLengthTreeTraversable :: Tree Phylo a -> Tree Length a
toLengthTreeTraversable = either error id . toLengthTree
fromMaybeWithError :: String -> Maybe a -> Either String a
fromMaybeWithError s = maybe (Left s) Right
toLengthTreeBitraversable :: HasMaybeLength e => Tree e a -> Either String (Tree Length a)
toLengthTreeBitraversable t =
fromMaybeWithError "toLengthTree: Length unavailable for some branches." $ bisequenceA t'
where
t' = modifyStem cleanLength $ bimap getMaybeLength pure t
cleanLength Nothing = pure 0
cleanLength x = x