scalaz day1, it is so elegant but so hard to learn.