Monday, October 22, 2007

An Informal Interview With a Haskell Hacker

2:33:03 PM codeshepherd: given that haskell is a functional programming language.. what are the main differences you find when you compare haskell with other langs
2:34:10 PM rajagopal.n: modifying the system state is something that is still tricky for me to do in some cases. For instance, I was thinking I had understood Monads properly, only to understand that there is more that I didn't understand clearly, when i tried to do some database manipulation using the HSQL connectors, and print the resultsets on a webpage using HAppS.
2:34:22 PM rajagopal.n: but otherwise, if all that you want to do is lot of computation
2:34:28 PM rajagopal.n: writing Haskell code is fun
2:34:36 PM rajagopal.n: you wanna one line binary tree?
2:34:38 PM rajagopal.n: you can
2:35:05 PM rajagopal.n: you can construct all such stuff with ease, without leaving space for much bugs.
2:36:43 PM codeshepherd: function are building blocks of language.. and not objects.. so is it difficult for people from OOP background to learn haskell ?
2:40:00 PM rajagopal.n: The difficulty of learning depends on the OOP that you were using. Most people find it difficult to get used to the concept of lazy evaluation, and immutable data in Haskell, being used to languages where the statements get executed in sequence, and having been used to using variables as counters and stuff. people tend to ask in C, C++, I can do a I++ to increment the value of I. but why does haskell make these variables immutable? It takes time for them to understand that immutability is a way to facilitate lazy evaluation.
2:40:27 PM rajagopal.n: It needs forgetting some of the imperative programming concepts to start accepting the functional programming concepts
2:41:46 PM codeshepherd: Does haskell support Meta Programming ? If so how different is it from Ruby's meta programming implementation ?
2:43:51 PM rajagopal.n: Haskell supports meta programming. I've just learnt it to understand some parts of the HAppS example blog application code. As I hadn't done any meta programming in Ruby, I'm not sure about how it compares to it
2:45:08 PM codeshepherd: Does Meta programming combined with Functional programming pose special advantages ?
2:49:53 PM rajagopal.n: I'm not sure about that da.
2:50:19 PM codeshepherd: ok.
2:50:41 PM codeshepherd: Does Haskell support Duck Typing ?
2:51:06 PM rajagopal.n: ya,

Prelude> :t map
map :: (a -> b) -> [a] -> [b]
Prelude> let bar a = map (*1) a
Prelude> :t bar
bar :: (Num a) => [a] -> [a].

you see that it makes it Num
2:51:53 PM codeshepherd: Duck Typing with functions as basic blocks is kinda difficult to understand ? Do functions act like so called ducks in duck typing ?
2:54:16 PM rajagopal.n: There is not difference in the way you see functions and data in a functional programming language
2:57:02 PM codeshepherd: Is there any reason for people to choose Haskell over other languages for hobby programming ?
3:00:49 PM rajagopal.n: Haskell is pure functional. You get to learn a lot of new things, being a pure functional language that restricts modification to the state to be done only through monads. Learning Haskell and teasing the brain is refreshing when you get bored with all those languages that mostly differs only by syntactic sugar or a few extra features.
3:01:55 PM codeshepherd: ok

No comments: