问题是要确定函数的类型:第二个xs =头(尾部xs)
我尝试了一切
:第二秒钟给了我
*Main> :type second
second :: [a] -> a --- is this the function type?
,然后我尝试:type second; :类型“第二个xs =头(尾部xs)”。
它仍然不起作用。如何使用Haskell确定函数类型
答案 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变量。)