use patterns for definitions instead of identifiers
add a few monad examples