BiobaseNewick-0.0.0.1: Biobase/Newick/Export.hs
module Biobase.Newick.Export where
import Data.List (intersperse)
import Data.Monoid
import Data.Text.Lazy.Builder (Builder)
import Data.Text (Text)
import Data.Tree
import qualified Data.Text.Lazy as T (toStrict)
import qualified Data.Text.Lazy.Builder as B
import qualified Data.Text.Lazy.Builder.RealFloat as B
import Biobase.Newick.Types
-- | Render a list of Newick trees to a newick string.
newicksToText :: [NewickTree] -> Text
newicksToText = T.toStrict . B.toLazyText . toTextBuilder
-- | Via builder
toTextBuilder :: [NewickTree] -> Builder
toTextBuilder = mconcat . map ((<> ";\n") . go . getNewickTree)
where go (Node lbl []) = label lbl
go (Node lbl cs) = "(" <> mconcat (intersperse "," $ map go cs) <> ")" <> label lbl
label (Info lbl len) = B.fromText lbl <> (if len == 0 then mempty else ":" <> B.realFloat len)