testList = [ TestCase $ assertEqual "Lexer test 1"
                                    (lexer "())in,let_ _1Ma->==")
                                    [LPAREN,RPAREN,RPAREN,IN,COMMA ,IDENT "let_",IDENT "_1Ma",ARROW,EQUALS,EQUALS]
           , TestCase $ assertEqual "Lexer test 2"
                                    (lexer "let fun in")
                                    [LET,FUN,IN]
           , TestCase $ assertEqual "Lexer test 3"
                                    (parseExpr . lexer $ "a")
                                    (Just (Var "a"))
           , TestCase $ assertEqual "Parser test 1"
                                    (parseExpr . lexer $ "f(x, y)")
                                    (Just (Call (Var "f") [Var "x",Var "y"]))
           , TestCase $ assertEqual "Parser test 2"
                                    (parseExpr . lexer $ "f(x)(y)")
                                    (Just (Call (Call (Var "f") [Var "x"]) [Var "y"]))
           , TestCase $ assertEqual "Parser test 3"
                                    (parseExpr . lexer $ "let f = fun x y -> g(x, y) in f(a, b)")
                                    (Just (Let "f" (Fun ["x","y"] (Call (Var "g") [Var "x",Var "y"]))
                                                   (Call (Var "f") [Var "a",Var "b"])))
           , TestCase $ assertEqual "Parser test 4"
                                    (parseExpr . lexer $ "let x = a in let y = b in f(x, y)")
                                    (Just (Let "x" (Var "a") (Let "y" (Var "b") (Call (Var "f") [Var "x",Var "y"]))))
           ]
testList = [ TestCase $ assertEqual "Lexer test 1"
                                    (lexer "())in,let_ _1Ma->==")
                                    [LPAREN,RPAREN,RPAREN,IN,COMMA ,IDENT "let_",IDENT "_1Ma",ARROW,EQUALS,EQUALS]
           , TestCase $ assertEqual "Lexer test 2"
                                    (lexer "let fun in")
                                    [LET,FUN,IN]
           , TestCase $ assertEqual "Lexer test 3"
                                    (parseExpr . lexer $ "a")
                                    (Just (Var "a"))
           , TestCase $ assertEqual "Parser test 1"
                                    (parseExpr . lexer $ "f(x, y)")
                                    (Just (Call (Var "f") [Var "x",Var "y"]))
           , TestCase $ assertEqual "Parser test 2"
                                    (parseExpr . lexer $ "f(x)(y)")
                                    (Just (Call (Call (Var "f") [Var "x"]) [Var "y"]))
           , TestCase $ assertEqual "Parser test 3"
                                    (parseExpr . lexer $ "let f = fun x y -> g(x, y) in f(a, b)")
                                    (Just (Let "f" (Fun ["x","y"] (Call (Var "g") [Var "x",Var "y"]))
                                                   (Call (Var "f") [Var "a",Var "b"])))
           , TestCase $ assertEqual "Parser test 4"
                                    (parseExpr . lexer $ "let x = a in let y = b in f(x, y)")
                                    (Just (Let "x" (Var "a") (Let "y" (Var "b") (Call (Var "f") [Var "x",Var "y"]))))
           ]
testList = [ TestCase $ assertEqual "Lexer test 1"
                                    (lexer "())in,let_ _1Ma->==")
                                    [LPAREN,RPAREN,RPAREN,IN,COMMA ,IDENT "let_",IDENT "_1Ma",ARROW,EQUALS,EQUALS]
           , TestCase $ assertEqual "Lexer test 2"
                                    (lexer "let fun in")
                                    [LET,FUN,IN]
           , TestCase $ assertEqual "Lexer test 3"
                                    (parseExpr . lexer $ "a")
                                    (Just (Var "a"))
           , TestCase $ assertEqual "Parser test 1"
                                    (parseExpr . lexer $ "f(x, y)")
                                    (Just (Call (Var "f") [Var "x",Var "y"]))
           , TestCase $ assertEqual "Parser test 2"
                                    (parseExpr . lexer $ "f(x)(y)")
                                    (Just (Call (Call (Var "f") [Var "x"]) [Var "y"]))
           , TestCase $ assertEqual "Parser test 3"
                                    (parseExpr . lexer $ "let f = fun x y -> g(x, y) in f(a, b)")
                                    (Just (Let "f" (Fun ["x","y"] (Call (Var "g") [Var "x",Var "y"]))
                                                   (Call (Var "f") [Var "a",Var "b"])))
           , TestCase $ assertEqual "Parser test 4"
                                    (parseExpr . lexer $ "let x = a in let y = b in f(x, y)")
                                    (Just (Let "x" (Var "a") (Let "y" (Var "b") (Call (Var "f") [Var "x",Var "y"]))))
           ]