<?xml version="1.0" encoding="UTF-8"?><?xml-stylesheet type="text/xsl" media="screen" href="/App_Themes/default/rss.xslt"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:media="http://search.yahoo.com/mrss/" xmlns:evnet="http://www.mscommunities.com/rssmodule/"><channel><title>Comment Feed for Brian Beckman: Don't fear the Monad (Going Deep on Channel 9)</title><atom:link rel="self" type="application/rss+xml" href="http://channel9.msdn.com/shows/going+deep/brian-beckman-dont-fear-the-monads/rss/default.aspx" /><image><url>http://mschnlnine.vo.llnwd.net/d1/Dev/App_Themes/C9/images/feedimage.png</url><title>Comment Feed for Brian Beckman: Don't fear the Monad (Going Deep on Channel 9)</title><link>http://channel9.msdn.com/shows/Going+Deep/Brian-Beckman-Dont-fear-the-Monads/</link></image><description>Brian Beckman: Don't fear the Monad</description><link>http://channel9.msdn.com/shows/Going+Deep/Brian-Beckman-Dont-fear-the-Monads/</link><language>en-us</language><pubDate>Sun, 29 Jun 2008 02:16:58 GMT</pubDate><lastBuildDate>Sun, 29 Jun 2008 02:16:58 GMT</lastBuildDate><generator>EvNet (EvNet, Version=1.0.3599.6114, Culture=neutral, PublicKeyToken=null)</generator><item><title>Re: Brian Beckman: Don't fear the Monads</title><description>Hey Brian, great chalk-talk!&amp;nbsp; When are you going to take it to the practical with F# work-flows?!?</description><comments></comments><link>http://channel9.msdn.com/shows/Going+Deep/Brian-Beckman-Dont-fear-the-Monads/?CommentID=412666</link><pubDate>Sun, 29 Jun 2008 02:16:58 GMT</pubDate><guid isPermaLink="false">http://channel9.msdn.com/shows/Going+Deep/Brian-Beckman-Dont-fear-the-Monads/?CommentID=412666</guid><evnet:views>0</evnet:views><evnet:viewtrackingurl>http://channel9.msdn.com/412666/WebViewBug.aspx?EVT=0</evnet:viewtrackingurl><evnet:previewtext>Hey Brian, great chalk-talk!&amp;nbsp; When are you going to take it to the practical with F# work-flows?!?</evnet:previewtext><dc:creator>jhugard</dc:creator><slash:comments>0</slash:comments><wfw:commentRss></wfw:commentRss><trackback:ping>http://channel9.msdn.com/412666/Trackback.aspx</trackback:ping></item><item><title>Re: Brian Beckman: Don't fear the Monads</title><description>&lt;P&gt;Brian writes on the board:&lt;/P&gt;
&lt;OL&gt;
&lt;OL&gt;
&lt;LI&gt;g: a -&amp;gt; Mb&lt;/LI&gt;
&lt;LI&gt;f: b -&amp;gt; Mc&lt;/LI&gt;
&lt;LI&gt;\a -&amp;gt; (g a) &amp;gt;&amp;gt;= \b -&amp;gt; (f b)&lt;/LI&gt;&lt;/OL&gt;&lt;/OL&gt;
&lt;P&gt;but it seems to me that one of two things must be true, either:&lt;/P&gt;
&lt;BLOCKQUOTE dir=ltr&gt;
&lt;P&gt;The "-&amp;gt;" notation means something different in lines 1 and 2 than it does in line 3.&amp;nbsp; In line 1 and 2, "g is a thing (a function) with a type such that it takes a thing of type a and returns a thing of type Mb".&amp;nbsp; In line 3, I don't see how this same interpretation pattern fits over line 3, even with the grouping "\a -&amp;gt; [(g a) &amp;gt;&amp;gt;= \b -&amp;gt; (f b)]".&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;&amp;nbsp;OR, and more likely because I doubt he wouldn't have noticed:&lt;/P&gt;
&lt;BLOCKQUOTE dir=ltr&gt;
&lt;P&gt;They do mean the same thing but that there is some even more advanced meaning of the "-&amp;gt;" operator, probably something to do with meta-types or kinds or something that applies correctly to each of the lines when understood correctly.&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;Or, maybe the question is, What is the Bind or Shove operator doing?&amp;nbsp; Is it sheding some metadata surrounding b or c in kinds Mb or Mc and returning the b or c type?&amp;nbsp; Is it de-generalizing a generic Mb or Mc kind??&lt;/P&gt;
&lt;P&gt;Sorry, I went to public school but I'm really trying :$.&lt;/P&gt;
&lt;P&gt;Maybe listing out how this functional or F# syntax is to be read would help as well.&amp;nbsp; eg.&amp;nbsp; "g: a -&amp;gt; a" is read as "g is a thing, a function, which takes a thing and returns a thing".&amp;nbsp; Even that may be incorrect.&amp;nbsp; Stay as general as possible.&lt;/P&gt;</description><comments></comments><link>http://channel9.msdn.com/shows/Going+Deep/Brian-Beckman-Dont-fear-the-Monads/?CommentID=405479</link><pubDate>Sun, 25 May 2008 21:27:30 GMT</pubDate><guid isPermaLink="false">http://channel9.msdn.com/shows/Going+Deep/Brian-Beckman-Dont-fear-the-Monads/?CommentID=405479</guid><evnet:views>0</evnet:views><evnet:viewtrackingurl>http://channel9.msdn.com/405479/WebViewBug.aspx?EVT=0</evnet:viewtrackingurl><evnet:previewtext>Brian writes on the board:


g: a -&amp;gt; Mb
f: b -&amp;gt; Mc
\a -&amp;gt; (g a) &amp;gt;&amp;gt;= \b -&amp;gt; (f b)
but it seems to me that one of two things must be true, either:

The "-&amp;gt;" notation means something different in lines 1 and 2 than it does in line 3.&amp;nbsp; In line 1 and 2, "g is a thing (a&amp;#8230;</evnet:previewtext><dc:creator>jdkleban</dc:creator><slash:comments>0</slash:comments><wfw:commentRss></wfw:commentRss><trackback:ping>http://channel9.msdn.com/405479/Trackback.aspx</trackback:ping></item><item><title>Re: Brian Beckman: Don't fear the Monads</title><description>&lt;BLOCKQUOTE&gt;&lt;div&gt;orcmid wrote:&lt;/div&gt;&lt;div&gt;﻿
&lt;BLOCKQUOTE&gt;
&lt;TABLE&gt;

&lt;TR&gt;
&lt;TD&gt;&lt;IMG src="http://channel9.msdn.com/Themes/AlmostGlass/images/icon-quote.gif&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;STRONG&gt;brianbec wrote:&lt;/STRONG&gt;

