Sort:  

Yes I went a bit crazy with the abstraction there, thanks for keeping me in check @hjrrodriguez

It's a fun technique however 😀