I've recently began studying Haskell and in one of my assignments I've got an exercise which asks to define the map function in terms of foldr, and I can't for the life of me figure out how to do this. I've searched stack overflow for solutions and came across this one:
How would you define map and filter using foldr in Haskell?
However here the solution involves using lambdas, which I haven't covered yet and I assume that because of this the exercise should be doable without lambdas (although you never know).
I guess what confuses me the most is that map takes in a unary function (e.g. +1), whereas foldr takes a binary function (e.g. +), and I don't really see how to make these two work together.
foldr is actually easy: Given a list (written with : and []) like
a : (b : (c : (d : [])))
then applying foldr h x to it will replace every : with `h` and [] with x:
a `h` (b `h` (c `h` (d `h` x)))
Compare that with what map f would to the list:
f a : (f b : (f c : (f d : [])))
This should guide you in choosing h and x so that foldr h x = map f.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With