&lt;I&gt;﻿Here's another little twist ... &lt;BR&gt;Eager evaluation is, in fact, a side effect!&amp;nbsp; Think about it: eager evaluation means that you KNOW function arguments get evaluated BEFORE the function gets called. So, a PURE functional language must be a lazy language (more technically, "non-strict," and sorry for the confusing lingo: STRICT means non-lazy).&lt;BR&gt;&lt;/I&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TABLE&gt;&lt;/BLOCKQUOTE&gt;&lt;BR&gt;&lt;BR&gt;BZZT.&amp;nbsp; My non-sequiter detector went off right here, Brian.&amp;nbsp; I think this is over-reaching, as is the later comment about what laziness provides.&amp;nbsp; I'm not&amp;nbsp;completely convinced that&amp;nbsp;the distinction is merely a matter of taste, but I'm also not persuaded that a "pure functional" notion that abandons the well-definedness condition of common mathematics is an appropriate alternative.&lt;/div&gt;&lt;/BLOCKQUOTE&gt;&lt;BR&gt;&lt;BR&gt;Yup, I was wrong about this. When I tried to prove it, I just ended up with the State Monad. I WAS WRONG !!!! :)</description><comments></comments><link>http://channel9.msdn.com/shows/Going+Deep/Brian-Beckman-Dont-fear-the-Monads/?CommentID=381086</link><pubDate>Tue, 22 Jan 2008 00:54:23 GMT</pubDate><guid isPermaLink="false">http://channel9.msdn.com/shows/Going+Deep/Brian-Beckman-Dont-fear-the-Monads/?CommentID=381086</guid><evnet:views>0</evnet:views><evnet:viewtrackingurl>http://channel9.msdn.com/381086/WebViewBug.aspx?EVT=0</evnet:viewtrackingurl><evnet:previewtext>orcmid wrote:﻿





brianbec wrote:

