《Ωmega编程中的高级类型模式探索》
1. 练习题与基础函数编写
首先有一个练习题,要求编写 or 和 not’ 函数,它们的类型分别为 (Boolean ~> Boolean ~> Boolean) 和 (Boolean ~> Boolean) 。这里使用 not’ 而非 not ,是因为 not 已被预定义。对于 or 函数,需要考虑对哪些参数进行模式匹配,不同的组合可能会有不同结果,有些组合 Ωmega 可能不允许,具体原因可参考相关附录。
2. 广义代数数据类型(GADTs)
GADTs允许构造函数具有比Haskell中数据声明所支持的类型更通用的类型。其重要性在于,额外的通用性使程序员能够使用类型索引和见证(或证明对象)来表达类型的属性。在 Ωmega 中,数据声明可以定义广义代数数据类型(GADT),其特点是在数据声明中显式地用完整类型对构造函数进行分类。
以下是一些示例GADT:
data Seq:: *0 ~> Nat ~> *0 where
Snil :: Seq a Z
Scons:: a -> Seq a n -> Seq a (S n)
data Path:: Shape ~> *0 ~> *0 where
None :: P
超级会员免费看
订阅专栏 解锁全文
89

被折叠的 条评论
为什么被折叠?



