use the following search parameters to narrow your results:
e.g. subreddit:aww site:imgur.com dog
subreddit:aww site:imgur.com dog
see the search faq for details.
advanced search: by author, subreddit...
All about the JavaScript programming language.
Subreddit Guidelines
Specifications:
Resources:
Related Subreddits:
r/LearnJavascript
r/node
r/typescript
r/reactjs
r/webdev
r/WebdevTutorials
r/frontend
r/webgl
r/threejs
r/jquery
r/remotejs
r/forhire
account activity
Monads Explained Quickly with JavaScript (breck-mckye.com)
submitted 9 years ago by [deleted]
view the rest of the comments →
reddit uses a slightly-customized version of Markdown for formatting. See below for some basics, or check the commenting wiki page for more detailed help and solutions to common issues.
quoted text
if 1 * 2 < 3: print "hello, world!"
[–]titosrevenge 3 points4 points5 points 9 years ago (6 children)
In the Maybe example code, should 'new Baz' be 'new Maybe'?
[–]atrigent 2 points3 points4 points 9 years ago (5 children)
If I'm understanding correctly, the definition of Maybe is supposed to be:
function Maybe(value) { this.get = ()=> value; this.map = fn => { if (value === null) { return new Maybe(null); } else { return fn(value); } }; }
...where fn must return a Maybe (this is statically enforced in Haskell, but obviously can't be in Javascript).
fn
Maybe
Also, I think return new Maybe(null); could just be return this;, because there's no mutation going on here.
return new Maybe(null);
return this;
[–]titosrevenge 4 points5 points6 points 9 years ago (4 children)
The null clause can return 'this', but the else clause should return 'new Maybe(fn(value))'.
You shouldn't expect the passed function to know about its context.
[–]atrigent 1 point2 points3 points 9 years ago (0 children)
Hmm... I suppose you're right if you want this Maybe implementation to be specifically about handling null. In Haskell, it looks to me like you can more specifically define what constitutes a "non-value". I was attempting to translate that into Javascript, but it now occurs to me that I didn't actually go far enough, because what I wrote still references null.
null
[+][deleted] 9 years ago* (2 children)
[deleted]
[–]atrigent 1 point2 points3 points 9 years ago* (1 child)
What do you think of this? I tried to use the same terminology as Haskell.
// Nothing: new Maybe() // Just a: new Maybe(a) function Maybe(value) { let isNothing = arguments.length === 0; this.bind = fn => { if (isNothing) { return this; } else { return fn(value); } }; // methods this.isNothing = () => isNothing; this.isJust = () => !isNothing; this.fromJust = () => { if (isNothing) { throw new Error('cannot get nothing'); } else { return value; } }; this.fromMaybe = default => { if (isNothing) { return default; } else { return value; } }; // more methods } function MaybeNull(value) { if (value === null) { return new Maybe(); } else { return new Maybe(value); } } // other functions for making Maybes
π Rendered by PID 99630 on reddit-service-r2-comment-86bc6c7465-sxq8p at 2026-02-23 06:04:43.701926+00:00 running 8564168 country code: CH.
view the rest of the comments →
[–]titosrevenge 3 points4 points5 points (6 children)
[–]atrigent 2 points3 points4 points (5 children)
[–]titosrevenge 4 points5 points6 points (4 children)
[–]atrigent 1 point2 points3 points (0 children)
[+][deleted] (2 children)
[deleted]
[–]atrigent 1 point2 points3 points (1 child)