Nifty example of a Haskell lens library using custom type errors to explain what's wrong: https://github.com/mrkgnao/silica/blob/master/README.md