const wrap = (student) => ({
take: (item) => {
student.items.push(item);
return wrap(student);
},
giveHomework: (homeworkQuantity) => {
student.homeworkQuantity += homeworkQuantity;
return wrap(student);
},
doHomework: () => {
const doneHomework = student.items.reduce((done, item) => {
if(item === 'pencil') {
student.homeworkQuantity -= 1;
return true;
}
return doneHomework;
}, false)
if(!doneHomework) console.log('Missing pencil to do homework');
return wrap(student);
},
logMyState: () => {
console.log(student);
return wrap(student);
}
});
const newStudent = (name) => wrap({
name,
items: [],
homeworkQuantity: 0,
})