data SExpr = A Atom
| Comb [SExpr]
deriving Show
+
+parseAtom :: Parser Atom
+parseAtom = spaces *> (N <$> posInt <|>
+ I <$> ident) <* spaces
+
+parseSExpr :: Parser SExpr
+parseSExpr = A <$> parseAtom <|>
+ Comb <$> parseComb
+ where
+ parseComb = spaces *> char '(' *> oneOrMore parseSExpr <* spaces <* char ')' <* spaces