相关疑难解决方法(0)

Haskell部分函数应用程序用$

我是Haskell的新手,看一个使用函数应用程序的简单例子$.

它似乎很简单 - 它需要一个函数并将其应用于一个值.

所以这是有道理的:

> (+3) $ 2
5
Run Code Online (Sandbox Code Playgroud)

这也是有道理的:

> ($) (+3) 2
5
Run Code Online (Sandbox Code Playgroud)

这是有道理的,因为第一个参数是函数,第二个参数是值.

现在考虑使用$创建部分功能.

查看类型,这是有道理的 - 它只需要一个Num类型值b:

> :t ($) (+3)
($) (+3) :: Num b => b -> b
Run Code Online (Sandbox Code Playgroud)

但是这里我迷路了 - 这里发生了什么?:

> :t ($) (2)
($) (2) :: Num (a -> b) => a -> b
Run Code Online (Sandbox Code Playgroud)

我原以为第一个参数需要是一个函数,而不是一个简单的Num值.

所以这是我的问题:

  1. 这里发生了什么事?
  2. 约束Num (a -> b)语法是什么意思?
  3. ($)以这种方式使用的例子是什么($) (2)

谢谢!

polymorphism haskell types partial-application parametric-polymorphism

4
推荐指数
1
解决办法
109
查看次数