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(必须是EqGenExpr的实例)。然后|将实例头与功能依赖项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/

10-11 10:48