knowledge about haskell tends to be presented in a "first principles" fashion for whatever reason, which is unfortunate. It's not a very pedagogically sound method. I think it has to do with the systematic temperament of most haskell programmers. But motivation and example should really come first.
The important thing is to not be intimidated. You can really get away with just mimicing code:
main = do x <- getLine
putStrLn ("Hello, " ++ x)
for quite a while before you find that you actually need a proper understanding of the underlying concepts of eg. what monads are and how they work. This is enough to get your classic beginner command line programs running. You can do useful stuff with a very basic understanding. And yet you see people trying to start with (>>=) :: m a -> (a -> m b) -> m b
pure :: a -> m a
as if that's supposed to be in any way meaningful or useful to a newcomer. The trick is to find the good tutorials that give examples for concepts first, and do a good job of demonstrating why abstracting those examples is a useful thing to do.