我目前正在尝试学习Haskell,但我正在努力理解语法.例如,采取以下map功能:
map :: (s -> t) -> [s] -> [t]
map f [] = []
map f (x:xs) = f x : map f xs
Run Code Online (Sandbox Code Playgroud)
我理解该函数的作用,并且它map具有f :: s -> t作为参数的函数.但我读到map :: (s -> t) -> [s] -> [t]"map是一个函数,它将函数映射从s映射到s再映射到s然后映射到t",这显然是错误的.有人可以为我清除这个吗?
ham*_*mar 17
(s -> t) -> [s] -> [t]可以通过两种方式读取类型.一种方法是将其视为两个参数的函数,第一个是类型的函数,s -> t第二个是类型列表[s].返回值是类型[t].
另一种方法是理解函数箭头是右关联的,因此类型相当于(s -> t) -> ([s] -> [t]).在这种解释下,map是一个函数,它从元素到元素接受一个函数s -> t,并将它从列表转换为列表中的函数[s] -> [t].
同样,使用该功能时,你能想到的map foo xs作为应用功能map,以两个参数foo和xs.或者,由于函数应用程序是左关联的,您可以将其视为(map foo) xs,应用于map单个参数foo以获取随后应用的新函数xs.
由于Haskell函数是curry,这些只是看待完全相同的两种方式.
| 归档时间: |
|
| 查看次数: |
286 次 |
| 最近记录: |