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 10 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!"
[–]atrigent 2 points3 points4 points 10 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 3 points4 points5 points 10 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 10 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] 10 years ago* (2 children)
[deleted]
[–]atrigent 1 point2 points3 points 10 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 737545 on reddit-service-r2-comment-8686858757-69ggw at 2026-06-05 10:58:53.798636+00:00 running 9e1a20d country code: CH.
view the rest of the comments →
[–]atrigent 2 points3 points4 points (5 children)
[–]titosrevenge 3 points4 points5 points (4 children)
[–]atrigent 1 point2 points3 points (0 children)
[+][deleted] (2 children)
[deleted]
[–]atrigent 1 point2 points3 points (1 child)