LYAH Extended (1) - GHC 类型系统扩展

    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等。

    Read more
    LYAH Extended (0) - 引子

    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 more
    用Hakyll搭建静态博客

    去年开始对Haskell感兴趣,惭愧的是后来有段时间较忙就把它放下了,这次决定重新学习一遍。没有什么比看书+动手更好的学习方式了,用Hakyll重新搭建github pages似乎是一个很好的起点,于是就开始吧。

    Hakyll是一个静态的站点生成框架,written by Haskell,更多的信息可以参考 Hakyll Homepage1

    Read more
    Icinga2 安装手记

    Icinga 2 是一个基于Nagios插件之上的一个监控框架。

    Read more
    Haskell 自学笔记1:Functor, Applicative Functor, Monoid, Monad

    光看书,这些概念实在是有点绕,借用GitHub Pages整理归纳一下。初学Haskell,还没怎么正式用过,理解上的偏差无可避免。如果有任何错误或遗漏,在后续的博客中改正。

    以下内容主要参考 Learn you a Haskell for great good1.

    Read more
    GitHub Pages Initiates

    Blogger,打开

    代码,插入

    格式,不对

    google,搜索

    文档,放弃

    blogger,卸载

    jekyll,安装

    主题,挑选

    github pages,启动

    Read more

…or you can find more in the archives.