summaryrefslogtreecommitdiff
path: root/compiler/ilxGen/tests/test12.hs
diff options
context:
space:
mode:
Diffstat (limited to 'compiler/ilxGen/tests/test12.hs')
-rw-r--r--compiler/ilxGen/tests/test12.hs44
1 files changed, 44 insertions, 0 deletions
diff --git a/compiler/ilxGen/tests/test12.hs b/compiler/ilxGen/tests/test12.hs
new file mode 100644
index 0000000000..216c792f32
--- /dev/null
+++ b/compiler/ilxGen/tests/test12.hs
@@ -0,0 +1,44 @@
+class NewFunctor f where
+ new_fmap :: (a -> b) -> f a -> f b
+
+data N a = Z a | S (N a)
+
+nmap f (Z x) = Z (f x)
+nmap f (S n) = S (nmap f n)
+
+tag (Z x) = x
+tag (S n) = tag n
+
+instance NewFunctor N where
+ new_fmap = nmap
+
+--class Strange f where
+-- zero :: a -> f a
+-- suc :: f a -> f a
+-- tag :: f a -> a
+
+
+--class FMonad m where
+-- (>>=) :: m a -> (a -> m b) -> m b
+-- (>>) :: m a -> m b -> m b
+-- return :: a -> m a
+-- fail :: String -> m a
+--
+-- m >> k = m >>= \_ -> k
+-- fail s = error s
+
+
+
+
+--instance Strange N
+-- where
+-- zero x = Z x
+-- suc y = S y
+-- tag n = gettag n
+
+twice :: NewFunctor f => (a -> a) -> f a -> f a
+twice f x = new_fmap f (new_fmap f x)
+
+main = putStr (tag (nmap (\x -> x) (Z "hello world\n")))
+--main = putStr (tag (nmap (\x -> x) (Z "hello world\n")))
+-- main = putStr (tag {- (twice (\x -> x) -} (Z "hello world\n"))