Infinite work is less work
<p><pre><code>    strong :: (Integral i) => [i] -> [i]
    strong = mapMaybe fst3 . scanr g (Nothing, 0, 0)
        where fst3 (x, _, _) = x
              g n (_, p, pp) = (p <$ guard (2 * p > pp + n), n, p)
</code></pre>
Haskell makes a better Perl (especially if, like here, you don't bother with readability).