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

sno*_*now 2 haskell typeclass

class (Eq e, GenExpr e, MonadRandom m) => GenProg m e | e -> m where
Run Code Online (Sandbox Code Playgroud)

确切地说,我无法理解这个GenProg我| e - > m

我猜GenProg是一个构造函数.

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

顺便说一句,我在哪里可以获得haskell中的所有语法?

Dan*_*her 7

它是一个具有功能依赖性的多参数类型类.GenProg是类的名称,这两个参数是m(其具有是的一个实例MonadRandom)和e(其必须是实例EqGenExpr).然后,|从所述功能依赖实例头分离e -> m,这表示,式e中的实例来确定的类型构造函数m,换句话说,对于任何类型的e可以有至多一个m,使得

instance GenProg m e where ...
Run Code Online (Sandbox Code Playgroud)

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

  • @ user20100不,它根本不是"或".`|`只是一个分隔符,是[http://www.haskell.org/haskellwiki/Functional_dependency]语法的一部分. (3认同)