💭
Bool → checkbox
enum w/ ≤ 4 constructors → radio buttons
enum w > 4 constructors → pop-up menu
String → text field
Int/Float → text field with formatter, steppers
product → vertically laid out
sum → tabs
recursive → list view
Yeah, one thing that is tricky is that you can have multiple representations for this stuff, so you might want to use a non-canonical module system for it. And switching between views can be handy for different stuff.
This is me probably over-thinking stuff, and in the mode of a language designer - you could probably do something less fancy in Haskell if you just wanted to use deriving or something.