cleanup, use whnf since the operations are strict anyway