{-# LANGUAGE GADTs #-}
module Terminal(Terminal(..), terminalToString, terminalToLine, terminalToCol, token_na) where
import TokenInterface
import Data.Maybe
type Line = Int
type Column = Int
data Terminal token where
Terminal :: TokenInterface token => String -> Line -> Column -> Maybe token -> Terminal token
token_na :: [Char]
token_na = [Char]
"token n/a"
terminalToString :: TokenInterface token => Terminal token -> String
terminalToString :: Terminal token -> [Char]
terminalToString (Terminal [Char]
text Line
line Line
col (Just token
tok)) =
[Char]
text [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++ [Char]
" at (" [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++ Line -> [Char]
forall a. Show a => a -> [Char]
show Line
line [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++ [Char]
", " [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++ Line -> [Char]
forall a. Show a => a -> [Char]
show Line
col [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++ [Char]
"): " [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++ token -> [Char]
forall token. TokenInterface token => token -> [Char]
fromToken token
tok
terminalToString (Terminal [Char]
text Line
line Line
col Maybe token
Nothing) =
[Char]
text [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++ [Char]
" at (" [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++ Line -> [Char]
forall a. Show a => a -> [Char]
show Line
line [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++ [Char]
", " [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++ Line -> [Char]
forall a. Show a => a -> [Char]
show Line
col [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++ [Char]
"): " [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++ [Char]
token_na
terminalToLine :: TokenInterface token => Terminal token -> Int
terminalToLine :: Terminal token -> Line
terminalToLine (Terminal [Char]
text Line
line Line
col Maybe token
tok) = Line
line
terminalToCol :: TokenInterface token => Terminal token -> Int
terminalToCol :: Terminal token -> Line
terminalToCol (Terminal [Char]
text Line
line Line
col Maybe token
tok) = Line
col