More ideas (probably worth separate issue): 1) use refined types to derive validators 2) use GADT to create withards
More ideas (probably worth separate issue):