I'd want to explain Category theory it in term of computer science, so
my question is:
- It's correct to consider only the category of Set?
- It's correct to consider only the category of Set when I explain functional programming in term of Monoid/Functor/Algebraic
Data/Product type and so on?
I believe you mixed up 2 questions.
- How to explain category theory in terms of computer science?
- How to explain computer science in terms of category theory?
Question 2 was addressed in other answers, so I will focus on Question 1.
Suppose you consider only the category of sets and functions when teaching category theory. I would not say that this method is incorrect because "correctness" does not make sense in this context to me. I would say that it is useless. As an abstract branch of mathematics, category theory consists of theories (examples: category, monoidal category, category with finite products) and models of those theories (examples: the category of sets, categories of algebraic structures, categories of domains). Any theorem deduced from a theory is true for every model of that theory. Cost–benefit analysis of this approach follows.
- Benefit. The approach saves thought, so to speak. If we know $n$ models of a theory, every proof yields $n$ theorems instead of $1$.
- Cost. Theories lie on the next level of abstraction. Abstraction is hard.
The more models, the more useful is the theory. No need to dive into category theory if you wish to reap the benefits of abstraction. Abstract algebra, order theory, topology, and other branches were built on the same principle.
After this long prelude, I hope it is clear why I called it useless. If you consider only the category of sets, $n=1$. The benefit is 0, but the cost still exists. The whole point of abstraction is lost. If you do not need the benefits of abstraction, why stress yourself with abstraction? In this case, why explain or learn category theory in the first place?