解释haskell函数类型时缺少括号
刚接触haskell时,我觉得解释haskell函数类型时缺少括号,haskell,Haskell,刚接触haskell时,我觉得:t缺少括号,无法正确理解函数类型 像这个: Prelude> :info flip flip :: (a -> b -> c) -> b -> a -> c -- Defined in ‘GHC.Base’ 我可以这样说:flip通过如下括号接受一个函数并返回另一个函数: flip :: (a -> b -> c) -> (b -> a -> c) 或者我可以说,flip接受一个函数,b和
:t
缺少括号,无法正确理解函数类型
像这个:
Prelude> :info flip
flip :: (a -> b -> c) -> b -> a -> c -- Defined in ‘GHC.Base’
我可以这样说:flip
通过如下括号接受一个函数并返回另一个函数:
flip :: (a -> b -> c) -> (b -> a -> c)
或者我可以说,flip
接受一个函数,b
和a
并返回元素c
对于相当多的函数类型,我有这种感觉,我想一定有一些规则来消除这种歧义事实上,这不是歧义,而是特性 以加号运算符(+)为例。它有类型
(+)::Num a=>a->a->a
你可以把它看作一个函数,它接受两个数字,然后返回第三个
number
\
----> number
/
number
你这样用这个-
(+) 1 2 (-- evaluates to 3)
or
1 + 2 (-- evaluates to 3)
或者,您可以将其用作
(+)::Num a=>a->(a->a)
它接受一个数字,并输出一个完整的函数,其域和范围都是一个数字,即numa=>a->a
number ------> <function>
其中,incrementorFunc
是将一个数字相加的函数(即incrementorFunc=\x->1+x
)
现在,您可以将此函数传递给代码中的其他地方使用
这种二元性是所有函数固有的,因此类型描述中不需要括号。此功能是Haskell最大的优势之一。事实上,这并不是含糊不清,而是一个功能 以加号运算符(+)为例。它有类型
(+)::Num a=>a->a->a
你可以把它看作一个函数,它接受两个数字,然后返回第三个
number
\
----> number
/
number
你这样用这个-
(+) 1 2 (-- evaluates to 3)
or
1 + 2 (-- evaluates to 3)
或者,您可以将其用作
(+)::Num a=>a->(a->a)
它接受一个数字,并输出一个完整的函数,其域和范围都是一个数字,即numa=>a->a
number ------> <function>
其中,incrementorFunc
是将一个数字相加的函数(即incrementorFunc=\x->1+x
)
现在,您可以将此函数传递给代码中的其他地方使用
这种二元性是所有函数固有的,因此类型描述中不需要括号。此功能是Haskell最大的优点之一。您不需要括号,因为两者之间没有区别 纯粹主义者会说,所有Haskell函数只接受一个参数。没有多参数函数。例如:
map f [1..10]
被解释为:
(map f) [1..10]
i、 例如,map
与参数f
一起应用,结果与参数[1..10]
一起应用
正是这种解释使得自动咖喱在Haskell中起作用。从某种意义上说,咖喱是哈斯克尔的一种错觉,即我们看到
map f
,我们看到map
的咖喱形式,因为只有一个参数。实际上map
只接受一个参数,因此map f
完全适用。不需要括号,因为两者之间没有区别
纯粹主义者会说,所有Haskell函数只接受一个参数。没有多参数函数。例如:
map f [1..10]
被解释为:
(map f) [1..10]
i、 例如,map
与参数f
一起应用,结果与参数[1..10]
一起应用
正是这种解释使得自动咖喱在Haskell中起作用。从某种意义上说,咖喱是哈斯克尔的一种错觉,即我们看到
map f
,我们看到map
的咖喱形式,因为只有一个参数。实际上map
只接受一个参数,因此map f
完全适用。不确定Num a=>(a->a)->a是什么意思。你的意思是numa=>(a,a)->a
,它就是这样的…@luqui-你说得对,我太马虎了。。。。你对我的基本意思是正确的。给我几秒钟,我会改写部分内容。我不确定你所说的numa=>(a->a)->a
是什么意思。你的意思是numa=>(a,a)->a
,它就是这样的…@luqui-你说得对,我太马虎了。。。。你对我的基本意思是正确的。给我几秒钟,我会改写部分内容。你的问题到底是什么?你的问题到底是什么?