]> git.rmz.io Git - my-scheme.git/blob - app/Main.hs
7c987cee50d96d97e445cc1b18756f845a47a24f
[my-scheme.git] / app / Main.hs
1 module Main where
2 import Text.ParserCombinators.Parsec hiding (spaces)
3 import System.Environment
4
5 data LispVal = Atom String
6 | List [LispVal]
7 | DottedList [LispVal] LispVal
8 | Number Integer
9 | String String
10 | Bool Bool
11
12 symbol :: Parser Char
13 symbol = oneOf "!#$%&|*+-/:<=>?@^_~"
14
15 spaces :: Parser ()
16 spaces = skipMany space
17
18 parseString :: Parser LispVal
19 parseString = do
20 char '"'
21 x <- many (noneOf "\"")
22 char '"'
23 return $ String x
24
25 parseAtom :: Parser LispVal
26 parseAtom = do
27 a <- letter <|> symbol
28 b <- many (letter <|> digit <|> symbol)
29 return $ Atom (a:b)
30
31 readExpr :: String -> String
32 readExpr input = case parse (spaces >> symbol) "lisp" input of
33 Left err -> "No match: " ++ show err
34 Right val -> "Found value"
35
36 main :: IO ()
37 main = do
38 args <- getLine
39 putStrLn (readExpr args)