3 ms·
map and reduce. DI is so prevalent in functional programming that it's pretty much taken for granted.
by fleitz 15y ago
map and reduce. DI is so prevalent in functional programming that it's pretty much taken for granted.
- sassafras 15y agoWell, take this Clojure tutorial, for instance, comparing a simple DI implementation in Java with a single function in Clojure. The latter bears almost no resemblance to the former, other than achieving the desired effect. Is it fair to say that the user of a closure is implementing the Dependency Injection pattern, or is it a positive side effect of the fundamental properties of first class functions and lexical scope? http://vimeo.com/10368175 http://vimeo.com/10368175
- fleitz 15y agoIMHO it's largely a side effect of first class functions. In Java in order to pass a function you need to pass an object that has the function, or an interface with the function, so it leads to a lot of line noise and thus people don't do it much. DI doesn't look impressive in a functional language because it's so well supported, but if you look at something like a global accumulator in a functional language you'll need a monad because you need state. eg in Java it's easier to write: int accum = 0; for(int i : collection){ accum +=i; } rather than collection.reduce(new IReduce<int> { int reduce(int accum, int i){ return i + accum; } }) I'm a bit rusty on Java so the syntax may be off but you get the idea, where as in a functional language (F#) that code is reduced to: collection |> Seq.reduce + Or in an imperative language that supports function passing (C#) collection.sum((a,b) => a+b)