Skip to content
Snippets Groups Projects
Commit cd38cc6f authored by ik1g19's avatar ik1g19
Browse files

added many more tests

parent 10551cb5
Branches
No related tags found
No related merge requests found
...@@ -17,62 +17,115 @@ main = do challenge1Test ...@@ -17,62 +17,115 @@ main = do challenge1Test
-----------------------------Challenge 1 Testing-------------------------------- -----------------------------Challenge 1 Testing--------------------------------
assert1 :: WordSearchGrid -> [ (String,Maybe Placement) ] -> [ (String,Maybe Placement) ] -> IO ()
assert1 grid result correct = do putStrLn "Testing Grid:\n"
printGrid grid
putStrLn "\nExpected Result:"
pPrintList 3 correct
putStrLn ""
if result == correct then
do putStrLn "Passed! Result:"
pPrintList 3 result
else
do putStrLn "Failed! Result:"
pPrintList 3 result
challenge1Test :: IO () challenge1Test :: IO ()
challenge1Test = do putStrLn "=========================================" challenge1Test = do putStrLn "========================================="
putStrLn "Challenge 1 Start Test" putStrLn "Challenge 1 Start Test"
putStrLn "=========================================" putStrLn "=========================================\n"
assert1 exGrid1'1 (solveWordSearch exWords1'1 exGrid1'1) exAns1'1 assert1 (exGrid1'1,exWords1'1) (solveWordSearch exWords1'1 exGrid1'1) exAns1'1
putStrLn "\n- - - - - - - - - - - - - - - - - -\n" putStrLn "\n- - - - - - - - - - - - - - - - - -\n"
assert1 exGrid1'2 (solveWordSearch exWords1'2 exGrid1'2) exAns1'2 assert1 (exGrid1'2,exWords1'2) (solveWordSearch exWords1'2 exGrid1'2) exAns1'2
putStrLn "=========================================" putStrLn "\n- - - - - - - - - - - - - - - - - -\n"
assert1 (exGrid1'3,exWords1'3) (solveWordSearch exWords1'3 exGrid1'3) exAns1'3
putStrLn "\n========================================="
putStrLn "Challenge 1 End Test" putStrLn "Challenge 1 End Test"
putStrLn "=========================================\n" putStrLn "=========================================\n"
-----------------------------Challenge 2 Testing-------------------------------- assert1 :: (WordSearchGrid,[String]) -> [ (String,Maybe Placement) ] -> [ (String,Maybe Placement) ] -> IO ()
assert1 (grid,words) result correct = do putStrLn "Testing Grid:\n"
printGrid grid
putStrLn "\nWords Hidden are:"
pPrintList 5 words
putStrLn "\nExpected Result:"
pPrintList 3 correct
lineBreak
if result == correct then
putStrLn "Passed! Result:"
else
putStrLn "Failed! Result:"
pPrintList 3 result
assert2 :: WordSearchGrid -> [ (String,Maybe Placement) ] -> IO () -----------------------------Challenge 2 Testing--------------------------------
assert2 grid answers = do putStrLn "Checking Grid Contains all Given Words:\n"
printGrid grid
putStrLn "\nWords in Grid:"
pPrintList 3 answers
if foldl1 (||) $ map ((Nothing/=) . snd) answers then
putStrLn "Passed Test! All words are present!"
else
do putStrLn "Failed Test! Not all words are present"
putStrLn "List of found words:"
pPrintList 3 answers
createAndSolve :: [ String ] -> Double -> IO (WordSearchGrid,[ (String,Maybe Placement) ])
createAndSolve words maxDensity = do g <- createWordSearch words maxDensity
let soln = solveWordSearch words g
return (g,soln)
challenge2Test :: IO () challenge2Test :: IO ()
challenge2Test = do putStrLn "=========================================" challenge2Test = do putStrLn "========================================="
putStrLn "Challenge 2 Start Test" putStrLn "Challenge 2 Start Test"
putStrLn "=========================================" putStrLn "=========================================\n"
(g1,sol1) <- createAndSolve ["WORD","EXAMPLE","SEARCH"] 0.3 (g1,sol1) <- createAndSolve ["HIDE","THIS","WORD"] 0.3
assert2 g1 sol1 assert2 1 g1 0.3 sol1
(g2,sol2) <- createAndSolve ["LONGER","WORD","SEARCH","TO","SOVLE"] 0.4
assert2 2 g2 0.4 sol2
(g3,sol3) <- createAndSolve ["THIS","ONE","$HAS$","+SYMBOLS+","AS","WELL"] 0.6
assert2 3 g3 0.6 sol3
putStrLn "=========================================" putStrLn "========================================="
putStrLn "Challenge 2 End Test" putStrLn "Challenge 2 End Test"
putStrLn "=========================================\n" putStrLn "=========================================\n"
assert2 :: Int -> WordSearchGrid -> Double -> [ (String,Maybe Placement) ] -> IO ()
assert2 gridNumber grid density answers = do putStrLn "- - - - - - - - - - - - - - - - - -"
putStrLn $ "Checking Grid Number: " ++ show gridNumber
putStrLn "- - - - - - - - - - - - - - - - - -\n"
printGrid grid
putStrLn "\nShould Contain these Words:"
pPrintList 3 answers
lineBreak
wordsPresent grid answers
lineBreak
densityCheck grid density answers
lineBreak
wordsPresent :: WordSearchGrid -> [ (String,Maybe Placement) ] -> IO ()
wordsPresent grid answers = do putStrLn "- - - - - - - - - - - - - - - - - -"
putStrLn "Testing Words are Present"
putStrLn "- - - - - - - - - - - - - - - - - -\n"
if foldl1 (||) $ map ((Nothing/=) . snd) answers then
putStrLn "Passed Test! All words are present!"
else
do putStrLn "Failed Test! Not all words are present"
putStrLn "List of words that weren't found:"
pPrintList 3 $ map fst $ filter ((Nothing/=) . snd) answers
densityCheck :: WordSearchGrid -> Double -> [ (String,Maybe Placement) ] -> IO ()
densityCheck grid density answers = do putStrLn "- - - - - - - - - - - - - - - - - -"
putStrLn "Testing Desnity is Correct"
putStrLn "- - - - - - - - - - - - - - - - - -\n"
let charPositions = map ( \(word,Just ( posn,dir )) -> take (length word) -- | words can overlap so finds position of each
$ iterate (nextPos dir) posn ) answers -- | char of each word
let hiddenPositions = foldl1 (++) charPositions -- | and only uses unique positions to find density
let uniquePositions = rmdups hiddenPositions
let d = (fromIntegral $ length uniquePositions) /
(fromIntegral $ sum $ map length grid)
if d < density then
putStrLn "Passed Test!"
else
putStrLn "Failed Test!"
putStrLn $ foldl1 (++) ["Desired density was ",show density,
" and the density of the generated grid was ",show d]
createAndSolve :: [ String ] -> Double -> IO (WordSearchGrid,[ (String,Maybe Placement) ])
createAndSolve words maxDensity = do g <- createWordSearch words maxDensity
let soln = solveWordSearch words g
return (g,soln)
{--| returns position of movement in a given direction |--}
nextPos :: Orientation -> Posn -> Posn
nextPos Forward (x,y) = (x+1,y)
nextPos Back (x,y) = (x-1,y)
nextPos Up (x,y) = (x,y-1)
nextPos Down (x,y) = (x,y+1)
nextPos UpForward (x,y) = (x+1,y-1)
nextPos UpBack (x,y) = (x-1,y-1)
nextPos DownForward (x,y) = (x+1,y+1)
nextPos DownBack (x,y) = (x-1,y+1)
{--| removes duplicates from a list |--
--| code from https://stackoverflow.com/a/16109302/10218833 |--}
rmdups :: (Ord a) => [a] -> [a]
rmdups = map head . group . sort
-----------------------------Challenge 3 Testing-------------------------------- -----------------------------Challenge 3 Testing--------------------------------
...@@ -90,7 +143,7 @@ assert3 macro expected result = do putStrLn "Pretty Printing:" ...@@ -90,7 +143,7 @@ assert3 macro expected result = do putStrLn "Pretty Printing:"
challenge3Test :: IO () challenge3Test :: IO ()
challenge3Test = do putStrLn "=========================================" challenge3Test = do putStrLn "========================================="
putStrLn "Challenge 3 Start Test" putStrLn "Challenge 3 Start Test"
putStrLn "=========================================" putStrLn "=========================================\n"
assert3 ex3'1 ex3'1Ans (prettyPrint ex3'1) assert3 ex3'1 ex3'1Ans (prettyPrint ex3'1)
putStrLn "\n- - - - - - - - - - - - - - - - - -\n" putStrLn "\n- - - - - - - - - - - - - - - - - -\n"
assert3 ex3'2 ex3'2Ans (prettyPrint ex3'2) assert3 ex3'2 ex3'2Ans (prettyPrint ex3'2)
...@@ -100,7 +153,7 @@ challenge3Test = do putStrLn "=========================================" ...@@ -100,7 +153,7 @@ challenge3Test = do putStrLn "========================================="
assert3 ex3'4 ex3'4Ans (prettyPrint ex3'4) assert3 ex3'4 ex3'4Ans (prettyPrint ex3'4)
putStrLn "\n- - - - - - - - - - - - - - - - - -\n" putStrLn "\n- - - - - - - - - - - - - - - - - -\n"
assert3 ex3'5 ex3'5Ans (prettyPrint ex3'5) assert3 ex3'5 ex3'5Ans (prettyPrint ex3'5)
putStrLn "=========================================" putStrLn "\n========================================="
putStrLn "Challenge 3 End Test" putStrLn "Challenge 3 End Test"
putStrLn "=========================================\n" putStrLn "=========================================\n"
...@@ -122,7 +175,7 @@ assert4 macro expected result = do putStrLn "Parsing:" ...@@ -122,7 +175,7 @@ assert4 macro expected result = do putStrLn "Parsing:"
challenge4Test :: IO () challenge4Test :: IO ()
challenge4Test = do putStrLn "=========================================" challenge4Test = do putStrLn "========================================="
putStrLn "Challenge 4 Start Test" putStrLn "Challenge 4 Start Test"
putStrLn "=========================================" putStrLn "=========================================\n"
assert4 ex4'1 ex4'1Ans (parseLamMacro ex4'1) assert4 ex4'1 ex4'1Ans (parseLamMacro ex4'1)
putStrLn "\n- - - - - - - - - - - - - - - - - -\n" putStrLn "\n- - - - - - - - - - - - - - - - - -\n"
assert4 ex4'2 ex4'2Ans (parseLamMacro ex4'2) assert4 ex4'2 ex4'2Ans (parseLamMacro ex4'2)
...@@ -136,7 +189,7 @@ challenge4Test = do putStrLn "=========================================" ...@@ -136,7 +189,7 @@ challenge4Test = do putStrLn "========================================="
assert4 ex4'6 ex4'6Ans (parseLamMacro ex4'6) assert4 ex4'6 ex4'6Ans (parseLamMacro ex4'6)
putStrLn "\n- - - - - - - - - - - - - - - - - -\n" putStrLn "\n- - - - - - - - - - - - - - - - - -\n"
assert4 ex4'7 ex4'7Ans (parseLamMacro ex4'7) assert4 ex4'7 ex4'7Ans (parseLamMacro ex4'7)
putStrLn "=========================================" putStrLn "\n========================================="
putStrLn "Challenge 4 End Test" putStrLn "Challenge 4 End Test"
putStrLn "=========================================\n" putStrLn "=========================================\n"
...@@ -160,7 +213,7 @@ assert5 toTest expected result = do putStrLn "CPS Translating:" ...@@ -160,7 +213,7 @@ assert5 toTest expected result = do putStrLn "CPS Translating:"
challenge5Test :: IO () challenge5Test :: IO ()
challenge5Test = do putStrLn "=========================================" challenge5Test = do putStrLn "========================================="
putStrLn "Challenge 5 Start Test" putStrLn "Challenge 5 Start Test"
putStrLn "=========================================" putStrLn "=========================================\n"
assert5 ex5'1 ex5'1Ans (cpsTransform ex5'1) assert5 ex5'1 ex5'1Ans (cpsTransform ex5'1)
putStrLn "\n- - - - - - - - - - - - - - - - - -\n" putStrLn "\n- - - - - - - - - - - - - - - - - -\n"
assert5 ex5'2 ex5'2Ans (cpsTransform ex5'2) assert5 ex5'2 ex5'2Ans (cpsTransform ex5'2)
...@@ -168,8 +221,7 @@ challenge5Test = do putStrLn "=========================================" ...@@ -168,8 +221,7 @@ challenge5Test = do putStrLn "========================================="
assert5 ex5'3 ex5'3Ans (cpsTransform ex5'3) assert5 ex5'3 ex5'3Ans (cpsTransform ex5'3)
putStrLn "\n- - - - - - - - - - - - - - - - - -\n" putStrLn "\n- - - - - - - - - - - - - - - - - -\n"
assert5 ex5'4 ex5'4Ans (cpsTransform ex5'4) assert5 ex5'4 ex5'4Ans (cpsTransform ex5'4)
putStrLn "\n- - - - - - - - - - - - - - - - - -\n" putStrLn "\n========================================="
putStrLn "========================================="
putStrLn "Challenge 5 End Test" putStrLn "Challenge 5 End Test"
putStrLn "=========================================\n" putStrLn "=========================================\n"
...@@ -206,7 +258,7 @@ assert6Outer toTest expected result = do putStrLn "Testing Outer one step Reduct ...@@ -206,7 +258,7 @@ assert6Outer toTest expected result = do putStrLn "Testing Outer one step Reduct
assert6Compare :: LamMacroExpr -> Int -> (Maybe Int,Maybe Int,Maybe Int,Maybe Int) -> (Maybe Int,Maybe Int,Maybe Int,Maybe Int) -> IO () assert6Compare :: LamMacroExpr -> Int -> (Maybe Int,Maybe Int,Maybe Int,Maybe Int) -> (Maybe Int,Maybe Int,Maybe Int,Maybe Int) -> IO ()
assert6Compare toTest bound expected result = do putStrLn "Testing Comparisons of Reductions of:" assert6Compare toTest bound expected result = do putStrLn "Testing Comparisons of Reductions of:"
putStrLn $ prettyPrint toTest ++ "\n" putStrLn $ prettyPrint toTest ++ "\n"
putStrLn $ "For a Bound of:" ++ show bound ++ "\n" putStrLn $ "For a Bound of: " ++ show bound ++ "\n"
putStrLn "(Actual Internal Value):" putStrLn "(Actual Internal Value):"
putStrLn $ show toTest ++ "\n" putStrLn $ show toTest ++ "\n"
putStrLn "Expected Result:" putStrLn "Expected Result:"
...@@ -229,11 +281,22 @@ challenge6Test = do putStrLn "=========================================" ...@@ -229,11 +281,22 @@ challenge6Test = do putStrLn "========================================="
-- putStrLn "\n- - - - - - - - - - - - - - - - - -" -- putStrLn "\n- - - - - - - - - - - - - - - - - -"
-- putStrLn "Testing Outer Reduction" -- putStrLn "Testing Outer Reduction"
-- putStrLn "- - - - - - - - - - - - - - - - - -\n" -- putStrLn "- - - - - - - - - - - - - - - - - -\n"
putStrLn "\n- - - - - - - - - - - - - - - - - -" putStrLn "- - - - - - - - - - - - - - - - - -"
putStrLn "Testing Comparisons of Reductions" putStrLn "Testing Comparisons of Reductions"
putStrLn "- - - - - - - - - - - - - - - - - -\n" putStrLn "- - - - - - - - - - - - - - - - - -\n"
assert6Compare ex6'1 10 ex6'1Ans (compareInnerOuter ex6'1 10) assert6Compare ex6'1 10 ex6'1Ans (compareInnerOuter ex6'1 10)
putStrLn "\n- - - - - - - - - - - - - - - - - -\n" putStrLn "- - - - - - - - - - - - - - - - - -\n"
assert6Compare ex6'2 10 ex6'2Ans (compareInnerOuter ex6'2 10)
putStrLn "- - - - - - - - - - - - - - - - - -\n"
assert6Compare ex6'3 10 ex6'3Ans (compareInnerOuter ex6'3 10)
putStrLn "- - - - - - - - - - - - - - - - - -\n"
assert6Compare ex6'4 100 ex6'4Ans (compareInnerOuter ex6'4 10)
-- putStrLn "- - - - - - - - - - - - - - - - - -\n"
-- assert6Compare ex6'5 30 ex6'5Ans (compareInnerOuter ex6'5 10)
-- putStrLn "- - - - - - - - - - - - - - - - - -\n"
-- assert6Compare ex6'6 30 ex6'6Ans (compareInnerOuter ex6'6 10)
-- putStrLn "- - - - - - - - - - - - - - - - - -\n"
-- assert6Compare ex6'7 1000 ex6'7Ans (compareInnerOuter ex6'7 10)
putStrLn "=========================================" putStrLn "========================================="
putStrLn "Challenge 6 End Test" putStrLn "Challenge 6 End Test"
putStrLn "=========================================\n" putStrLn "=========================================\n"
...@@ -267,24 +330,58 @@ pPrintList val xs = do putStr "[" ...@@ -267,24 +330,58 @@ pPrintList val xs = do putStr "["
zipF :: (a -> b) -> [a] -> [(a,b)] zipF :: (a -> b) -> [a] -> [(a,b)]
zipF f xs = zip xs $ map f xs zipF f xs = zip xs $ map f xs
lineBreak :: IO ()
lineBreak = putStrLn ""
-------------------------------------Examples----------------------------------- -------------------------------------Examples-----------------------------------
exGrid1'1 = [ "HAGNIRTSH" , "SACAGETAK", "GCSTACKEL","MGHKMILKI","EKNLETGCN","TNIRTLETE","IRAAHCLSR","MAMROSAGD","GIZKDDNRG" ] exGrid1'1 = [ "HAGNIRTSH",
"SACAGETAK",
"GCSTACKEL",
"MGHKMILKI",
"EKNLETGCN",
"TNIRTLETE",
"IRAAHCLSR",
"MAMROSAGD",
"GIZKDDNRG" ]
exWords1'1 = [ "HASKELL","STRING","STACK","MAIN","METHOD"] exWords1'1 = [ "HASKELL","STRING","STACK","MAIN","METHOD"]
exAns1'1 = [("HASKELL",Just((0,0),DownForward)),("STRING",Just((7,0),Back)),("STACK",Just((2,2),Forward)), exAns1'1 = [("HASKELL",Just((0,0),DownForward)),("STRING",Just((7,0),Back)),("STACK",Just((2,2),Forward)),
("MAIN", Just((2,7),Up )),("METHOD",Just((4,3),Down))] ("MAIN", Just((2,7),Up )),("METHOD",Just((4,3),Down))]
exGrid1'2 = ["ROBREUMBR",
exGrid1'2 = ["ROBREUMBR","AURPEPSAN","UNLALMSEE","YGAUNPYYP","NLMNBGENA","NBLEALEOR","ALRYPBBLG","NREPBEBEP","YGAYAROMR"] "AURPEPSAN",
"UNLALMSEE",
"YGAUNPYYP",
"NLMNBGENA",
"NBLEALEOR",
"ALRYPBBLG",
"NREPBEBEP",
"YGAYAROMR"]
exWords1'2 = [ "BANANA", "ORANGE", "MELON", "RASPBERRY","APPLE","PLUM","GRAPE" ] exWords1'2 = [ "BANANA", "ORANGE", "MELON", "RASPBERRY","APPLE","PLUM","GRAPE" ]
exAns1'2 = [("BANANA", Just((5,6),UpBack )),("ORANGE",Just((1,0),DownForward)),("MELON",Just((7,8),Up )), exAns1'2 = [("BANANA", Just((5,6),UpBack )),("ORANGE",Just((1,0),DownForward)),("MELON",Just((7,8),Up )),
("RASPBERRY",Just((8,0),DownBack)),("APPLE", Just((2,8),UpForward )),("PLUM", Just((5,1),DownBack)), ("RASPBERRY",Just((8,0),DownBack)),("APPLE", Just((2,8),UpForward )),("PLUM", Just((5,1),DownBack)),
("GRAPE", Just((8,6),Up ))] ("GRAPE", Just((8,6),Up ))]
exGrid1'3 = ["CNOGLNCMGNT",
"EIATR+ECATJ",
"RCVNCVJCCAM",
"JLNSAINRVH+",
"HMPENINAVMY",
"UAIPICLJVJH",
"+RNYSCLUMIT",
"NGNTCLSRJPU",
"NOYHPIP+GLH",
"RRVOHRT+GOT",
"JPUNVGSCIEA"]
exWords1'3 = ["C++","JAVA","PYTHON","PROGRAM","JULIAN","SCIENCE"]
exAns1'3 = [("C++", Just ((7,10),Up)),("JAVA", Just ((10,1),DownBack)),("PYTHON", Just ((3,5),Down )),
("PROGRAM",Just ((1,10),Up)),("JULIAN",Just ((8,7), UpBack )),("SCIENCE",Just ((6,7),UpBack))]
ex3'1 = LamDef [] (LamApp (LamAbs 1 (LamVar 1)) (LamAbs 1 (LamVar 1))) ex3'1 = LamDef [] (LamApp (LamAbs 1 (LamVar 1)) (LamAbs 1 (LamVar 1)))
ex3'2 = LamDef [] (LamAbs 1 (LamApp (LamVar 1) (LamAbs 1 (LamVar 1)))) ex3'2 = LamDef [] (LamAbs 1 (LamApp (LamVar 1) (LamAbs 1 (LamVar 1))))
...@@ -323,10 +420,29 @@ ex5'2 = LamDef [ ("F", exId) ] (LamVar 2) ...@@ -323,10 +420,29 @@ ex5'2 = LamDef [ ("F", exId) ] (LamVar 2)
ex5'3 = LamDef [ ("F", exId) ] (LamMacro "F") ex5'3 = LamDef [ ("F", exId) ] (LamMacro "F")
ex5'4 = LamDef [ ("F", exId) ] (LamApp (LamMacro "F") (LamMacro "F")) ex5'4 = LamDef [ ("F", exId) ] (LamApp (LamMacro "F") (LamMacro "F"))
ex5'1Ans = LamDef [] (LamAbs 3 (LamApp (LamAbs 6 (LamApp (LamVar 6) (LamVar 1))) (LamAbs 4 (LamApp (LamAbs 7 (LamApp (LamVar 7) (LamVar 2))) (LamAbs 5 (LamApp (LamApp (LamVar 4) (LamVar 5)) (LamVar 3))))))) ex5'1Ans = LamDef [] (LamAbs 3 (LamApp (LamAbs 6 (LamApp (LamVar 6) (LamVar 1)))
ex5'2Ans = LamDef [("F",LamAbs 3 (LamApp (LamVar 3) (LamAbs 1 (LamAbs 4 (LamApp (LamVar 4) (LamVar 1))))))] (LamAbs 5 (LamApp (LamVar 5) (LamVar 2))) (LamAbs 4 (LamApp (LamAbs 7 (LamApp (LamVar 7) (LamVar 2)))
ex5'3Ans = LamDef [("F",LamAbs 2 (LamApp (LamVar 2) (LamAbs 1 (LamAbs 3 (LamApp (LamVar 3) (LamVar 1))))))] (LamMacro "F") (LamAbs 5 (LamApp (LamApp (LamVar 4) (LamVar 5))
ex5'4Ans = LamDef [("F",LamAbs 2 (LamApp (LamVar 2) (LamAbs 1 (LamAbs 3 (LamApp (LamVar 3) (LamVar 1))))))] (LamAbs 4 (LamApp (LamMacro "F") (LamAbs 5 (LamApp (LamMacro "F") (LamAbs 6 (LamApp (LamApp (LamVar 5) (LamVar 6)) (LamVar 4))))))) (LamVar 3)))))))
ex5'2Ans = LamDef [("F",LamAbs 3 (LamApp (LamVar 3)
(LamAbs 1 (LamAbs 4 (LamApp (LamVar 4)
(LamVar 1))))))]
(LamAbs 5 (LamApp (LamVar 5) (LamVar 2)))
ex5'3Ans = LamDef [("F",LamAbs 2 (LamApp (LamVar 2)
(LamAbs 1 (LamAbs 3 (LamApp (LamVar 3)
(LamVar 1))))))]
(LamMacro "F")
ex5'4Ans = LamDef [("F",LamAbs 2 (LamApp (LamVar 2)
(LamAbs 1 (LamAbs 3 (LamApp (LamVar 3)
(LamVar 1))))))]
(LamAbs 4 (LamApp (LamMacro "F")
(LamAbs 5 (LamApp (LamMacro "F")
(LamAbs 6 (LamApp (LamApp (LamVar 5)
(LamVar 6))
(LamVar 4)))))))
ex6'1 = LamDef [] (LamAbs 1 (LamApp (LamVar 1) (LamVar 2))) -- | (\x1 -> x1 x2) ex6'1 = LamDef [] (LamAbs 1 (LamApp (LamVar 1) (LamVar 2))) -- | (\x1 -> x1 x2)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment