Infinite work is less work
    strong :: (Integral i) => [i] -> [i]
    strong = mapMaybe fst3 . scanr g (Nothing, 0, 0)
        where fst3 (x, _, _) = x
              g n (_, p, pp) = (p  pp + n), n, p)

Haskell makes a better Perl (especially if, like here, you don't bother with readability).