My interest in learning functional programming( or at least the
foundation of) is because I haven't done it before( though I flirted
with scheme a couple years ago). I don't really know what monads are I
was just compiling a list of "things I should look into" for future
reference to take the autodidactic approach to learning functional
paradigms.

When I first to the plunge to learn object oriented paradigm from a
procedural background I know I made it harder than it is. The first
thing I did to tackle the learning curve was to break down the four
concept layers encapsulation, inheritance, polymorphism and
abstraction. It wasn't until I began creating composite objects,
sending messages and creating observer objects until it finally hit me
and all seemed so simple that I didn't understand why it was so hard
in the first place.

As a side note the Ruby Language shows just how well an object
oriented program is. Simply the organisation behind every object in
it's own inheritance hierarchy all the way down to BasicObject,
polymorphic design of variants like lambda and Proc.new. Even the
redefinition of operators to deal with primitive and abstract data
types in their own domain( i.e. 3 * 3, [42,3] - [3,45,54], "lamda " *
3)... This is inspirational for modelling my own objects with this
type of object framework if I may be so =C0 Propos.

My background consists of posix shell scripting( ash, awk) and some c.
My interest in ruby has been to add a general purpose programming
language to my toolbox.  After I get to a proficiency apex with ruby I
have in the learning queue to go back and refresh my c knowledge and
take the time to truly grok the fundamental data structures and
algorithms.  Once that goal is hit I had planned to move to c++. C++0x
will be incorporating lambda and closures. I imagine c++ will be a
life long journey as it's a multi-paradigm programming language as
well. (is it 4 or 5 languages in one now?)

As Robert pointed out Ruby may not be the best language to learn
functional programming concepts with. This speaks volumes to me as I
am a huge proponent to the attitude to use the right tool for the
right job. If I am not mistaken most of these languages are dialects
of Lisp( correct me if I am wrong). I am not in a position to learn to
earn nor am I a mathematician. My interest is to simply better myself
as a programmer.

Those of you who have used Haskell monads does one really need to have
invented string theory to understand it or is it like how I explained
the object oriented learning curve where one might over-think it's
simplicity therefor overcomplicating their comprehension of the
paradigm?

Also is there a canonical or pedagogical tutorial for me to start
with? Hello, World! =3D)

Which language would be a decent new users language which would fit
well into my unix toolkit above as well as threading the knowledge
back into ruby's hybrid programming? (scheme, haskell, clojure common
lisp)

Thanks in advance

~Stu