{-# LANGUAGE ImpredicativeTypes #-} -- Sept 16: now scraping through with -XImpredicateTypes module Main where data Foo x y = Foo {foo1 :: x, foo2 :: y} instance Functor (Foo x) where fmap f (Foo x y) = Foo x (f y) bar :: a -> Foo (forall s. s) a bar a = Foo undefined a main = print (foo2 (fmap (*2) (bar 2)))