Newest at the top
| 2026-03-09 11:42:41 +0100 | dutchie | (~dutchie@user/dutchie) dutchie |
| 2026-03-09 11:41:58 +0100 | dutchie | (~dutchie@user/dutchie) (Remote host closed the connection) |
| 2026-03-09 11:35:18 +0100 | <newmind> | at least the claude models are.. usable? they still get a lot of it wrong, and often get stuck in trivial sections, and the code they produce is... quite bad... but it compiles, and once it's working, refactoring it in a strongly typed language is so much more reliable than without |
| 2026-03-09 11:34:03 +0100 | <merijn> | mesaoptimizer: I mean, that's just reinventing Epigram but unprincipled :p\ |
| 2026-03-09 11:33:45 +0100 | <merijn> | newmind: I've mostly been using it with Scala, so not entirely sure how it does for HAskell |
| 2026-03-09 11:32:10 +0100 | <newmind> | merijn: i feel like it is quite a bit worse at generation, it one-shots less reliably, and often falls back to imperative patterns which don't quite fit wit haskell... but at least most of the time it then doesn't compile and it can fix that, rather than relying just on unit tests or the user catching it |
| 2026-03-09 11:29:07 +0100 | <merijn> | [exa]: tbh, chatgpt seems to do much better with strongly typed code than other stuff imo |
| 2026-03-09 11:28:49 +0100 | vgtw | (~vgtw@user/vgtw) vgtw |
| 2026-03-09 11:25:45 +0100 | xff0x | (~xff0x@fsb6a9491c.tkyc517.ap.nuro.jp) (Ping timeout: 248 seconds) |
| 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 +0100 | alinab | (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 +0100 | akegalj | (~akegalj@246-221.dsl.iskon.hr) (Quit: leaving) |
| 2026-03-09 10:42:48 +0100 | prdak | (~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 +0100 | kuribas | (~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 +0100 | prdak | (~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 +0100 | castan | (~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 |