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

如何从Test.QuickCheck模块显式导入Fn模式?

问题原因与解决方案

可以显式导入这类模式同义词,你之前导入报错的核心原因是:Fn是通过GHC的PatternSynonyms特性定义的模式同义词,不属于普通顶层值,也不是数据类型声明内自带的普通构造器,Haskell要求显式导入/导出这类标识符时,必须加pattern关键字做标识。

正确写法

首先你需要在文件顶部开启对应语言扩展(不管用全量导入还是显式导入,只要用到Fn模式都需要开这个扩展,全量导入时不会在导入阶段报错,只会在使用Fn时提示缺失扩展):

{-# LANGUAGE PatternSynonyms #-}

如果只需要导入Fn模式,导入语句写为:

import Test.QuickCheck (pattern Fn)

如果需要同时导入Fun类型和Fn模式,导入语句写为:

import Test.QuickCheck (Fun, pattern Fn)

之前写法错误的说明

  • 直接写import Test.QuickCheck (Fn):GHC只会在普通值、类型构造器的命名空间里查找Fn,找不到对应的模式同义词,直接报模块不导出该标识符的错误。
  • 写import Test.QuickCheck (Fun(Fn)):这是导入数据类型下属普通构造器的语法,仅对data/newtype声明时直接定义的构造器生效,Fn是后续单独为Fun类型定义的模式同义词,不是Fun的原生构造器,因此这个写法同样找不到对应标识符。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 05:36:47