mhw*_*bat 12
undefined是一个函数,如果您尝试评估它会导致错误.(但是,如果你不试图评估它,它没有坏处.)让我们检查类型签名undefined:
ghci> :t undefined
undefined :: a
Run Code Online (Sandbox Code Playgroud)
这a是一种类型的变量,并且由于不存在在式签名识别约束(出现类型约束之间::和=>符号),a可以是任何类型.
我不确定:你的例子中是否真的想要一个.
[1,2,undefined]是一个整数列表,因此undefined该表达式中的类型也是一个整数.
(1:2:undefined)也是一个整数列表,但是:将列表作为其第二个参数,因此undefined该表达式中的类型是整数列表.
我认为没有[1,2:undefined]道理.1是一个整数,但是2:undefined是一个整数列表.您不能拥有包含不同类型元素的列表.
编辑:
undefined不是真正的部分列表*,它只是一个值(可以是任何类型,包括列表).例如,[1,2,undefined]是一个包含三个元素的列表.第一个元素是1,第二个元素是2,第三个元素不能被评估 - 但它是一个整数.
*但是,undefined作为最后一个元素的列表可用于表示某种"部分列表",只要您无法评估该元素.(我认为这就是@Daniel的意思).但是,如果在它之前或之后有元素,您可以评估它们.例如:
ghci> last [1,2,undefined,4]
4
Run Code Online (Sandbox Code Playgroud)
编辑#2:
另一个例子可能有帮助 在这里,我创建了一个包含四个元素的列表,其中一个是(c)undefined.当我查询ghci以找出其类型时c,我发现它只是一个整数,而不是列表.
ghci> let (a:b:c:d) = [1,2,undefined,4]
ghci> :type c
c :: Integer
Run Code Online (Sandbox Code Playgroud)