Implement the map function using only foldRight, foldLeft and unfold in Scala


I have to implement the Map function using only the foldRight, foldLeft and unfold. This means that I have to loop through every element in the list and apply a function f to it.

I have declared my own list as follow:

abstract class IntList
case class Nil() extends IntList
case class Cons(h: Int, t: IntList) extends IntList

And I've implemented the foldRight, foldLeft and unfold functions.

and the implementation of the new map function:

def map(ls: IntList, f: Int => Int): IntList = // ??

I've been thinking for a while now, but I don't have a clue where to begin. I may not use recursion in the map function. I'm pretty sure that I have to combine the power of fold and unfold together. Unfold returns a IntList, which is the return type of map. But I'm not sure what I have to give with this function.

Anyone has a clue? :)

Match the types, fill in the arguments to match.

For instance, if you are going to use foldRight, then B must be IntList, because that's the type returned by map. Now fill in the arguments to foldRight with whatever values you have that match the types.