Написал урезанный парсер S-выражений, вот код:
data Val = Int Integer
| Float Double
| String String
| Symbol String
| List [Val] deriving (Show)
-- blah blah blah
tList = do char '('
list <- sepBy (tList <|> tAtom) (many $ char ' ')
char ')'
return $ List list
<?> "list"
Вот такие выражения он парсит нормально:
(+ 2 (- 4 2))
Но если расставить табы, то он не работает:
(define (fac n)
(if (= n 0)
1
(* n (fac (- n 1)))
)
)
unexpected ")".
expecting " ", list or atomic expression
Как это пофиксить?