Another quick and easy solution. This doesn't mean it's an easy problem!; no, it's more like playing a level at the rookie level. The hard and "correct" solution would be to work it out on pen-and-paper using Number Theory.
Statutory Warning: Spoilers ahead
digits :: Int -> [Int]
digits n = digitsHelper n []
where
digitsHelper num dList =
if num > 0
then digitsHelper (div num 10) $ (mod num 10) : dList
else dList
sumFifthPow :: Int -> Int
sumFifthPow n = sum $ map (^ 5) $ digits n
euler30 :: Int -> Int
euler30 limit = sum $ [x | x <- [2 .. limit], x == sumFifthPow x]
Again, this version needs "manual intervention", since I used the rough approximation that if euler30 1000000
and euler30 10000000
gave the same result, this was probably the right answer. It was.