The functors in category theory, as well as in its application to functional programming, can be seen as a sort of "structured" function: Either two sets $ A, B $rather than simply having a function $ f: A to B $we have a functor $ F $ which contains $ f $but aditionellement also matches the morphisms $ A $ to morphisms on $ B $ (that is, cards not only $ A $ at $ B $ but also maps "structure on $ A $"to" structure on $ B $").
In the theory of functional programming category, objects $ A, B $ are types and morphisms are functions $ A to B $ between the types. This means that map types of functors $ A, B $ to other types $ X, Y $ and functions of the map $ A to B $ to the functions X $ to Y $. Functional programming functors can therefore be seen as a mapping between data types but also to map the functional structure to these data types.
My thought was this: in the context of object-oriented programming, there are really more types of structure on data types than mere functions between them. For example, given two types $ Int $ and $ Bool $, we can not only define functions $ f: Int to Bool $but also things like $ p: Int times Bool $, or more complex data types such as classes with private component classes.
Is there a generalization of functors in "data-type mappings that also preserve the structure", where it does not have to be functorial? I wonder in particular if such a concept is used in the analysis of programming languages.