-- This one briefly killed the new GHC 6.4

module Foo where

newtype Foo x = Foo x
-- data Foo x = Foo x -- this works

class X a where
        x :: a -> IO ()

class X a => Y a where
        y :: [a] -> IO ()

class Z z where
        z :: Y c => z c -> IO ()

instance X Char where
        x = putChar
instance X a => X (Foo a) where
        x (Foo foo) = x foo

instance Y Char where
    y cs = mapM_ x cs

instance Z Foo where
        z = x

