3 ms·
Those '!'s are really confusing. From the example in the submission: isEven = (x) -> x % 2 is 0 isOdd = (x) -> x % 2 isnt 0 addEvens :: (!isEven) -> !is
by 6ren 15y ago
Those '!'s are really confusing. From the example in the submission:
isEven = (x) -> x % 2 is 0
isOdd = (x) -> x % 2 isnt 0
addEvens :: (!isEven) -> !isOdd
addEvens = (x) -> x + 1
I am guessing that both '!'s define a new contract - and also guessing that coffeescript does not actually have a '!' operator for logical negation. So that addEvens simply takes an even number and returns an odd number.
I find it confusing that the different syntax highlighting of the two '!' suggests (wrongly) that they have different meanings. Also, logical negation is something often used with isOdd/isEven functions.
- chc 15y agoCoffeeScript does allow ! for negation, but contracts have their own syntax and semantics separate from the rest of the language. It's a little confusing initially, but I suppose there aren't a lot of good operators left. There are a lot of similar convenient inconsistencies that people hardly notice once they sink in: • Indentation shifts mean different things depending on context (could mean we're doing an object literal, could mean we're defining a function, could mean we're entering a loop, etc.) • Looping through arrays uses "in" while looping through everything else uses "of" • Array and object literal syntax might create arrays and objects or define variables depending on which side of the equals sign you're reading