2017-04-13 16 views
0

重複例外エラー

Could not match type 

    (exception :: EXCEPTION 
    , exception :: EXCEPTION 
    ) 

    with type 

    (console :: CONSOLE 
    , exception :: EXCEPTION 
    , exception :: EXCEPTION 
    ) 


while trying to match type Eff 
          (exception :: EXCEPTION 
          , exception :: EXCEPTION 
          ) 
    with type Eff 
       (console :: CONSOLE 
       , exception :: EXCEPTION 
      ) 
while checking that expression (apply void) (launchAff ((bind (...)) (\$0 -> 
                     ... 
                    ) 
                 ) 
              ) 
    has type Eff 
      (console :: CONSOLE 
      , exception :: EXCEPTION 
      ) 
      Unit 
in value declaration g 

を私は何をすべき:

import Prelude 
import Control.Monad.Aff (Aff, launchAff) 
import Control.Monad.Eff (Eff) 
import Control.Monad.Eff.Class (liftEff) 
import Control.Monad.Eff.Console (CONSOLE, log) 
import Control.Monad.Eff.Exception (EXCEPTION) 

f :: forall eff. Int -> Aff (exception :: EXCEPTION) String 
f i = pure $ show i 

g :: forall eff. Eff (console :: CONSOLE, exception :: EXCEPTION) Unit 
g = void $ launchAff do 
    s <- f 1 
    liftEff $ log s 

これは、複製するために私を取得? purescriptバージョン0.11.3を使用しています。

答えて

0

これは、入力行にexceptionラベルを含まないタイプがlaunchAffであるためです。一つの解決策はgの結果で二回ラベルを含めることです。

forall eff. Eff (console :: CONSOLE 
       , exception :: EXCEPTION 
       , exception :: EXCEPTION 
       ) Unit 

が、これはあなたが非常に自然されていない、launchAff外で二回catchExceptionを使用する必要があるということです。

もう一つは、launchAffへの呼び出し内catchExceptionを使用してラベルを削除することです。

第3のオプションは、purescript-affレポのバグを報告し、launchAffのタイプを変更しようとしています。