什么是[a]作为Haskell中的一种类型?

Dav*_*gea 0 haskell types

这个问题是关于Haskell编程语言的类型.

当我输入

:t []
Run Code Online (Sandbox Code Playgroud)

我得到的回报是:

[] :: [a]
Run Code Online (Sandbox Code Playgroud)

什么是[a]

phi*_*ler 12

像这样重写可能会让事情变得更清晰:

[] :: forall a. [a]
Run Code Online (Sandbox Code Playgroud)

因此,由于它不包含任何值,因此haskell无法决定类型并使其保持打开状态.但是,如果您在类型化表达式中使用它,就像

x = []

f :: [Int] -> [Int]
f l = l

y = f x
Run Code Online (Sandbox Code Playgroud)

它自动被解析为[Int],因为它被用作这种类型.

  • 根本没有,你只是忘了指定如何调用`a` :) (3认同)

Lil*_*ard 5

这是一个占位符.它基本上意味着任何类型都可以去那里.换句话说,如果你有一个功能

someFunc :: [Int] -> ()
Run Code Online (Sandbox Code Playgroud)

你可以通过[]它,因为[]就是[a],将匹配[Int](通过更换a与混凝土占位符Int类型).

现在,如果你看,比方说id,你会发现它有类型a -> a.这意味着它是一个接受任何类型对象的函数,并返回相同类型的对象.有趣的是,因为函数对它给出的对象一无所知(因为它对类型没有约束),你知道这个函数必须做以下两件事之一:

  1. 返回输入对象,或
  2. 返回⊥().