Enforce exhaustive matches

Closes #36