﻿Here's another little twist ... Eager evaluation is, in fact, a side effect!&amp;nbsp; Think about it: eager evaluation means that you KNOW function arguments get evaluated BEFORE the function gets called. So, a PURE functional language must be a lazy&amp;#8230;</evnet:previewtext><dc:creator>brianbec</dc:creator><slash:comments>0</slash:comments><wfw:commentRss></wfw:commentRss><trackback:ping>http://channel9.msdn.com/381086/Trackback.aspx</trackback:ping></item><item><title>Re: Brian Beckman: Don't fear the Monads</title><description>&lt;BLOCKQUOTE&gt;&lt;div&gt;brianbec wrote:&lt;/div&gt;&lt;div&gt;﻿Here's another little twist ... &lt;BR&gt;Eager evaluation is, in fact, a side effect!&amp;nbsp; Think about it: eager evaluation means that you KNOW function arguments get evaluated BEFORE the function gets called. So, a PURE functional language must be a lazy language (more technically, "non-strict," and sorry for the confusing lingo: STRICT means non-lazy).&lt;BR&gt;&lt;/div&gt;&lt;/BLOCKQUOTE&gt;&lt;BR&gt;&lt;BR&gt;BZZT.&amp;nbsp; My non-sequiter detector went off right here, Brian.&amp;nbsp; I think this is over-reaching, as is the later comment about what laziness provides.&amp;nbsp; I'm not&amp;nbsp;completely convinced that&amp;nbsp;the distinction is merely a matter of taste, but I'm also not persuaded that a "pure functional" notion that abandons the well-definedness condition of common mathematics is an appropriate alternative.</description><comments></comments><link>http://channel9.msdn.com/shows/Going+Deep/Brian-Beckman-Dont-fear-the-Monads/?CommentID=377266</link><pubDate>Wed, 09 Jan 2008 19:30:06 GMT</pubDate><guid isPermaLink="false">http://channel9.msdn.com/shows/Going+Deep/Brian-Beckman-Dont-fear-the-Monads/?CommentID=377266</guid><evnet:views>0</evnet:views><evnet:viewtrackingurl>http://channel9.msdn.com/377266/WebViewBug.aspx?EVT=0</evnet:viewtrackingurl><evnet:previewtext>brianbec wrote:﻿Here's another little twist ... Eager evaluation is, in fact, a side effect!&amp;nbsp; Think about it: eager evaluation means that you KNOW function arguments get evaluated BEFORE the function gets called. So, a PURE functional language must be a lazy language (more technically,&amp;#8230;</evnet:previewtext><dc:creator>orcmid</dc:creator><slash:comments>0</slash:comments><wfw:commentRss></wfw:commentRss><trackback:ping>http://channel9.msdn.com/377266/Trackback.aspx</trackback:ping></item><item><title>Re: Brian Beckman: Don't fear the Monads</title><description>&lt;BLOCKQUOTE&gt;&lt;div&gt;brianbec wrote:&lt;/div&gt;&lt;div&gt;﻿Very nice, indeed, Kaveh!&lt;/div&gt;&lt;/BLOCKQUOTE&gt;&lt;BR&gt;Thankyou! I have been more than happy by your comment!&lt;BR&gt;Just I'v discovered a bad thing in my code: using Closures! I discovered this when using a&amp;nbsp;LINQ query against a set of objects (a library for handling directory tree of my html templates for some work and extracting their content and publishing via a HttpHandler). I have changed one of objects that was placed inside the where clause somewhere (in another business class - ofcourse that was a bug; but what if it wasn't?),&amp;nbsp;and the resault was not what expected! &lt;BR&gt;So I write another method for combining two monads and getting a third one; named Transform (I do not know this name is proper. I am a "thin client" of Haskell and Monads!).&lt;BR&gt;It seems now a better solution for composing two (or more monads). It seems to me&amp;nbsp;closures are a bad thing in this context, because they pass the boundries whitout any footprints.&lt;BR&gt;(Code is &lt;a href="http://hcoding.blogspot.com/2007/12/monad-described-imperatively.html"&gt;here&lt;/a&gt;.)&lt;BR&gt;Cheers!</description><comments></comments><link>http://channel9.msdn.com/shows/Going+Deep/Brian-Beckman-Dont-fear-the-Monads/?CommentID=370789</link><pubDate>Fri, 07 Dec 2007 22:55:10 GMT</pubDate><guid isPermaLink="false">http://channel9.msdn.com/shows/Going+Deep/Brian-Beckman-Dont-fear-the-Monads/?CommentID=370789</guid><evnet:views>0</evnet:views><evnet:viewtrackingurl>http://channel9.msdn.com/370789/WebViewBug.aspx?EVT=0</evnet:viewtrackingurl><evnet:previewtext>brianbec wrote:﻿Very nice, indeed, Kaveh!Thankyou! I have been more than happy by your comment!Just I'v discovered a bad thing in my code: using Closures! I discovered this when using a&amp;nbsp;LINQ query against a set of objects (a library for handling directory tree of my html templates for some work&amp;#8230;</evnet:previewtext><dc:creator>kaveh.shahbazian@gmail.com</dc:creator><slash:comments>0</slash:comments><wfw:commentRss></wfw:commentRss><trackback:ping>http://channel9.msdn.com/370789/Trackback.aspx</trackback:ping></item><item><title>Re: Brian Beckman: Don't fear the Monads</title><description>Brian,&lt;br&gt;&lt;br&gt;I very much agree with your observation that bind is not a very good choice when you want to explain the nature of the monad laws (i.e., the monoidal structure).&amp;nbsp; Instead (as you show), it's the Kleisli composition that makes it obvious.&lt;br&gt;&lt;br&gt;I wish more people would use your line of explanation since it makes the monad laws look very natural.&lt;br&gt;&lt;br&gt;BTW, I think strings are a good example of a monoid than everyone has encountered.&lt;br&gt;&lt;br&gt;&amp;nbsp; -- Lennart&lt;br&gt;&lt;br&gt;</description><comments></comments><link>http://channel9.msdn.com/shows/Going+Deep/Brian-Beckman-Dont-fear-the-Monads/?CommentID=370197</link><pubDate>Thu, 06 Dec 2007 12:54:38 GMT</pubDate><guid isPermaLink="false">http://channel9.msdn.com/shows/Going+Deep/Brian-Beckman-Dont-fear-the-Monads/?CommentID=370197</guid><evnet:views>0</evnet:views><evnet:viewtrackingurl>http://channel9.msdn.com/370197/WebViewBug.aspx?EVT=0</evnet:viewtrackingurl><evnet:previewtext>Brian,I very much agree with your observation that bind is not a very good choice when you want to explain the nature of the monad laws (i.e., the monoidal structure).&amp;nbsp; Instead (as you show), it's the Kleisli composition that makes it obvious.I wish more people would use your line of&amp;#8230;</evnet:previewtext><dc:creator>augustss</dc:creator><slash:comments>0</slash:comments><wfw:commentRss></wfw:commentRss><trackback:ping>http://channel9.msdn.com/370197/Trackback.aspx</trackback:ping></item><item><title>Re: Brian Beckman: Don't fear the Monads</title><description>Very nice, indeed, Kaveh!</description><comments></comments><link>http://channel9.msdn.com/shows/Going+Deep/Brian-Beckman-Dont-fear-the-Monads/?CommentID=370046</link><pubDate>Wed, 05 Dec 2007 23:25:46 GMT</pubDate><guid isPermaLink="false">http://channel9.msdn.com/shows/Going+Deep/Brian-Beckman-Dont-fear-the-Monads/?CommentID=370046</guid><evnet:views>0</evnet:views><evnet:viewtrackingurl>http://channel9.msdn.com/370046/WebViewBug.aspx?EVT=0</evnet:viewtrackingurl><evnet:previewtext>Very nice, indeed, Kaveh!</evnet:previewtext><dc:creator>brianbec</dc:creator><slash:comments>0</slash:comments><wfw:commentRss></wfw:commentRss><trackback:ping>http://channel9.msdn.com/370046/Trackback.aspx</trackback:ping></item><item><title>Re: Brian Beckman: Don't fear the Monads</title><description>I have write a Monad thing in C#. This Monad has a private field that I have not access to, but I can change it! :O&amp;nbsp;And that's the interesting thing about it :P. Once I have pushed a data into it; There is no way out of it. But I can still modify the data in the Monad. Firts let's look at the stuff:&lt;BR&gt;
&lt;P&gt;public class Monad&amp;lt;T&amp;gt; : IMonad&amp;lt;T&amp;gt;&lt;BR&gt;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;private Monad (T inner) { this.__InnerHolder = inner; }&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;private Monad () { }&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;private readonly T __InnerHolder;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;private T Inner { get { return __InnerHolder; } }&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;public static IMonad&amp;lt;TInner&amp;gt; Unit&amp;lt;TInner&amp;gt; (TInner inner)&amp;nbsp;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;{ return new Monad&amp;lt;TInner&amp;gt; (inner); }&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;public static Func&amp;lt;A, IMonad&amp;lt;R&amp;gt;&amp;gt; Lift&amp;lt;A, R&amp;gt; (Func&amp;lt;A, R&amp;gt; fun)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (fun.IsNull ())&amp;nbsp;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;throw new ArgumentNullException&amp;nbsp;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;("fun", "'fun' can not be null.");&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return (a =&amp;gt; Unit&amp;lt;R&amp;gt; (fun (a)));&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;public static IMonad&amp;lt;B&amp;gt; Bind&amp;lt;A, B&amp;gt; (IMonad&amp;lt;A&amp;gt; a,&amp;nbsp;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Func&amp;lt;A, IMonad&amp;lt;B&amp;gt;&amp;gt; fun)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (fun.IsNull ()) throw new ArgumentNullException ("fun", "'fun' can not be null.");&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;return Unit&amp;lt;B&amp;gt; (fun (a.Monad.Inner).Monad.Inner);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;#region IMonad&amp;lt;T&amp;gt; Members&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;Monad&amp;lt;T&amp;gt; IMonad&amp;lt;T&amp;gt;.Monad&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;get { return this; }&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;#endregion&lt;BR&gt;}&lt;BR&gt;&lt;BR&gt;public static partial class MonadExtra&lt;BR&gt;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;public static IMonad&amp;lt;TInner&amp;gt; Unit&amp;lt;TInner&amp;gt; (this TInner inner)&amp;nbsp;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;{ return Monad&amp;lt;object&amp;gt;.Unit&amp;lt;TInner&amp;gt; (inner); }&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;public static Func&amp;lt;A, IMonad&amp;lt;R&amp;gt;&amp;gt; Lift&amp;lt;A, R&amp;gt; (this Func&amp;lt;A, R&amp;gt; fun)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return Monad&amp;lt;object&amp;gt;.Lift&amp;lt;A, R&amp;gt; (fun);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;public static IMonad&amp;lt;B&amp;gt; Bind&amp;lt;A, B&amp;gt; (this IMonad&amp;lt;A&amp;gt; a,&amp;nbsp;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Func&amp;lt;A, IMonad&amp;lt;B&amp;gt;&amp;gt; fun)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return Monad&amp;lt;object&amp;gt;.Bind&amp;lt;A, B&amp;gt; (a, fun);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;BR&gt;}&lt;BR&gt;&lt;BR&gt;public interface IMonad&amp;lt;T&amp;gt;&lt;BR&gt;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;Monad&amp;lt;T&amp;gt; Monad { get; }&lt;BR&gt;}&lt;BR&gt;&lt;BR&gt;Now back to work. First I push a string into my Monad and I want, at the end to have byte&amp;nbsp;collection in my Monad that represents the charachters of my string. How about this:&lt;BR&gt;&lt;BR&gt;&lt;/P&gt;
&lt;P&gt;var var1 = "ABCD...MONAD!"&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;.Unit ()&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;.Bind ((string s) =&amp;gt; s.ToCharArray ().Unit ())&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;.Bind (ca =&amp;gt; (from c in ca select Convert.ToByte (c)).Unit ());&lt;BR&gt;&lt;BR&gt;What is the type of var1? It is IMonad&amp;lt;IEnumerable&amp;lt;byte&amp;gt;&amp;gt;. And you see another interesting aspects of Monad here: Composability! Here we have 3 type for the type variable of our Monad. But as long as we are IN the Monad we can compose any kind of computations.&lt;BR&gt;&lt;BR&gt;Now assume we have two Monads and we want to apply a function to the inner value of both monads. How can I pull out the values from these Monads to perform my function application? I can not pull out the inner part of monads. But i can still use their values in my computation by using closures! For example I have to Monads that contains numbers and I want to have the multipluy value of them:&lt;BR&gt;&lt;BR&gt;&lt;/P&gt;
&lt;P&gt;var ma = 10.Unit ();&lt;BR&gt;var mb = 20.Unit ();&lt;BR&gt;&lt;BR&gt;var mr = mb&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;.Bind (x =&amp;gt; ma.Bind (y =&amp;gt; (x * y).ToString ().Unit ()));&lt;BR&gt;&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;As you can see (actually as I can see! Because writing this code make me feel a lot better about Monads - as an Imperative programmer - yet there are a lot of improvements possible to my Monad set of utilities) anything that we do in normal imperative code is possible by using this Monad. What is the good part? You can not change the Monad anywhere out of the Monad. So actually the state of you whole program that is out of the Monad is untouched. Another thing is that the Monad is immutable. Every action on a Monad produce a new Monad of that kind.&lt;BR&gt;Consider a data structure that has Monads as members. You can not modify these members! Even if the data structure itself is not a Monad! See this little bit of it:&lt;BR&gt;&lt;BR&gt;var nv = new { a = 10.Unit (), b = 20.Unit () };&lt;BR&gt;var mnv = nv.Unit ();&lt;BR&gt;mnv = mnv&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;.Bind (j =&amp;gt; new {&amp;nbsp;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;a = j.a.Bind (k =&amp;gt; (k * 2).Unit ()),&amp;nbsp;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;b = j.b.Bind (k =&amp;gt; (k * 2).Unit ()) }.Unit ());&lt;BR&gt;&lt;BR&gt;It was very interesting to me that by putting a Monad of this type as a member of the root class of a hierarchy; that hierarchi of classes became immutable! (At least for changing that member!) &lt;/P&gt;
&lt;P&gt;&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&lt;/P&gt;</description><comments></comments><link>http://channel9.msdn.com/shows/Going+Deep/Brian-Beckman-Dont-fear-the-Monads/?CommentID=370021</link><pubDate>Wed, 05 Dec 2007 21:47:07 GMT</pubDate><guid isPermaLink="false">http://channel9.msdn.com/shows/Going+Deep/Brian-Beckman-Dont-fear-the-Monads/?CommentID=370021</guid><evnet:views>0</evnet:views><evnet:viewtrackingurl>http://channel9.msdn.com/370021/WebViewBug.aspx?EVT=0</evnet:viewtrackingurl><evnet:previewtext>I have write a Monad thing in C#. This Monad has a private field that I have not access to, but I can change it! :O&amp;nbsp;And that's the interesting thing about it :P. Once I have pushed a data into it; There is no way out of it. But I can still modify the data in the Monad. Firts let's look at the&amp;#8230;</evnet:previewtext><dc:creator>kaveh.shahbazian@gmail.com</dc:creator><slash:comments>0</slash:comments><wfw:commentRss></wfw:commentRss><trackback:ping>http://channel9.msdn.com/370021/Trackback.aspx</trackback:ping></item><item><title>Re: Brian Beckman: Don't fear the Monads</title><description>&lt;BLOCKQUOTE&gt;&lt;div&gt;akopacsi wrote:&lt;/div&gt;&lt;div&gt;﻿Hello Guys,&lt;BR&gt;&lt;BR&gt;Great video! It's always great to see Brian.&lt;BR&gt;&lt;BR&gt;(Brianbec fans! Do not miss Brian's interview at&lt;BR&gt;http://channel8.msdn.com/Posts/Brian-Beckman-I-have-an-idea-then-what&lt;BR&gt;:-)&lt;BR&gt;&lt;BR&gt;May I ask a question? How many real-world applications are there that are based on functional programming? I heard somewhere that functional principles appear in Google Maps and Google Earth. I'm not sure if it's true or not... I just mentioned. It'd be nice to learn more about some real examples.&lt;BR&gt;&lt;/div&gt;&lt;/BLOCKQUOTE&gt;&lt;BR&gt;&lt;BR&gt;Since you mentioned Google, map-reduce, which is the backbone of their massively distributed, parallel infrastructure, is a composition of "reduce", which applies some given aggregate, associative calculation like sum or average or standard-deviation to a recursive data structure; with "map", which applies arbitrary transformations to a recursive data structure. It's about as functional and real-world as it gets.&lt;BR&gt;&lt;BR&gt;There are tons of other examples. Some in the financial quants industry are using Haskell programs to model derivatives yields. I know the crypto community is going whole-hog for Haskell. Don's blog (&lt;a href="http://blogs.msdn.com/dsyme/"&gt;http://blogs.msdn.com/dsyme/&lt;/a&gt;&amp;nbsp;) will be a great place to look at real-world applications of F#. Erlang is all over the communications industry. It's endless :)&lt;BR&gt;&lt;BR&gt;EDIT: I wanted to add a side comment: one reason some mission-critical applications are going with Haskell is that if you go "all the way" to pure functional programming, where all side-effects are accounted for in type signatures,&amp;nbsp;then more proofs of correctness become available. In certain cases, this is required.&lt;BR&gt;&lt;BR&gt;But, on the downside, you can't just plunk down a "print" statement any-old-where to help you debug a Haskell program. Any computation that might EVER print MUST be in the IO monad. So if you're ever going to plunk down a print, you must plan ahead for it or rewrite for it. In the "impure" world of .NET, with C#3.0, VB9, and F#, you have many of the benefits of functional style, but you can "cheat" where necessary or useful and do side effects from anywhere.</description><comments></comments><link>http://channel9.msdn.com/shows/Going+Deep/Brian-Beckman-Dont-fear-the-Monads/?CommentID=369851</link><pubDate>Wed, 05 Dec 2007 19:06:06 GMT</pubDate><guid isPermaLink="false">http://channel9.msdn.com/shows/Going+Deep/Brian-Beckman-Dont-fear-the-Monads/?CommentID=369851</guid><evnet:views>0</evnet:views><evnet:viewtrackingurl>http://channel9.msdn.com/369851/WebViewBug.aspx?EVT=0</evnet:viewtrackingurl><evnet:previewtext>akopacsi wrote:﻿Hello Guys,Great video! It's always great to see Brian.(Brianbec fans! Do not miss Brian's interview athttp://channel8.msdn.com/Posts/Brian-Beckman-I-have-an-idea-then-what:-)May I ask a question? How many real-world applications are there that are based on functional programming? I&amp;#8230;</evnet:previewtext><dc:creator>brianbec</dc:creator><slash:comments>0</slash:comments><wfw:commentRss></wfw:commentRss><trackback:ping>http://channel9.msdn.com/369851/Trackback.aspx</trackback:ping></item><item><title>Re: Brian Beckman: Don't fear the Monads</title><description>&lt;BLOCKQUOTE&gt;&lt;div&gt;dottedmag wrote:&lt;/div&gt;&lt;div&gt;Thanks for great video, it has been best introduction to monads I've seen so far! Most of the "monad tutorials" really suck and they all forget about the outer lambda in composition :) Composability is explained perfectly, however composability could be achieved by just having a proper type signatures! Imagine you have semigroup: set of objects and associative operation. You don't have identity, but you still closed against composition. So it is not clear what's the purpose of "monadic rules" - why associativity and identity are required? What changes if (&amp;gt;&amp;gt;=) is not associative? What can't be achieved when there is no 'return'? I hope it will be a good be a good theme for a next lecture. &lt;/div&gt;&lt;/BLOCKQUOTE&gt;&lt;BR&gt;&lt;BR&gt;These are great questions. The identity is in there so we can "lift" values into the computation (that is, the monad) without changing them. No return, no general way to get into the monad in the first place.&amp;nbsp;&lt;BR&gt;&lt;BR&gt;Associativity makes monads good for modeling ordered collections like lists. It would be terrible if&amp;nbsp;[a] ++ ([z] ++&amp;nbsp;[c]) weren't guaranteed to be the same as&amp;nbsp;([a] ++&amp;nbsp;[z]) ++ [c]. Imagining a&amp;nbsp;++ operator that eats its left-hand side if it's out of lexicographic order, then&lt;BR&gt;&lt;BR&gt;[a] ++ ([z] ++ [c])&amp;nbsp; =&amp;nbsp; [a] ++ [c]&amp;nbsp; = [a, c]&lt;BR&gt;([a] ++ [z]) ++ [c]&amp;nbsp; =&amp;nbsp; [a, z] ++ [c]&amp;nbsp; =&amp;nbsp; [a, z, c]&lt;BR&gt;&lt;BR&gt;This bogus ++ is not monadic because it's not associative, and it's a good thing to exclude it from our general (but not too general) discipline.&lt;BR&gt;&lt;BR&gt;There is probably a deeper reason (hello, categorists :), but this is what popped to mind.</description><comments></comments><link>http://channel9.msdn.com/shows/Going+Deep/Brian-Beckman-Dont-fear-the-Monads/?CommentID=369718</link><pubDate>Wed, 05 Dec 2007 07:29:33 GMT</pubDate><guid isPermaLink="false">http://channel9.msdn.com/shows/Going+Deep/Brian-Beckman-Dont-fear-the-Monads/?CommentID=369718</guid><evnet:views>0</evnet:views><evnet:viewtrackingurl>http://channel9.msdn.com/369718/WebViewBug.aspx?EVT=0</evnet:viewtrackingurl><evnet:previewtext>dottedmag wrote:Thanks for great video, it has been best introduction to monads I've seen so far! Most of the "monad tutorials" really suck and they all forget about the outer lambda in composition :) Composability is explained perfectly, however composability could be achieved by just having a&amp;#8230;</evnet:previewtext><dc:creator>brianbec</dc:creator><slash:comments>0</slash:comments><wfw:commentRss></wfw:commentRss><trackback:ping>http://channel9.msdn.com/369718/Trackback.aspx</trackback:ping></item><item><title>Re: Brian Beckman: Don't fear the Monads</title><description>A good paper about monads is actually by 

Simon Peyton Jones from Microsoft:&lt;br&gt;http://research.microsoft.com/Users/simonpj/papers/marktoberdorf/&lt;br&gt;You have to have some Haskell knowledge though..&lt;br&gt;</description><comments></comments><link>http://channel9.msdn.com/shows/Going+Deep/Brian-Beckman-Dont-fear-the-Monads/?CommentID=369146</link><pubDate>Sun, 02 Dec 2007 22:00:00 GMT</pubDate><guid isPermaLink="false">http://channel9.msdn.com/shows/Going+Deep/Brian-Beckman-Dont-fear-the-Monads/?CommentID=369146</guid><evnet:views>0</evnet:views><evnet:viewtrackingurl>http://channel9.msdn.com/369146/WebViewBug.aspx?EVT=0</evnet:viewtrackingurl><evnet:previewtext>A good paper about monads is actually by 

Simon Peyton Jones from Microsoft:http://research.microsoft.com/Users/simonpj/papers/marktoberdorf/You have to have some Haskell knowledge though..</evnet:previewtext><dc:creator>mixelz</dc:creator><slash:comments>0</slash:comments><wfw:commentRss></wfw:commentRss><trackback:ping>http://channel9.msdn.com/369146/Trackback.aspx</trackback:ping></item><item><title>Re: Brian Beckman: Don't fear the Monads</title><description>Hello Guys,&lt;br&gt;&lt;br&gt;Great video! It's always great to see Brian.&lt;br&gt;&lt;br&gt;(Brianbec fans! Do not miss Brian's interview at&lt;br&gt;http://channel8.msdn.com/Posts/Brian-Beckman-I-have-an-idea-then-what&lt;br&gt;:-)&lt;br&gt;&lt;br&gt;May I ask a question? How many real-world applications are there that are based on functional programming? I heard somewhere that functional principles appear in Google Maps and Google Earth. I'm not sure if it's true or not... I just mentioned. It'd be nice to learn more about some real examples.&lt;br&gt;</description><comments></comments><link>http://channel9.msdn.com/shows/Going+Deep/Brian-Beckman-Dont-fear-the-Monads/?CommentID=369107</link><pubDate>Sun, 02 Dec 2007 19:19:31 GMT</pubDate><guid isPermaLink="false">http://channel9.msdn.com/shows/Going+Deep/Brian-Beckman-Dont-fear-the-Monads/?CommentID=369107</guid><evnet:views>0</evnet:views><evnet:viewtrackingurl>http://channel9.msdn.com/369107/WebViewBug.aspx?EVT=0</evnet:viewtrackingurl><evnet:previewtext>Hello Guys,Great video! It's always great to see Brian.(Brianbec fans! Do not miss Brian's interview athttp://channel8.msdn.com/Posts/Brian-Beckman-I-have-an-idea-then-what:-)May I ask a question? How many real-world applications are there that are based on functional programming? I heard somewhere&amp;#8230;</evnet:previewtext><dc:creator>akopacsi</dc:creator><slash:comments>0</slash:comments><wfw:commentRss></wfw:commentRss><trackback:ping>http://channel9.msdn.com/369107/Trackback.aspx</trackback:ping></item><item><title>Re: Brian Beckman: Don't fear the Monads</title><description>Thanks for great video, it has been best introduction to monads I've seen so far! Most of the "monad tutorials" really suck and they all forget about the outer lambda in composition :)


Composability is explained perfectly, however composability could be achieved by just having a proper type signatures! Imagine you have semigroup: set of objects and associative operation. You don't have identity, but you still closed against composition.


So it is not clear what's the purpose of "monadic rules" - why associativity and identity are required? What changes if (&gt;&gt;=) is not associative? What can't be achieved when there is no 'return'?


I hope it will be a good be a good theme for a next lecture.</description><comments></comments><link>http://channel9.msdn.com/shows/Going+Deep/Brian-Beckman-Dont-fear-the-Monads/?CommentID=368988</link><pubDate>Sat, 01 Dec 2007 21:13:41 GMT</pubDate><guid isPermaLink="false">http://channel9.msdn.com/shows/Going+Deep/Brian-Beckman-Dont-fear-the-Monads/?CommentID=368988</guid><evnet:views>0</evnet:views><evnet:viewtrackingurl>http://channel9.msdn.com/368988/WebViewBug.aspx?EVT=0</evnet:viewtrackingurl><evnet:previewtext>Thanks for great video, it has been best introduction to monads I've seen so far! Most of the "monad tutorials" really suck and they all forget about the outer lambda in composition :)


Composability is explained perfectly, however composability could be achieved by just having a proper type&amp;#8230;</evnet:previewtext><dc:creator>dottedmag</dc:creator><slash:comments>0</slash:comments><wfw:commentRss></wfw:commentRss><trackback:ping>http://channel9.msdn.com/368988/Trackback.aspx</trackback:ping></item><item><title>Re: Brian Beckman: Don't fear the Monads</title><description>&lt;BLOCKQUOTE&gt;&lt;div&gt;Beta wrote:&lt;/div&gt;&lt;div&gt;﻿
&lt;P&gt;Hi guys,&lt;BR&gt;&lt;BR&gt;Both Brian's F# interview and Joe Armstrong's Erlang interview(from JAOO) have got me really interested in functional programming.&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;&lt;/P&gt;
&lt;P&gt;So I'm looking to get started with functional programming and Erlang and F# have both sparked my interest equally ... So; I'm kind of stuck on which one to study?&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;&lt;/P&gt;
&lt;P&gt;Has anyone got any decent pro/con lists for me to take into consideration? As, unfortunately (or, most probably, fortunately) the web isn't littered with Erlang Vs. F# wars, the way it is with C# Vs VB.NET, Java Vs. C++, etc,etc, for me to browse.&lt;BR&gt;&lt;/P&gt;
&lt;P&gt;Cheers &lt;IMG src="http://channel9.msdn.com/emoticons/emotion-1.gifborder=0&gt;&lt;BR&gt;&lt;/P&gt;&lt;/div&gt;&lt;/BLOCKQUOTE&gt;&lt;BR&gt;&lt;BR&gt;To get into full, pure functional programming: the only game in town is Haskell (&lt;a href="http://www.haskell.org"&gt;www.haskell.org&lt;/a&gt;&amp;nbsp;:)&amp;nbsp;The web site is loaded with tutorials and samples and&amp;nbsp;other beautiful stuff.&amp;nbsp;If you have the time to dig in and learn, it will be intellectually transforming and rejuvenating. But there's no bridging the chasm back even to the partly-functional world of .NET (getting into Haskell is like getting into a Monad -- you can't get out [pun intended]).&lt;BR&gt;&lt;BR&gt;C# 3.0, VB 9, and F# all three now have first-class functions (lambda expressions), so you can experience many of the benefits of functional programming in any of those three, and F# has a syntax and a "look and feel" closer to Haskell, especially for purely sequential programs. If you've done any Scheme programming, then you will breathe a sigh of happiness with any of these three languages, now with LINQ and lambda.&amp;nbsp;I don't have any experience with Erlang, so I can't chime in there.</description><comments></comments><link>http://channel9.msdn.com/shows/Going+Deep/Brian-Beckman-Dont-fear-the-Monads/?CommentID=367766</link><pubDate>Wed, 28 Nov 2007 16:14:13 GMT</pubDate><guid isPermaLink="false">http://channel9.msdn.com/shows/Going+Deep/Brian-Beckman-Dont-fear-the-Monads/?CommentID=367766</guid><evnet:views>0</evnet:views><evnet:viewtrackingurl>http://channel9.msdn.com/367766/WebViewBug.aspx?EVT=0</evnet:viewtrackingurl><evnet:previewtext>Beta wrote:﻿
Hi guys,Both Brian's F# interview and Joe Armstrong's Erlang interview(from JAOO) have got me really interested in functional programming.

So I'm looking to get started with functional programming and Erlang and F# have both sparked my interest equally ... So; I'm kind of stuck on&amp;#8230;</evnet:previewtext><dc:creator>brianbec</dc:creator><slash:comments>0</slash:comments><wfw:commentRss></wfw:commentRss><trackback:ping>http://channel9.msdn.com/367766/Trackback.aspx</trackback:ping></item><item><title>Re: Brian Beckman: Don't fear the Monads</title><description>&lt;p&gt;Hi guys,&lt;br&gt;&lt;br&gt;Both Brian's F#
interview and Joe Armstrong's Erlang interview(from JAOO) have got me
really interested in functional programming.&lt;/p&gt;
&lt;p&gt;&lt;br&gt;
&lt;/p&gt;
&lt;p&gt;So I'm looking to get started with functional
programming and Erlang and F# have both sparked my interest equally 
... So; I'm kind of stuck on which one to study?&lt;/p&gt;
&lt;p&gt;&lt;br&gt;
&lt;/p&gt;
&lt;p&gt;Has anyone got any decent pro/con lists
for me to take into consideration? As, unfortunately (or, most
probably,  fortunately) the web isn't littered with Erlang Vs. F#
wars, the way it is with C# Vs VB.NET, Java Vs. C++, etc,etc,   for me to browse.&lt;br&gt; 
&lt;/p&gt;
&lt;p&gt;Cheers :)&lt;br&gt;&lt;/p&gt;</description><comments></comments><link>http://channel9.msdn.com/shows/Going+Deep/Brian-Beckman-Dont-fear-the-Monads/?CommentID=367580</link><pubDate>Tue, 27 Nov 2007 20:51:05 GMT</pubDate><guid isPermaLink="false">http://channel9.msdn.com/shows/Going+Deep/Brian-Beckman-Dont-fear-the-Monads/?CommentID=367580</guid><evnet:views>0</evnet:views><evnet:viewtrackingurl>http://channel9.msdn.com/367580/WebViewBug.aspx?EVT=0</evnet:viewtrackingurl><evnet:previewtext>Hi guys,Both Brian's F#
interview and Joe Armstrong's Erlang interview(from JAOO) have got me
really interested in functional programming.


