3 ms·
There's... forM_ in Haskell. that's basically a for loop, right?
by habitue 2y ago
There's... forM_ in Haskell. that's basically a for loop, right?
- eru 2y agoYes, you can implement your own loops in Haskell and OCaml (and Scheme and even the GCC-variant of C). However, I meant specifically that OCaml is so 'pragmatic' that they have a for-loop as a built-in syntactic element in the language. They also have mutable variables built-in. In eg Haskell those are 'only' available as part of the standard library.
- habitue 2y agoSorry, bad attempt at humor. I knew what you meant, I was just poking fun at forM_ for being bizarre and unergonomic
- tome 2y agoWhat do you find bizarre and unergonomic about it?
- habitue 2y agoIf you're quite used to Haskell, it's nbd. If you're coming from another language with for loops and someone tells you it's a for loop, you might be surprised that you need to use $ and the loop variable comes after the sequence for x in range(10): print(x) forM_ [0..10] $ \x -> putStrLn x
- karmakurtisaani 2y agoI'm convinced the people who came up with Haskell syntax were on some sort of bath salts.
- nequo 2y agoThe reason it looks the way it does is that forM_ is just a function like any other, not a keyword in a dedicated syntactic construct.
- karmakurtisaani 2y agoYep, and then there's the $, \ and PutStrLn. As a non-Haskell programmer none of those mean anything to me.
- nequo 2y ago$ is short for “put everything to the right inside parentheses” and \x -> y defines an anonymous function. Why do you expect to understand the syntax of a language you never studied?
- karmakurtisaani 2y ago> $ is short for “put everything to the right inside parentheses” There's, you know, also the actual parentheses that everyone already knows. > Why do you expect to understand the syntax of a language you never studied? Because most languages have a syntax that you can grasp almost immediately, since they conform to a common syntax, rather than invent everything all over again. Then you can focus on the actual features of the language and are not bogged down by syntax.
- nequo 2y agoIt doesn't take more than two minutes to understand what $ and \x -> y do, and if you start writing out those parentheses, you will also realize why $ is part of idiomatic Haskell.
- tasuki 2y agoYou know, perhaps Haskell isn't the right language for you. That's fine. Why should it conform to your syntactic preferences?
- eru 2y agoYou don't need the $ anymore with `BlockArguments`. But overall, Haskell isn't really any worse here than Rust's for-each; or even C's weird for-loop (where you just have to rote learn what the three parts in the header of the loop do). I agree it's worse than Python's or Rust's vanilla for-loop. I mostly like Python's syntax, I just wish they would make their would declare their indentation syntax to be sugar for a curly brace syntax (like Haskell does), and their would make their statements and blocks give values, like Haskell and Rust do. (Of course, I have some other things I don't like in Python. But her syntax is by-and-large fine.)