1{-# LANGUAGE OverloadedStrings #-}
2module TutorialD.Interpreter.Base where
4import Text.Parsec.String
5import qualified Text.Parsec.Token as Token
6import Text.Parsec.Language
8import qualified Data.Text as T
9import qualified Data.List as L
10import qualified Data.Vector as V
11import qualified Data.Text.IO as TIO
14lexer :: Token.TokenParser ()
15lexer = Token.makeTokenParser tutD
16 where tutD = emptyDef {
17 Token.reservedOpNames = ["join", "where", "union", "group", "ungroup"],
18 Token.reservedNames = [],
19 Token.identStart = letter <|> char '_',
20 Token.opLetter = oneOf ":!#$%&*+./<=>?\\^|-~", -- remove "@" so it can be used as attribute marker without spaces
21 Token.identLetter = alphaNum <|> char '_' <|> char '#'} -- # needed for Date examples
23parens :: Parser a -> Parser a
24parens = Token.parens lexer
26reservedOp :: String -> Parser ()
27reservedOp = Token.reservedOp lexer
29reserved :: String -> Parser ()
30reserved = Token.reserved lexer
32braces :: Parser a -> Parser a
33braces = Token.braces lexer
35identifier :: Parser String
36identifier = Token.identifier lexer
39comma = Token.comma lexer
42semi = Token.semi lexer
44whiteSpace :: Parser ()
45whiteSpace = Token.whiteSpace lexer
47integer :: Parser (Integer)
48integer = Token.integer lexer
50atomTypeToTutDType :: AtomType -> Maybe T.Text
51atomTypeToTutDType atomType = case atomType of
52 StringAtomType -> Just "char"
53 IntAtomType -> Just "int"
54 RelationAtomType attrs -> Just $ "relation" `T.append` showRelationAttributes attrs
57showRelationAttributes :: Attributes -> T.Text
58showRelationAttributes attrs = "{" `T.append` T.concat (L.intersperse ", " $ map showAttribute attrsL) `T.append` "}"
60 showAttribute (Attribute name atomType) = name `T.append` " " `T.append` case atomTypeToTutDType atomType of
63 attrsL = V.toList attrs
65data TutorialDOperatorResult = QuitResult |
66 DisplayResult StringType |
67 DisplayIOResult (IO ()) |
68 DisplayErrorResult StringType |
71type TransactionGraphWasUpdated = Bool
73displayOpResult :: TutorialDOperatorResult -> IO ()
74displayOpResult QuitResult = return ()
75displayOpResult (DisplayResult out) = TIO.putStrLn out
76displayOpResult (DisplayIOResult ioout) = ioout
77displayOpResult (DisplayErrorResult err) = TIO.hPutStrLn stderr ("ERR: " `T.append` err)
78displayOpResult QuietSuccessResult = return ()
keysesc to close
- j k
- move down, up
- enter
- open
- esc
- back, or up a level
- 1 2 3 4
- readme, files, commits, refs
- /
- filter
- y
- copy the clone command
- c
- compare the chosen commit with another (or shift-click both)
- ?
- show or hide this list