haskell - 元组列表的类型构造函数是什么?
问题描述
问题
生成具体类型的类型构造函数是什么?[(Int,String)]
问题的由来
我认为这听起来要么是一个愚蠢的问题,要么是一个毫无意义的谜语。我希望以下内容能说服您,我实际上是在尝试在我对基础知识的理解中找出差距。
我知道[]
- 是一个值(任何类型的空列表),
- 它是一个(一元)类型构造函数;
要“可视化”第二个方面,我可以输入
> x = [1,2,3] :: [] Int
> :t x
x :: [Int]
这清楚地表明[]
应用于具体类型Int
给出了另一种具体类型[Int]
。
到目前为止,一切都很好。
另一方面,(,)
也有两层含义:
- 它也是一个(二进制)类型构造函数,我用这个来验证
> x = (1,1) :: (,) Int Int
> :t
x :: (Int, Int)
- 但它也是一个值构造函数:
> (,) 1 "hello"
(1,"hello")
因此,如果[]
和(,)
都是可以起源于其他类型的类型构造函数,具体类型[Int]
和(Int,Char)
,我想知道生成类似 的类型的类型构造函数是什么[(Int,Char)]
。
解决方案
它不是一个单一类型的构造函数,而是一个嵌套类型的构造函数:
λ> x = [(1, 'a')] :: [] ((,) Int Char)
λ> :t x
x :: [(Int, Char)]
推荐阅读
- c++ - C++ 中初始化列表的顺序
- java - 从任务逐行更新 TextArea 的最佳方法是什么?
- python - 如何使用 Featuretools 为没有直接特征的单个表创建特征?
- git - 致命:无法创建工作树目录:没有这样的文件或目录
- java - java中的简单计算器
- sql-server - T-SQL 获取 SQL Server 2012 中登录角色的信息
- android - 可折叠属性 Android Q
- angular - 如何通过 Angular 6 中的服务将对象发送到不相关的组件?
- c# - 从 Microsoft Dynamics 365 在线调用外部 api
- c# - 我在 dotnet core 中创建了一个 API,我想在 mvc 5.2 中使用它