Haskell Purescript,了解为什么找不到类型类实例
我正在尝试构建一个简单的Purescript应用程序,但我不明白为什么我总是遇到typeclass实例错误 具体地说,在我的Haskell Purescript,了解为什么找不到类型类实例,haskell,purescript,Haskell,Purescript,我正在尝试构建一个简单的Purescript应用程序,但我不明白为什么我总是遇到typeclass实例错误 具体地说,在我的组件中我定义了eval函数来操作我的查询代数。在这个过程中,我只是为了好玩而把一些东西记录到控制台上 type AppEffects eff = (HalogenEffects (console :: CONSOLE | eff)) data Query a = DoSomething a eval :: Query ~> H.ComponentDSL State
组件中
我定义了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实现一个实例。我真的不明白这个错误。有人能给我指出正确的方向吗?没有Free
的MonadEff
实例,因此您不能在ComponentDSL
中使用liftEff
,因为它是Free
的同义词
这在下一个卤素版本中发生了变化,
ComponentDSL
将有一个MonadEff
实例。对于当前发布的版本(v0.12.0),解决方案是使用fromEff
函数,这在Free
中没有MonadEff
实例,因此不能在组件DSL
中使用liftEff
,因为它是Free
的同义词
这在下一个卤素版本中发生了变化,ComponentDSL
将有一个MonadEff
实例。对于当前发布的版本(v0.12.0),解决方案是使用fromEff
函数,如中所述