Haskell中PostgreSQL Simple的FromRow/ToRow实例编译错误求助
解决PostgreSQL Simple中FromRow/ToRow实例的编译错误
嘿,我帮你定位到问题啦!你遇到的编译错误,核心原因是**fromRow和toRow方法没有在当前代码的作用域里可见**——这是PostgreSQL Simple库的导入规则导致的。
问题出在哪?
你只导入了Database.PostgreSQL.Simple顶层模块,但这个模块并没有自动导出FromRow和ToRow类的具体方法(fromRow、toRow)。编译器找不到这些方法的定义,所以才会报错说它们不是类的可见方法。
快速修复方案
只需要修改你的导入语句,显式导入FromRow和ToRow类及其方法即可:
module Handlers.SurveyReplies where -- 保留核心模块导入,同时添加方法所在的子模块 import Database.PostgreSQL.Simple import Database.PostgreSQL.Simple.FromRow (FromRow(..)) import Database.PostgreSQL.Simple.ToRow (ToRow(..))
这样写的好处是,(..)会把FromRow类和它的所有方法(也就是fromRow)都导入到当前作用域,ToRow同理。
额外检查点
你的AnswersSet实例定义本身是完全正确的!不过可以顺手核对一下:
- 字段类型
Integer要和数据库里的列类型匹配(比如INT/BIGINT) Maybe Integer对应数据库里的可空整数列,如果你的commune列不允许为空,记得改成Integer
测试一下
修改完导入后,你可以用这段简单的代码验证实例是否正常工作:
fetchReplies :: Connection -> IO [AnswersSet] fetchReplies conn = query conn "SELECT sex, ageRange, country, commune FROM survey_replies" ()
为啥示例项目没这个问题?
很多示例会把需要的类和方法一次性导入,比如用import Database.PostgreSQL.Simple.FromRow或者更细致的导入,你可能没注意到这些细节~
内容的提问来源于stack exchange,提问作者Tae
相关产品推荐
相关产品推荐

