You're right! I was too fast. Isn't there a way to avoid the incomplete pattern match in the lift function?
maybe this one is slightly better?
keepJust a sa = lift (maybe a id) (keepIf isJust Nothing sa)