<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: tome</title><link>https://news.ycombinator.com/user?id=tome</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Fri, 08 May 2026 17:27:25 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=tome" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[New comment by tome in "Maybe you shouldn't install new software for a bit"]]></title><description><![CDATA[
<p>> > Haskell already passes a type object as an argument to anything which does IO. They don't do it for security. Turns out having pure functions separated from non-pure functions is a beautiful thing.<p>> But almost nobody uses Haskell<p>Sad, but true<p>> partly because of poor ergonomics like this!<p>I'm somewhat dubious that's the reason, partly because I find such ergonomic excellent!  Especially those provided by my capability system Bluefin:  <a href="https://hackage.haskell.org/package/bluefin" rel="nofollow">https://hackage.haskell.org/package/bluefin</a></p>
]]></description><pubDate>Fri, 08 May 2026 13:25:15 +0000</pubDate><link>https://news.ycombinator.com/item?id=48062786</link><dc:creator>tome</dc:creator><comments>https://news.ycombinator.com/item?id=48062786</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48062786</guid></item><item><title><![CDATA[New comment by tome in "A couple million lines of Haskell: Production engineering at Mercury"]]></title><description><![CDATA[
<p>Tracing doesn’t actually require IO, only emitting the traces does, and those two need not be done at the same point.<p>In any case, anywhere they’re doing HTTP calls they are already threading IO, so they don’t have to pay an additional cost.</p>
]]></description><pubDate>Tue, 05 May 2026 12:22:31 +0000</pubDate><link>https://news.ycombinator.com/item?id=48021509</link><dc:creator>tome</dc:creator><comments>https://news.ycombinator.com/item?id=48021509</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48021509</guid></item><item><title><![CDATA[New comment by tome in "A couple million lines of Haskell: Production engineering at Mercury"]]></title><description><![CDATA[
<p>Any particular stories illustrating that that you can share?</p>
]]></description><pubDate>Tue, 05 May 2026 12:22:15 +0000</pubDate><link>https://news.ycombinator.com/item?id=48021504</link><dc:creator>tome</dc:creator><comments>https://news.ycombinator.com/item?id=48021504</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48021504</guid></item><item><title><![CDATA[New comment by tome in "Functional programmers need to take a look at Zig"]]></title><description><![CDATA[
<p>I don't understand why Zig's `Io` is a "monad". In fact I discussed that with the author of this article and the author of Zig here, but no conclusion was reached (<a href="https://news.ycombinator.com/item?id=46129568">https://news.ycombinator.com/item?id=46129568</a>).<p>But, flipping the script, if you want to see something like Zig's `Io` interface in Haskell then have a look at my capability system Bluefin, particularly Bluefin.IO. The equivalent of Zig's `Io` is called `IOE` and you can't do IO without it!<p><a href="https://hackage-content.haskell.org/package/bluefin-0.5.1.0/docs/Bluefin-IO.html" rel="nofollow">https://hackage-content.haskell.org/package/bluefin-0.5.1.0/...</a><p>Regarding custom allocators and such, well, that could fit into the same pattern, in principle, since capabilities/regions/lifetimes are pretty much the same pattern. I don't know how one would plug that into Haskell's RTS.</p>
]]></description><pubDate>Thu, 30 Apr 2026 07:41:18 +0000</pubDate><link>https://news.ycombinator.com/item?id=47959445</link><dc:creator>tome</dc:creator><comments>https://news.ycombinator.com/item?id=47959445</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47959445</guid></item><item><title><![CDATA[New comment by tome in "Why I still reach for Lisp and Scheme instead of Haskell"]]></title><description><![CDATA[
<p>> the programmer can't tell if the program is actually<p>What do you mean, "can't tell"?  If I see this in Python<p><pre><code>    (A)(B)(C)
</code></pre>
how do I know which of your 9 it means?  Well, I'm a Python programmer so I know that it means<p><pre><code>    A(B)(C)
</code></pre>
which is the function A applied to B, which returns a function that gets applied to C.  If you're a Haskell programmer you know that it means the same thing.<p>I grant you that it is odd to those who are unfamiliar and it took me quite a while to get used to it, but it's much better to write that way in Haskell when writing programs that use higher-order functions.</p>
]]></description><pubDate>Thu, 30 Apr 2026 07:34:05 +0000</pubDate><link>https://news.ycombinator.com/item?id=47959389</link><dc:creator>tome</dc:creator><comments>https://news.ycombinator.com/item?id=47959389</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47959389</guid></item><item><title><![CDATA[New comment by tome in "Generalised plusequals"]]></title><description><![CDATA[
<p>In Haskell this list is not well-typed<p><pre><code>    l = [1, [2, cat], 4]
</code></pre>
There are a few different ways to cook this up. Here's one:<p><pre><code>    {-# LANGUAGE TemplateHaskell #-}
    
    import Control.Lens
    
    data Cat = Cat { _age :: Int }
      deriving Show
    makeLenses ''Cat
    
    data Item
      = I Int
      | L [Item]
      | C Cat
      deriving Show
    
    makePrisms ''Item
    
    cat :: Cat
    cat = Cat 3
    
    l :: [Item]
    l = [I 1, L [I 2, C cat], I 4]
    
    l' :: [Item]
    l' = set (ix 1 . _L . ix 1 . _C . age) 9 l
    

    ghci> l'
    [I 1,L [I 2,C (Cat {_age = 9})],I 4]</code></pre></p>
]]></description><pubDate>Sat, 25 Apr 2026 12:07:56 +0000</pubDate><link>https://news.ycombinator.com/item?id=47900791</link><dc:creator>tome</dc:creator><comments>https://news.ycombinator.com/item?id=47900791</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47900791</guid></item><item><title><![CDATA[New comment by tome in "Saying goodbye to Agile"]]></title><description><![CDATA[
<p>Right, some people believe that. But did any of the signatories of the Agile Manifesto?</p>
]]></description><pubDate>Wed, 15 Apr 2026 09:56:42 +0000</pubDate><link>https://news.ycombinator.com/item?id=47776895</link><dc:creator>tome</dc:creator><comments>https://news.ycombinator.com/item?id=47776895</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47776895</guid></item><item><title><![CDATA[New comment by tome in "Saying goodbye to Agile"]]></title><description><![CDATA[
<p>I'm curious whether it's the author's contention that the signatories of the Agile Manifesto thought that the ideas they were championing went back only a few years, and they had no idea they went back at least 30.  In particular<p>> All of these things were later claimed as Agile innovations<p>Are there some references that demonstrate that? [EDIT: that the <i>signatories</i> thought they were their own innovations]<p>And if so, is that a bad thing? Ideas are repeatedly rediscovered. This article isn't called "Saying goodbye to Royce, Bell and Thayer", and I'm wondering why not.</p>
]]></description><pubDate>Wed, 15 Apr 2026 09:21:08 +0000</pubDate><link>https://news.ycombinator.com/item?id=47776639</link><dc:creator>tome</dc:creator><comments>https://news.ycombinator.com/item?id=47776639</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47776639</guid></item><item><title><![CDATA[New comment by tome in "Saying goodbye to Agile"]]></title><description><![CDATA[
<p>> Agile doesn't have that, there is no functional equivelant of "the cake should be moist and rise evenly".<p>That's not true for the way I understand agile.  The way I understand it, the testable outcome is whether the principles of the agile manifesto are satisfied<p>For example, is your highest priority to satisfy the customer through early and continuous delivery of valuable software? If not then you're not agile.<p><a href="https://agilemanifesto.org/principles.html" rel="nofollow">https://agilemanifesto.org/principles.html</a></p>
]]></description><pubDate>Wed, 15 Apr 2026 08:34:54 +0000</pubDate><link>https://news.ycombinator.com/item?id=47776260</link><dc:creator>tome</dc:creator><comments>https://news.ycombinator.com/item?id=47776260</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47776260</guid></item><item><title><![CDATA[New comment by tome in "The Economics of Software Teams: Why Most Engineering Orgs Are Flying Blind"]]></title><description><![CDATA[
<p>Do you have any recommendations? I find his book Principles of Product Development Flow very interesting.</p>
]]></description><pubDate>Mon, 13 Apr 2026 08:30:39 +0000</pubDate><link>https://news.ycombinator.com/item?id=47749324</link><dc:creator>tome</dc:creator><comments>https://news.ycombinator.com/item?id=47749324</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47749324</guid></item><item><title><![CDATA[New comment by tome in "Prefer do notation over Applicative operators when assembling records (2024)"]]></title><description><![CDATA[
<p>Here's a silly but simple example:<p><pre><code>    newtype FlippedIO a = MkFlippedIO { runFlippedIO :: IO a }
      deriving Functor
    
    instance Applicative FlippedIO where
      pure = MkFlippedIO . pure
      liftA2 f (MkFlippedIO x) (MkFlippedIO y) =
        MkFlippedIO ((flip . liftA2 . flip) f x y)
    
    data Person = Person String String
      deriving Show
    
    putStrLnFlipped = MkFlippedIO . putStrLn
    
    getLineFlipped = MkFlippedIO getLine
    
    getPerson :: IO Person
    getPerson = runFlippedIO $
      Person
        <$> (putStrLnFlipped "Enter your first name:" *> getLineFlipped)
        <*> (putStrLnFlipped "Enter your last name:"  *> getLineFlipped)
