haskell - 尝试理解 Haskell 的 => 与定义类型

标签 haskell type-constraints

在 Haskell 中,为什么要定义具有类型约束的函数:

ghci> :t (==)  
(==) :: (Eq a) => a -> a -> Bool

而不是定义它,因此它的类型是:

ghci> :t (==)  
(==) :: Eq -> Eq -> Bool

最佳答案

您不会执行第二个版本,因为您会收到编译错误。 Eq 不是类型,而是类型类。您不能在需要类型的地方使用类型类。

如果您确实定义了自己的类型 MyEq,然后定义了类型为 MyEq -> MyEq -> Bool 的函数 ==,表达式 "hello"== "hello" 将无效,因为 "hello" 是 String 类型的值,而不是 MyEq 类型的值。由于 haskell 中没有子类型,因此值不能同时为 String 类型和 MyEq 类型。

因此,如果您想定义一个可以接受满足特定条件的不同类型值的函数,则需要类型类。

关于haskell - 尝试理解 Haskell 的 => 与定义类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3136133/

相关文章:

haskell - 类型类定义中的抽象数据类型

Haskell:无法将类型 ‘[Char]’ 与 ‘Text’ 匹配

haskell - Haskell 中列表列表的笛卡尔积

templates - D:显示给定类型是否具有可比性的模板约束

generics - C# 4.0动态: A potential performant solution to numeric generics?

delphi - 为什么缺少可选参数会导致 "Incompatible types"错误

haskell - 使用 Template Haskell 在编译时评估函数

haskell - 约束中的类型变量 'blah' 不明确...如何修复?

c# - 泛型 C# 上的类型约束 - 多重约束

c# - 泛型类型的泛型类型约束