Got rid of the self type param on GeneralPurpose!

made BaseIndex a new type