scala macro base