Before this commit we were using overloading for concrete structures and type classes for abstract ones. This is the first of series of commits that implement this modification