If we want to get those features done on the type-level, those functions should be created as separated type classes