+
+evalList :: TREE -> Maybe [Int]
+evalList (LIT "[]") = Just []
+evalList (SEQ [LIT "[", INT i, LIT ":", r, LIT "]"]) = evalList r >>= \r->pure [i:r]
+evalList (SEQ [IDN _, LIT "=", l]) = evalList l
+evalList _ = Nothing
+
+evalArith :: TREE -> Maybe Int
+evalArith (INT i) = Just i
+evalArith (SEQ [a, LIT op, b]) = toOp op <*> evalArith a <*> evalArith b
+where
+ toOp :: String -> Maybe (Int Int -> Int)
+ toOp "+" = Just (+)
+ toOp "*" = Just (*)
+ toOp _ = Nothing
+evalArith _ = Nothing