Fast sums of power algorithm
The search' could could be written more idiomatically (but not necessarily faster) as

search' [] = []
search' (x:xs) | goal x    = x : search' xs
               | otherwise = search' (succ x ++ xs)

The Eq constraint on searchDfs seems to be unused.
In succN, you are calculating sum+i'^d twice (unless the compiler optimizes that away, but it’s better not to rely on that). Also, it will calculate it for all values of i' until goal, although you probably want to abort early. Maybe using takeWhile would be better:

 succN (sum,i,d, goal) =
     takeWhile (\(s,_,_,_) -&gt; s &lt;= goal)
               [( sum+i'^d, i', d, goal) | i' &lt;- [(i+1)..goal]]

It looks as if the d and goal field of your Nodes is always the same. Then you shouldn’t have it as part of the Node, but rather pass it around explicitly. You can do that without modifying searchDfs!