fundeps for extended Monad definition
oleg@pobox.com
oleg@pobox.com
Mon, 3 Mar 2003 10:58:08 -0800 (PST)
| > The reason, which is thoroughly explained in Simon Peyton-Jones'
| > message, is that the given type signature is wrong: it should read
| > f1 :: (exists b. (C Int b) => Int -> b)
> Can you give an example of its use?
Yes, I can.
> class (Show a, Show b) => C a b | a -> b where
> doit:: a -> b -> String
> instance C Int Int where
> doit a b = (show a)
> instance C Bool Bool where
> doit a b = if a then "everything" else "nothing"
> newtype M a = M (forall b.(C a b) => b)
> f :: Int -> M Int
> f x = M undefined
> g :: Bool -> M Bool
> g x = M undefined
> test1 a = case (f a) of
> M b -> doit a b
> test2 a = case (g a) of
> M b -> doit a b
I wonder if the Obfuscated Haskell contest has an entry for the most
useless type (with no uses). However, if a type can be used for the
contest, it is no longer the most useless. This makes one wonder if
the rules of the contest implicitly contain the Russel paradox.