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 中的所有语法?
最佳答案
它是一个具有函数依赖性的多参数类型类。 GenProg
是类名,两个参数是m
(必须是MonadRandom
的实例)和e
(必须是 Eq
和 GenExpr
的实例)。然后 |
将实例头与函数依赖 e -> m
分开,这表示实例中的类型 e
决定了类型构造函数m
,换句话说,对于任何类型e
,最多可以有一个m
这样一个
instance GenProg m e where ...
出现在有效程序中。 (即,如果有多个这样的实例声明具有相同的 e
,则会出现编译错误。)
关于haskell - Haskell 中一个奇怪的类型类。什么是 "class (Eq e, GenExpr e, MonadRandom m) => GenProg m e | e -> m where",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8477189/