haskell - 为什么是 [ ( True , [ ] ) , ( False , [ ['a'] ] ) ] , "[ (Bool , [ [char] ] )]" 的类型?
问题描述
当我输入:type [(True,[]),(False, [['a']])] , "[(Bool,[[char]])]"
ghci 时,它会输出[ (Bool , [ [char] ] )]
。Haskell 的类型推断怎么可能将空列表和 [[char]] 视为相同。
解决方案
Haskell 知道True
andFalse
是Bool
s,而且我们知道列表的所有元素都具有相同的类型。
因此,我们正在寻找一种类型[(True,[]),(False, [['a']])]
。我们看到元素是一个二元组,第一个元素是 a Bool
,第二个元素是一个空列表,因此它的类型[] :: [a]
为a
,当时未知。
现在,如果我们看第二个项目,然后看(False, [['a']])
. 因此,这是一个 2 元组,False
作为第一项,[['a']]
作为第二项。的类型'a'
是Char
,因此['a']
有类型[Char]
,并且[['a']]
有类型[[Char]]
。由于列表的元素应该具有相同的类型,因此我们得出a
第一项的类型参数是a ~ [Char]
,因此外部列表具有类型[(True,[]),(False, [['a']])] :: [(Bool, [[Char]])]
。
推荐阅读
- javascript - 使用 JS ID 作为 html 中的背景图片 url
- typescript - 在 TS 中,为什么 number[][number] === number?
- python - 使用 web3.py 解码智能合约的返回值?
- c# - 如何从 Firebase unity c# 中的数据快照获取密钥?
- sql-server - 用户编辑由直通查询的结果过滤的链接 SQL Server 表
- swiftui - 如何将我的 SwiftUI 视图的 @State 交换为我的视图模型 @Published 变量?
- html - 如何在表格中显示嵌套 json 数组的数据
- node.js - 如何使用 nodejs、express、YouTube 数据 api 在我的网站上构建实时 Youtube 视频“喜欢”计数*无需刷新*
- graphql - 返回 graphql mongodb 中更新文档的 id
- python - 在主管下运行时如何显示 python 3 输出?