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
newicksToText :: [NewickTree] -> Text
newicksToText = T.toStrict . B.toLazyText . toTextBuilder
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)