module CCO.SourcePos (
Source (File, Stdin)
, Pos (Pos, EOF)
, SourcePos (SourcePos)
) where
import CCO.Tree.ATerm (ATerm (App))
import CCO.Tree.Base (Tree (fromTree, toTree))
import CCO.Tree.Instances ()
import CCO.Tree.Parser (parseTree, app, arg)
import Control.Applicative (Applicative (pure, (<*>)), (<$>))
data Source = File FilePath
| Stdin
deriving (Eq, Show, Read)
instance Tree Source where
fromTree (File filePath) = App "File" [fromTree filePath]
fromTree Stdin = App "Stdin" []
toTree = parseTree [app "File" (File <$> arg), app "Stdin" (pure Stdin)]
data Pos = Pos !Int !Int
| EOF
deriving (Eq, Show, Read)
instance Tree Pos where
fromTree (Pos line column) = App "Pos" [fromTree line, fromTree column]
fromTree EOF = App "EOF" []
toTree = parseTree [app "Pos" (Pos <$> arg <*> arg), app "EOF" (pure EOF)]
data SourcePos = SourcePos Source Pos
deriving (Eq, Show, Read)
instance Tree SourcePos where
fromTree (SourcePos src pos) = App "SourcePos" [fromTree src, fromTree pos]
toTree = parseTree [app "SourcePos" (SourcePos <$> arg <*> arg)]