数据types提升为依赖challenged

通读ghc 7.4之后。 发布前的注意事项和给予Haskell一张促销纸,我仍然困惑你实际上做什么与促销types。 例如,GHC手册给出了关于升级的数据types的以下示例:

data Nat = Ze | Su Nat data List a = Nil | Cons a (List a) data Pair ab = Pair ab data Sum ab = L a | R b 

这些有什么样的用途? 你可以给(代码)的例子?

文件本身至less有两个例子:

“1.导言”说:“例如,我们可以确保(在编译时)所谓的红黑树真的具有红黑色的属性”。

“2.1促进数据types”讨论了长度索引的向量(即,带有编译时“索引越界”错误的向量)。

你也可以看看以前的工作,例如用于types安全的异构列表和可扩展集合的HList库。 奥列格Kiselyov有许多相关的作品。 你也可以阅读有关从属types编程的作品。 http://www.seas.upenn.edu/~sweirich/ssgip/main.pdf在Agda中有types级计算的介绍性例子,但也可以应用到Haskell。;

粗略地说,这个想法是给列表的head更精确的types。 代替

 head :: List a -> a 

它是

 head :: NotEmptyList a -> a 

后者的head函数比fomer更安全:它永远不能应用于空列表,因为这会导致编译器错误。

您需要使用types级别的计算来expressiontypes,例如NotEmptyList。 具有函数依赖关系的类类,GAGT和(索引)types系列已经为haskell提供了弱types的计算forms。 你提到的工作只是在这个方向上进一步阐述。

有关仅使用Haskell98types类的实现,请参阅http://www.haskell.org/haskellwiki/Non-empty_list

Nat例如可以用来构造数字vector,只有在长度相同的情况下才能添加,在编译时检查。

Interesting Posts