we usually assume that a trafo maps a param to the same type.
we might allow the use the define a different type the the param is mapped to.
in the former case we also might check that the trafo did not break that rule (time efficient?)
probably the most difficult operations are generate design an the opt.path