作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
对于像 Scala 和 Haskell 这样的语言,您可以使用类型构造函数来构造类型。区分所有这些部分的正确词汇是什么?
A
是一种类型。 F[A]
也是一种类型。是否存在区分这两者的语言?
什么是A
?
什么是F[A]
?
什么是F
?
最佳答案
不知道在 Scala 中,但在 Haskell 中,报告确实区分了两个句法类别:“类型”和“构造函数”。构造函数就是那些单原子类型,以大写字母开头,由 data
和 newtype
声明创建。例如
data Foo a = Bar
创建一个新的类型构造函数 Foo
(和一个新的数据构造函数 Bar
),并且可以通过将 Foo
应用于另一个类型来形成类型.当然,构造函数不必是更高级别的; data Baz = Quux
还声明了一个名为 Baz
的类型构造函数,不允许将其应用于任何其他类型。
(但请注意:通常使用“类型构造函数”来表示“带有箭头类型的任何类型级表达式”,因此如果您正在进行一些技术写作,您应该在介绍中包含一些文字以阐明其中的哪一个您打算在文档的其余部分中使用这两个含义。)
因此,在您的示例中,我们可以说 Map
是构造函数,Char
是构造函数,Int
是构造函数,Map Char
是一种类型,Map Char Int
是一种类型。
据我所知,这些类别中的任何一个都没有通用的简写术语:“绝对不是构造函数的类型”、“类型 *
”、“类型这绝对不是那种 *
”。对于允许应用于另一种类型的类型,有术语“高等类型”——例如Map
和 Map Char
都是更高级的类型。
关于scala - F[A] 和 A 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51849405/
我是一名优秀的程序员,十分优秀!