pattern functor now is a real functor