Add when/node definitions

Again `lift` can't be perfectly represented without union types, and I don't think it will be possible to represent `liftAll` at all.