dropWhileEndLE p is equivalent to
reverse . dropWhile p .
reverse, but quite a bit faster. The difference between
"Data.List.dropWhileEnd" and this version is that the one in
Data.List is strict in elements, but spine-lazy, while this one
is spine-strict but lazy in elements. That's what
LE stands
for - "lazy in elements".
Example:
>>> safeTail $ Data.List.dropWhileEnd (<3) [undefined, 5, 4, 3, 2, 1]
*** Exception: Prelude.undefined
...
>>> safeTail $ dropWhileEndLE (<3) [undefined, 5, 4, 3, 2, 1]
[5,4,3]
>>> take 3 $ Data.List.dropWhileEnd (<3) [5, 4, 3, 2, 1, undefined]
[5,4,3]
>>> take 3 $ dropWhileEndLE (<3) [5, 4, 3, 2, 1, undefined]
*** Exception: Prelude.undefined
...