With functor, we now have a convenient way to apply functions to the contents of an effect, regardless of the type of the effect itself. We were able to check the fish and cook it by applying the same logic we had for an effect-free fish. To get even more comfortable with functors, we will now make a fish pie with our new tool.
First, we'll define a function to make a pie from a single fish:
final case class FishPie(weight: Int)
import ch08.Model._
def bakePie(fish: FreshFish, potatoes: Int, milk: Float): FishPie = FishPie(fish.fish.weight)
That was easy—one fish, one pie, with the size of the fish. Now, we are ready to bake every fish in the bucket:
mapFunc(listOfFishGen.sample.get)(bakePie)
Oops! This won't compile because the functor only accepts the function of one argument, and we have three.
What can we do? One of the possibilities would be to...