project-m36-0.3: src/lib/ProjectM36/Atom.hs
module ProjectM36.Atom where
import ProjectM36.Base
import ProjectM36.Error
import qualified Data.Text as T
--import Data.Time.Calendar
--import Data.Time.Clock
--import Data.ByteString (ByteString)
import Data.Monoid
relationForAtom :: Atom -> Either RelationalError Relation
relationForAtom (RelationAtom rel) = Right rel
relationForAtom _ = Left $ AttributeIsNotRelationValuedError ""
atomToText :: Atom -> T.Text
atomToText (IntegerAtom i) = (T.pack . show) i
atomToText (IntAtom i) = (T.pack . show) i
atomToText (DoubleAtom i) = (T.pack . show) i
atomToText (TextAtom i) = (T.pack . show) i --does this break quoting in CSV export?
atomToText (DayAtom i) = (T.pack . show) i
atomToText (DateTimeAtom i) = (T.pack . show) i
atomToText (ByteStringAtom i) = (T.pack . show) i
atomToText (BoolAtom i) = (T.pack . show) i
atomToText (IntervalAtom b e bo be) = beginp <> begin <> "," <> end <> endp
where beginp = if bo then "(" else "["
begin = atomToText b
end = atomToText e
endp = if be then ")" else "]"
atomToText (RelationAtom i) = (T.pack . show) i
atomToText (ConstructedAtom dConsName _ atoms) = dConsName <> dConsArgs
where
parensAtomToText a@(ConstructedAtom _ _ []) = atomToText a
parensAtomToText a@ConstructedAtom{} = "(" <> atomToText a <> ")"
parensAtomToText a = atomToText a
dConsArgs = case atoms of
[] -> ""
args -> " " <> T.intercalate " " (map parensAtomToText args)