diff options
Diffstat (limited to 'testsuite/tests/boxy/Church2.hs')
-rw-r--r-- | testsuite/tests/boxy/Church2.hs | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/testsuite/tests/boxy/Church2.hs b/testsuite/tests/boxy/Church2.hs new file mode 100644 index 0000000000..c360bb3a8b --- /dev/null +++ b/testsuite/tests/boxy/Church2.hs @@ -0,0 +1,27 @@ +{-# LANGUAGE RankNTypes #-} + +module Church2 where +-- Church numerals w/o extra type constructors: Should fail + +type CNat = forall a. (a->a) -> a -> a + +n0 :: CNat +n0 = \f z -> z + +n1 :: CNat +n1 = \f z -> f z + +nsucc :: CNat -> CNat +nsucc n = \f z -> f (n f z) + +add, mul :: CNat -> CNat -> CNat +add m n = \f -> \a -> m f (n f a) +mul m n = \f -> \a -> m (n f) a + +-- already works with GHC 6.4 +exp0 :: CNat -> CNat -> CNat +exp0 m n = n m + +-- should fail! +exp2 :: CNat -> CNat -> CNat +exp2 m n = n (mul m) n1 |