| 
  | 
On 02/07/2011 08:19 AM, Warp wrote:
>    Even after reading those, I still don't understand what a "monad" is,
> and how it's different from plain inheritance. The articles talk about
> composition as if it was some kind of magic trick. I don't get it.
And if you sat and read a text on abstract algebra, you would probably 
come away thinking that a "field" is some very special, really complex 
entity that's almost incomprehensible. And yet actually, you use fields 
all the time.
The formal specification of what makes a field is very technical and 
abstract. Fields and the theory behind them are of fundamental 
importance in a wide range of mathematical disciplines. To say that 
"fields are important" is a major understatement.
And yet, lots of people *use* fields all the time. Actually using a 
particular field usually isn't complicated at all. (It's the theory 
concerning /all possible fields/ which is complicated.)
>    It's a bit like the magical term "currying". There seems to be something
> very special about it, but I just fail to understand what it is.
Currying is a simple short-cut, which also allows you to handle 
functions of varying numbers of arguments polymorphically. Anyone who 
claims it's something more magical than that is just over-excited.
>    In neither case do I fully understand what exactly is the problem they
> are solving, how they are used or why they are useful. In fact, they are
> both the strange feature that they seem to be both trivial and extremely
> hard to comprehend, at the same time.
Like one guy said, LINQ is a monad. LINQ solves a real-world problem. 
Point is, you don't have to actually *care* that it's a monad in order 
for it to be useful - any more than you need to care that Int forms a 
subset of a ring with unity, or that Double spectacularly fails to be a 
field.
In Haskell it's slightly different, since you can actually define the 
concept "this is a monad", and then write functions which work for /any 
possible monad/. As far as I can tell, C# can't do that, so knowing that 
something is a monad isn't quite so useful. (It doesn't enable you to 
apply a whole army of existing functions to something just because it's 
a monad.)
>    And then some people wonder why functional programming isn't more popular.
> How can it be, when it's full of trivial-sounding concepts which are, somehow,
> almost impossible to understand at the same time?
This is approximately like saying "The Turning machine makes no sense to 
me. I have no idea what its purpose is. It seems trivial-sounding and 
yet somehow impossible to understand. No wonder computers aren't more 
popular!"
-- 
http://blog.orphi.me.uk/
http://www.zazzle.com/MathematicalOrchid*
 
 Post a reply to this message 
 | 
  |