什么是功能类型

时间:2019-01-22 02:07:11

标签: haskell

问题是要确定函数的类型:第二个xs =头(尾部xs)

我尝试了一切

:第二秒钟给了我

*Main> :type second
second :: [a] -> a --- is this the function type?

,然后我尝试:type second; :类型“第二个xs =头(尾部xs)”。

它仍然不起作用。如何使用Haskell确定函数类型

1 个答案:

答案 0 :(得分:3)

您已经知道,可以使用GHCi通过使用:type命令(或更短的版本:t)来找到Haskell标识符的类型。在这种情况下,GHCi给您答案second :: [a] -> a::符号的意思是“类型”,因此此答案只是GHCi告诉您“ second的类型为[a] -> a”的方式。

但是这里还有另一个问题:这种类型是什么意思?好吧,让我们把它拆开:

  • 任何形式为x -> y的类型都是一个函数类型,该函数将类型为x的一个参数作为输入,并返回类型为y的值。
  • 在这种情况下,我们具有类型[a] -> a,因此输入类型为[a](即类型为a的值的列表),而输出类型为{{1 }}(即类型为a的单个值)。
  • 因此,语句a意味着second :: [a] -> a是一个函数,该函数将second的列表作为输入,并给出相同类型{{1 }}。这与我们对该函数的了解有关:给定一个列表,它从该列表中返回单个值。

编辑:正如@chepner在评论中指出的,重要的是要意识到a any 类型的替代品。唯一的限制是,如果输入是a的列表,则-无论a是什么-返回类型也必须是a类型。 (这种不确定的类型称为 type变量。)