我正在尝试查找以下Haskell表达式的类型:
map (\x -> x + 1)
由于部分应用了map函数,它将返回另一个函数。
在GHCI中,返回的函数类型为:
let res = map (\x -> x + 1)
:t res
map (\x -> x + 1) :: Num b => [b] -> [b]
以上表达式的类型是否是返回的函数的类型?任何见解都会受到赞赏。
答案 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报告的内容相同。