Function Haskell,高阶函数和什么输入属于这里?

Function Haskell,高阶函数和什么输入属于这里?,function,haskell,input,Function,Haskell,Input,因为我不理解haskell中的高阶函数,所以我尝试了这个 tryout :: (a ->b) -> Int tryout p q = 4 我也可以 试用期p=4 为什么既可以做p又可以做p q tryout :: (a ->b) -> Int tryout p q = 4 当我试着得到它的时候,我用34,3->4和3进行了试用,但都没有成功。 有人能给我解释一下我在这里做什么,为什么可以写p和pq(这可能是因为p=a->b,pen q是a和b),我能举一个例子来说明我

因为我不理解haskell中的高阶函数,所以我尝试了这个

tryout :: (a ->b) -> Int
tryout p q = 4
我也可以 试用期p=4 为什么既可以做p又可以做p q

tryout :: (a ->b) -> Int
tryout p q = 4
当我试着得到它的时候,我用34,3->4和3进行了试用,但都没有成功。 有人能给我解释一下我在这里做什么,为什么可以写p和pq(这可能是因为p=a->b,pen q是a和b),我能举一个例子来说明我可以做什么来称为试用吗

tryout
将任何函数作为其参数,并返回一个整数。因为没有任何值可以调用函数,
tryout
只能忽略它,并返回一些整数。(对于类型为
Int
的每个值,总共有一个
tryout
的实现)

如果
tryout
还对类型
a
附加了一个参数,那么您至少可以应用该函数来获取类型
b
的值,但您仍然无法对其执行任何操作,因为
tryout
必须返回
Int

tryout :: (a -> b) -> a -> Int
tryout _ _ = 4

-- tryout length "foo" == 4; a ~ String, b ~ Int
现在,假设除了类型
a->b
的函数,类型
a
的值之外,还有类型
b->Int
的参数。现在我们终于可以做一些不平凡的事情了(尽管仍然很简单)

我们将
f
应用于
x
以获得
b
类型的值,然后将其传递给
g
,以获得
Int
我们可以返回的值。它不是唯一的类型检查定义;我们可以
仍然忽略
f
x
g
,并像前面的示例一样返回一个固定的
Int

上述操作会产生一个错误,
tryout
此处采用一个参数。类型为
A->b
的函数。你是对的,它不是。但我还是不明白a->b的意思。a->b型的功能是什么?你能简单地给我解释一下吗,因为我觉得我没有掌握这方面的任何概念。通过类型签名,
tryout
只接受一个类型为(
a->b
)的函数参数,并返回一个
Int
类型值。例如
tryout f=const 4 f
或(
tryout=const 4
作为速记)。它还可以使用
f
最终生成一个整数值,而不是丢弃它。
a->b
是任何函数的类型,因为输入类型和返回类型都不受限制,并且两者不必相同。
tryout :: (a -> b) -> a -> Int
tryout _ _ = 4

-- tryout length "foo" == 4; a ~ String, b ~ Int
tryout :: (a -> b) -> a -> (b -> Int) -> Int
tryout f x g = g (f x)