why val and not def?