所以我被要求"为以下每个表达式提供可能的类型(不涉及任何类型变量)(或者解释为什么你认为表达式是错误的类型)"并且我正在努力表达
[ [], [[]], [[[]]], [[[[]]]], [[[[[ ]]]]] ].
当我:t *the above expression*输入ghci它告诉我它有类型[[[[[[a]]]]]].我很困惑表达甚至在说什么以及它为什么给我这种类型.
也:t [ [True], [[]], [[[]]], [[[[]]]], [[[[[]]]]] ]给出了一个错误,我不知道为什么它是病态的.我认为第一个答案将帮助我理解为什么第二个表达式失败.
要理解表达式为什么[ [], [[]], [[[]]], [[[[]]]], [[[[[ ]]]]] ]有类型[[[[[[a]]]]]],你需要先了解它的类型[].
实际上,[]相当于[a'],哪里a'是没有任何约束的类型变量.这意味着a'可以是任何类型.所以,当构建一个列表,比如,[ [], [[]] ],它是合法的,以取代a'与[a]如下:
[ [], [[]] ] ~ [ [a'] [[a]] ] ~ [ [[a]], [[a]] ] ~ [ [[a]] ]
Run Code Online (Sandbox Code Playgroud)
同样的道理
[ [], [[]], [[[]]], [[[[]]]], [[[[[ ]]]]] ] ~ [ [[[[[a]]]]] ]
Run Code Online (Sandbox Code Playgroud)
但是,当您构建列表时,即使可以是任何类型的列表[ [True], [[]] ],也无法转换True为[a]列表.同样的原因[ [True], [[]], [[[]]], [[[[]]]], [[[[[]]]]] ]是非法的.
| 归档时间: |
|
| 查看次数: |
97 次 |
| 最近记录: |