Haskell Map函数类型详细

mk4*_*280 0 haskell functional-programming

map :: (a -> b) -> [a] -> [b]
map f xs = [f x | x <- xs]
Run Code Online (Sandbox Code Playgroud)

该定义来自Hutton的Haskell编程(第62页).

看看它的类型,我理解该函数如何获取作为函数的第一个参数和作为列表的第二个参数.

但上述成为类型(a -> b) -> ([a] -> [b])?等等map接受函数,并返回一个函数,[a]并返回[f x|x <- xs]?

为什么不(a -> b) -> [a] -> [b]代替(a -> a) -> [a] -> [a] ?

例如,这本书使用 map(+1)[1,3,5,7]

有人可以详细解释一下这个功能吗?

kar*_*kfa 5

函数return可以是任何其他类型,例如字符串上的长度.符号

(a -> b) -> [a] -> [b]
Run Code Online (Sandbox Code Playgroud)

相当于

(a -> b) -> ([a] -> [b])
Run Code Online (Sandbox Code Playgroud)

一般来说

a -> b -> c -> d
Run Code Online (Sandbox Code Playgroud)

相当于

a -> (b -> (c -> d))
Run Code Online (Sandbox Code Playgroud)

你的功能(+1)碰巧是Num a => a -> a一个特例.