[2-1] finished bifunctor def