我正在关注有关设置任务列表的各种Thermite教程。唯一有很多解释的教程也已经过时了,所以我修改它以适应当前的Thermite。但是,我有一个调用,我无法使数据类型匹配。
import Optic.Lens (lens)
import Optic.Prism (prism)
import Optic.Types (Prism', Lens')
import Thermite as T
_TaskAction :: Prism' TaskListAction (Tuple Int TaskAction)
_TaskAction = ...
_tasks :: Lens' TaskListState (L.List TaskState)
_tasks = lens _.tasks (_ { tasks = _ })
taskList :: T.Spec _ TaskListState _ TaskListAction
taskList = T.focus _tasks _TaskAction taskSpec
但是,这给了我一条错误消息:
Could not match type p0 with type Function while trying to match type p0 t1 with type Function (List { text :: String } ) while checking that expression _tasks has type p0 t1 t1 -> p0 t2 t2 in value declaration taskList where p0 is a rigid type variable bound at line 213, column 20 - line 213, column 26 t1 is an unknown type t2 is an unknown type
错误消息专门讨论了我传递给_tasks
的{{1}}参数。但我不知道这个错误试图告诉我什么。我也知道T.focus
的类型签名是......
T.focus
所以,第一个参数是镜头。
更令人沮丧的是,我检查了更现代(但更大,更不易理解)的示例代码,它显示的focus :: forall eff props state2 state1 action1 action2.
Lens' state2 state1
-> Prism' action2 action1
-> Spec eff state1 props action1
-> Spec eff state2 props action2
与我在这里的定义完全相同。
那么,这个错误消息意味着什么,我需要做些什么来解决它?
答案 0 :(得分:2)
您导入Optic.Lens
的事实表明您在此处使用了错误的镜头库。 purescript-lens
提供传统的van-Laarhoven镜头(如Haskell的lens
库),但Thermite使用profunctor-lenses
库。