You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

开发Brick贪吃蛇游戏时使用lens出现Variable not in scope错误如何解决

问题原因与解决方案

报错根本原因

你确实遗漏了lens的生成配置,microlens的makeLenses需要显式调用,才会为带下划线前缀的record字段生成对应的无前缀lens实例:

  • 第一次paused变量不在作用域报错:你没有调用makeLenses为_paused字段生成对应的paused lens,编译器无法找到该标识符
  • 替换为_paused后的类型报错:_paused是普通的record字段访问函数,类型为Game -> Bool,而透镜运算符(^.)要求第二个参数是Lens.Micro.Type.Getting类型的透镜对象,二者类型不匹配导致报错。

修复方法

在Game数据类型定义的下方,添加一行Template Haskell调用即可:

makeLenses ''Game

调用后makeLenses会自动为所有带_前缀的字段生成对应的无前缀lens,你代码中用到的paused、dead、frozen等透镜就能正常被(^.)、(.~)等透镜运算符识别使用。

内容的提问来源于stack exchange,提问作者geckos

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 19:24:03