haskell - Haskell 中一个奇怪的类型类。什么是 "class (Eq e, GenExpr e, MonadRandom m) => GenProg m e | e -> m where"

标签 haskell typeclass

class (Eq e, GenExpr e, MonadRandom m) => GenProg m e | e -> m where

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

我猜 GenProg 是一个构造函数。

这是否意味着:其模式匹配 GenProg m ee -> m 的实例可以被定义?

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

最佳答案

它是一个具有函数依赖性的多参数类型类。 GenProg是类名,两个参数是m(必须是MonadRandom的实例)和e(必须是 EqGenExpr 的实例)。然后 | 将实例头与函数依赖 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/

相关文章:

Haskell:为二维 ZipList 创建一个显示实例

debugging - 中断后在 GHC 中继续调试

list - mapMaybes/catMaybe 在 Windows 和 Ubuntu 中的工作方式不同

haskell - 无法从上下文中推导出 (Eq a) (...)

haskell - 无法推导出父类(super class)

haskell - 试图抽象掉类型类,但类型变量逃逸了

haskell - (++) 惰性求值的性能

haskell - 为列表创建一个镜头(类似)

haskell - 依赖类型可以证明您的代码在规范范围内是正确的。但如何证明该规范是正确的呢?

haskell - 在类型类中使用类型构造函数有什么好处?