itemToSearch is still closed over by the lambda (i.e. it's not one of its arguments).
Before I get into this - I really wouldn't do this in real life! It's fine that the lambda closes over itemToSearch. I'm only doing this because it's fun and I enjoy FP :D.
But since you asked... one way of handling this - if you really, really only wanted pure functions everywhere - would be to pass itemToSearch as an argument and return the friendFilter function, essentially currying the function:
Classy! But It still involves a non-referentially transparent function.
itemToSearch
is still closed over by the lambda (i.e. it's not one of its arguments).Before I get into this - I really wouldn't do this in real life! It's fine that the lambda closes over
itemToSearch
. I'm only doing this because it's fun and I enjoy FP :D.But since you asked... one way of handling this - if you really, really only wanted pure functions everywhere - would be to pass
itemToSearch
as an argument and return thefriendFilter
function, essentially currying the function:Lambda and currying make a great way to add data into your functions as and when its needed.
small refactor:
stupid why-oh-why refactor:
Ridiculous, please-make-it-stop refactor
If you enjoy this madness, might I recommend reading some books about the Scheme programming language.
Haha nice, I actually work with Scala day to day and a lot of code ends up looking similar to the second last example (with types).
Thanks again mate :)
Thanks for sharing all your insights (all of you), I will have a closer look at them.