What prevents me from using applicative functors that return, after tensor product, a container of a tuple, is that, before calling some Constructor.tupled, I have to carefully work on the tuple.
E.g.
getName <*> getDOB <*> getMemberID <*> flatMap (User.apply _).tupled
would be cool, but if User constructor takes first name and last name, and DOB should be converted from String to Date...
In short, I've almost convinced myself to write additional constructors.
But then another impediment. What if I need to check the values and complain if they are wrong. Like, no Sue can be less than 70 years old, right? Something like that. And no 70-year-old can be called Tasha or Brenda or Luanda, right? In short, constructors should be partial functions, then they can be lifted.
Or...?