{-# OPTIONS -cpp #-}

module API where

import Data.Typeable

data Interface = Interface { 
        equals :: forall t. Eq t => t -> t -> Bool
     }

--
-- see how it hides the internal type.. but to compile GHC still checks
-- the type.
--
instance Typeable Interface where
#if __GLASGOW_HASKELL__ >= 603
    typeOf i = mkTyConApp (mkTyCon "API.Interface") []
#else
    typeOf i = mkAppTy (mkTyCon "API.Interface") []
#endif

plugin :: Interface
plugin = Interface  { equals = (==) }

