使用validity进行属性测试时遇GenUnchecked未识别问题求助
解决Validity库中GenUnchecked找不到的编译错误
问题根源:版本差异
GenUnchecked类型类在较新的genvalidity版本中才被移到Data.Validity模块,旧版本里它属于Data.GenValidity模块。如果你安装的是旧版,直接从Data.Validity导入自然找不到。
步骤1:查看已安装的genvalidity版本
在命令行执行对应命令,查看当前项目依赖的版本:
# Cabal项目 cabal list --installed genvalidity # Stack项目 stack list-dependencies | grep genvalidity
Stack用户也可以直接查看stack.yaml的快照版本,或者package.yaml里的genvalidity版本约束。
步骤2:调整导入或版本
情况A:使用旧版本genvalidity(< 1.0)
旧版本中,GenUnchecked和GenValid都在Data.GenValidity模块,修改导入语句即可:
import Data.Validity (Validity(..)) import Data.GenValidity (GenUnchecked(..), GenValid(..))
情况B:升级到新版本genvalidity(>= 1.0)
如果想匹配Hackage文档的内容,需要升级依赖:
- 在
package.yaml中指定版本约束:dependencies: - genvalidity >= 1.0 - 重新构建项目:
升级后,从# Cabal用户 cabal update && cabal build # Stack用户 stack update && stack buildData.Validity导入GenUnchecked和GenValid就能正常编译了。
额外提示
如果是Stack项目,要确保使用的快照包含足够新的genvalidity版本,否则可能需要在stack.yaml的extra-deps中手动添加指定版本的genvalidity。
内容的提问来源于stack exchange,提问作者Good Night Nerd Pride
相关产品推荐
相关产品推荐

