The unfortunate side-effect of using `list` is that this is no longer fully lazy.  Sounds like this is a reasonable trade-off though.