Haskell中一个奇怪的类型类。什么';s";等级(等式e、基因表达式e、MonadRandom m)=>;GenProg m e | e->;m where";

Haskell中一个奇怪的类型类。什么';s";等级(等式e、基因表达式e、MonadRandom m)=>;GenProg m e | e->;m where";,haskell,typeclass,Haskell,Typeclass,事实上,我无法理解这一点 我猜GenProg是一个构造函数 这是否意味着:其模式匹配GenProg me或e->m的一个,其实例可以定义 顺便问一下,我在哪里可以得到haskell中的所有语法?它是一个具有函数依赖性的多参数类型的类GenProg是类的名称,两个参数是m(必须是MonadRandom的实例)和e(必须是Eq和GenExpr的实例)。然后,|将实例头与函数依赖项e->m分开,这表示实例中的类型e决定了类型构造函数m,换句话说,对于任何类型e,最多可以有一个m,这样 class (E

事实上,我无法理解这一点

我猜GenProg是一个构造函数

这是否意味着:其模式匹配GenProg mee->m的一个,其实例可以定义


顺便问一下,我在哪里可以得到haskell中的所有语法?

它是一个具有函数依赖性的多参数类型的类
GenProg
是类的名称,两个参数是
m
(必须是
MonadRandom
的实例)和
e
(必须是
Eq
GenExpr
的实例)。然后,
|
将实例头与函数依赖项
e->m
分开,这表示实例中的类型
e
决定了类型构造函数
m
,换句话说,对于任何类型
e
,最多可以有一个
m
,这样

class (Eq e, GenExpr e, MonadRandom m) => GenProg m e | e -> m where
出现在有效的程序中。(即,如果有多个这样的实例声明具有相同的
e
,则会出现编译错误。)

因此它是me或e->m。不是GenProg m e或e->m。thanks@user20100不,根本不是“或”。
|
只是一个分隔符,是[…]语法的一部分。
instance GenProg m e where ...