2017-01-16 1 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 

, 컴파일러는 소리 질러 :

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

그러나, 컴파일러는 아직도 내가 대한 인스턴스를 구현해야 저에게 말한다 :

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. 

그래서 내가 유형을 지정 MonadEff typeclass. 나는이 오류를 정말로 이해하지 못한다. 누구든지 올바른 방향으로 나를 가리킬 수 있을까요?

답변

2

Free에 대한 MonadEff 인스턴스가, 그래서 그것은 Free 동의어입니다 당신은 ComponentDSLliftEff을 사용할 수 없습니다.

이것은 다음 할로겐 릴리스에서 변경되며 ComponentDSLMonadEff 인스턴스를 갖습니다. 현재 출시 된 버전 (v0.12.0)의 해결책은 에 언급 된 fromEff 함수를 대신 사용하는 것입니다.