New GL agnostic style. Types only hold data. set of generic functions. WIP