5 ms·
care to detail how do x <- a y <- b return (f x y) isn't basically imperative syntax ? hint: if you can get from it to C (or pascal or
by jcelerier 7y ago
care to detail how
do
x <- a
y <- b
return (f x y)
isn't basically imperative syntax ?
hint: if you can get from it to C (or pascal or python or whatever) simply by adding a couple types, semicolons and replacing operators, it's C.
- lmm 7y agoHow is that any more or less imperative than the standard Haskell syntax: let x = a y = b in (f x y) ? Which in turn is very much like OCaml syntax or plenty of other functional syntaxes.
- jhomedall 7y agoIIRC that desugars to a >>= (\x -> b >>= (\y >>= return (f x y))) . I don't write Haskell, so that might be slightly off This could be doing any one of: - flatmapping over lists - doing a computation with Maybe types, producing Nothing if a or b are nothing - doing IO - managing futures - pretty much anything, actually Don't confuse 'x <- a' with assignment, or 'return' with returning a value. Another way of looking at it, (f x y) might be invoked: - once - never - more than once - later
- asdkjh345fd 7y agoThere is no such thing as imperative syntax. Syntax is completely orthogonal to being imperative, which is semantic not syntactic. It isn't "almost C-like syntax", unless you define that to mean "if I do any amount of search and replace I can make it into valid C code that has completely different semantics". "x <- a" in haskell is not at all the same as "x = a" in C. And that isn't the reason I said your comment is wrong. Your comment is wrong because do notation is not the result of "40 years of research in functional PL", nor is it an accomplishment. It is simple syntactic sugar that didn't come from research at all. Your comment could be accurately summarized as "I would like to express how smug I feel for not learning something".
- jcelerier 7y ago> Your comment is wrong because do notation is not the result of "40 years of research in functional PL" are you kidding me ? if a 2016 paper from Simon Peyton Jones isn't research then what is ? (https://dl.acm.org/doi/pdf/10.1145/3241625.2976007 https://dl.acm.org/doi/pdf/10.1145/3241625.2976007)
- asdkjh345fd 7y agoHave you considered reading it?
- jcelerier 7y agowould you consider showing me a previous appearance of ApplicativeDo (not do notation of course, that shit is almost older than me) in scientific literature before that paper ? As surely, if a concept had existed for a long time it would be more relevant to start by the original paper that introduced it ?
- random314 7y agoOf course, the only thing 40 years of PL research resulted in was the do notation. I was under the impression that the do notation was syntax sugar for any kind of Monad - List, nondeterminism, asynchronous iO, parser combinations, exceptions etc. Stuff that appears as language features in other languages, but are just a library in Haskell. But your chuckle has shown me that this code is just plain old C, with links to documents you haven't even read. Thank you for enlightening me, great chuckler.
- jcelerier 7y agoI am honestly amazed at such an incredible bad reading of my comments. Next time I'll just write a phd chapter instead as apparently this is what is needed sometimes.
- random314 7y agoYou are not capable of writing a PhD chapter. You lack the basic scientific thinking or method required. I suggest you focus on your core competency - chuckling. Here is some basic reading material for you. Lets see if you can follow this https://hackage.haskell.org/package/async-2.2.2/docs/Control-Concurrent-Async.html https://hackage.haskell.org/package/async-2.2.2/docs/Control... do a1 <- async (getURL url1) a2 <- async (getURL url2) page1 <- wait a1 page2 <- wait a2 This implements async await in Haskell via a library using Monads. Hint: you cannot do this in C via any library. You need to modify the language. If you are uneducated about Monads, you might think this is similar to some kind of C code. It is not! Here is the same do syntax being used to parse source files instead of doing async/await IO. Yes this parser will also perform backtracking etc, which will not be obvious to anyone who thinks this is some kind of transliteraton of C https://markkarpov.com/tutorial/megaparsec.html https://markkarpov.com/tutorial/megaparsec.html mySequence :: Parser (Char, Char, Char) mySequence = do a <- char 'a' b <- char 'b' c <- char 'c' return (a, b, c) Hint: If you want to do something like this in C, you use yacc/bison, a parser generator tool - there is no library. And it is fucking ugly. Hint 2: There are monads for parsing, async IO, exceptions, nondetermenism, monte carlo ......... Hint 3: The parser libraries are 25 years old. Hint 4: Monad libraries represent less than 1% of PL research over the last 40 years. Hint 5: C# LINQ is basically a Monad. Hint 6: When confronted with something you don't understand, it is better to be quiet instead of opening your mouth and advertising your ignorance. Hint 7: If your conversational style consists of chuckling and providing "Hints", be prepared for receiving a taste of the same medicine.
- random314 7y ago> hint: if you can get from it to C (or pascal or python or whatever) simply by adding a couple types, semicolons and replacing operators, it's C. hint: you are wrong.
- cannabis_sam 7y agoBecause it’s one big expression. A C version would have statements.