add more detail on functors