I’m not sure I really understand what you’re trying to achieve, so I have some questions before helping you.
First, Is the validate (or size) function, for a given type, specific to each value or is it the same for all the values of a given type? I mean, these functions are not necessarily the same for int and string types, but is it the same for all int values?
Second, and more importantly, why do you want to create a list of fields? Is it to fold the validate function (or any other operator) over them, as you did with your valid function?