@RichardAlan:perhaps watch the Haskell series first?

Fundamentalist functional programmers are really, really lazy. Even more that Ruby programmers, they actually take the DNRY motto to the extreme limit. Whenever they see a pattern repeating in their code, they try to encapsulate it in a reusable abstraction.

The interesting thing about Haskell and other advanced functional languages (http://en.wikipedia.org/wiki/Pure_type_system), is that you can also define abstractions over type constructors (not just over types as with generics in Eiffel, Java, C#, ...).

Once you can do that you suddenly discover design patterns, in the case of this lecture monads, that you did not see before: "Aha, this piece of code is has precisely the same structure as that,".

As with all cool concepts, in programming, it turns out that the mathematicians had long ago already discovered the same thing and called it "monads".

Other patterns that Ralf talks and will talk about are initial algebras, final co-algebras, homomorphisms (bananas, folds, lenses, unfolds, ..). Going even further, Ralf's hobby is to scrap *all* your boilerplate (https://research.microsoft.com/en-us/um/people/simonpj/papers/hmap/).

Another favorite hobby of fundamentalist functional programmers is to write programs in so-called "point-free" style, that is, using as few "variables" as possible (http://www.haskell.org/haskellwiki/Pointfree). Ralf might entertain and awe the audience with some Perls (pun intended) in this category in future lectures.

Anyway, this is just a long winded way of saying that all is going on is pattern matching. So don't despair, it is like thoseautosterograms, if you stare at it long enough, you will suddenly see it.

[Hey Channel 9, where is the spell checking in the comments?]

Compiling MSIL to JavaScript is the opposite of SPUR, which compiles JavaScript to MSIL. The interesting hypothesis of using a tracing JIT is that it does not matter at which side of the equation you start since all hot abstractions will be "traced away"
at runtime. The potential of no-pay abstraction is quite enticing. It is like being able to feast on an all-you-can-eat buffet without gaining any weight

What Rx does is provide an interface for the subject/observer pattern in the form of push-based collections, and (b) show that these interfaces form a Monad, and hence you can compose transformations on push-based collections
using the LINQ standard query operators, and (c) prove that the subject/observer pattern is dual to the iterator pattern.

I do believe that computing has inspired beautiful mathematics, for instance
Scott domains and process
algebras to name just a few examples. And I'd argue that computers have become indispensible tools for mathematicians, whether it is to typeset their papers using
LaTex, or to help prove their theorems using Coq for instance.

## Comments

## Checking In: Eric Lippert - On Compiler Evolution, Designing C# and Blogging

@Herbous: You are most welcome

## E2E: Herb Sutter and Erik Meijer - Perspectives on C++

@Mr Crash: Cheers!

## E2E: Herb Sutter and Erik Meijer - Perspectives on C++

@davewill:

These should have the same mechanism for capturing free variables from the enclosing scope as lambdas.

It seems so obvious to me, that object-oriented languages have closures for objects.

## Programming Streams of Coincidence with Join and GroupJoin for Rx

@Charles: They are the best indeed!

## C9 Lectures: Dr. Ralf Lämmel - The Quick Essence of Functional Programming

@ǃ: If you crave that kind of gourmet theory, have a look athttp://wwwhome.cs.utwente.nl/~fokkinga/index.html#detail_0000003413

## C9 Lectures: Dr. Ralf Lämmel - The Quick Essence of Functional Programming

@RichardAlan:perhaps watch the Haskell series first?

Fundamentalist functional programmers are really, really lazy. Even more that Ruby programmers, they actually take the DNRY motto to the extreme limit. Whenever they see a pattern repeating in their code, they try to encapsulate it in a reusable abstraction.

The interesting thing about Haskell and other advanced functional languages (http://en.wikipedia.org/wiki/Pure_type_system), is that you can also define abstractions over type constructors (not just over types as with generics in Eiffel, Java, C#, ...).

Once you can do that you suddenly discover design patterns, in the case of this lecture monads, that you did not see before: "Aha, this piece of code is has precisely the same structure as that,".

As with all cool concepts, in programming, it turns out that the mathematicians had long ago already discovered the same thing and called it "monads".

Other patterns that Ralf talks and will talk about are initial algebras, final co-algebras, homomorphisms (bananas, folds, lenses, unfolds, ..). Going even further, Ralf's hobby is to scrap *all* your boilerplate (https://research.microsoft.com/en-us/um/people/simonpj/papers/hmap/).

Another favorite hobby of fundamentalist functional programmers is to write programs in so-called "point-free" style, that is, using as few "variables" as possible (http://www.haskell.org/haskellwiki/Pointfree). Ralf might entertain and awe the audience with some Perls (pun intended) in this category in future lectures.

Anyway, this is just a long winded way of saying that all is going on is pattern matching. So don't despair, it is like thoseautosterograms, if you stare at it long enough, you will suddenly see it.

[Hey Channel 9, where is the spell checking in the comments?]

## C9 Lectures: Dr. Ralf Lämmel - The Quick Essence of Functional Programming

After this lecture *nobody* can claim anymore that Monads are difficult.

## C9 Lectures: Dr. Ralf Lämmel - Advanced Functional Programming - Evolution of an Interpreter

All young grasshoppers please remember "wax on, wax off, wax on, wax off, ..."

## Inside SPUR - A Trace-Based JIT Compiler for CIL

Yes, SPUR is a tracing JIT for MSIL.

## Inside SPUR - A Trace-Based JIT Compiler for CIL

Compiling MSIL to JavaScript is the opposite of SPUR, which compiles JavaScript to MSIL. The interesting hypothesis of using a tracing JIT is that it does not matter at which side of the equation you start since all hot abstractions will be "traced away" at runtime. The potential of no-pay abstraction is quite enticing. It is like being able to feast on an all-you-can-eat buffet without gaining any weight

## Expert to Expert: Brian Beckman and Erik Meijer - Inside the .NET Reactive Framework (Rx)

What Rx does is provide an interface for the subject/observer pattern in the form of push-based collections, and (b) show that these interfaces form a Monad, and hence you can compose transformations on push-based collections using the LINQ standard query operators, and (c) prove that the subject/observer pattern is dual to the iterator pattern.

## Channel 9 Live at MIX10: Bill Buxton & Erik Meijer - Perspectives on Design

I do believe that computing has inspired beautiful mathematics, for instance Scott domains and process algebras to name just a few examples. And I'd argue that computers have become indispensible tools for mathematicians, whether it is to typeset their papers using LaTex, or to help prove their theorems using Coq for instance.

Fortress is a very interesting language, for me not so much because of the syntax, but because it embraces "categorical design patterns" such as catamorphisms to enable sophisticated optimizations.

But as I always say, mathematicians are much smarter than me, so I am happy to steal their work