{-# LANGUAGE OverloadedStrings #-} module Data.SMILES.Writer (writeSmiles) where import Data.Text (Text, pack) import qualified Data.Text as T (concat) import Data.SMILES (ChainToken (..), SMILES (..)) import Data.SMILES.Atom.Writer (writeAtom) import Data.SMILES.Bond.Writer (writeBond) writeToken :: ChainToken -> Text writeToken (Atom a) = writeAtom a writeToken (Bond b) = writeBond b writeToken (RingClosure Nothing r) | r < 10 = pack $ show r | otherwise = pack $ "%" ++ show r writeToken (RingClosure (Just b) r) | r < 10 = T.concat [writeBond b, pack $ show r] | otherwise = T.concat [pack "%", writeBond b, pack $ show r] -- writeToken (RingClosure r) | r < 10 = pack $ show r -- | otherwise = pack $ "%" ++ show r writeToken (Branch b) = T.concat ["(", writeSmiles b, ")"] writeSmiles :: SMILES -> Text writeSmiles (SMILES l) = T.concat $ fmap writeToken l