Yes, shallow (but it looks through newtypes). To do it more deeply would require some way to mark where to stop.
On Fri, 3 Sep 2021, David Feuer wrote:
> Occasionally, it's useful to make things lazier. The utility-ht
> package has long offered
>
> forcePair :: (a,b) -> (a,b)
> forcePair ~(a,b) = (a,b)
right :-)
> But that only works for pairs! If you want to work with records/tuples
> much more generally, now you can do so conveniently with the lazify
> package. Please take a look and let me know what you like and dislike,
> and whether there's anything more you want.
>
> https://hackage.haskell.org/package/lazify-0.1.0.1
It's shallow lazify, right?