Haskell:查找涉及map的表达式的类型

时间:2019-06-09 02:04:42

标签: haskell functional-programming

我正在尝试查找以下Haskell表达式的类型:

map (\x -> x + 1)

由于部分应用了map函数,它将返回另一个函数。

在GHCI中,返回的函数类型为:

let res = map (\x -> x + 1)
:t res
map (\x -> x + 1) :: Num b => [b] -> [b]

以上表达式的类型是否是返回的函数的类型?任何见解都会受到赞赏。

1 个答案:

答案 0 :(得分:2)

是的,这是要返回的函数的类型。

但是,GHC如何解决呢?好吧,让我们看一下普通map的类型:

map :: (a -> b) -> [a] -> [b]

现在让我们看一下\x -> x + 1的类型:

(\x -> x + 1) :: Num n => n -> n

(如果您还不知道,这意味着它将n转换为n,其中n可以是Num实例的任何类型即n是任何数字类型。)

因此匹配类型,我们得到:

map           ::         (a -> b) -> [a] -> [b]
(\x -> x + 1) :: Num n => n -> n

所以:

map (\x -> x + 1) :: Num n => [n] -> [n]

与GHCi报告的内容相同。