I think one of the most useful things that would deserve the name "design pattern" is the "phantom types" technique. It is a more-or-less-systematic way to encode static information in a type parameter. See some examples :
- Haskell wiki
- an OCaml blog
- a Haskell blog
You may also be interested in a related Oleg wondertrick : Lightweight static capabilities (with Chung-chieh Shan).