Haskell中一个奇怪的类型类。什么是“类(Eq e,GenExpr e,MonadRandom m)=> GenProg m e | e - > m其中”

时间:2011-12-12 16:07:57

标签: haskell typeclass

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中的所有语法?

1 个答案:

答案 0 :(得分:7)

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

m

出现在有效的程序中。 (即,如果有多个此类实例声明具有相同的instance GenProg m e where ... ,则会出现编译错误。)