All these concepts actually apply to any programming language. Haskell often allows to express them very concisely and compose them elegantly, but the fact that say, lists can be viewed as a functor (ie, you can apply a function taking an int and returning a string, apply it to a list of ints, and get back a list of strings), is independent of the language. Knowing that fact however does (for a certain type of programmers at least) make it easier to combine different pieces of code.
I usually program in C++ or php, but I do think in monads / functors / applicatives quite often. I then use whatever features of the language I have at my disposal to “encode” my thinking at an appropriate level of abstraction. What level of abstraction that is depends not only on the language, but also how efficient and “communicable” I want my code to be. I don’t mind expanding the `map` of a functor into an explicit for loop, if my junior colleague can more easily deal with it.
In fact, at this point, with functional programming patterns having become so pervasive, most people including beginners have no problem with the concept of functors, and “mapping” functions on things. Monads still have that aura around them, but really, any time you write a line of code that reuses the result of a previous line of code and checks for something, you probably have a monad hiding in there, and “exposing” it might make it easier to factor out your code or find an elegant API.