gpt4 book ai didi

haskell - 为什么类型是 [( True , [ ] ) , ( False , [ ['a' ] ] ) ] , "[ (Bool , [ [char] ] )]"?

转载 作者:行者123 更新时间:2023-12-02 14:56:09 26 4
gpt4 key购买 nike

当我输入 :type [(True,[]),(False, [['a']])] , "[(Bool,[[char]])]" ghci 它输出 [ (Bool , [ [char] ] )]。 Haskell 的类型推断怎么可能将空列表和 [[char]] 视为相同。

最佳答案

Haskell 知道 TrueFalseBool,而且我们知道列表中的所有元素都具有相同的类型。

因此,我们正在寻找类型[(True,[]),(False, [['a']])]。我们看到元素是一个二元组,第一个元素是 Bool,第二个元素是一个空列表,因此类型为 []::[a] a,当时未知。

现在,如果我们看第二项,会看到(False, [['a']])。因此,这是一个 2 元组,其中 False 作为第一项,[['a']] 作为第二项。 'a' 的类型是 Char,因此 ['a'] 的类型为 [Char],并且[['a']] 的类型为 [[Char]]。由于列表的元素应该具有相同的类型,因此我们得出第一项的 a 类型参数为 a ~ [Char],因此外部列表的类型为 [(True,[]),(False, [['a']])]::[(Bool, [[Char]])]

关于haskell - 为什么类型是 [( True , [ ] ) , ( False , [ ['a' ] ] ) ] , "[ (Bool , [ [char] ] )]"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59472344/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com