Building on that, I think coming to Haskell with a very specific goal in mind (like swap Haskell for Java in my map reduce problem) kind of misses the point. Haskell may or may not be faster/better suited to map reduce vs Java, but the real reason to use/learn Haskell is elegance and correctness. The lack of side effects and referential transparency means you're far more likely to prevent bugs. And there's a pretty substantial learning curve coming from imperative languages so if you need to speed up map reduce on a deadline you will be more productive in the imperative language of your choice (for now). Dont take this as discouragement, I think Haskell (and FP in general) is very well suited to that kind of problem. I'm a beginner in Haskell and it's already had a huge impact on how I think about all the code I write, not just the occasional toy Haskell project. On Dec 11, 2015 1:08 PM, MJ Williams <matthewjwilliams101@gmail.com> wrote:A pure functional language enables you to reason about your code, something you can't easily achieve with your average C or Java. And by `reason' I am referring to mathematical proof. Haskell makes it very simple, actually. Why should you want to reason about your code? Think the hassle you could avoid if you knew what your code really meant and did when executed. The absence of side effects is part of another concept in FP, namely, `referential transparency'. If your function `f' maps a value `x' to a value `y' then `f x' will always equal `y' and no more. In other words, your function `f' won't change anything e.g. assign to variables, or other state changes as well as mapping `x' to `y', and that's an absolute certainty, in theory, at any rate. That's a very crude overview of at least part of what functional programming is about. I'm hoping it'll encourage others on this list with far more in-depth knowledge of the subject matter to come in and fill in the gaps and iron out the ambiguities. Matthew On 11/12/2015, Daniel Bergey <bergey@alum.mit.edu> wrote:On 2015-12-11 at 10:07, Abhishek Kumar <abhishekkmr18@gmail.com> wrote:I am a beginner in haskell.I have heard a lot about haskell being great for parallel programming and concurrency but couldn't understand why?Aren't iterative algorithms like MapReduce more suitable to run parallely?Also how immutable data structures add to speed?I'm having trouble understanding very philosophy of functional programming, how do we gain by writing everything as functions and pure code(without side effects)? Any links or references will be a great help.Functional languages make it easy to decompose problems in the way that MapReduce frameworks require. A few examples (fold is another name for reduce): sum :: [Double] -> Double sum xs = foldr (+) 0 xs sumSquares :: [Double] -> Double sumSquares xs = foldr (+) 0 (map (**2) xs) -- foldMap combines the map & fold steps -- The Monoid instance for String specifies how to combine 2 Strings -- Unlike numbers, there's only one consistent option unlines :: [Text] -> Text unlines xs = foldMap (`snoc` '\n') xs We'd need a few changes[1] to make this parallel and distribute across many computers, but expressing the part that changes for each new MapReduce task should stay easy. Immutable data by default helps with concurrency. Speed may or may not be the goal. We want to be able to distribute tasks (eg, function calls) across processor cores, and run them in different order, without introducing race conditions. Simon Marlow's book is great at explaining parallel & concurrent concepts, and the particular tools for applying them in Haskell: http://chimera.labs.oreilly.com/books/1230000000929 bergey Footnotes: [1] OK, many changes. _______________________________________________ Beginners mailing list Beginners@haskell.org http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners_______________________________________________ Beginners mailing list Beginners@haskell.org http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners_______________________________________________ Beginners mailing list Beginners@haskell.org http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners
Websites:
Honors portfolio
Non-proffessional website.
Awesome
little hand built weather app that rocks!
email me at
derek.riemer@colorado.edu
Phone: (303) 906-2194