Form validation can be fun, but it can also be terrible. The problem is that it's usually terrible for the user. This example shows one way to handle form validation in a declarative, functional way without going crazy or introducing excessive new state.
NOTE: There will still be state involved in displaying errors in the UI. We still need to know what validation errors have occurred at any given time.