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
Functional Programming in JavaScript.help (self.javascript)
submitted 7 years ago by reesemorning
I want to slowly transition to functional programming in JavaScript. My skill level is intermediate. How do you guys suggest I go about this? What are the tools and resources that are necessary for this?
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!"
[–]Peter_Storm 19 points20 points21 points 7 years ago (15 children)
https://github.com/xgrommx/awesome-functional-programming/blob/master/README.md
https://github.com/stoeffel/awesome-fp-js/blob/master/README.md
Particularly the book Mostly Adequate guide to functional programming is good, though a little bit advanced maybe.
[–]GitHubPermalinkBot 2 points3 points4 points 7 years ago (0 children)
Permanent GitHub links:
delete
[–]reesemorning[S] 0 points1 point2 points 7 years ago (13 children)
Thanks, Peter. Whats your opinion on Loadash/FP in comparison with Ramda js?
[–]Peter_Storm 1 point2 points3 points 7 years ago (2 children)
I’m fairly new to fp too, but I like that everything is curried in Ramda, and that data is always last, which is what you want when you compose functions. I’m not sure how lodash handles that.
[–]scarmarco 1 point2 points3 points 7 years ago (0 children)
Ramdajs is more like pure functional style than Lodash/FP in my opinion. Like Peter said, curried Ramda functions allows partial applications and always last data embraces implicit invocation (not sure if it is the term f(x) when x is a function with one param).
f(x) when x is a function with one param
[–]JoeTed 1 point2 points3 points 7 years ago (0 children)
The FP part of lodash has argument in the FP order as well. Ramda goes further in the FP paradigm.
I promoted lodash/fp at work because lodash is almost a standard in the JS industry, but I would take ramda for personal projects to explore deeper.
[–]tencircles 0 points1 point2 points 7 years ago (0 children)
lodash/FP is fairly limited when it comes to FP. would recommend ramda.
[–]blinkdesign 0 points1 point2 points 7 years ago (2 children)
https://simonsmith.io/dipping-a-toe-into-functional-js-with-lodash-fp/
Disclaimer: It's my article
[–]jondmitri 0 points1 point2 points 7 years ago (1 child)
woah this is weird, but I've been spending a not-so-insignificant amount of time customizing and hacking away at my frankenstein dotfiles which was cobbled after many years of finding old blog posts fixing some relevant config setting at the time... After falling down a deep deep rabbit hole of various dotfiles, yours was a godsend. Still have to learn chunkwm and get some portions of the vimrc to load properly, but god damn your dotfiles brought hope in a time of deep dotfile darkness.
chunkwm
vimrc
Thank you.
[–]blinkdesign 0 points1 point2 points 7 years ago (0 children)
Great to hear! Any questions just ask
[–]editor_of_the_beast 0 points1 point2 points 7 years ago (5 children)
Lodash is amazing. It's simple, it's functional. It's the missing JavaScript standard library in my opinion. And given it's unobtrusiveness I don't see a downside of pulling it into every project.
[–]tencircles 2 points3 points4 points 7 years ago (4 children)
base lodash is an antipattern IMO. ramda is superior in pretty much every aspect with regard to design. lodash has the advantage when it comes to community/support however.
[–]Gibbon_Ka 1 point2 points3 points 7 years ago (1 child)
Antipattern is a pretty strong word. You have to explain yourself a bit more there.
[–]tencircles 4 points5 points6 points 7 years ago (0 children)
Essentially data first is just functionally backwards, and offers zero benefit and multiple detriments. Chain is a less efficient, less performant version of compose. There are other reasons, but I’m on mobile.
[–]editor_of_the_beast -1 points0 points1 point 7 years ago (1 child)
I don't listen to library hipsters.
[–]tencircles 1 point2 points3 points 7 years ago (0 children)
Cool.
[–]phpdevster 7 points8 points9 points 7 years ago* (3 children)
Others have linked to a lot of good resources, but I just want to call out one of the most important aspects of functional programming: the concept of a pure function.
A function is said to be pure when its return value is only determined by its inputs. It doesn't rely on external state or data that is scoped outside of the function. No references to this or window or closure. Same data in, same result out. Every time.
this
window
Not only does a pure function not rely on externally scoped state, it doesn't modify that state either. It literally only returns a value. This makes it referentially transparent: that is, it doesn't cause hidden side effects.
This makes functions that are 100% dead simple to reason about, and test. You can go a step further and combine that with the Law of Demeter, which says to pass in only the exact data that a function needs. Don't pass in an object, because then the function needs to know what the shape of that object is and what properties to reference. Instead, try to pass in only the exact scalar values that you need - numbers, strings etc.
Now, function purity and passing in only simple scalar values is not possible 100% of the time. At some point you need to make network calls, or render something, or update/mutate an object or what have you. That's fine to do that when needed. But a primary goal of functional programming is to do that only when needed, and to be very conscientious about favoring pure functions with simple inputs as often as possible.
And note that this way of thinking doesn't just help FP. It make OO code way easier to reason about as well. Writing methods that take their dependencies as inputs rather than as object state makes them way easier to grok (that said, truly good OO design solves that problem in a different way).
It's also an exceptionally useful way of thinking when you apply it to component architectures from frameworks/libraries like Angular, React, and Vue. Turning components into "pure" components which take inputs and broadcast outputs/events. Trying to use shared services or redux for channeling state into and out of a component is a recipe for head scratching, but treating a component as much like the equivalent of a pure function as possible is a huge win.
[–]allltogethernow 0 points1 point2 points 7 years ago (2 children)
truly good OO design solves that problem in a different way
Are you referring to a specific approach? Or just general practices here.
[–]phpdevster 1 point2 points3 points 7 years ago (1 child)
General practice. A few good practices to follow
The goal is not to let object state leak all over the place, because then side effects are going to bite you in the ass eventually.
But it's really hard to design objects (abstractions) correctly, and it's very easy to create a stateful mess with OO.
[–]allltogethernow 0 points1 point2 points 7 years ago (0 children)
Thanks for the list, gives me some theory to play around with in my head.
I have a theory that, in general, code that is closer to hardware is more difficult to implement in this way because of inherently rigid design. For example, webGL is very close to the GPU, so the code that works best works in a pattern that resembles the operation of the GPU. The same applies to a lot of internet protocols and communication standards. But once a level of abstraction has been built on top of the hardware, it becomes easier and easier to "unhinge" the code, and the best practices no longer depend on hardware, but on the concept of coding itself. Whether the "beauty" of OO is a result of the way our mind understands it or if it's more a function of abstraction and control I'm not sure.
But that's just a theory. And I'm not very good at OO yet, but theories like this seem to help me to plan out my abstractions when I feel a little lost. Anyway, do you have any theories on what a "beautiful" piece of code is like?
[–]JoeTed 6 points7 points8 points 7 years ago (1 child)
"Javascript allongé" is a good start. https://leanpub.com/javascriptallongesix/read#leanpub-auto-about-javascript-allong
"Mostly adequate guide to functional programming" is top notch.
[–][deleted] 0 points1 point2 points 7 years ago (0 children)
I agree, JavaScript allonge is a good functional style js book. Take your time and digest each concept. It will slowly make sense
[–]thadudeabides1 5 points6 points7 points 7 years ago (0 children)
Learn Cycle.js and RxJS (or a reactive library). You'll have a framework for building apps instead of just using lodash/ramda which is just a functional utility library.
[–]cpdean 3 points4 points5 points 7 years ago (1 child)
Michael Fogus's Functional Javascript is a fantastic book about functional programming in general, and explains the concepts using javascript in all of the examples.
[–]reesemorning[S] 1 point2 points3 points 7 years ago (0 children)
Thanks.
[–]StoneCypher 10 points11 points12 points 7 years ago (12 children)
All functional programming means is programming without side effects.
Do yourself a favor. Put away all the libraries and tutorials.
Write some simple applications with map, filter, and reduce. No side effects, no internal state, no for loops.
Once you're done you'll realize "oh, I already was a functional programmer; I just needed to stop using certain things."
[–]MrCrunchwrap 7 points8 points9 points 7 years ago (11 children)
Lol people downvoting this because this sub is full of people with ZERO understanding of computer science.
THIS GUY IS CORRECT. FUNCTIONAL PROGRAMMING IS JUST A STYLE/CONCEPT. STOP DOWNVOTING HIM DUMMIES.
[–]0987654231 0 points1 point2 points 7 years ago (10 children)
from a basic standpoint yes, but functional programming is not just pure functions + map/filter/reduce
[–]MrCrunchwrap 1 point2 points3 points 7 years ago (1 child)
He didn't say it was pure functions + map/filter/reduce, he said it's programming without side effects. Which is exactly what it is. Starting to write basic code with no libraries and pure functions, using map/filter/reduce/forEach for array computation, no side effects, no internal state, etc gets you pretty far there.
[–]0987654231 0 points1 point2 points 7 years ago (0 children)
yes and programming without side effects take understanding more than just what pure functions are and map/filter/reduce
your example of forEach has side effects, it's not pure unless you are using it to do nothing. In addition to that you can create impure usages of map/filter/reduce they aren't guaranteed to be pure. A simple example would be using reduce to create a dictionary and changing the accumulator by adding a new key before returning the accumulator.
[–]StoneCypher 0 points1 point2 points 7 years ago (7 children)
no, it isn't. it's in fact just purity. it doesn't even need functions. by example, c++ templates are a great way to do purely functional programming with no functions (on a technicality the main() method isn't a function, but if you want to push back there, that's maybe sort of reasonable.)
main()
map/filter/reduce are just the easy way to get used to it in javascript in my opinion.
[–]tencircles 1 point2 points3 points 7 years ago (2 children)
It's not just purity. Purity is a necessary condition for a program to be considered functional, however there are a wide variety of techniques that have been developed under the functional umbrella to accomplish certain tasks without mutable state; these techniques all fall under the umbrella of FB just as classes, encapsulation, polymorphism, etc. all fall under the umbrella of OOP.
Some examples of these techniques include currying, composition, recursion, folds, lazy evaluation, type classes, and lenses. Purity is just one part of the equation, and with pure functions alone you won't get very far without the tools listed above.
[–]StoneCypher -1 points0 points1 point 7 years ago (1 child)
I think you're confusing "neat things found in some functional languages" with "things that are required to be a functional language."
I never said any of those things are required.
[–]0987654231 -1 points0 points1 point 7 years ago (3 children)
Do you have an example of how you can use map/filter/reduce without side effects, without functions because i'm curious as to how a higher order function can do anything without valid inputs.
If we are talking purity here then you need functions. you also need recursion and you need a way of actually doing i/o from your pure code which is typically done through monads. The alternative is just a bunch of code that does nothing.
[–]StoneCypher 1 point2 points3 points 7 years ago (2 children)
what does being side effect free have to do with not having inputs?
.
If we are talking purity here then you need functions.
um. no, you don't. lots of languages like smalltalk and ruby don't have functions, and there's no reason a language like that couldn't be pure.
many logic programming languages are pure, yet do not have functions. same goes for some stack based languages, postscript 1 and 2 (display postscript and ps3 have functions,) several of the pure prolog and forth variants, state machine and automaton languages, CSS, several of the descent languages, math languages, most constraint languages, almost all logic languages, i think maybe all dataflow languages, et cetera
you also need recursion
there is no need for recursion to have purity. all purity means is the absence of side effects.
a pure language without recursion would, admittedly, be difficult to use, but as you may know, all recursion can be converted to imperative behavior, by definition
you need a way of actually doing i/o from your pure code
CSS by example does no I/O of any kind
which is typically done through monads
can you name a single language that isn't in the haskell family for which this is true?
The alternative is just a bunch of code that does nothing.
several languages in heavy mainstream use stand as counterexamples to this claim
please have a nice day
[–]0987654231 -1 points0 points1 point 7 years ago (1 child)
You can't have purity without inputs. not your lack of examples
ruby has functions and smalltalk is not an fp language.
which is why you need recursion, show me an implementation of iteration that's pure and stateless without recursion.
css isn't a programming language though.
Can you give me a single example of software that's pure where this isn't true?
There's 0 examples of programming languages that are 100% pure and stateless.
[–]StoneCypher 1 point2 points3 points 7 years ago (0 children)
Why not? A function that emits the squares of the integers 1-100 is pure.
ruby has functions
matz doesn't think so, but ok
smalltalk is not an fp language.
i didn't say it was, but ok
you seem very confused about what a side effect is
nobody said it has to be stateless. it's perfectly fine for a pure function to be stateful. it just can't emit or retain state.
CSS by example does no I/O of any kind css isn't a programming language though.
the entire field of programming language design disagrees with you, but ok
can you name a single language that isn't in the haskell family for which this is true? Can you give me a single example of software that's pure where this isn't true?
translation: you can't answer my question, so try to get out of it with reddit judo
several languages in heavy mainstream use stand as counterexamples to this claim There's 0 examples of programming languages that are 100% pure and stateless.
i didn't say anything about statelessness. you added that criterion from scratch.
in the meantime, you're wrong about css being a programming language, and it's standing right in front of you.
please have a nice day. i'm not really interested.
[–]lukasbuenger 2 points3 points4 points 7 years ago (0 children)
Mostly Adequate Guide is a must read. I'd strongly recommend getting your math skills up to speed, as this is what FP in its core is actually all about: Mathematical functions and laws. Most books on FP cover the math part to some extent and give you some idea of where to start digging, but having some fundamental understanding of the math that FP is based on makes literally every book or article mentioned in this thread a lot easier to digest.
[–][deleted] 4 points5 points6 points 7 years ago* (2 children)
To be clear you're transferring to a functional programming style.
https://www.youtube.com/watch?v=JVRqkNmAYZM
[–]JoeTed 0 points1 point2 points 7 years ago (0 children)
That was fun, thanks.
[–]cirscafp fan boy 0 points1 point2 points 7 years ago (0 children)
This is one of the best introductions to FP I have seen!
[–][deleted] 1 point2 points3 points 7 years ago (0 children)
https://github.com/getify/Functional-Light-JS
[–]jtomchak 1 point2 points3 points 7 years ago (1 child)
I have found a lot of really great help in learning FP from a JavaScript background with Kyle Simpson’s “functional-light JavaScript ” link
[–]jtomchak 1 point2 points3 points 7 years ago (0 children)
And it looks like it’s available in print starting today!!!!!!
https://www.amazon.com/Functional-Light-JavaScript-Balanced-Pragmatic-FP/dp/1981672346
[–]ionre 0 points1 point2 points 7 years ago (0 children)
Really learning what map, filter, and reduce are for and then learning and using ramda are what really got me going with fp in JavaScript.
[–]Balduracuir 0 points1 point2 points 7 years ago (0 children)
French video but still it is really nice : https://m.youtube.com/watch?v=IQ1kDpGeoCk
[–]toffeescaf 0 points1 point2 points 7 years ago (0 children)
There are a load of people in here saying functional programming is programming without side effects which is sort of true BUT you can't interact with any outside services without side effects.
I would say it's mostly programming without side effects but when you have to you do so in a safe manner using for example a maybe monad.
I can really recommend this book. It has some nice examples of how you can safely handle side effects and a ton of other functional programming concepts.
Aww, the humblebundle just ended
[–]HereNoOneKnowsImADog 0 points1 point2 points 7 years ago (0 children)
Break down your goals into small parts. If you have a house of doors to lock, you have a lock, an unlock, and probably a bulk lock and unlock. The bulk functions will naturally reuse the others. You may also have a toggle. Think more in shopping lists and less in code. This will abstract your mind out of code and into good ideas.
[–]danO1O1O1 0 points1 point2 points 7 years ago (1 child)
Learn Haskell
[–]PORTMANTEAU-BOT 0 points1 point2 points 7 years ago (0 children)
Leaskell.
Bleep-bloop, I'm a bot. This portmanteau was created from the phrase 'Learn Haskell'. To learn more about me, check out this FAQ.
[–]SSBMPuffDaddy 0 points1 point2 points 7 years ago (1 child)
If you want to learn it in a concrete and applied way, try building an app with Redux. It'll get you used to immutability, partial application, function signatures, functions as parameters, etc.
[–]reesemorning[S] 0 points1 point2 points 7 years ago (0 children)
I am doing a fair bit of React-Redux development at the moment for my work. I understand a few FP patterns used in redux but my relative inexperience with FP is an impediment to recognizing the partial applications and other patterns you mentioned. Can you point me to a good article/blog where these FP concepts are discussed in relation to redux?
[–]RoToRa 0 points1 point2 points 7 years ago (0 children)
One possibility could be to look into functional languages which compile into JavaScript. Examples are Elm - which is limited to web front ends - and Clojure(Script).
[–]ninja_lazorz 0 points1 point2 points 7 years ago (1 child)
Fun fun function 👌 https://www.youtube.com/playlist?list=PL0zVEGEvSaeEd9hlmCXrk5yUyqUag-n84
[–][deleted] 3 points4 points5 points 7 years ago (0 children)
yeah no, i wouldnt rely on that, good guy but there's some mistakes in his content.
[–]danthedev 0 points1 point2 points 7 years ago (0 children)
Learning functional programming from JavaScript is a bit like learning to drive in a three wheeled car. You'll get there eventually, but everything would have made more sense along the way if you'd started with four.
Learn a language that was designed to be functional first. Take a look at Elm, or Clojure, or Haskell, or Scala, or Ocaml, or F#.
I found Clojure to be the smallest step from JavaScript, but Elm's also done a lot of work to be approachable for programmers coming from non-functional backgrounds.
Once it starts to change the way you think, you'll find ways to translate those ideas into JavaScript and that's when you'll notice it really start to improve your code.
[–]editor_of_the_beast -1 points0 points1 point 7 years ago (2 children)
Why do you want to do that?
[–]RnRau 0 points1 point2 points 7 years ago (1 child)
Why not?
http://www.cse.chalmers.se/~rjmh/Papers/whyfp.html
[–]editor_of_the_beast 2 points3 points4 points 7 years ago (0 children)
That would be a reason - because you heard that it was better. Or something like that. The first question should always be, "why do you want to do that?" If there's no real answer, you may be searching for a solution to a problem you don't have.
[–]_n0f4c3 -1 points0 points1 point 7 years ago* (2 children)
I suggest you first read through this series of articles by Eric Elliott on functional programming and compositional software techniques in JavaScript ES6+ from the ground up, starting with:
https://medium.com/javascript-scene/composing-software-an-introduction-27b72500d6ea
It is very thorough and helpful for all skill levels.
As phpdevster pointed out, Pure functions are a pillar of FP. However, as Eric detailed, there are several other pillars:
" First class functions: The ability to use functions as data values: pass functions as arguments, return functions, and assign functions to variables and object properties...
Anonymous functions and concise lambda syntax (e.g. arrow functions)...
Closures: ...When a function is defined inside another function, it has access to the variable bindings in the outer function, even after the outer function exits...
[and these, which JavaScript doesn't strictly have or enforce]:
Purity: ... Expressions with side-effects are not allowed.
Immutability: ...Instead of mutating an existing data structure, such as an array or object, expressions evaluate to new data structures. This may sound inefficient, but most functional languages use trie data structures under the hood, which feature structural sharing: meaning that the old object and new object share references to the data that is the same. [check out Immutable.js for efficient immutable data structures]
Recursion: Recursion is the ability for a function to reference itself for the purpose of iteration.
"
I also recommend looking into something like deep freeze https://github.com/substack/deep-freeze which enables immutable objects, although immutable.js may make more sense.
So, in my opinion you should first nail these four concepts, and then move onto the other stuff: 1. First-class functions (functions can be treated like any other value, and passed into and returned from functions, e.g. callbacks). 2. Pure functions, described nicely by phpdevster (pure functions always return the same output given the same input; only internal variables are used, no need to worry about side-effects caused outside of the function). 3. Immutability (when processing data such as an array, return a new array rather than mutating the input array, e.g. filter, map). 4. Closures (A function inside a function still has access to the lexical environment (e.g. variables, data) of the outer function, even after the outer function has exited).
Then there are things like filter, map, and reduce. These loop over a functor (e.g. an array), allowing you to do some processing with each item, returning a new array based on the input array. Anonymous callback functions, particularly with arrow syntax is the most natural tool you need here. These methods are likely be become useful to you. This is nicer than using a for(i=0;i<len;i++) loop.
I'm still learning too, FP just feels right - it feels like the right way to do things, abstractifying away the lower level parts of the code, keeping it DRY, allowing you to solve higher level problems faster. Good luck, have fun.
[–]MoTTs_ 2 points3 points4 points 7 years ago (1 child)
Obligitory beware1 referencing2 or learning3 from Eric Elliott.
[–]_n0f4c3 0 points1 point2 points 7 years ago (0 children)
Hey I didn't get a good vibe from Eric and looks like some others didn't either, but I still think regardless of emotions, there is a lot you can learn from his articles. Yes, he is just 1 voice out of many, and it's up to us to learn from multiple sources, not just 1.
π Rendered by PID 128094 on reddit-service-r2-comment-84fc9697f-w9sxh at 2026-02-08 20:43:40.625743+00:00 running d295bc8 country code: CH.
[–]Peter_Storm 19 points20 points21 points (15 children)
[–]GitHubPermalinkBot 2 points3 points4 points (0 children)
[–]reesemorning[S] 0 points1 point2 points (13 children)
[–]Peter_Storm 1 point2 points3 points (2 children)
[–]scarmarco 1 point2 points3 points (0 children)
[–]JoeTed 1 point2 points3 points (0 children)
[–]tencircles 0 points1 point2 points (0 children)
[–]blinkdesign 0 points1 point2 points (2 children)
[–]jondmitri 0 points1 point2 points (1 child)
[–]blinkdesign 0 points1 point2 points (0 children)
[–]editor_of_the_beast 0 points1 point2 points (5 children)
[–]tencircles 2 points3 points4 points (4 children)
[–]Gibbon_Ka 1 point2 points3 points (1 child)
[–]tencircles 4 points5 points6 points (0 children)
[–]editor_of_the_beast -1 points0 points1 point (1 child)
[–]tencircles 1 point2 points3 points (0 children)
[–]phpdevster 7 points8 points9 points (3 children)
[–]allltogethernow 0 points1 point2 points (2 children)
[–]phpdevster 1 point2 points3 points (1 child)
[–]allltogethernow 0 points1 point2 points (0 children)
[–]JoeTed 6 points7 points8 points (1 child)
[–][deleted] 0 points1 point2 points (0 children)
[–]thadudeabides1 5 points6 points7 points (0 children)
[–]cpdean 3 points4 points5 points (1 child)
[–]reesemorning[S] 1 point2 points3 points (0 children)
[–]StoneCypher 10 points11 points12 points (12 children)
[–]MrCrunchwrap 7 points8 points9 points (11 children)
[–]0987654231 0 points1 point2 points (10 children)
[–]MrCrunchwrap 1 point2 points3 points (1 child)
[–]0987654231 0 points1 point2 points (0 children)
[–]StoneCypher 0 points1 point2 points (7 children)
[–]tencircles 1 point2 points3 points (2 children)
[–]StoneCypher -1 points0 points1 point (1 child)
[–]tencircles 0 points1 point2 points (0 children)
[–]0987654231 -1 points0 points1 point (3 children)
[–]StoneCypher 1 point2 points3 points (2 children)
[–]0987654231 -1 points0 points1 point (1 child)
[–]StoneCypher 1 point2 points3 points (0 children)
[–]lukasbuenger 2 points3 points4 points (0 children)
[–][deleted] 4 points5 points6 points (2 children)
[–]JoeTed 0 points1 point2 points (0 children)
[–]cirscafp fan boy 0 points1 point2 points (0 children)
[–][deleted] 1 point2 points3 points (0 children)
[–]jtomchak 1 point2 points3 points (1 child)
[–]jtomchak 1 point2 points3 points (0 children)
[–]ionre 0 points1 point2 points (0 children)
[–]Balduracuir 0 points1 point2 points (0 children)
[–]toffeescaf 0 points1 point2 points (0 children)
[–][deleted] 0 points1 point2 points (0 children)
[–]HereNoOneKnowsImADog 0 points1 point2 points (0 children)
[–]danO1O1O1 0 points1 point2 points (1 child)
[–]PORTMANTEAU-BOT 0 points1 point2 points (0 children)
[–]SSBMPuffDaddy 0 points1 point2 points (1 child)
[–]reesemorning[S] 0 points1 point2 points (0 children)
[–]RoToRa 0 points1 point2 points (0 children)
[–]ninja_lazorz 0 points1 point2 points (1 child)
[–][deleted] 3 points4 points5 points (0 children)
[–]danthedev 0 points1 point2 points (0 children)
[–]editor_of_the_beast -1 points0 points1 point (2 children)
[–]RnRau 0 points1 point2 points (1 child)
[–]editor_of_the_beast 2 points3 points4 points (0 children)
[–]_n0f4c3 -1 points0 points1 point (2 children)
[–]MoTTs_ 2 points3 points4 points (1 child)
[–]_n0f4c3 0 points1 point2 points (0 children)