Dependent Types
GHC近几年的一个发展趋势是试图将Dependent Types的概念引入Haskell。什么是Dependent Types?简单的说就是依赖于值的类型(types depend on values)。例如[a](或者说List a)在Haskell中是一个列表,它的类型取决于传入的类型(depend on types)而不是传入的值(depend on values),它可以是[Int],[Bool]等等。但当有一些额外的要求时,比如我要定义一个列表类型,这个类型的列表长度大于3(List n a where n > 3),一般来说Haskell是做不到这一点的。很容易想到,这种依赖于值的类型有助于编写更加健壮的程序,很多运行时的bug可以在程序的编译期规避掉,比如如果我有一个保证非零的整数类型,那我可以避免除以零的bug;如果我有非空的列表类型,那可以避免对空列表求head导致的Exception等。
Learn You A Haskell For Great Good 是一本很好的Haskell语言入门书籍,但它可能也是唯一一本让我读完以后写不出一个“像样”的Haskell程序的入门书。就像前一段时间 Reddit上讨论的,Simple Haskell和Fancy Haskell的区别。在Reddit泡的时间越长,越发觉得除我之外的所有人都在写Fancy Haskell。
我把一部分原因归于GHC的发展。作为事实上的Haskell编译器,GHC一直在不断引入新特性,使得它实际支持的语法比 Haskell 2010 Report 定义要大得多。翻开GHC的用户手册,第九章 GHC Language Features,里面的小节从9.1一直排到9.40,可怕。当然并不是所有的GHC扩展都同等重要,但某些语法扩展确实比其他的更重要。
因此我想简单写一些关于GHC/Reddit常用或常提及,但又不在LYAH里面被包括的语法和范式,我称之为LYAH Extended。大致分为三块:一是GHC对Haskell类型系统的扩展,二是和应用范畴论相关的一些库和功能,三是Effect System。题目很大,我也知道凭目前的经验我写不好,但我还是想去做。
Read moreIcinga 2 是一个基于Nagios插件之上的一个监控框架。
Read more…or you can find more in the archives.