Running this in GHCI gives:
GHCi, version 8.2.1: http://www.haskell.org/ghc/ :? for help
Prelude> :load hughes-lists.hs
[1 of 1] Compiling HughesLists ( hughes-lists.hs, interpreted )
Ok, 1 module loaded.
(0.19 secs,)
*HughesLists> x = toStrictList [1..10000] :: StrictList Int
(0.00 secs, 0 bytes)
*HughesLists> genLast $ reverse [1..10000]
Just 1
(0.01 secs, 2,013,288 bytes)
*HughesLists> genLast $ reverseNaive x
Just 1
(9.15 secs, 10,165,531,624 bytes)
*HughesLists> genLast $ reverseIterative x
Just 1
(0.02 secs, 12,746,016 bytes)
*HughesLists> genLast $ reverseCorrect x
Just 1
(0.01 secs, 3,306,824 bytes)
*HughesLists> genLast $ reverseWithDL x
Just 1
(0.01 secs, 5,146,448 bytes)
This probably doesn't take advantage of all of the optimizations that might be available to GHC directly but it's enough to show the O(n2) behavior that Hughes is complaining about. There is nontrivial overhead in doing it this way but it comes within a factor of 2.5 of the native lazy-list-reverse code shipping in GHC and within a factor of 1.5 of the "correct" reverse, while also showing that just writing reverse in the iterorecursive "correct" style allows GHC to improve the runtime by almost 4x.