cf my previous comment, please detail the hidden cast functor.