首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Purescript,了解为什么找不到类型类实例

Purescript,了解为什么找不到类型类实例
EN

Stack Overflow用户
提问于 2017-01-16 08:52:16
回答 1查看 601关注 0票数 0

我正在尝试构建一个简单的Purescript应用程序,但我不明白为什么我总是得到一个类型类实例错误。

具体地说,在我的Component内部,我定义了对查询代数进行操作的eval函数。在这个过程中,我只是为了好玩而将一些东西记录到控制台上。

代码语言:javascript
运行
复制
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

当我运行这段代码时,编译器会说:

代码语言:javascript
运行
复制
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.

所以我指定了一个类型:

代码语言:javascript
运行
复制
tryPrint :: Eff (console :: CONSOLE | eff) Unit
tryPrint = log "print me out!"

但是,编译器仍然告诉我需要为MonadEff类型类实现一个实例。我真的不理解这个错误。有谁能给我指个方向吗?

EN

Stack Overflow用户

发布于 2017-01-16 10:08:48

Free没有MonadEff实例,因此不能在ComponentDSL中使用liftEff,因为它是Free的同义词。

在下一个卤素版本中,这一点将发生变化,ComponentDSL将拥有一个MonadEff实例。对于当前发布的版本(v0.12.0),解决方案是使用"Non-state effects" section of the guide中提到的fromEff函数。

票数 2
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41668064

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档