Haskell 从另一个模块导入一元数据
我有以下模块结构: 单元A:Haskell 从另一个模块导入一元数据,haskell,Haskell,我有以下模块结构: 单元A: 模块a其中 新类型解析器p=p(字符串->可能(p,字符串)) parse::Parser p->String->Maybe(p,String) 解析(P)=P 项::解析器字符 item=P(\inp->case inp of []->什么都没有 (x:xs)->只是(x,xs)) 模块B: 模块B,其中 ... 实例替代解析器,其中 空=P(\inp->Nothing) (P a)(P b)=P(\inp->案例a的inp 无->b inp Just(x,v)
模块a其中
新类型解析器p=p(字符串->可能(p,字符串))
parse::Parser p->String->Maybe(p,String)
解析(P)=P
项::解析器字符
item=P(\inp->case inp of
[]->什么都没有
(x:xs)->只是(x,xs))
模块B:
模块B,其中
...
实例替代解析器,其中
空=P(\inp->Nothing)
(P a)(P b)=P(\inp->案例a的inp
无->b inp
Just(x,v)->Just(x,v)
)
模块C:
模块ModuleC在哪里
导入模块a
导入模块B
导入数据.Char
conditionalParser::(Char->Bool)->解析器Char
条件parser f=do
x您正从ModuleB
导入实例定义,一切正常。您没有导入的是类定义,声明empty
方法的是类,而不是实例
将此添加到模块C的顶部
:
import Control.Applicative
应该这样做
或者,您也可以从ModuleB
重新导出Applicative
类
还要注意的是,通常认为在一个与类型和类分离的模块中定义实例是不合理的。如果选择正确的实例,这可能会导致微妙的意外结果。这被称为“孤立实例”,甚至有编译器反对它