Add a nice generic parser / pattern matcher