-- | -- Module : ELynx.Data.Tree.Named -- Description : Trees with named nodes -- Copyright : (c) Dominik Schrempf 2020 -- License : GPL-3.0-or-later -- -- Maintainer : dominik.schrempf@gmail.com -- Stability : unstable -- Portability : portable -- -- Creation date: Thu Jan 24 20:09:20 2019. module ELynx.Data.Tree.Named ( Named (..), ) where import qualified Data.ByteString.Builder as BB import qualified Data.ByteString.Char8 as BS import qualified Data.ByteString.Lazy.Char8 as BL import Data.Double.Conversion.ByteString as BC -- | Data types with names. class Named a where -- Use lazy byte strings because Newick strings are built using chunks. getName :: a -> BL.ByteString instance Named () where getName = const BL.empty instance Named Int where getName = BB.toLazyByteString . BB.intDec instance Named Double where getName = BL.fromStrict . toShortest instance Named Char where getName = BB.toLazyByteString . BB.char8 instance Named BL.ByteString where getName = id instance Named BS.ByteString where getName = BL.fromStrict