2026/03/09

Newest at the top

2026-03-09 10:54:59 +0100 <mesaoptimizer> (question is whether they will stay intuitive enough for programmers)
2026-03-09 10:54:19 +0100 <mesaoptimizer> perhaps if you model the syntax-semantics space, you can essentially sample from regions that are adverserially optimized to be incoherent and counter-intuitive to the model
2026-03-09 10:53:38 +0100 <mesaoptimizer> one could also make syntax-semantics combinations that are extremely alien to the LLM
2026-03-09 10:53:02 +0100 <mesaoptimizer> possibly, yeah. I do notice that it is incredibly difficult for LLMs to write dependent type theoretic code, but my experiments were only with Agda (when attempting to learn it)
2026-03-09 10:51:52 +0100 <kuribas> idris?
2026-03-09 10:51:04 +0100 <mesaoptimizer> I wonder if there are languages that are extremely resistant to LLM codegen, such that any code written is very likely human-written
2026-03-09 10:48:15 +0100 <[exa]> if you explicitly say "do not use Bool", humans will switch to some correct-by-construction workflow (like having Maybe query or so); poor claude will encode booleans in strings and integers
2026-03-09 10:47:04 +0100 <[exa]> I found that particular issue to be an interesting thing to write into homework assignments
2026-03-09 10:46:34 +0100alinab(sid468903@id-468903.helmsley.irccloud.com) (Quit: Connection closed for inactivity)
2026-03-09 10:46:07 +0100 <mesaoptimizer> lol
2026-03-09 10:46:02 +0100 <[exa]> c'mon it's python encoded in haskell, newbie-friendly!
2026-03-09 10:45:47 +0100 <kuribas> Instead "unless (isOk q) $ ..."
2026-03-09 10:45:38 +0100 <kuribas> Also "if isOK q then return () else decodeFromPacket q >>= throwIO . ERRException"
2026-03-09 10:45:22 +0100 <kuribas> right :)
2026-03-09 10:45:01 +0100 <[exa]> it's for mysql so aesthetics arguments don't apply
2026-03-09 10:44:14 +0100 <kuribas> "catch (void (waitCommandReply tlsIs')) ((\ _ -> return ()) :: SomeException -> IO ())"
2026-03-09 10:43:39 +0100 <[exa]> kuribas: apparently even some haskell folks love to just pour code on stuff
2026-03-09 10:43:12 +0100akegalj(~akegalj@246-221.dsl.iskon.hr) (Quit: leaving)
2026-03-09 10:42:48 +0100prdak(~Thunderbi@user/prdak) prdak
2026-03-09 10:40:56 +0100 <kuribas> "Generated with Claude Code"
2026-03-09 10:40:33 +0100 <kuribas> I noticed this PR: https://github.com/winterland1989/mysql-haskell/pull/72
2026-03-09 10:40:28 +0100 <kuribas> Is a lot of haskell code now also "vibecoded"?
2026-03-09 10:39:42 +0100kuribas(~user@2a02-1810-2825-6000-46e-614f-97bf-a1c6.ip6.access.telenet.be) kuribas
2026-03-09 10:38:55 +0100 <[exa]> merijn: btw the slow hackage situation has been dragging for over a week now I'd say. can we somehow throw servers at it?
2026-03-09 10:38:17 +0100 <[exa]> y no fold'
2026-03-09 10:38:11 +0100 <[exa]> the docs recommend going for `foldMap' id` but that's not cute
2026-03-09 10:37:49 +0100 <[exa]> is there a "strict" generic monoidal `fold` ?
2026-03-09 10:34:53 +0100prdak(~Thunderbi@user/prdak) (Ping timeout: 272 seconds)
2026-03-09 10:30:06 +0100 <merijn> Good to see that that code hasn't been maintained/updated for, like, 10 GHC releases now >.>
2026-03-09 10:29:23 +0100 <merijn> For a non-trivial real world example of the power of just stacking a bunch of monoids, see: https://github.com/haskell/cabal/blob/master/Cabal/src/Distribution/Simple/Program/GHC.hs#L67-L144
2026-03-09 10:27:55 +0100castan(~castan@2a02:2f0f:8210:d800:1625:20a6:66c:b041) (Quit: castan)
2026-03-09 10:26:42 +0100 <merijn> castan: It's even neater since you can my personal favourite "mwhen :: Monoid b => Boolean -> b" to selectively disable parts of aggregation/sorting
2026-03-09 10:25:56 +0100 <merijn> It also works well for stuff like aggregating data, since you just need a monoid on the final result and then you can compose any number of functions computing stuff that take the same arguments into bigger aggregations
2026-03-09 10:24:53 +0100 <merijn> It's stupid powerful for trivially writing really complicated sorts
2026-03-09 10:24:35 +0100 <castan> this is really cool, thank you for the info
2026-03-09 10:24:04 +0100 <merijn> but yes
2026-03-09 10:23:56 +0100 <merijn> castan: lexicographic order on the whatever functions you pass to it
2026-03-09 10:23:30 +0100 <castan> oh and then with <> you get a lexicographic order on the pairs
2026-03-09 10:22:57 +0100 <merijn> So "comparing snd <> comparing fst" passes the same 2 tuples to both functions and mappend results, which simply returns the result of "comparing snd" **unless** that returns EQ, then it falls back to the result of "comparing fst"
2026-03-09 10:21:55 +0100 <merijn> Ordering is just "data Ordering = LT | EQ | GT" with "mappend LT _ = LT; mappend GT _ = GT; mappend EQ x = x" (i.e. it gives you the left-most non-equal value)
2026-03-09 10:20:12 +0100 <lambdabot> Ord a1 => (a2, a1) -> (a2, a1) -> Ordering
2026-03-09 10:20:11 +0100 <merijn> :t comparing snd
2026-03-09 10:20:07 +0100 <lambdabot> Ord a => (a, b) -> (a, b) -> Ordering
2026-03-09 10:20:06 +0100 <merijn> :t comparing fst
2026-03-09 10:19:36 +0100 <merijn> castan: But that instance applies recursively (i.e. since "a -> b" is a Monoid when 'b' is, then "c -> a -> b" (which is just "c -> (a -> b)" is also a monoid)
2026-03-09 10:18:48 +0100 <merijn> castan: "instance Monoid b => Monoid (a -> b) where mappend f g = \x -> mappend (f x) (g x)"
2026-03-09 10:18:25 +0100fp(~Thunderbi@2001:708:20:1406::1370) fp
2026-03-09 10:18:08 +0100 <merijn> castan: Basically the monoid on functions is "if the final result is a monoid, then simply pass each argument to both functions and mappend the result"
2026-03-09 10:18:04 +0100fp(~Thunderbi@staff235.kora-dyn.aalto.fi) (Client Quit)
2026-03-09 10:17:37 +0100fp(~Thunderbi@staff235.kora-dyn.aalto.fi) fp