class (Eq e, GenExpr e, MonadRandom m) => GenProg m e | e -> m where
Run Code Online (Sandbox Code Playgroud)
确切地说,我无法理解这个GenProg我| e - > m
我猜GenProg是一个构造函数.
这是否意味着:模式与GenProg me或e匹配的那个- > m,其实例可以定义?
顺便说一句,我在哪里可以获得haskell中的所有语法?
它是一个具有功能依赖性的多参数类型类.GenProg是类的名称,这两个参数是m(其具有是的一个实例MonadRandom)和e(其必须是实例Eq和GenExpr).然后,|从所述功能依赖实例头分离e -> m,这表示,式e中的实例来确定的类型构造函数m,换句话说,对于任何类型的e可以有至多一个m,使得
instance GenProg m e where ...
Run Code Online (Sandbox Code Playgroud)
出现在有效的程序中.(即,如果有多个此类实例声明具有相同的e,则会出现编译错误.)