2017-01-16 8 views
0

シンプルなPurescriptアプリケーションを構築しようとしていますが、なぜ型クラスインスタンスエラーが発生し続けるのかわかりません。Purescript、型クラスインスタンスが見つからない理由を理解しました

具体的には、私のComponentの中で、evalという関数を私のクエリ代数を操作するように定義しています。その過程で、私は楽しいためにコンソールに何かを記録するだけです。

type AppEffects eff = (HalogenEffects (console :: CONSOLE | eff)) 

data Query a = DoSomething a 

eval :: Query ~> H.ComponentDSL State Query (Aff (AppEffects eff)) 
eval (DoSomething a) = do 
    liftEff $ log "print me out!" 
    -- do some stuff with the action 
    pure next 

私はこれを実行すると、コンパイラは叫ぶ:

No type class instance was found for 

    Control.Monad.Eff.Class.MonadEff ("console" :: CONSOLE   
            | t0       
            )        
            (Free       
             (HalogenFP EventSource  
              { "someState" :: String 
              }       
              Query      
              (Aff      
               ("avar" :: AVAR  
               , "err" :: EXCEPTION 
               , "dom" :: DOM   
               , "console" :: CONSOLE 
               | eff1     
              )      
              )       
             )       
            )        

The instance head contains unknown type variables. Consider adding a type annotation. 

だから私はタイプを指定:

tryPrint :: Eff (console :: CONSOLE | eff) Unit 
tryPrint = log "print me out!" 

しかし、コンパイラは、まだ私はインスタンスを実装する必要が私に語りましたMonadEff typeclass。私はこのエラーを本当に理解していません。誰かが私を正しい方向に向けることができますか?

答えて

2

FreeにはMonadEffインスタンスがありませんので、それはFreeの同義語であるとして、あなたは、ComponentDSLliftEffを使用することはできません。

これは次のハロゲンリリースで変更され、ComponentDSLMonadEffインスタンスになります。現在リリースされているバージョン(v0.12.0)では、代わりにに記載されているfromEff関数を使用します。

関連する問題