WARNING: THIS IS A VERY LONG REPLY<br><br>Luis,<br><br>If you are in a hurry skip to the point where I give advices ;-)<br><br>----------------------------------------SKIP IF YOU LIKE TO----------------------------------------------------<br>
<br><br>I&#39;ll ask some more questions!! :-P<br><br><br>- Nothing beats Assembly in speed. <br><br><div style="margin-left: 40px;">Why isn&#39;t everyone programming in Assembly??<br></div><br>- Python gives me the flexibility for fast prototyping, because it easily connects to C and Java libraries<br>
<br><div style="margin-left: 40px;">Why isn&#39;t every enterprise service bus (ESB) implementation written in Python??<br></div><br>- Ruby has Rails!! One of most successful MVC frameworks ever.<br><br><div style="margin-left: 40px;">
Why isn&#39;t every system written in Ruby on Rails?<br></div><br><br><br><br>Basically, what I am trying to say is that even though Haskell is not blazing fast, it can be made fast enough for you, given you use the right algorithms and optimizations.<br>
<br>For this to happen, you must first understand, the functional paradigm, the language and how the compiler optimizes your code.<br><br>For the rest of your questions:<br><br><br><br>- Is Haskell able to read (also write to a point) data from databases
in a fast and reliable way? (MySql or PostgreSQL)<br><br>Yes, there is a lot of ways. Look at Hackage (<a href="http://hackage.haskell.org/packages/hackage.html">HackageDB)</a> for database related packages<br>
<br>
- how could I program something like this in Haskell:<br>
    .. generate random population<br>
    .. for each one of the population:<br>
      .. for time period 1 to ten million:<br>
        .. evaluate method 1, 2, 3, 4, 5, 6, ....<br>
      ..evaluate fitness of each one<br>
    .. generate new population based on results of previous generation<br>
<br>
It seems relatively intuitive for me to program this in an imperative<br>
language.  But what about in Haskell?<br>
<br><br>It looks rather imperative to me, either. You can implement imperative things on the IO and State monads, but I would really suggest you rethink the algorithm.<br><br><br>
- Is Haskell suitable to process data like this in a fast way<br>
(aproximate to C++?)<br><br>How fast, again, depends on the algorithm. <br>Haskell programs look like a collection of mathematical functions. <br>
<br>One could write a program like a composition of functions:<br><br>main= count . words . readfile<br><br>and then define functions individually...<br><br>
- In order for Haskell to be fast, coding is done in a &#39;natural&#39; way<br>
or with use of special hidden details of the language?<br>
<br>The natural way makes you code right, but you have to think every step you do, since a badly organized recursion, or the excess of lazyness can make your program hog on memory and/or go dead slow.<br><br><br>
- Although I always liked math, I no longer have the knowledge I used<br>
to have several years ago.  Is this important to help program in this<br>
funcional language?<br>
<br>The math needed in your first steps is not hard. <br><br>After you started learning Haskell you will most certainly step on Monads. These might require some abstract algebra, if you want to understand what&#39;s behind the curtains. <br>
<br>Refrain yourself from trying to understand them using math and take a look on Philip Wadler&#39;s <a href="http://homepages.inf.ed.ac.uk/wadler/papers/marktoberdorf/baastad.pdf">&quot;Monads for functional programming&quot;</a><br>
<br>
- Are there graphical packages available to plot results or is it easy<br>
to connect it to a Python (or C) library?<br>
<br>Hackage is the way to go.<br><br>
- Is code easily reusable in different future projects?  Since it has<br>
no objects... how can it be done?<br><br>Like all other languages, it all depends on YOU. <br><br>Haskell has no objects, but it has polymorphic functions, which are just as powerful. <br><br>It also has type classes, which are almost like C++ object classes, but completely different. Type classes can restrict or increase polymorphism, depending on how you use them.<br>
<br>There are also MANY extensions implemented on GHC that expand the type system to its limit. <br><br>---------------------------------------- END OF SKIP BLOCK----------------------------------------------------<br><br>
<br>Is Haskell for you? I can&#39;t answer, but I can give some advice:<br><br>1) If you are in a hurry, go for what you know (C++, Java, Python, Assembly...)<br><br>2) If you really want to dig in, dig in. Learning Haskell is a wonderful experience and can dramatically change your way of programming. Think of a mind altering experience!!!<br>
<br>3) Even though it is hard to write great programs at first, in the end it is very rewarding. As your programming style improves, you&#39;ll see how elegant algorithms are implemented in functional programming.<br><br>
<br>I still consider myself a beginner, but I can assure you Haskell is a great language for functional programming.<br><br><br>Best regards,<br><br>Rafael Gustavo da Cunha Pereira Pinto<br><br>