title: catchException doesn't remove the effect
body: <p>In the module below, function g compiles without no comment but function f gives the message "Could not match type", with the explanation that (err :: Exception | e) does not match ().</p>
  
  <p>However, both throwException and toISOString return a value in Eff with the EXCEPTION effect (and possibly others).</p>
  
  <p>It looks as if catchException does not remove the EXCEPTION effect in f, but does remove the effect in g. Indeed, the inferred type for f is:</p>
  
  <pre><code>f :: forall e. DateTime -&gt; Eff (err :: EXCEPTION | e) String
  </code></pre>
  
  <p>Why is this?</p>
  
  <pre><code>module Problem.With.Exception where
  
  import Control.Monad.Eff (Eff)
  import Control.Monad.Eff.Exception (catchException, throwException, error)
  import Data.DateTime (DateTime(..))
  import Data.JSDate (fromDateTime, toISOString)
  import Prelude (pure, ($), (&lt;&gt;), show, discard, bind)
  
  g :: DateTime -&gt; Eff () String
  g d = catchException
    (\_ -&gt; pure "Some message")
    (throwException $ error "Bla")
  
  -- This is the inferred type for f:
  -- f :: forall e. DateTime -&gt; Eff (err :: EXCEPTION | e) String
  -- But this is the type I hope for:
  f :: DateTime -&gt; Eff () String
  f d = catchException
    (\_ -&gt; pure "Some message")
    (toISOString (fromDateTime d))
  </code></pre>