在 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/