added ILearner and implementations