Beispiel #1
0
 def test_i(self):
     term = generate(parse_type("(-> a a)"))
     self.assertEqual(str(term), "(lambda a a)")
Beispiel #2
0
 def test_composition(self):
     term = generate(parse_type(
         "(-> (-> a b) (-> (-> b c) (-> a c)))"))
     self.assertEqual(
         str(term),
         "(lambda a (lambda b (lambda c (b (a c)))))")
Beispiel #3
0
 def test_product_associativity(self):
     term = generate(parse_type("(-> (* a (* b c)) (* (* a b) c))"))
     self.assertEqual(
         str(term),
         "(lambda a (pair (pair (fst a) (fst (snd a))) (snd (snd a))))")
Beispiel #4
0
 def test_currying(self):
     term = generate(parse_type(
         "(-> (-> (* a b) c) (-> a (-> b c)))"))
     self.assertEqual(
         str(term),
         "(lambda a (lambda b (lambda c (a (pair b c)))))")
Beispiel #5
0
 def test_swap(self):
     term = generate(parse_type("(-> (* a b) (* b a))"))
     self.assertEqual(str(term), "(lambda a (pair (snd a) (fst a)))")
Beispiel #6
0
 def test_s(self):
     term = generate(parse_type(
         "(-> (-> a (-> b c)) (-> (-> a b) (-> a c)))"))
     self.assertEqual(
         str(term),
         "(lambda a (lambda b (lambda c ((a c) (b c)))))")