Ana*_*naK 15 haskell typeclass extensible
我正在阅读一篇关于依赖类型编程的论文,并且发现了以下引用:
"[...]与Haskell的类型类相比,数据类型[...]是封闭的 ",在某种意义上说,如果不扩展数据类型,就无法向Universe添加新类型.
我的新手问题是:Haskell类型类在什么意义上打开?它们如何可扩展?此外,拥有此属性(开放与封闭)的类型理论后果是什么?
谢谢!
Adr*_*ian 12
类型类是打开的,因为您可以使任意类型成为它的实例.创建类型类时,指定接口,但不指定属于它的类型.然后在包含类型类定义的任何代码中,您可以使用它的类型实例从界面使用instance TypeClass type of
语法提供必要的函数.
给定类型类:
class Monoid m where
mempty :: m
mappend :: m -> m -> m
Run Code Online (Sandbox Code Playgroud)
...它(基本上)作为字典类型在引擎盖下实现:
data Monoid m = Monoid
{ mempty :: m
, mappend :: m -> m -> m
}
Run Code Online (Sandbox Code Playgroud)
例如:
instance Monoid [a] where
mempty = []
mappend = (++)
Run Code Online (Sandbox Code Playgroud)
...被翻译成词典:
listIsAMonoid :: Monoid [a]
listIsAMonoid = Monoid
{ mempty = []
, mappend = (++)
}
Run Code Online (Sandbox Code Playgroud)
...当编译器使用容量为Monoid
s 时,编译器会查询字典.
这带给我们你的问题:
在什么意义上Haskell类型类打开?它们如何可扩展?
它们是开放的,就像多态值是开放的一样.我们有一些多态数据类型:
data Monoid m = ...
Run Code Online (Sandbox Code Playgroud)
...我们可以将多态m
类型变量实例化为任何类型,我们可以为mempty
和mappend
字段提供合适的值.
归档时间: |
|
查看次数: |
835 次 |
最近记录: |