前段时间在Haskell扩展中的一个(找不到链接)和recently in Ur我发现名称(例如,记录字段)形成一个Kind。有人可以解释为什么Type抽象对他们来说不够吗?为什么名称形成一种而不仅仅是一种类型?
5
A
回答
7
答案很简单:因为它们可以出现在类型中。因此,他们必须在类型级别上生活(否则你需要依赖类型)。而且因为他们生活在类型层面,所以他们被归类。
7
记录系统定义值,类型和(可能)种类的规则。使用什么规则取决于正在设计的类型系统,以及设计者希望达到的目标。
E.g.在Haskell,唱片公司有:
- 值(存取函数)
- 这些值有类型(例如
Record -> Int
) - 这些类型有多种(
*
)
其他记录系统可以使用类型或种类系统用于不同的目的。
通过将标签放置在单独的种类中,类型检查器可以特别对待它们,并具有特殊的规则。自动镜头,或与记录构造(总体可能)做的证明不是真正的通用功能。
在Haskell中使用类系统的一个例子是使用“unboxed types”。这些都是有类型:
- 不同的运行时表示常规值
- 不同的结合形式(例如不能在堆上分配)
为了保持拆箱类型与使用常规混合类型,它们被赋予不同的种类,它允许编译器跟踪它们的分离。
因此,有关于唱片的名字没有什么神奇的,这意味着你必须使用一个不同的来表示它们 - 它只是一个选择一种语言设计者可以 - 在一个依赖性类型的语言,如乌尔或Twelf,这可以是一个有用的区别。
+0
谢谢,关于取消装箱类型的例子很有启发 – Fixpoint 2012-04-24 14:43:03
相关问题
- 1. 使一种类型成为一种类型或另一种类型
- 2. 这种形式的名称是什么?
- 3. c# - 仅在一种形式的KeyUp
- 4. 这种类型的表称为什么?
- 5. 为什么有两种相同类型的xmls,一种不是反序列化,另一种是?
- 6. 为什么Java中的类名(和其他)仅仅是一个建议而不是规则?
- 7. 为什么使用“RIA Services Link”而不是仅仅是一个OData端点?
- 8. 为什么交换只有一种方式,而不是另一种方式?
- 9. 在iOS开发中,为什么他们称之为“ViewController”而不仅仅是“Controller”?
- 10. 为什么我可以转换为这种类型而不是其他类型?
- 11. 回归libsvm:为什么生成的模型包含很多行而不仅仅是一行
- 12. 什么是多种类型到一个别名的typedef?
- 13. 这种类型的编码的名称是什么?
- 14. 为什么第一种方法是promisifying工作而不是第二种?
- 15. 为什么Angular 2将模块名称命名为模块NgModule,而不仅仅是模块
- 16. 为什么TimeSpan.Duration()是一种方法而不是属性?
- 17. 为什么所有记录都被删除,而不仅仅是一个?
- 18. 为什么你会想要创建一个名为* foo()而不是仅仅是foo()的方法?
- 19. 仅记录异常而不是所有种类的日志
- 20. 为什么这种类型不相等?
- 21. 为什么不这种类型检测?
- 22. 为什么tarball叫tarball而不仅仅是焦油?
- 23. DuplicateHandle,为什么重复而不是仅仅获取?
- 24. 为什么在PowerShell中等于“-eq”而不仅仅是“=”?
- 25. 为什么使用react-redux而不仅仅是redux?
- 26. 为什么xmlns:xsi,而不仅仅是XML文档中的xsi?
- 27. 为什么我得到NativeGestures Qt中,而不是仅仅手势
- 28. 为什么scalac会因为匹配/个案返回类型而推断`Foo with Bar`而不仅仅是'Foo`?
- 29. 而另一一种类型的错误
- 30. 为什么这个表格不是第一种正常形式
这个答案已经把所有东西都放在了我的脑海里。谢谢! – Fixpoint 2012-04-24 13:36:51