View 01.md

『阿男的Haskell进阶学习笔记』*01 开篇*

阿男之前在豆瓣上连载了Haskell的系列学习文章^1,介绍了一些Haskell的基础知识。接下来阿男想开一个新的专栏,继续深入介绍一下Haskell语言的方方面面,以及一些更高阶的Haskell方面的内容。这个专栏里面会更佳深入地讨论Haskell语言的类型系统,一些语言特性的实现,以及Haskell在各个领域的相关应用。

阿男想说,Haskell确实不是适合编程初学者学习的语言,很多语言特性比较抽象,类型系统学习门槛较高,学习资料相对偏少。而且必须承认,Haskell语言虽然也是图灵完备^2语言,但它的应用领域还是有自己擅长的特定方向的。作为一种typed system设计完善,规避side-effect,具有functional特性的语言,Haskell特别适合做语言处理方向的应用,比如pandoc就是Haskell社区很成功的开源项目[^3]。

虽然Haskell也许学习起来很难,但是学习Haskell是绝对值得的,阿男学过,用过的计算机语言非常多,每多学习一种语言,都会扩展自己的思维的边界,获得新的思维方式,而Haskell绝对是非常值得学习的语言,甚至是特别重要的一块。因此,阿男会把Haskell的专栏坚持做下去的,和大家一起学习成长。

View tokenize.rb
require "ripper"
require "pp"
code = <<EOF
i = i + 1
end
EOF
puts code
pp Ripper.lex(code)
View process.c
/* exit() */
#include <stdlib.h>
#include <sys/types.h>
/*
* fork()
*/
#include <unistd.h>
View stitch.sh
convert -density 100 in.pdf -background white -alpha remove out.png
convert -append `ls -1 *.png | sort -n | tr '\n' ' '` all.png
View douban.sh
#!/bin/bash
set +x
tmp=`mktemp -t douban.tmp`
contacts=`mktemp -t douban.contacts`
rlist=`mktemp -t douban.rlist`
START="0"
user_count="1"
echo $contacts
echo $rlist
View gist:ebc7f534428291fabd47101811bbd617
[weli@localhost httpd22]$ git diff
diff --git a/httpd22.spec b/httpd22.spec
index 4986669..231481b 100644
--- a/httpd22.spec
+++ b/httpd22.spec
@@ -14,13 +14,12 @@
%define without_src_zips %{!?_without_src_zips:1}%{?_without_src_zips:0}
# scldir points to the root dir of the jbcs collection
%define scldir /opt/rh/jbcs-httpd24/root
-%define ews_release ews-2.1.1
View gist:a6c109ec783dbbc098f09c913107fb74
buildconf: checking installation...
buildconf: autoconf version 2.63 (ok)
buildconf: libtool version 2.2.6 (ok)
buildconf: libtoolize --automake --copy
buildconf: aclocal
buildconf: autoheader
buildconf: automake -a --foreign --copy
buildconf: autoconf
View VolatileTest.java
/**
* @author <a href="mailto:l.weinan@gmail.com">Weinan Li</a>
*/
public class Lock {
volatile boolean waiting = true;
public void test() {
new Thread(new Runnable() {
public void run() {
View Counter.java
package concurrent.course.intro01;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.Vector;
import java.util.concurrent.atomic.AtomicLong;
/**
* @author <a href="mailto:l.weinan@gmail.com">Weinan Li</a>