The case for `Optional` and `Labelled` are identical, could you factorize them in one function that will also contain the computation of `simple_name` and take the symbols "?" or "~" as argument?