Reorganisation of the source tree
[ghc-hetmet.git] / compiler / ilxGen / tests / test12.hs
diff --git a/compiler/ilxGen/tests/test12.hs b/compiler/ilxGen/tests/test12.hs
new file mode 100644 (file)
index 0000000..216c792
--- /dev/null
@@ -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"))