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

That's because your code assumes those convenience functions exist while the parent's code writes out the anonymous functions.

The direct translation of yours' to Clojure would be:

    (filter valid-person? (map init-person names))
Meanwhile, the direct Haskell translation of the parent comment is:

    filter (\p -> isValid p) (map (\n -> Person n) names)


No one would ever write the latter, because (\p -> isValid p) is equivalent to isValid.

However you're right that the function names would probably be a little longer in practice, and I've edited my example to reflect that. (But they're not convenience functions, they just have longer names due to Haskell's more limited namespacing)


Not a Haskell expert, but maybe monomorphism restriction can require you to perform an eta abstraction. Just saying.


Huh? No, anyone who writes it in Haskell would not use those lambda abstractions. You would just use "filter isValid (map Person names)".


I'm assuming Person is a record constructor, is isValid here a field in that record or another function?


Haskell doesn't distinguish the two. If you define Person with named fields including isValid, you automatically get a function named isValid that returns that field, or you can write your own isValid function that examines the whole Person.




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

Search: