<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: shirogane86x</title><link>https://news.ycombinator.com/user?id=shirogane86x</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Mon, 04 May 2026 10:05:16 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=shirogane86x" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[New comment by shirogane86x in "Functional programmers need to take a look at Zig"]]></title><description><![CDATA[
<p>I think the lisp situation is peculiar, for 3 main reasons:<p>- most of them are dynamically typed (thus don't need sum types, as there are no types). The ones that do have gradual type systems likely either implement some form of them (off the top of my head I can only remember typed racket, and I think it implements them through union types)<p>- not all lisps lean functional: I believe that's mostly a prerogative of scheme and clojure (and their descendants); something like CL is a lot more procedural, iirc<p>- in most lisps, thanks to macros, you probably don't need the language to support some sort of match construct out of the box: just implement it as a macro [1]<p>In general the "proper sum types" side of functional programming is just the statically typed one, but even in dynamically typed FP languages you end up adopting sum type-esque patterns, like elixir's error handling (which closely resembles the usual Either/Result type, just built out of tuples and atoms rather than a predefined type), and I assume many lisps adopt similar patterns as well<p>[1] <a href="https://github.com/clojure/core.match" rel="nofollow">https://github.com/clojure/core.match</a></p>
]]></description><pubDate>Thu, 30 Apr 2026 05:34:43 +0000</pubDate><link>https://news.ycombinator.com/item?id=47958559</link><dc:creator>shirogane86x</dc:creator><comments>https://news.ycombinator.com/item?id=47958559</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47958559</guid></item><item><title><![CDATA[New comment by shirogane86x in "An Honest Review of Go (2025)"]]></title><description><![CDATA[
<p>but how would you do that otherwise? Genuinely curious cause I looked up both the go docs and source (disclaimer: not a go dev), and there doesn't seem a way to handle that specific kind of error through stuff like `errors.Is`, at least from what I can tell, at least in the os and fs packages</p>
]]></description><pubDate>Thu, 08 Jan 2026 17:25:53 +0000</pubDate><link>https://news.ycombinator.com/item?id=46543714</link><dc:creator>shirogane86x</dc:creator><comments>https://news.ycombinator.com/item?id=46543714</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46543714</guid></item><item><title><![CDATA[New comment by shirogane86x in "I tried Gleam for Advent of Code"]]></title><description><![CDATA[
<p>At least half of those languages (Elixir and OCaml) have some sort of mechanism for ad hoc polymorphism (elixir has behaviors and protocols, OCaml has higher order modules) so I feel like the comparison doesn't work that well personally</p>
]]></description><pubDate>Sun, 14 Dec 2025 15:50:21 +0000</pubDate><link>https://news.ycombinator.com/item?id=46263908</link><dc:creator>shirogane86x</dc:creator><comments>https://news.ycombinator.com/item?id=46263908</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46263908</guid></item><item><title><![CDATA[New comment by shirogane86x in "Ruby's Timeout is dangerous and Thread.raise is terrifying (2015)"]]></title><description><![CDATA[
<p>From how you describe it, it sounds like it's taken the same approach as Haskell's async exceptions + mask/uninterruptibleMask, which to me seems like one of the best solutions around, so props to them</p>
]]></description><pubDate>Wed, 05 Jun 2024 19:43:49 +0000</pubDate><link>https://news.ycombinator.com/item?id=40589591</link><dc:creator>shirogane86x</dc:creator><comments>https://news.ycombinator.com/item?id=40589591</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=40589591</guid></item><item><title><![CDATA[New comment by shirogane86x in "Moving Beyond Type Systems"]]></title><description><![CDATA[
<p>Haskell also has something like this in Debug.Trace.trace: even though it's _technically_ impure (cause it outputs to stdout), it's typed as a pure function because it's just for debugging (I think internally it uses an escape hatch to just hide the IO)</p>
]]></description><pubDate>Sat, 01 Jun 2024 15:04:10 +0000</pubDate><link>https://news.ycombinator.com/item?id=40546318</link><dc:creator>shirogane86x</dc:creator><comments>https://news.ycombinator.com/item?id=40546318</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=40546318</guid></item><item><title><![CDATA[New comment by shirogane86x in "LiveView Is Best with Svelte"]]></title><description><![CDATA[
<p>Is there a way to emit WebAssembly with Uniffi? I looked for it before, but I couldn't find it (I'm using it in a project to share login between the backend and Kotlin/Swift apps. I wanted to share it with JS for a web frontend, but didn't find any docs mentioning it)</p>
]]></description><pubDate>Thu, 04 Apr 2024 12:13:30 +0000</pubDate><link>https://news.ycombinator.com/item?id=39929396</link><dc:creator>shirogane86x</dc:creator><comments>https://news.ycombinator.com/item?id=39929396</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=39929396</guid></item><item><title><![CDATA[New comment by shirogane86x in "Type-Safe Printf() in TypeScript"]]></title><description><![CDATA[
<p>I think, from having it used recently, that supabase's TS library does this. I had to write a wrapper around it a few months ago at $dayjob and was really surprised when select/from parts of a "query" (not really a SQL query, because it's just a postgrest query) actually got parsed at compile time and spit out the right types. And since our code is pretty type heavy, I was gonna have to do that anyway, so I really appreciated it</p>
]]></description><pubDate>Sun, 24 Mar 2024 18:54:52 +0000</pubDate><link>https://news.ycombinator.com/item?id=39809325</link><dc:creator>shirogane86x</dc:creator><comments>https://news.ycombinator.com/item?id=39809325</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=39809325</guid></item><item><title><![CDATA[New comment by shirogane86x in "Ban on same-sex marriage unconstitutional, Sapporo High Court rules"]]></title><description><![CDATA[
<p>I have no idea where you get that acceptance of same sex marriage arises from Christian ideas. Because in my personal experience it really doesn't. I live in Italy and a lot of discrimination against gay people (me included), and a big part of the reason why we don't get actual marriage, is catholic rhetoric. Most of the homophobia I've experienced in my life, anecdotally, has been from devout christians: the more devout, the worse the discriminantion. So although I have no data on hand, I have a very strong suspicion that Christianity has nothing to do with it. If anything, it seems like at least in Europe, the more secular countries tend to get better rights for queer people and they get them faster (I think the first European country to get gay marriage was the Netherlands, back in 2001. And they're one of the least religious countries in Europe)</p>
]]></description><pubDate>Fri, 15 Mar 2024 05:57:22 +0000</pubDate><link>https://news.ycombinator.com/item?id=39712456</link><dc:creator>shirogane86x</dc:creator><comments>https://news.ycombinator.com/item?id=39712456</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=39712456</guid></item><item><title><![CDATA[New comment by shirogane86x in "Asynchronous clean-up"]]></title><description><![CDATA[
<p>Does it? I haven't used much ocaml and I haven't used Haskell in a while, but as I remember it all IO is already non blocking in Haskell, and the async library gives you the most painless async experience I've ever seen in any ecosystem. And for OCaml, you have explicit binds but recover neat do notation with let*?</p>
]]></description><pubDate>Sun, 25 Feb 2024 16:21:16 +0000</pubDate><link>https://news.ycombinator.com/item?id=39502032</link><dc:creator>shirogane86x</dc:creator><comments>https://news.ycombinator.com/item?id=39502032</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=39502032</guid></item><item><title><![CDATA[New comment by shirogane86x in "Ask HN: Which full stack framework (NextJS, Remix, SvelteKit) would you use?"]]></title><description><![CDATA[
<p>At $dayjob right now I'm using remix+supabase (although the supabase part is going away, but we're keeping postgrest). I have to say I quite enjoy it. DevEx seems good (although we've added quite a bit of our own logic on top). Performance is too early for me to tell. For my personal stuff I tend to do more app-like things, so SSR/SSG is not that useful to me, and I tend to go with pure react+redux. But I might try svelte when the new version comes out, it solves a lot of my issues with it.</p>
]]></description><pubDate>Tue, 13 Feb 2024 22:11:02 +0000</pubDate><link>https://news.ycombinator.com/item?id=39363541</link><dc:creator>shirogane86x</dc:creator><comments>https://news.ycombinator.com/item?id=39363541</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=39363541</guid></item><item><title><![CDATA[New comment by shirogane86x in "Go 1.22"]]></title><description><![CDATA[
<p>I've had many cases in the past (not in go) where I've had to make use of that exact same function (in typescript, in F#, and in C#). it is actually quite useful when doing any amount of data manipulation (map/filter/reduce chain that often ends up into a list of key-value pairs, which then get turned into a map/dictionary of sorts).<p>At least in my job(s over the years), turning a flat list of db records into a more complex, nested (potentially on multiple levels) data structure before handing it off to the front-end is a very common. I've seen it done with "simple, fast code" (although not in go specifically, but in other languages), but it very quickly turned into huge messes of of long nested for loops and was very difficult to read. LINQ, Lodash, java's streams... I sincerely can't understand how go developers live without them. They make me a lot more productive both at reading and writing the code.</p>
]]></description><pubDate>Wed, 07 Feb 2024 14:00:43 +0000</pubDate><link>https://news.ycombinator.com/item?id=39288638</link><dc:creator>shirogane86x</dc:creator><comments>https://news.ycombinator.com/item?id=39288638</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=39288638</guid></item><item><title><![CDATA[New comment by shirogane86x in "Write code for the web"]]></title><description><![CDATA[
<p>I am pretty sure iOS has way less than 50% market share globally? So if your target audience is global I am guessing you lose less, on average</p>
]]></description><pubDate>Sun, 04 Feb 2024 19:42:33 +0000</pubDate><link>https://news.ycombinator.com/item?id=39253619</link><dc:creator>shirogane86x</dc:creator><comments>https://news.ycombinator.com/item?id=39253619</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=39253619</guid></item><item><title><![CDATA[New comment by shirogane86x in "Palworld's success is partially born from Pokémon fans' discontent"]]></title><description><![CDATA[
<p>To be honest I think the opinion was always generally divided. In my personal experience in the community, gen III and IV seemed to be the most popular, with significant but smaller sections of the community enjoying Gen I, V and II. I haven't met many people whose favourite is post Gen V though. (Mine is Gen IV, closely followed by Gen III and V)</p>
]]></description><pubDate>Wed, 31 Jan 2024 08:12:27 +0000</pubDate><link>https://news.ycombinator.com/item?id=39201312</link><dc:creator>shirogane86x</dc:creator><comments>https://news.ycombinator.com/item?id=39201312</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=39201312</guid></item><item><title><![CDATA[New comment by shirogane86x in "Palworld's success is partially born from Pokémon fans' discontent"]]></title><description><![CDATA[
<p>- the games were very buggy<p>- gen 1 pokemon are very basic and probably some of the worst in the series (subjective)<p>- the games are extremely unbalanced, and many types have only one evolution line while others have a lot, there's no uniformity (gen 1 has only 1 dragon and 1 ghost line)<p>- the lack of physical special split hits many types insanely hard and they never balanced for it (i.e.: Ghastly line is a special attacker but is the only ghost type, ghost type is physical for some reason)<p>- gen2 is basically non linear for most of Johto, which completely destroys the levels on the gym leaders and the wild pokemon. The Kanto section has similar issues. And red is only difficult because it's insanely overlevelled compared to everything else<p>- gen 2 gym leaders don't have Johto pokemon (lol)<p>- trainer AI, especially in some instances, is very weirdly programmed (Blaine for example uses healing items on full HP pokemon for no reason)<p>- lack of moves means even late game, trainers have start-of-game moves ( blue has a rhydon with tail whip and leer, but no ground or rock moves. And an Exeggutor with no grass or psychic damaging moves. And he's the final boss)</p>
]]></description><pubDate>Wed, 31 Jan 2024 06:22:16 +0000</pubDate><link>https://news.ycombinator.com/item?id=39200629</link><dc:creator>shirogane86x</dc:creator><comments>https://news.ycombinator.com/item?id=39200629</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=39200629</guid></item><item><title><![CDATA[New comment by shirogane86x in "--libcurl"]]></title><description><![CDATA[
<p>I think you don't even need to type out the whole option, just the first few letters most of the time? I haven't used PowerShell in a bit, but I think if you have a command with a -Force option, but just type -f, it will go through as -Force, if and only if the command doesn't have any other options starting in f</p>
]]></description><pubDate>Tue, 30 Jan 2024 22:30:30 +0000</pubDate><link>https://news.ycombinator.com/item?id=39196827</link><dc:creator>shirogane86x</dc:creator><comments>https://news.ycombinator.com/item?id=39196827</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=39196827</guid></item><item><title><![CDATA[New comment by shirogane86x in "Palworld's success is partially born from Pokémon fans' discontent"]]></title><description><![CDATA[
<p>To be honest, not most of them. It took until GBA era to get some decent mainline games, and the series probably peaked around DS era, both mainline and spin offs. Gen 1 and 2 have so many flaws that make them age really badly</p>
]]></description><pubDate>Tue, 30 Jan 2024 22:27:08 +0000</pubDate><link>https://news.ycombinator.com/item?id=39196786</link><dc:creator>shirogane86x</dc:creator><comments>https://news.ycombinator.com/item?id=39196786</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=39196786</guid></item><item><title><![CDATA[New comment by shirogane86x in "Palworld's success is partially born from Pokémon fans' discontent"]]></title><description><![CDATA[
<p>As someone who kept playing Pokemon (and who has casually played online matches since gen 4) the game did change... But not in good ways.<p>The mechanics and the balance got better (even if power creep is a very real thing). In fact, going back now, early pokemon titles are, mechanically, extremely weak (especially the ones before diamond/pearl).<p>The problem is that the single player experience is extremely lacking. The games were never hard, but as the player gained tools they became even easier. The story peaked at Black/White and then kept oscillating between forgettable and downright horrible.<p>The performance of the games has also steadily gotten worse, and Scarlet/Violet is the worst point in the series on that front. By a mile.<p>The problem for me, and for I assume many other players, is that it's sadly a one of a kind franchise. It's probably the one with the most content in its own sub-genre (there's very few catch-em-all type games that hold a candle to it), and it's also the only turn based rpg with a competitive scene on the market. I've probably collectively spent tens of thousands of hours on the franchise over a span of 16 years or so and unless something that can even get close to the experience pokemon gives me gets made, I'm kinda stuck.</p>
]]></description><pubDate>Tue, 30 Jan 2024 22:24:20 +0000</pubDate><link>https://news.ycombinator.com/item?id=39196750</link><dc:creator>shirogane86x</dc:creator><comments>https://news.ycombinator.com/item?id=39196750</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=39196750</guid></item><item><title><![CDATA[New comment by shirogane86x in "--libcurl"]]></title><description><![CDATA[
<p>For simple interactive usage aliases go a long way, and with tab completion it gets really fast to write. For example, Invoke-WebRequest is iwr, Select-Object I think is just select. Some others are ForEach-Object which is %, and Where-Object can be ? Or where. Also, since PowerShell is case insensitive, you don't really need to use all those capitals - the worst you'll get is a warning from your editor, if it has PowerShell integration (around 99% sure about this)</p>
]]></description><pubDate>Mon, 29 Jan 2024 19:19:32 +0000</pubDate><link>https://news.ycombinator.com/item?id=39181049</link><dc:creator>shirogane86x</dc:creator><comments>https://news.ycombinator.com/item?id=39181049</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=39181049</guid></item><item><title><![CDATA[New comment by shirogane86x in "My Impressions of Hare"]]></title><description><![CDATA[
<p>Re: the splitting the body part, that's usually what I do. When I have to review code that doesn't fit in my brain I just end up checking out the code locally and aggressively splitting it into different functions (sometimes even going down to each function having 1 to 2 lines of code at most) just to lower the cognitive burden enough to understand it. It works reasonably well, but takes a while. As for the repetitive error handling: for me it's more about the shape of the code than the actual code itself. I haven't worked much with go, but the few times I did it was as if my brain turned off the moment I saw the word err, I don't quite know how else to explain it (I have similar problems with try catch, but those are somewhat less common in the codebases I worked with, so the problem is less prevalent)</p>
]]></description><pubDate>Sun, 28 Jan 2024 22:47:26 +0000</pubDate><link>https://news.ycombinator.com/item?id=39170641</link><dc:creator>shirogane86x</dc:creator><comments>https://news.ycombinator.com/item?id=39170641</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=39170641</guid></item><item><title><![CDATA[New comment by shirogane86x in "My Impressions of Hare"]]></title><description><![CDATA[
<p>Genuine question, as someone who is approaching the 10 year anniversary of working in the industry: how do you deal with the inherent verbosity and bare-ness that come with that level of simplicity? To this day, loops that aren't of the standard "go through array in order" kind still take me longer to parse mentally than some map/filter/reduce calls ever did, and repetitive/uniform code (like error handling in go) makes it very difficult for me to catch the details. And that's the code I've read (and had to write) for most of my professional career (most of it was procedural legacy software), so I don't think experience is the problem (unless I need more, in which case fair enough). But I think I haven't been able to make the mental switch to be able to separate the important details from the noise, and I don't really know how to</p>
]]></description><pubDate>Sat, 27 Jan 2024 23:04:13 +0000</pubDate><link>https://news.ycombinator.com/item?id=39160783</link><dc:creator>shirogane86x</dc:creator><comments>https://news.ycombinator.com/item?id=39160783</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=39160783</guid></item></channel></rss>