A lot of aspects of programming seem very very difficult until they click. Recursion and pointers are the canonical examples for basic programming. Although I'm still on the same side of learning Haskell as you, I think these things can be grokked by non-geniuses given enough practice and determination.