sep*_*cmk 0 syntax haskell dollar-sign
我对haskell的($)感到很困惑.
当我输入
:t ($)
Run Code Online (Sandbox Code Playgroud)
在ghci.我会得到
:($) :: (a -> b) -> a -> b
Run Code Online (Sandbox Code Playgroud)
但是,当我输入
:t ($ 3)
Run Code Online (Sandbox Code Playgroud)
我会得到
($ 3) :: Num a => (a -> b) -> b
Run Code Online (Sandbox Code Playgroud)
那么,为什么($)接受第二个参数没有任何错误?
好($)是一个运算符,它是一个中缀函数.它的定义非常简单(实际上唯一让它变得有趣的是它的固定性,而且我确信谷歌有很多资源):
($) :: (a -> b) -> a -> b
f $ x = f x
Run Code Online (Sandbox Code Playgroud)
与所有运算符一样,您可以通过仅应用第一个或仅第二个参数来获取部分运算符.对于加法(+)运算符,这可能更明显:
(+ 2) -- equivalent to \x -> x + 2
(2 +) -- equivalent to \x -> 2 + x
Run Code Online (Sandbox Code Playgroud)
这同样适用($ 3)- 它相当于\f -> f $ 3.这个函数的类型应该非常清楚:它的参数f必须是一个函数,它接受一个数字并返回一些else(f :: Num a => a -> b),整个函数返回与返回相同的类型f.这给了
(\f -> f $ 3) :: Num a => (a -> b) -> b
Run Code Online (Sandbox Code Playgroud)
因此($ 3) :: Num a => (a -> b) -> b.
| 归档时间: |
|
| 查看次数: |
151 次 |
| 最近记录: |