</code></pre>
It runs things "backwards":<p><pre><code>    ghci> getPerson
    One
    Enter your last name:
    Two
    Enter your first name:
    Person "Two" "One"</code></pre></p>
]]></description><pubDate>Sat, 04 Apr 2026 10:40:00 +0000</pubDate><link>https://news.ycombinator.com/item?id=47637832</link><dc:creator>tome</dc:creator><comments>https://news.ycombinator.com/item?id=47637832</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47637832</guid></item><item><title><![CDATA[New comment by tome in "ARC-AGI-3"]]></title><description><![CDATA[
<p>> ML is trying to replace humans<p>Are household appliances trying to replace humans?</p>
]]></description><pubDate>Thu, 26 Mar 2026 07:57:01 +0000</pubDate><link>https://news.ycombinator.com/item?id=47527748</link><dc:creator>tome</dc:creator><comments>https://news.ycombinator.com/item?id=47527748</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47527748</guid></item><item><title><![CDATA[New comment by tome in "The future of version control"]]></title><description><![CDATA[
<p>It doesn't matter which is which. The resolution will be the same regardless.</p>
]]></description><pubDate>Mon, 23 Mar 2026 07:44:28 +0000</pubDate><link>https://news.ycombinator.com/item?id=47486465</link><dc:creator>tome</dc:creator><comments>https://news.ycombinator.com/item?id=47486465</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47486465</guid></item><item><title><![CDATA[New comment by tome in "The United States and Israel have launched a major attack on Iran"]]></title><description><![CDATA[
<p>My answer to that question is context dependent. I don't have a strong objection to Israel occupying 4,000 square metres of Lebanon.<p>But I think we're established the answer to the question I originally asked. Thanks for participating.</p>
]]></description><pubDate>Wed, 04 Mar 2026 17:55:37 +0000</pubDate><link>https://news.ycombinator.com/item?id=47251249</link><dc:creator>tome</dc:creator><comments>https://news.ycombinator.com/item?id=47251249</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47251249</guid></item><item><title><![CDATA[New comment by tome in "The United States and Israel have launched a major attack on Iran"]]></title><description><![CDATA[
<p>Right, OK, I guess if you're complaining about some land about the area of an athletics running track then you are technically correct.  I'm not sure that's what people would have understood by tsimonescu's original claim that Israel is occupying parts of Lebanon.<p>And what exactly is Israel doing there, on that land the size of an athletics track? Something very nefarious?</p>
]]></description><pubDate>Wed, 04 Mar 2026 14:35:57 +0000</pubDate><link>https://news.ycombinator.com/item?id=47247984</link><dc:creator>tome</dc:creator><comments>https://news.ycombinator.com/item?id=47247984</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47247984</guid></item><item><title><![CDATA[New comment by tome in "The United States and Israel have launched a major attack on Iran"]]></title><description><![CDATA[
<p>Yeah, that's pretty dumb. It's also not what I said. The original comment is a vague insinuation<p>> Those who know their history also know that the current American administration is of a kind that usually ascends following the rules, but then never voluntarily leaves power.<p>and not really becoming of a top level Hacker News post.  I requested a clarification from bojan and they did not respond to the request. We're all welcome to make our own interpretation of that.</p>
]]></description><pubDate>Mon, 02 Mar 2026 13:01:24 +0000</pubDate><link>https://news.ycombinator.com/item?id=47217447</link><dc:creator>tome</dc:creator><comments>https://news.ycombinator.com/item?id=47217447</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47217447</guid></item><item><title><![CDATA[New comment by tome in "The United States and Israel have launched a major attack on Iran"]]></title><description><![CDATA[
<p>Do you mean with the link to Wikipedia?  Could you clarify exactly what part of it backs up your claim?</p>
]]></description><pubDate>Sun, 01 Mar 2026 16:45:20 +0000</pubDate><link>https://news.ycombinator.com/item?id=47208295</link><dc:creator>tome</dc:creator><comments>https://news.ycombinator.com/item?id=47208295</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47208295</guid></item><item><title><![CDATA[New comment by tome in "The United States and Israel have launched a major attack on Iran"]]></title><description><![CDATA[
<p>Showing that one's claim is not hollow can be achieved in a variety of ways. A prediction market was just a suggestion of one possibility.  I'm open to other ways that bojan can show that their claim isn't just empty venting.</p>
]]></description><pubDate>Sun, 01 Mar 2026 11:25:35 +0000</pubDate><link>https://news.ycombinator.com/item?id=47205753</link><dc:creator>tome</dc:creator><comments>https://news.ycombinator.com/item?id=47205753</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47205753</guid></item><item><title><![CDATA[New comment by tome in "The United States and Israel have launched a major attack on Iran"]]></title><description><![CDATA[
<p>The goalpost is "Israel's occupation of ... parts of Lebanon".  Do you agree with 
tsimionescu that Israel occupies parts of Lebanon? Can you back that up?</p>
]]></description><pubDate>Sat, 28 Feb 2026 21:06:49 +0000</pubDate><link>https://news.ycombinator.com/item?id=47200233</link><dc:creator>tome</dc:creator><comments>https://news.ycombinator.com/item?id=47200233</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47200233</guid></item><item><title><![CDATA[New comment by tome in "The United States and Israel have launched a major attack on Iran"]]></title><description><![CDATA[
<p>> And the only way to prove you’re serious about this opinion is to gamble on it!<p>If it's a strong claim it's not much of a gamble, is it? Talk is cheap.</p>
]]></description><pubDate>Sat, 28 Feb 2026 21:04:44 +0000</pubDate><link>https://news.ycombinator.com/item?id=47200211</link><dc:creator>tome</dc:creator><comments>https://news.ycombinator.com/item?id=47200211</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47200211</guid></item></channel></rss>