emgm: Use native Scala product & sum types
emgm: Make it work :)
EMGM: Use more anonymous functions for ease of use
EMGM: Add sum example
EMGM: Make generic paramter for rep() implicit