class (Eq e, GenExpr e, MonadRandom m) => GenProg m e | e -> m where
确切地说,我无法理解这个 GenProg m e | e - > m
我猜GenProg是一个构造函数。
是否意味着:模式匹配 GenProg m e 或 e - > m ,可以定义其实例吗?
顺便问一下,我在哪里可以获得haskell中的所有语法?
答案 0 :(得分:7)
这是一个具有功能依赖性的多参数类型。 GenProg
是类的名称,两个参数是m
(必须是MonadRandom
的实例)和e
(必须是{的实例{1}}和Eq
)。然后GenExpr
将实例头与函数依赖项|
分开,后者表示实例中的类型e -> m
确定了类型构造函数e
,换句话说,对于任何实例键入m
,最多只能有e
个
m
出现在有效的程序中。 (即,如果有多个此类实例声明具有相同的instance GenProg m e where ...
,则会出现编译错误。)