So I'm looking to get started with functional
programming and Erlang and F# have both sparked my interest equally 
... So; I'm kind of stuck on which&amp;#8230;</evnet:previewtext><dc:creator>Beta</dc:creator><slash:comments>0</slash:comments><wfw:commentRss></wfw:commentRss><trackback:ping>http://channel9.msdn.com/367580/Trackback.aspx</trackback:ping></item><item><title>Re: Combining C# And F#</title><description>&lt;BLOCKQUOTE&gt;&lt;div&gt;esoteric wrote:&lt;/div&gt;&lt;div&gt;﻿A possible supplement to Brian's excellent introduction to Monads. &lt;BR&gt;&lt;BR&gt;&lt;a href="http://golem.ph.utexas.edu/category/2007/09/the_catsters_on_youtube.html"&gt;The n-Category Café&lt;/a&gt;&lt;BR&gt;&lt;BR&gt;featuring YouTube videos.&lt;BR&gt;&lt;/div&gt;&lt;/BLOCKQUOTE&gt;&lt;BR&gt;&lt;BR&gt;Superb!!!</description><comments></comments><link>http://channel9.msdn.com/shows/Going+Deep/Brian-Beckman-Dont-fear-the-Monads/?CommentID=367425</link><pubDate>Tue, 27 Nov 2007 04:34:28 GMT</pubDate><guid isPermaLink="false">http://channel9.msdn.com/shows/Going+Deep/Brian-Beckman-Dont-fear-the-Monads/?CommentID=367425</guid><evnet:views>0</evnet:views><evnet:viewtrackingurl>http://channel9.msdn.com/367425/WebViewBug.aspx?EVT=0</evnet:viewtrackingurl><evnet:previewtext>esoteric wrote:﻿A possible supplement to Brian's excellent introduction to Monads. The n-Category Caféfeaturing YouTube videos.Superb!!!</evnet:previewtext><dc:creator>brianbec</dc:creator><slash:comments>0</slash:comments><wfw:commentRss></wfw:commentRss><trackback:ping>http://channel9.msdn.com/367425/Trackback.aspx</trackback:ping></item><item><title>Re: Brian Beckman: Don't fear the Monads</title><description>&lt;P&gt;"All nouny, no verby"&lt;BR&gt;&lt;BR&gt;Cool! &lt;/P&gt;</description><comments></comments><link>http://channel9.msdn.com/shows/Going+Deep/Brian-Beckman-Dont-fear-the-Monads/?CommentID=367320</link><pubDate>Mon, 26 Nov 2007 21:50:11 GMT</pubDate><guid isPermaLink="false">http://channel9.msdn.com/shows/Going+Deep/Brian-Beckman-Dont-fear-the-Monads/?CommentID=367320</guid><evnet:views>0</evnet:views><evnet:viewtrackingurl>http://channel9.msdn.com/367320/WebViewBug.aspx?EVT=0</evnet:viewtrackingurl><evnet:previewtext>"All nouny, no verby"Cool! </evnet:previewtext><dc:creator>bobbyorr</dc:creator><slash:comments>0</slash:comments><wfw:commentRss></wfw:commentRss><trackback:ping>http://channel9.msdn.com/367320/Trackback.aspx</trackback:ping></item><item><title>Re: Combining C# And F#</title><description>A possible supplement to Brian's excellent introduction to Monads. &lt;BR&gt;&lt;BR&gt;&lt;a href="http://golem.ph.utexas.edu/category/2007/09/the_catsters_on_youtube.html"&gt;The n-Category Café&lt;/a&gt;&lt;BR&gt;&lt;BR&gt;featuring YouTube videos.&lt;BR&gt;</description><comments></comments><link>http://channel9.msdn.com/shows/Going+Deep/Brian-Beckman-Dont-fear-the-Monads/?CommentID=367280</link><pubDate>Mon, 26 Nov 2007 20:36:24 GMT</pubDate><guid isPermaLink="false">http://channel9.msdn.com/shows/Going+Deep/Brian-Beckman-Dont-fear-the-Monads/?CommentID=367280</guid><evnet:views>0</evnet:views><evnet:viewtrackingurl>http://channel9.msdn.com/367280/WebViewBug.aspx?EVT=0</evnet:viewtrackingurl><evnet:previewtext>A possible supplement to Brian's excellent introduction to Monads. The n-Category Caféfeaturing YouTube videos.</evnet:previewtext><dc:creator>Bent Rasmussen</dc:creator><slash:comments>0</slash:comments><wfw:commentRss></wfw:commentRss><trackback:ping>http://channel9.msdn.com/367280/Trackback.aspx</trackback:ping></item><item><title>Re: Combining C# And F#</title><description>&lt;BLOCKQUOTE&gt;&lt;div&gt;Apogeum wrote:&lt;/div&gt;&lt;div&gt;﻿Thats great! &lt;BR&gt;&lt;BR&gt;I am really looking forward to seeing more great interviews like this one.&lt;BR&gt;&lt;BR&gt;&lt;/div&gt;&lt;/BLOCKQUOTE&gt;&lt;BR&gt;&lt;BR&gt;You can bet on it. Next up will be a deep dive into pure functional programming (and why, at least&amp;nbsp;from the interviewee's point of&amp;nbsp;view, it's the&amp;nbsp;only way to&amp;nbsp;go)&amp;nbsp;with another expert in the domain and great personality.&lt;BR&gt;&lt;BR&gt;Stay tuned.&lt;BR&gt;C</description><comments></comments><link>http://channel9.msdn.com/shows/Going+Deep/Brian-Beckman-Dont-fear-the-Monads/?CommentID=367279</link><pubDate>Mon, 26 Nov 2007 20:33:06 GMT</pubDate><guid isPermaLink="false">http://channel9.msdn.com/shows/Going+Deep/Brian-Beckman-Dont-fear-the-Monads/?CommentID=367279</guid><evnet:views>0</evnet:views><evnet:viewtrackingurl>http://channel9.msdn.com/367279/WebViewBug.aspx?EVT=0</evnet:viewtrackingurl><evnet:previewtext>Apogeum wrote:﻿Thats great! I am really looking forward to seeing more great interviews like this one.You can bet on it. Next up will be a deep dive into pure functional programming (and why, at least&amp;nbsp;from the interviewee's point of&amp;nbsp;view, it's the&amp;nbsp;only way to&amp;nbsp;go)&amp;nbsp;with&amp;#8230;</evnet:previewtext><dc:creator>Charles</dc:creator><slash:comments>0</slash:comments><wfw:commentRss></wfw:commentRss><trackback:ping>http://channel9.msdn.com/367279/Trackback.aspx</trackback:ping></item><item><title>Combining C# And F#</title><description>Thats great! &lt;br&gt;&lt;br&gt;I still don't think I understand monads and functional programming, my lack of math background is complicating things. But I totally get the complexity built on simplicity to ensure composability part, that is kind of my whole bid.&lt;br&gt;&lt;br&gt;simplicity meaning: "easy to decide" as opposed to "easy, because I don't have to decide". so I guess functional programming will still require a very particular mindset to be successfully employed.&lt;br&gt;&lt;br&gt;I am really looking forward to seeing more great interviews like this one.&lt;br&gt;&lt;br&gt;</description><comments></comments><link>http://channel9.msdn.com/shows/Going+Deep/Brian-Beckman-Dont-fear-the-Monads/?CommentID=367277</link><pubDate>Mon, 26 Nov 2007 20:26:24 GMT</pubDate><guid isPermaLink="false">http://channel9.msdn.com/shows/Going+Deep/Brian-Beckman-Dont-fear-the-Monads/?CommentID=367277</guid><evnet:views>0</evnet:views><evnet:viewtrackingurl>http://channel9.msdn.com/367277/WebViewBug.aspx?EVT=0</evnet:viewtrackingurl><evnet:previewtext>Thats great! I still don't think I understand monads and functional programming, my lack of math background is complicating things. But I totally get the complexity built on simplicity to ensure composability part, that is kind of my whole bid.simplicity meaning: "easy to decide" as opposed to&amp;#8230;</evnet:previewtext><dc:creator>Apogeum</dc:creator><slash:comments>0</slash:comments><wfw:commentRss></wfw:commentRss><trackback:ping>http://channel9.msdn.com/367277/Trackback.aspx</trackback:ping></item><item><title>Re: Brian Beckman: Don't fear the Monad</title><description>Here are a couple of great, motivational&amp;nbsp;papers on functional programming in general and Haskell in particular&lt;BR&gt;&lt;BR&gt;"Why Functional Programming Matters,"&lt;BR&gt;&lt;BR&gt;&lt;a href="http://www.md.chalmers.se/~rjmh/Papers/whyfp.html"&gt;http://www.md.chalmers.se/~rjmh/Papers/whyfp.html&lt;/a&gt;&lt;BR&gt;&lt;BR&gt;&lt;BR&gt;"Why Haskell Matters,"&lt;BR&gt;&lt;BR&gt;&lt;a href="http://www.haskell.org/haskellwiki/Why_Haskell_Matters"&gt;http://www.haskell.org/haskellwiki/Why_Haskell_Matters&lt;/a&gt;&lt;BR&gt;&lt;BR&gt;</description><comments></comments><link>http://channel9.msdn.com/shows/Going+Deep/Brian-Beckman-Dont-fear-the-Monads/?CommentID=367202</link><pubDate>Mon, 26 Nov 2007 17:39:19 GMT</pubDate><guid isPermaLink="false">http://channel9.msdn.com/shows/Going+Deep/Brian-Beckman-Dont-fear-the-Monads/?CommentID=367202</guid><evnet:views>0</evnet:views><evnet:viewtrackingurl>http://channel9.msdn.com/367202/WebViewBug.aspx?EVT=0</evnet:viewtrackingurl><evnet:previewtext>Here are a couple of great, motivational&amp;nbsp;papers on functional programming in general and Haskell in particular"Why Functional Programming Matters,"http://www.md.chalmers.se/~rjmh/Papers/whyfp.html"Why Haskell Matters,"http://www.haskell.org/haskellwiki/Why_Haskell_Matters</evnet:previewtext><dc:creator>brianbec</dc:creator><slash:comments>0</slash:comments><wfw:commentRss></wfw:commentRss><trackback:ping>http://channel9.msdn.com/367202/Trackback.aspx</trackback:ping></item><item><title>Re: Brian Beckman: Don't fear the Monad</title><description>&lt;BLOCKQUOTE&gt;&lt;div&gt;esoteric wrote:&lt;/div&gt;&lt;div&gt;Also - is monads really "the" way to structure libraries?&lt;/div&gt;&lt;/BLOCKQUOTE&gt;&lt;BR&gt;&lt;BR&gt;I would say that "composability" or "compositionality" is THE way to structure libraries. Monads aren't the&amp;nbsp;ONLY way to build-in compositionality from the outset in a design, but they're a very common pattern, broadly applicable, fully understood.&lt;BR&gt;&lt;BR&gt;</description><comments></comments><link>http://channel9.msdn.com/shows/Going+Deep/Brian-Beckman-Dont-fear-the-Monads/?CommentID=367189</link><pubDate>Mon, 26 Nov 2007 16:01:52 GMT</pubDate><guid isPermaLink="false">http://channel9.msdn.com/shows/Going+Deep/Brian-Beckman-Dont-fear-the-Monads/?CommentID=367189</guid><evnet:views>0</evnet:views><evnet:viewtrackingurl>http://channel9.msdn.com/367189/WebViewBug.aspx?EVT=0</evnet:viewtrackingurl><evnet:previewtext>esoteric wrote:Also - is monads really "the" way to structure libraries?I would say that "composability" or "compositionality" is THE way to structure libraries. Monads aren't the&amp;nbsp;ONLY way to build-in compositionality from the outset in a design, but they're a very common pattern, broadly applicable, fully understood.</evnet:previewtext><dc:creator>brianbec</dc:creator><slash:comments>0</slash:comments><wfw:commentRss></wfw:commentRss><trackback:ping>http://channel9.msdn.com/367189/Trackback.aspx</trackback:ping></item><item><title>Re: Brian Beckman: Don't fear the Monad</title><description>&lt;BLOCKQUOTE&gt;&lt;div&gt;Apogeum wrote:&lt;/div&gt;&lt;div&gt;﻿is it possible to mix c# and f#? (I'm new to this, obviously) &lt;/div&gt;&lt;/BLOCKQUOTE&gt;&lt;BR&gt;&lt;BR&gt;Yes, since both C# and F# are full "citizens" of .NET, you can call methods in one from the other and back very easily.&lt;BR&gt;</description><comments></comments><link>http://channel9.msdn.com/shows/Going+Deep/Brian-Beckman-Dont-fear-the-Monads/?CommentID=367188</link><pubDate>Mon, 26 Nov 2007 15:58:48 GMT</pubDate><guid isPermaLink="false">http://channel9.msdn.com/shows/Going+Deep/Brian-Beckman-Dont-fear-the-Monads/?CommentID=367188</guid><evnet:views>0</evnet:views><evnet:viewtrackingurl>http://channel9.msdn.com/367188/WebViewBug.aspx?EVT=0</evnet:viewtrackingurl><evnet:previewtext>Apogeum wrote:﻿is it possible to mix c# and f#? (I'm new to this, obviously) Yes, since both C# and F# are full "citizens" of .NET, you can call methods in one from the other and back very easily.</evnet:previewtext><dc:creator>brianbec</dc:creator><slash:comments>0</slash:comments><wfw:commentRss></wfw:commentRss><trackback:ping>http://channel9.msdn.com/367188/Trackback.aspx</trackback:ping></item><item><title>Re: Brian Beckman: Don't fear the Monads</title><description>&lt;P&gt;Great.&amp;nbsp; However still confused about real world and how this removes issues with shared state and locking.&amp;nbsp; So, for example,&amp;nbsp;I have 1 Customer object (Name and&amp;nbsp;OrderCount) that is shared today in my program.&amp;nbsp; Say I have a shared static ref to it and threads in my program take a lock before reading or writing any properties on this object.&amp;nbsp; So how does this look with functional programming.&amp;nbsp; I assume it involves making ctor copies, but don't see the light yet.&amp;nbsp; Small example would help.&amp;nbsp; tia&lt;/P&gt;</description><comments></comments><link>http://channel9.msdn.com/shows/Going+Deep/Brian-Beckman-Dont-fear-the-Monads/?CommentID=367184</link><pubDate>Mon, 26 Nov 2007 15:45:03 GMT</pubDate><guid isPermaLink="false">http://channel9.msdn.com/shows/Going+Deep/Brian-Beckman-Dont-fear-the-Monads/?CommentID=367184</guid><evnet:views>0</evnet:views><evnet:viewtrackingurl>http://channel9.msdn.com/367184/WebViewBug.aspx?EVT=0</evnet:viewtrackingurl><evnet:previewtext>Great.&amp;nbsp; However still confused about real world and how this removes issues with shared state and locking.&amp;nbsp; So, for example,&amp;nbsp;I have 1 Customer object (Name and&amp;nbsp;OrderCount) that is shared today in my program.&amp;nbsp; Say I have a shared static ref to it and threads in my program&amp;#8230;</evnet:previewtext><dc:creator>William Stacey</dc:creator><slash:comments>0</slash:comments><wfw:commentRss></wfw:commentRss><trackback:ping>http://channel9.msdn.com/367184/Trackback.aspx</trackback:ping></item><item><title>Re: Brian Beckman: Don't fear the Monad</title><description>I understand monads better now. Once I understand them "fully", perhaps it's time to move onto: arrows? http://www.haskell.org/arrows/. Also - is monads really "the" way to structure libraries?</description><comments></comments><link>http://channel9.msdn.com/shows/Going+Deep/Brian-Beckman-Dont-fear-the-Monads/?CommentID=367183</link><pubDate>Mon, 26 Nov 2007 15:44:06 GMT</pubDate><guid isPermaLink="false">http://channel9.msdn.com/shows/Going+Deep/Brian-Beckman-Dont-fear-the-Monads/?CommentID=367183</guid><evnet:views>0</evnet:views><evnet:viewtrackingurl>http://channel9.msdn.com/367183/WebViewBug.aspx?EVT=0</evnet:viewtrackingurl><evnet:previewtext>I understand monads better now. Once I understand them "fully", perhaps it's time to move onto: arrows? http://www.haskell.org/arrows/. Also - is monads really "the" way to structure libraries?</evnet:previewtext><dc:creator>Bent Rasmussen</dc:creator><slash:comments>0</slash:comments><wfw:commentRss></wfw:commentRss><trackback:ping>http://channel9.msdn.com/367183/Trackback.aspx</trackback:ping></item></channel></rss>