title: Reason for overlapping instances error when not quantifying method existentially
body: <p>Given the following code, removing <code>forall a r</code> from the type of <code>go</code> fails with "Overlapping instances for Typeable (D r)". I wonder why?</p>
  
  <pre><code>{-# LANGUAGE DeriveDataTypeable #-}
  {-# LANGUAGE ExistentialQuantification #-}
  {-# LANGUAGE FlexibleContexts #-}
  {-# LANGUAGE ScopedTypeVariables #-}
  {-# LANGUAGE StandaloneDeriving #-}
  {-# LANGUAGE TypeFamilies #-}
  module M where
  
  import Data.Typeable (Proxy, Typeable, cast)
  
  class C r where
      data D r :: *
  
  deriving instance Typeable D
  
  data A = forall r . A (D r)
  
  go :: forall r a . (Typeable a, Typeable (D r)) =&gt; a -&gt; Proxy r -&gt; A
  go a _ = case cast a of
    Just (b :: D r) -&gt; A b
    Nothing -&gt; error "fail to cast"
  </code></pre>
  
  <p>The error also says "The choice depends on the instantiation of <code>r</code>" - but isn't that pinned by the supplied <code>Proxy r</code>?</p>