for (var i = 0; i < array.length; i++)
doSomething(array[i]); // => map
for (var i = 0; i < array.length; i++) {
if (array[i]%2 == 0)
doSomething(array[i]);
} // => filter
var sum = 0;
for (var i = 0; i < array.length; i++) {
sum += array[i];
} // => reduce/foldl
http://notes-on-haskell.blogspot.co.uk/2007/02/whats-wrong-with-for-loop.html
Sunday, 7 October 12
Slide 26
Slide 26 text
Currying
Sunday, 7 October 12
Slide 27
Slide 27 text
var phoneListing = function(name,home)
{
return name + “ - “ + phone;
}
listing(“Sam”,”012345678”);
listing(“Sam”); // => undefined
Sunday, 7 October 12
Slide 28
Slide 28 text
// getLocalArgs() = Array.prototype.slice.call(arguments)
function partial(f) {
var args = getLocalArgs(),
givenArgs = args.slice(1);
return function() {
var remainingArgs = getLocaLArgs();
return f.apply(this, givenArgs.concat(remainingArgs));
}
}
var samsPartner= partial(phoneListing, ”Sam”);
samsPartner(“0999999999”); // => “Sam - 0999999999”
Sunday, 7 October 12
Slide 29
Slide 29 text
Monads
Sunday, 7 October 12
Slide 30
Slide 30 text
Sunday, 7 October 12
Slide 31
Slide 31 text
// make a monadic value (“return”)
var makeMonadicValue = function(value) {
return function(state) {
return {value: value, state: state};
}
}
Sunday, 7 October 12
Slide 32
Slide 32 text
// make a very simple monadic value
var makeMonadicValue = function(value) {
return function() {
return value;
}
}
Sunday, 7 October 12
Slide 33
Slide 33 text
// make a monadic value (“return”)
var makeMonadicValue = function(value) {
return function(state) {
return {value: value, state: state};
}
}
Sunday, 7 October 12
Slide 34
Slide 34 text
// Joe is in the kitchen
var mv = makeMonadicValue("Joe");
mv(10); // => {value: "Joe", state: 10}
Sunday, 7 October 12
Slide 35
Slide 35 text
// bind to a function
var bindToFunction = function(mv, f) {
return function(state) {
var monadOutput = mv(state),
value = monadOutput.value,
newState = monadOutput.state;
return (f(value))(newState);
}
}
Sunday, 7 October 12
Slide 36
Slide 36 text
// you could act on the value directly
var addPerson = function(value, name) {
return value + " and " + name;
}
// but here's the monadic way to do it
var mAddPerson = function(mv, name) {
return bindToFunction(mv, function(value) {
return makeMonadicValue(value + " and " + name);
})
}
Sunday, 7 October 12
Slide 37
Slide 37 text
(mAddPerson(mv, "Tom"))(10);
// => {value:"Joe and Tom", state: 10}
Sunday, 7 October 12
Slide 38
Slide 38 text
// you can act on state
var takeYoghurt = function(state) {
return state - 1;
}
var mTakeYoghurt = function(mv) {
return bindToFunction(mv, function(value) {
return function(state) {
return {value: value, state: state-1};
}
})
}
(mTakeYoghurt(mv))(10); // => {value: "Joe", state: 9 }
Sunday, 7 October 12
Slide 39
Slide 39 text
(mTakeYoghurt(
(mAddPerson(
(mTakeYoghurt(
(mAddPerson
(mv,"Tom")
))),
"Shelley"))))
(10);
// => { value: 'Joe and Tom and
Shelley', state: 8 }
http://www.infoq.com/presentations/Why-is-a-Monad-Like-a-
Writing-Desk
Sunday, 7 October 12
Slide 40
Slide 40 text
Lazy evaluation (?)
Sunday, 7 October 12
Slide 41
Slide 41 text
The Good
Sunday, 7 October 12
Slide 42
Slide 42 text
Easier to debug
Sunday, 7 October 12
Slide 43
Slide 43 text
Easier to test
Sunday, 7 October 12
Slide 44
Slide 44 text
Easier to refactor
Sunday, 7 October 12
Slide 45
Slide 45 text
Parallelization (?)
Sunday, 7 October 12
Slide 46
Slide 46 text
Hard?
Sunday, 7 October 12
Slide 47
Slide 47 text
Sunday, 7 October 12
Slide 48
Slide 48 text
"the greatest single programming
language ever designed"
- Alan Kay, on Lisp, the 70s
Sunday, 7 October 12
Slide 49
Slide 49 text
“Object-oriented programming
(...) allows software structure to
be based on real-world structures,
and gives programmers a powerful
way to simplify the design and
construction of complex programs.
- D. Gelernter, the 80s
Sunday, 7 October 12
Slide 50
Slide 50 text
Sunday, 7 October 12
Slide 51
Slide 51 text
Software is hard
Sunday, 7 October 12
Slide 52
Slide 52 text
Sunday, 7 October 12
Slide 53
Slide 53 text
Sunday, 7 October 12
Slide 54
Slide 54 text
But:
Sunday, 7 October 12
Slide 55
Slide 55 text
Thank you.
Elise Huard @elise_huard
Sunday, 7 October 12