Using type-level computations via implicits one can state amazingly precise facts about Scala programs in a neat, declarative style. With macros it is also possible to do computation during compilation, typically working in a straightforward, imperative way, being effective, but too bruteforce for some. Are macros principled enough, or they are just a hack? In this talk, we, Eugene Burmako and Lars Hupel, will compare type-level and macro-based approaches and figure out how they can work together for mutual benefit.