{-# LANGUAGE RankNTypes, MultiParamTypeClasses #-} {-# LANGUAGE AllowAmbiguousTypes #-} -- c3 is ambiguous! module T where import qualified Prelude as T(length,Monad,Integer) import qualified Data.ByteString as T(length) import Prelude(length,(+),(=<<),Monad(..),Maybe(..),Eq) import Data.Maybe import Control.Monad(Monad(..),MonadPlus(..)) length :: T.Integer length = 0 class N a class S a class C a b where c1 :: N b => a -> b c2 :: (N b,S b) => a -> b c3 :: forall a. a -> b c4 :: a1 -> b