An interesting fact about functor categories is that we can use them to define currying and uncurrying operation on them.

That is, from a functor we can obtain the functor . The proof is quite large so it is left in appendix.

curryFunctor : {0 o : Type} -> {c : Category o} ->
               a ->> (FunctorCat b c) -> (a × b) ->> c

Similarly, we can uncurry bifunctors as a functor . Again, the implementation is quite large so it is left in appendix.

uncurryFunctor :
    {0 o, p, q : Type} ->
    {a : Category p} -> {b : Category q} -> {c : Category o} ->
    (a × b) ->> c -> a ->> (FunctorCat b c)
    -- Proof in appendix