Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

Yeah, lazy evaluation can be surprising (in a good way). Once you get in the mindset of thinking "this is going to be hard", you start programming Haskell like you would C, and while it works, you feel stupid when you realize you just rewrote the Haskell compiler. Poorly.

(Personally, I have done this a number of times. I remember writing some dependency evaluation system, with a central data structure that looked something like:

   data Dependency a e = Thunk (e -> a) | Resolved a
with a bunch of code to turn a set of Thunks into Resolved when necessary.

But of course, Haskell always does this anyway!)

I was also surprised when I was on Windows and needed the "head" utility to look at the first line of a file, but didn't have it installed. Since I had a ghci session going, I just wrote:

   readFile "foo.csv" >>= putStrLn . unlines . take 10 . lines
Half-expecting it to error out because the file didn't fit into memory. Nope! Problem solved!

(And yes, I know unsafeInterleaveIO is evil.)



Consider applying for YC's Winter 2027 batch! Applications are open till November 2.

Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: