title: Why does this need an explicit type?
body: <p>I wrote a generic type to type converter in Haskell using classes as follows:</p>
  
  <pre><code>{-# LANGUAGE FlexibleInstances #-}
  
  class Convertable a where
      convert::a
  
  instance Convertable (Int -&gt; String) where
      convert = show
  
  instance Convertable (String -&gt; Int) where
      convert = read
  
  main = do
      let result = ((+1) . convert :: String -&gt; Int) "1"
      print result
  </code></pre>
  
  <p>But I need the explicit type <code>String -&gt; Int</code> in order to get it to work (which kind of negates the purpose of having a generic type converter....)</p>
  
  <p>Why would this type declaration be needed at all, there is just one possibility that satisfies the types?</p>