什么差异Int a => a - > String vs Int - >串

时间:2017-01-17 02:06:02

标签: haskell

Int a => a -> StringInt -> String之间的区别是什么?

成功:

f1 :: Int -> String

错误:

f1 :: Int a => a -> String

f1 n = show n

1 个答案:

答案 0 :(得分:3)

Int是一种具体类型,因此不能用于创建约束。类型类(类型* -> Constraint)(如Num)用于创建约束。

你也不需要。约束的目的是指定类似a的类型变量必须是特定类的实例的类型。像Int a这样的东西只能表示“a类型Int”,并且只有一种类型(惊讶:Int),这是真的,所以你只需写Int -> String

Num a => a -> String这样的约束定义了一个函数的类型,该函数接受实现Num的任何类型的参数,可以是IntInteger,{{1 }},Float或其他一些合适的类型。