A recommendation for monads. Don't read too much tutorials, try it. Programm in some languages that emphasises monads and then reflect how you used them. I think these fundamental concepts are way easier to experience than to explain.
Edit: what are toposes and why do you want to learn it? Has it some connection to topology?