implement simple monads from scratch for learning purposes (no scalaz)