<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Hacker News: jfmengels1</title><link>https://news.ycombinator.com/user?id=jfmengels1</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Tue, 07 Apr 2026 22:54:39 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=jfmengels1" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[Compiler Reminders]]></title><description><![CDATA[
<p>Article URL: <a href="https://jfmengels.net/compiler-reminders/">https://jfmengels.net/compiler-reminders/</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=43810169">https://news.ycombinator.com/item?id=43810169</a></p>
<p>Points: 38</p>
<p># Comments: 6</p>
]]></description><pubDate>Sun, 27 Apr 2025 07:40:31 +0000</pubDate><link>https://jfmengels.net/compiler-reminders/</link><dc:creator>jfmengels1</dc:creator><comments>https://news.ycombinator.com/item?id=43810169</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43810169</guid></item><item><title><![CDATA[Multi-files fixes in elm-review]]></title><description><![CDATA[
<p>Article URL: <a href="https://jfmengels.net/multi-file-fixes/">https://jfmengels.net/multi-file-fixes/</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=43034285">https://news.ycombinator.com/item?id=43034285</a></p>
<p>Points: 2</p>
<p># Comments: 0</p>
]]></description><pubDate>Thu, 13 Feb 2025 09:34:30 +0000</pubDate><link>https://jfmengels.net/multi-file-fixes/</link><dc:creator>jfmengels1</dc:creator><comments>https://news.ycombinator.com/item?id=43034285</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43034285</guid></item><item><title><![CDATA[ESLint Equivalents in Elm]]></title><description><![CDATA[
<p>Article URL: <a href="https://elmcraft.org/compare/javascript/eslint/">https://elmcraft.org/compare/javascript/eslint/</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=32479736">https://news.ycombinator.com/item?id=32479736</a></p>
<p>Points: 1</p>
<p># Comments: 0</p>
]]></description><pubDate>Tue, 16 Aug 2022 06:20:37 +0000</pubDate><link>https://elmcraft.org/compare/javascript/eslint/</link><dc:creator>jfmengels1</dc:creator><comments>https://news.ycombinator.com/item?id=32479736</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=32479736</guid></item><item><title><![CDATA[Optimizing for JavaScript Is Hard]]></title><description><![CDATA[
<p>Article URL: <a href="https://jfmengels.net/optimizing-javascript-is-hard/">https://jfmengels.net/optimizing-javascript-is-hard/</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=32474108">https://news.ycombinator.com/item?id=32474108</a></p>
<p>Points: 2</p>
<p># Comments: 0</p>
]]></description><pubDate>Mon, 15 Aug 2022 19:25:01 +0000</pubDate><link>https://jfmengels.net/optimizing-javascript-is-hard/</link><dc:creator>jfmengels1</dc:creator><comments>https://news.ycombinator.com/item?id=32474108</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=32474108</guid></item><item><title><![CDATA[New comment by jfmengels1 in "Tail recursion, but modulo cons"]]></title><description><![CDATA[
<p>Oh ok. I didn't mean to "reject" the solution, since that's what I see done most of the time in practice, because of the current limitations of the language regarding stack safety.<p>For foldr, I mean that specific implementation - which fully prioritizes performance and uses several levels of unwrapping, etc. - is hard to reuse for functions we wish to maintain. Using List.foldr is fine (when applicable, which is not always), but copy-pasting its implementation to adapt it to our need isn't, from a maintenance point of view.<p>On the topic of continuation-passing style, I don't personally believe that the solution I've highlighted uses CPS. At least from my shallow understanding, CPS uses functions, which my solution doesn't. CPS can easily emulate TRMC, but TRMC works differently (and is more performant though is applicable to less situations).<p>My understanding of CPS is maybe shallow, so I could be missing some understanding, but to me they're different and therefore not part of my explanation.<p>> Continuations provide the structure to hold your "holes" until they can be filled in<p>That's one mental model to view it, but there isn't actually any "real" hole to fill with CPS, whereas with TRMC there is (at least for data construction).</p>
]]></description><pubDate>Tue, 01 Mar 2022 12:50:41 +0000</pubDate><link>https://news.ycombinator.com/item?id=30513465</link><dc:creator>jfmengels1</dc:creator><comments>https://news.ycombinator.com/item?id=30513465</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=30513465</guid></item><item><title><![CDATA[New comment by jfmengels1 in "Tail recursion, but modulo cons"]]></title><description><![CDATA[
<p>The mapHelper version that was rejected changed the order. The one that did `List.reverse` had the correct order, and this one is equivalent to the List.foldr solution.<p>The only difference is List.foldr's implementation is more performant (up to a certain number of elements as you say). If this is not what you asked, then I did not understand the question.</p>
]]></description><pubDate>Tue, 01 Mar 2022 10:27:42 +0000</pubDate><link>https://news.ycombinator.com/item?id=30512321</link><dc:creator>jfmengels1</dc:creator><comments>https://news.ycombinator.com/item?id=30512321</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=30512321</guid></item><item><title><![CDATA[New comment by jfmengels1 in "Tail recursion, but modulo cons"]]></title><description><![CDATA[
<p>I think it could yes if you had a keyword for adding the guarantee.<p>If you didn't have a keyword, then all functions would have to be made stack-safe, which is I think a lot to ask the users in some cases, especially when the language doesn't give you all the tools for it (I think CPS does not work for instance in Elm, currently investigating that a bit).<p>If you have a keyword, then it would be as restrictive as you'd want it to be I imagine?</p>
]]></description><pubDate>Tue, 01 Mar 2022 10:12:06 +0000</pubDate><link>https://news.ycombinator.com/item?id=30512183</link><dc:creator>jfmengels1</dc:creator><comments>https://news.ycombinator.com/item?id=30512183</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=30512183</guid></item><item><title><![CDATA[New comment by jfmengels1 in "Tail recursion, but modulo cons"]]></title><description><![CDATA[
<p>Factorial was taken as an example (in this post) exactly <i>because</i> it is such a common textbook example, which also happens to be bad example in the sense that it is not stack-safe.<p>As for walking a tree, I agree, but this optimization does not work well with trees <i>shrug</i>, making lists a nicer example in my opinion.<p>As a teaching method, I feel that factorial is a relatively good example because it is fairly easy to grok in your head or on paper. Recursing through a tree adds a lot of mental overhead, so I feel like it could be a follow-up example to factorial, but it's probably too hard as an initial example. Also, switching to a stack-safe function using recursion is again much easier for factorial than it would be for traversing a tree.</p>
]]></description><pubDate>Tue, 01 Mar 2022 09:42:00 +0000</pubDate><link>https://news.ycombinator.com/item?id=30511900</link><dc:creator>jfmengels1</dc:creator><comments>https://news.ycombinator.com/item?id=30511900</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=30511900</guid></item><item><title><![CDATA[New comment by jfmengels1 in "Tail recursion, but modulo cons"]]></title><description><![CDATA[
<p>Potentially yes. The question then arise: does it ever make sense not to add that keyword, and should you get linter/compiler warnings when it's not used? In which case, there will be little gain. My mind is not yet made up on this to be honest. I feel like it would be valuable, but it feels weird when I think about it some more.</p>
]]></description><pubDate>Tue, 01 Mar 2022 09:33:40 +0000</pubDate><link>https://news.ycombinator.com/item?id=30511815</link><dc:creator>jfmengels1</dc:creator><comments>https://news.ycombinator.com/item?id=30511815</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=30511815</guid></item><item><title><![CDATA[New comment by jfmengels1 in "Tail recursion, but modulo cons"]]></title><description><![CDATA[
<p>Indeed, though from a conversation with the author, it's only implemented for a subset of what was described in the post, specifically only for data construction. (Conversation: <a href="https://twitter.com/let_def/status/1485313834764095488" rel="nofollow">https://twitter.com/let_def/status/1485313834764095488</a>)</p>
]]></description><pubDate>Tue, 01 Mar 2022 09:30:59 +0000</pubDate><link>https://news.ycombinator.com/item?id=30511782</link><dc:creator>jfmengels1</dc:creator><comments>https://news.ycombinator.com/item?id=30511782</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=30511782</guid></item><item><title><![CDATA[New comment by jfmengels1 in "Disable comments make static analysis tools worse"]]></title><description><![CDATA[
<p>This advice was for custom rules for a team, so it's about enforcing what the team has already agreed upon and understood the trade-offs, not anything the tool decided upon on its own and imposes on the team.</p>
]]></description><pubDate>Tue, 06 Jul 2021 12:58:52 +0000</pubDate><link>https://news.ycombinator.com/item?id=27747899</link><dc:creator>jfmengels1</dc:creator><comments>https://news.ycombinator.com/item?id=27747899</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=27747899</guid></item><item><title><![CDATA[New comment by jfmengels1 in "Disable comments make static analysis tools worse"]]></title><description><![CDATA[
<p>Just to clarify: Since elm-review is a static analysis tool separate from the compiler, you can run and compile your program just fine without having to handle all the dead code warnings (which elm-review is actually very good at detecting <a href="https://jfmengels.net/safe-dead-code-removal/" rel="nofollow">https://jfmengels.net/safe-dead-code-removal/</a>).<p>I myself personally tend to run elm-review when I'm ready to make a PR most of the times.</p>
]]></description><pubDate>Tue, 06 Jul 2021 12:53:19 +0000</pubDate><link>https://news.ycombinator.com/item?id=27747834</link><dc:creator>jfmengels1</dc:creator><comments>https://news.ycombinator.com/item?id=27747834</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=27747834</guid></item><item><title><![CDATA[New comment by jfmengels1 in "Why we chose Elm for Humio’s web UI"]]></title><description><![CDATA[
<p>He is not, but he's still actively working on Elm. You can find his latest interview here: <a href="https://elm-radio.com/episode/open-source-funding" rel="nofollow">https://elm-radio.com/episode/open-source-funding</a></p>
]]></description><pubDate>Mon, 19 Apr 2021 15:47:22 +0000</pubDate><link>https://news.ycombinator.com/item?id=26864083</link><dc:creator>jfmengels1</dc:creator><comments>https://news.ycombinator.com/item?id=26864083</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=26864083</guid></item><item><title><![CDATA[New comment by jfmengels1 in "Why we chose Elm for Humio’s web UI"]]></title><description><![CDATA[
<p>I couldn't say the same thing for even well-architected TS apps. There are important escape hatches that TS gives that make it unreliable, as summarized in this article: <a href="https://incrementalelm.com/tips/typescript-blind-spots/" rel="nofollow">https://incrementalelm.com/tips/typescript-blind-spots/</a><p>Refactoring code or updating dependencies is and feels a lot safer in Elm than in TS, and doesn't require asking for every npm package author to add TS type definitions.<p>I'd also argue that TS/JS have the esoteric/cool features. Elm is a very simple language, complete enough to be able to write most programs, but small enough to give you a lot of guarantees about how the code will behave.</p>
]]></description><pubDate>Mon, 19 Apr 2021 15:11:32 +0000</pubDate><link>https://news.ycombinator.com/item?id=26863591</link><dc:creator>jfmengels1</dc:creator><comments>https://news.ycombinator.com/item?id=26863591</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=26863591</guid></item><item><title><![CDATA[New comment by jfmengels1 in "Why we chose Elm for Humio’s web UI"]]></title><description><![CDATA[
<p>The issues you mention sound like bad usages of Msg. I recommend asking questions on the Elm Slack to try and figure out what the problems are!</p>
]]></description><pubDate>Mon, 19 Apr 2021 14:03:33 +0000</pubDate><link>https://news.ycombinator.com/item?id=26862865</link><dc:creator>jfmengels1</dc:creator><comments>https://news.ycombinator.com/item?id=26862865</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=26862865</guid></item><item><title><![CDATA[New comment by jfmengels1 in "Why we chose Elm for Humio’s web UI"]]></title><description><![CDATA[
<p>With regards to Elm being battle-tested, I'd argue that we've had that battle, and we won it.<p>Elm may not be a good fit for <i>every</i> project out there, like when you need tight integrations with specific JS projects, but it will work well for most projects.<p>At this point, I'd personally be more interested in hearing about cases where Elm was NOT a good fit (and why) rather than where it is.</p>
]]></description><pubDate>Mon, 19 Apr 2021 12:40:44 +0000</pubDate><link>https://news.ycombinator.com/item?id=26862062</link><dc:creator>jfmengels1</dc:creator><comments>https://news.ycombinator.com/item?id=26862062</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=26862062</guid></item><item><title><![CDATA[New comment by jfmengels1 in "Why we chose Elm for Humio’s web UI"]]></title><description><![CDATA[
<p>We have, and that's where we reach out to JS/TS through ports or webcomponents. We try to use Elm as much as possible since that's the simplest and the most reliable, but using JS/TS this way is fine in small quantities.</p>
]]></description><pubDate>Mon, 19 Apr 2021 11:51:49 +0000</pubDate><link>https://news.ycombinator.com/item?id=26861705</link><dc:creator>jfmengels1</dc:creator><comments>https://news.ycombinator.com/item?id=26861705</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=26861705</guid></item><item><title><![CDATA[New comment by jfmengels1 in "Why we chose Elm for Humio’s web UI"]]></title><description><![CDATA[
<p>The blog website isn't written in Elm. We're using Elm for the product application, not for the blog or for <a href="https://www.humio.com/" rel="nofollow">https://www.humio.com/</a>.
I'll transfer the remarks though :)</p>
]]></description><pubDate>Mon, 19 Apr 2021 11:27:00 +0000</pubDate><link>https://news.ycombinator.com/item?id=26861485</link><dc:creator>jfmengels1</dc:creator><comments>https://news.ycombinator.com/item?id=26861485</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=26861485</guid></item><item><title><![CDATA[Why we chose Elm for Humio’s web UI]]></title><description><![CDATA[
<p>Article URL: <a href="https://www.humio.com/whats-new/blog/why-we-chose-elm-for-humio-s-web-ui">https://www.humio.com/whats-new/blog/why-we-chose-elm-for-humio-s-web-ui</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=26860919">https://news.ycombinator.com/item?id=26860919</a></p>
<p>Points: 122</p>
<p># Comments: 133</p>
]]></description><pubDate>Mon, 19 Apr 2021 10:00:23 +0000</pubDate><link>https://www.humio.com/whats-new/blog/why-we-chose-elm-for-humio-s-web-ui</link><dc:creator>jfmengels1</dc:creator><comments>https://news.ycombinator.com/item?id=26860919</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=26860919</guid></item><item><title><![CDATA[New comment by jfmengels1 in "Safe dead code removal in a pure functional language"]]></title><description><![CDATA[
<p>Ah alright. That's an interesting technique!
You can't do that in Elm, you'd have to rely on the technique I mentioned above and regular tests.</p>
]]></description><pubDate>Fri, 29 Jan 2021 15:36:53 +0000</pubDate><link>https://news.ycombinator.com/item?id=25958302</link><dc:creator>jfmengels1</dc:creator><comments>https://news.ycombinator.com/item?id=25958302</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=25958302</guid></item></channel></rss>