Learning Haskell makes you a better programmer?

Aquiles aquiles.a.lopez at gmail.com
Wed Dec 26 09:01:56 PST 2012


I will humbly offer my opinion as a guy who is learning both D 
and Haskell.

Here are some of the finer points of Haskell that has directly 
improved my programming:

Referential Transparency takes away mutation and gives you 
reliable composition. To do anything useful in Haskell you have 
to at some point compose functions. To compose functions 
effectively you have to think about what your functions 
input/output are and how they relate. So instead of having a sink 
function that returns nothing and does magic inside you think in 
terms of testable individual components that focus only on one 
aspect of the computation.

Recursion and Breaking apart tough problems. When you are forced 
to think recursively you have to think of your base cases, your 
invariants, your pre and post conditions, and how you get from 
x[k] -> x[k+1] without violating your contract. Again it 
encourages deliberate design as opposed to empirical exploration.

Type Classes are an abstraction on types similar to those found 
in D and C++. It removes the idea that interfaces are an OOP 
construct instead shows you how you can design the basis of 
communication between data by supporting a set of functions.

Lastly, I found GHC really helpful in its brutal nit-picking of 
types, inferences, etc. This helps in making the transition from 
writing code for the compiler, to writing code with the compiler.

How this has benefited my view of D:

Think about the overall system as a series of composable 
components that have predictable behaviour.
Think about the details of each component and how you can verify 
the output.
Think about the base-case and the special-case when creating a 
procedure.
Use the syntax to help the compiler understand what your intent 
is.

D helps with:

* uniform function syntax
* templates
* guards
* contracts: in, out, body
* built in unittest
* compile time assertions, conditionals, expressions

In closing, I don't think Haskell is meant to make you a better 
programmer by flexing your higher-order function manipulation or 
using FP idioms in an OOP/imperative context. It's strength, at 
least for me, has been the thought process behind functional 
programming and how to apply its view of data to your programming 
language.



More information about the Digitalmars-d mailing list