+++ /dev/null
-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"))