class (Eq e, GenExpr e, MonadRandom m) => GenProg m e | e -> m where
确实,我无法理解此 GenProg的| e-> m
我想GenProg是一个构造函数。
这是否意味着:可以定义实例的模式与 GenProg m e 或 e-> m 相匹配的模式?
顺便说一句,我在哪里可以获取haskell中的所有语法?
最佳答案
这是一个具有功能依赖性的多参数类型类。 GenProg
是该类的名称,两个参数是m
(必须是MonadRandom
的实例)和e
(必须是Eq
和GenExpr
的实例)。然后|
将实例头与功能依赖项e -> m
分开,后者表示实例中的e
类型决定了构造方法m
的类型,换句话说,对于任何e
类型,最多可以有一个m
,这样
instance GenProg m e where ...
出现在有效程序中。 (即,如果有多个具有相同
e
的此类实例声明,则会出现编译错误。)关于haskell - Haskell中有一个奇怪的类型类。什么是“类(Eq e,GenExpr e,MonadRandom m)=> GenProg m e | e-> m在哪里”,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8477189/