Home liberachat/#haskell: Logs Calendar

Logs on 2026-03-09 (liberachat/#haskell)

00:01:25 × arandombit quits (~arandombi@user/arandombit) (Ping timeout: 268 seconds)
00:07:58 arandombit joins (~arandombi@user/arandombit)
00:08:03 merijn joins (~merijn@62.45.136.136)
00:10:37 × tremon quits (~tremon@83.80.159.219) (Quit: getting boxed in)
00:12:26 × merijn quits (~merijn@62.45.136.136) (Ping timeout: 244 seconds)
00:14:12 tzh joins (~tzh@c-76-115-131-146.hsd1.or.comcast.net)
00:14:30 × arandombit quits (~arandombi@user/arandombit) (Ping timeout: 244 seconds)
00:23:29 merijn joins (~merijn@host-cl.cgnat-g.v4.dfn.nl)
00:28:02 × merijn quits (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 248 seconds)
00:29:33 × Tuplanolla quits (~Tuplanoll@88.114.89.88) (Quit: Leaving.)
00:30:16 arandombit joins (~arandombi@2a02:2455:8656:7100:49f2:4a42:13a7:5052)
00:30:16 × arandombit quits (~arandombi@2a02:2455:8656:7100:49f2:4a42:13a7:5052) (Changing host)
00:30:16 arandombit joins (~arandombi@user/arandombit)
00:39:07 merijn joins (~merijn@62.45.136.136)
00:40:27 × arandombit quits (~arandombi@user/arandombit) (Remote host closed the connection)
00:42:33 arandombit joins (~arandombi@2a02:2455:8656:7100:49f2:4a42:13a7:5052)
00:42:33 × arandombit quits (~arandombi@2a02:2455:8656:7100:49f2:4a42:13a7:5052) (Changing host)
00:42:33 arandombit joins (~arandombi@user/arandombit)
00:43:39 czan joins (~czan@user/mange)
00:43:58 × xff0x quits (~xff0x@2405:6580:b080:900:3d38:9b05:9987:e9b1) (Ping timeout: 268 seconds)
00:45:54 × merijn quits (~merijn@62.45.136.136) (Ping timeout: 255 seconds)
00:47:27 × arandombit quits (~arandombi@user/arandombit) (Ping timeout: 246 seconds)
00:50:49 arandombit joins (~arandombi@2a02:2455:8656:7100:49f2:4a42:13a7:5052)
00:50:49 × arandombit quits (~arandombi@2a02:2455:8656:7100:49f2:4a42:13a7:5052) (Changing host)
00:50:49 arandombit joins (~arandombi@user/arandombit)
00:57:04 merijn joins (~merijn@62.45.136.136)
01:02:12 × merijn quits (~merijn@62.45.136.136) (Ping timeout: 264 seconds)
01:12:22 × arandombit quits (~arandombi@user/arandombit) (Ping timeout: 244 seconds)
01:12:50 merijn joins (~merijn@host-cl.cgnat-g.v4.dfn.nl)
01:12:50 × karenw_ quits (~karenw@user/karenw) (Ping timeout: 248 seconds)
01:17:49 × merijn quits (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 245 seconds)
01:20:26 × travgm quits (~travgm@fsf/member/travgm) (Quit: Leaving)
01:20:44 merijn joins (~merijn@host-cl.cgnat-g.v4.dfn.nl)
01:25:34 × merijn quits (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 265 seconds)
01:26:29 j1n37 joins (~j1n37@user/j1n37)
01:36:38 merijn joins (~merijn@62.45.136.136)
01:39:06 xff0x joins (~xff0x@fsb6a9491c.tkyc517.ap.nuro.jp)
01:40:47 × merijn quits (~merijn@62.45.136.136) (Ping timeout: 244 seconds)
01:52:00 merijn joins (~merijn@host-cl.cgnat-g.v4.dfn.nl)
01:57:19 × merijn quits (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 264 seconds)
02:07:47 merijn joins (~merijn@host-cl.cgnat-g.v4.dfn.nl)
02:13:00 × merijn quits (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 256 seconds)
02:23:43 merijn joins (~merijn@host-cl.cgnat-g.v4.dfn.nl)
02:30:10 × merijn quits (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 245 seconds)
02:36:10 bggd_ joins (~bgg@2a01:e0a:fd5:f510:d84e:bd19:3fca:eb64)
02:43:56 merijn joins (~merijn@host-cl.cgnat-g.v4.dfn.nl)
02:48:46 × merijn quits (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 276 seconds)
02:51:39 khumba joins (~khumba@user/khumba)
02:56:08 <ski> EvanR : for `class C a b c | a -> b', this expresses `forall a. unique b. exists c. C a b c', which is equivalent to `forall a b0 b1 c0 c1. (C a b0 c0,C a b1 c1) => b0 = b1'. this means that if you infer constraints `C a b0 c0' and `C a b1 c1' then you can add the constraint `b0 = b1'. it also means that if you find two instances where the `a' part is the same (upto renaming of tyvars) but the `b' part
02:56:14 <ski> differs, then you have a violation of the FD
02:57:38 <ski> "either this or associated types are needed to make multiparameter type classes typecheck without explicit annotations" -- for many, but not for all, usages. if you only invoke a single `C a b c' constraint (or there's only a single instance), then the presence or absence of the FD makes no difference
02:59:03 <ski> (by `unique a. ..a..' i here mean "exists at most one", so equivalent to `forall a0 a1. (..a0..,..a1..) => a0 = a1')
02:59:17 merijn joins (~merijn@host-cl.cgnat-g.v4.dfn.nl)
03:03:26 arandombit joins (~arandombi@user/arandombit)
03:04:03 × merijn quits (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 255 seconds)
03:08:06 × arandombit quits (~arandombi@user/arandombit) (Ping timeout: 244 seconds)
03:09:23 arandombit joins (~arandombi@2a02:2455:8656:7100:49f2:4a42:13a7:5052)
03:09:23 × arandombit quits (~arandombi@2a02:2455:8656:7100:49f2:4a42:13a7:5052) (Changing host)
03:09:23 arandombit joins (~arandombi@user/arandombit)
03:14:26 × arandombit quits (~arandombi@user/arandombit) (Ping timeout: 268 seconds)
03:14:42 × myxos quits (~myxos@174-18-44-59.tcso.qwest.net) (Remote host closed the connection)
03:15:02 merijn joins (~merijn@host-cl.cgnat-g.v4.dfn.nl)
03:17:38 × attlin quits (~user@user/attlin) (Ping timeout: 248 seconds)
03:19:45 × merijn quits (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 245 seconds)
03:24:46 × poscat quits (~poscat@user/poscat) (Remote host closed the connection)
03:26:08 myxos joins (~myxos@174-18-44-59.tcso.qwest.net)
03:27:40 poscat joins (~poscat@user/poscat)
03:37:14 merijn joins (~merijn@host-cl.cgnat-g.v4.dfn.nl)
03:38:47 <EvanR> that seems to all add up to the same thing as what i said. None of which to me connects with the "point" which is to select an instance
03:39:55 <EvanR> the instances form a relation among types, restricted further by the functional dependency noted = all these constraints exist
03:42:18 × merijn quits (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 255 seconds)
03:47:25 attlin joins (~user@user/attlin)
03:50:24 peterbecich joins (~Thunderbi@71.84.33.135)
03:52:04 × attlin quits (~user@user/attlin) (Quit: Leaving)
03:53:02 merijn joins (~merijn@host-cl.cgnat-g.v4.dfn.nl)
03:56:07 attlin joins (~user@user/attlin)
03:57:22 × rembo10 quits (~rembo10@main.remulis.com) (Quit: ZNC 1.10.1 - https://znc.in)
03:57:55 × merijn quits (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 264 seconds)
03:58:11 rembo10 joins (~rembo10@main.remulis.com)
03:59:46 × Square2 quits (~Square4@user/square) (Ping timeout: 244 seconds)
04:14:42 × khumba quits (~khumba@user/khumba) (Ping timeout: 255 seconds)
04:16:04 khumba joins (~khumba@24.70.121.49)
04:16:11 × khumba quits (~khumba@24.70.121.49) (Changing host)
04:16:11 khumba joins (~khumba@user/khumba)
04:18:21 tessier joins (~tessier@ip68-8-117-219.sd.sd.cox.net)
04:18:55 × machinedgod quits (~machinedg@d172-219-48-230.abhsia.telus.net) (Ping timeout: 264 seconds)
04:22:44 merijn joins (~merijn@host-cl.cgnat-g.v4.dfn.nl)
04:26:26 arandombit joins (~arandombi@2a02:2455:8656:7100:49f2:4a42:13a7:5052)
04:26:26 × arandombit quits (~arandombi@2a02:2455:8656:7100:49f2:4a42:13a7:5052) (Changing host)
04:26:26 arandombit joins (~arandombi@user/arandombit)
04:29:13 × khumba quits (~khumba@user/khumba) (Ping timeout: 244 seconds)
04:30:24 × merijn quits (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 246 seconds)
04:31:31 × arandombit quits (~arandombi@user/arandombit) (Ping timeout: 272 seconds)
04:42:02 merijn joins (~merijn@host-cl.cgnat-g.v4.dfn.nl)
04:47:12 × merijn quits (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 264 seconds)
04:57:50 merijn joins (~merijn@host-cl.cgnat-g.v4.dfn.nl)
05:00:36 arandombit joins (~arandombi@user/arandombit)
05:02:51 × merijn quits (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 255 seconds)
05:06:03 × arandombit quits (~arandombi@user/arandombit) (Ping timeout: 268 seconds)
05:12:05 arandombit joins (~arandombi@user/arandombit)
05:13:59 merijn joins (~merijn@62.45.136.136)
05:18:18 × merijn quits (~merijn@62.45.136.136) (Ping timeout: 244 seconds)
05:23:45 merijn joins (~merijn@host-cl.cgnat-g.v4.dfn.nl)
05:28:30 × merijn quits (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 246 seconds)
05:32:12 × jzargo2 quits (~jzargo@user/jzargo) (Read error: Connection reset by peer)
05:32:37 jzargo2 joins (~jzargo@user/jzargo)
05:39:32 merijn joins (~merijn@host-cl.cgnat-g.v4.dfn.nl)
05:42:13 × divlamir quits (~divlamir@user/divlamir) (Read error: Connection reset by peer)
05:42:23 divlamir joins (~divlamir@user/divlamir)
05:44:20 × merijn quits (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 245 seconds)
06:03:55 × peterbecich quits (~Thunderbi@71.84.33.135) (Ping timeout: 264 seconds)
06:13:25 merijn joins (~merijn@host-cl.cgnat-g.v4.dfn.nl)
06:15:39 × arandombit quits (~arandombi@user/arandombit) (Ping timeout: 244 seconds)
06:18:33 × merijn quits (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 272 seconds)
06:19:27 takuan joins (~takuan@d8D86B9E9.access.telenet.be)
06:20:48 terrorjack joins (~terrorjac@2a01:4f8:271:2d98::2)
06:22:48 tzh_ joins (~tzh@c-76-115-131-146.hsd1.or.comcast.net)
06:24:44 merijn joins (~merijn@host-cl.cgnat-g.v4.dfn.nl)
06:25:00 × tzh quits (~tzh@c-76-115-131-146.hsd1.or.comcast.net) (Ping timeout: 264 seconds)
06:29:18 × merijn quits (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 268 seconds)
06:40:07 merijn joins (~merijn@host-cl.cgnat-g.v4.dfn.nl)
06:45:20 × merijn quits (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 268 seconds)
06:49:12 michalz joins (~michalz@185.246.207.200)
06:49:16 oskarw joins (~user@user/oskarw)
06:50:29 sord937 joins (~sord937@gateway/tor-sasl/sord937)
06:55:54 merijn joins (~merijn@host-cl.cgnat-g.v4.dfn.nl)
06:56:35 califax_ joins (~califax@user/califx)
06:57:41 × califax quits (~califax@user/califx) (Ping timeout: 258 seconds)
06:57:54 califax_ is now known as califax
07:01:00 × merijn quits (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 264 seconds)
07:10:11 × Sgeo quits (~Sgeo@user/sgeo) (Read error: Connection reset by peer)
07:11:45 merijn joins (~merijn@host-cl.cgnat-g.v4.dfn.nl)
07:12:44 arandombit joins (~arandombi@user/arandombit)
07:12:53 × czan quits (~czan@user/mange) (Quit: Dinner time!)
07:16:34 × merijn quits (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 245 seconds)
07:17:00 × arandombit quits (~arandombi@user/arandombit) (Ping timeout: 246 seconds)
07:25:44 merijn joins (~merijn@host-cl.cgnat-g.v4.dfn.nl)
07:29:51 arandombit joins (~arandombi@2a02:2455:8656:7100:49f2:4a42:13a7:5052)
07:29:51 × arandombit quits (~arandombi@2a02:2455:8656:7100:49f2:4a42:13a7:5052) (Changing host)
07:29:51 arandombit joins (~arandombi@user/arandombit)
07:30:19 × merijn quits (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 245 seconds)
07:41:08 merijn joins (~merijn@host-cl.cgnat-g.v4.dfn.nl)
07:42:52 × humasect quits (~humasect@dyn-192-249-132-90.nexicom.net) (Remote host closed the connection)
07:47:40 × merijn quits (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 245 seconds)
07:53:33 CiaoSen joins (~Jura@2a02:8071:64e1:da0:5a47:caff:fe78:33db)
08:00:56 × jmcantrell_ quits (~weechat@user/jmcantrell) (Ping timeout: 256 seconds)
08:02:00 × tzh_ quits (~tzh@c-76-115-131-146.hsd1.or.comcast.net) (Quit: zzz)
08:18:44 × ft quits (~ft@p4fc2a98c.dip0.t-ipconnect.de) (Quit: leaving)
08:20:18 × CiaoSen quits (~Jura@2a02:8071:64e1:da0:5a47:caff:fe78:33db) (Ping timeout: 268 seconds)
08:22:31 prdak joins (~Thunderbi@user/prdak)
08:25:08 × prdak quits (~Thunderbi@user/prdak) (Remote host closed the connection)
08:25:38 prdak joins (~Thunderbi@user/prdak)
08:29:53 merijn joins (~merijn@77.242.116.146)
08:31:59 × arthurvl quits (~arthurvl@2a02-a469-f5e2-1-83d2-ca43-57a2-dc81.fixed6.kpn.net) (Ping timeout: 245 seconds)
08:37:15 × arandombit quits (~arandombi@user/arandombit) (Ping timeout: 272 seconds)
08:38:09 × Lord_of_Life quits (~Lord@user/lord-of-life/x-2819915) (Quit: Laa shay'a waqi'un moutlaq bale kouloun moumkine)
08:38:26 × vgtw quits (~vgtw@user/vgtw) (Ping timeout: 252 seconds)
08:41:49 Lord_of_Life joins (~Lord@user/lord-of-life/x-2819915)
08:42:00 CiaoSen joins (~Jura@2a02:8071:64e1:da0:5a47:caff:fe78:33db)
08:45:45 akegalj joins (~akegalj@246-221.dsl.iskon.hr)
08:46:23 × emmanuelux quits (~em@user/emmanuelux) (Quit: bye)
08:49:48 chele joins (~chele@user/chele)
08:52:18 × chexum quits (~quassel@gateway/tor-sasl/chexum) (Remote host closed the connection)
08:52:21 arandombit joins (~arandombi@2a02:2455:8656:7100:49f2:4a42:13a7:5052)
08:52:21 × arandombit quits (~arandombi@2a02:2455:8656:7100:49f2:4a42:13a7:5052) (Changing host)
08:52:21 arandombit joins (~arandombi@user/arandombit)
08:52:40 chexum joins (~quassel@gateway/tor-sasl/chexum)
08:55:40 castan joins (~castan@2a02:2f0f:8210:d800:1625:20a6:66c:b041)
08:57:31 __monty__ joins (~toonn@user/toonn)
09:01:50 <castan> Hi. Can someone help me understand what sorcery makes `mappend mempty Sum 3` get parsed as `mappend mempty (Sum 3)`
09:02:24 czan joins (~czan@user/mange)
09:03:08 × loungerry_ quits (~loungerry@150.241.86.78) (Remote host closed the connection)
09:04:35 <probie> None
09:04:42 <Leary> castan: It doesn't get /parsed/ as that; that's what it equals. `mappend mempty x = x` ==> `mappend mempty Sum = Sum` ==> `mappend mempty Sum 3 = Sum 3`.
09:05:04 <Leary> One key detail here being `Monoid b => Monoid (a -> b)`.
09:05:21 <probie> :t mappend mempty Sum
09:05:22 <lambdabot> Num a => a -> Sum a
09:05:38 <probie> :t (mappend mempty)
09:05:39 <lambdabot> Monoid a => a -> a
09:05:42 <castan> Oh hahahha
09:06:35 <castan> I see now, thank you
09:07:58 <mesaoptimizer> :t mappend
09:07:59 <lambdabot> Monoid a => a -> a -> a
09:08:06 <mesaoptimizer> :t mappend mempty
09:08:07 <lambdabot> Monoid a => a -> a
09:08:14 <mesaoptimizer> :t mappend mempty Sum
09:08:15 <lambdabot> Num a => a -> Sum a
09:08:21 <mesaoptimizer> :t mappend mempty Sum 3
09:08:22 <lambdabot> Num t => Sum t
09:10:19 <__monty__> Were you expecting a different result? Because `mappend mempty (Sum 3) = Sum 3` too.
09:10:20 <merijn> best monoit instance ever
09:10:40 <merijn> __monty__: No, his question is why is it correct at all :p
09:10:58 <merijn> __monty__: Which, if you don't realise the monoid on functions is confusing
09:12:02 <merijn> castan: And absolutely brilliant use for this monoid is the fact that Ordering is a monoid, so you can use it to combine comparison functions to do multi way ordering
09:13:07 <merijn> :t comparing
09:13:08 <lambdabot> Ord a => (b -> a) -> b -> b -> Ordering
09:13:13 <merijn> :t sortBy
09:13:14 <lambdabot> (a -> a -> Ordering) -> [a] -> [a]
09:14:00 <merijn> > sortBy (comparing snd <> comparing fst) [(3,9), (2,9), (1, 9), (3, 1), (2, 1), (1,1)]
09:14:02 <lambdabot> [(1,1),(2,1),(3,1),(1,9),(2,9),(3,9)]
09:14:12 <merijn> Magic
09:15:17 <probie> > sortBy (comparing snd <> comparing (flip mod 2 . fst) <> comparing fst) [(3,9), (2,9), (1, 9), (3, 1), (2, 1), (1,1)]
09:15:18 <lambdabot> [(2,1),(1,1),(3,1),(2,9),(1,9),(3,9)]
09:15:55 <castan> that's wild, I need to play with it for a bit to understand how
09:16:46 <merijn> Holy moly is Hackage being DOSed or something?
09:16:49 <merijn> It's slow as sin
09:17:17 <merijn> > sortBy (comparing snd <> comparing (Down . fst)) [(3,9), (2,9), (1, 9), (3, 1), (2, 1), (1,1)]
09:17:19 <lambdabot> [(3,1),(2,1),(1,1),(3,9),(2,9),(1,9)]
09:17:24 <merijn> Even funkier with newtypes like Down :p
09:17:37 fp joins (~Thunderbi@staff235.kora-dyn.aalto.fi)
09:18:04 × fp quits (~Thunderbi@staff235.kora-dyn.aalto.fi) (Client Quit)
09:18:08 <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"
09:18:25 fp joins (~Thunderbi@2001:708:20:1406::1370)
09:18:48 <merijn> castan: "instance Monoid b => Monoid (a -> b) where mappend f g = \x -> mappend (f x) (g x)"
09:19:36 <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)
09:20:06 <merijn> :t comparing fst
09:20:07 <lambdabot> Ord a => (a, b) -> (a, b) -> Ordering
09:20:11 <merijn> :t comparing snd
09:20:12 <lambdabot> Ord a1 => (a2, a1) -> (a2, a1) -> Ordering
09:21:55 <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)
09:22:57 <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"
09:23:30 <castan> oh and then with <> you get a lexicographic order on the pairs
09:23:56 <merijn> castan: lexicographic order on the whatever functions you pass to it
09:24:04 <merijn> but yes
09:24:35 <castan> this is really cool, thank you for the info
09:24:53 <merijn> It's stupid powerful for trivially writing really complicated sorts
09:25:56 <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
09:26:42 <merijn> castan: It's even neater since you can my personal favourite "mwhen :: Monoid b => Boolean -> b" to selectively disable parts of aggregation/sorting
09:27:55 × castan quits (~castan@2a02:2f0f:8210:d800:1625:20a6:66c:b041) (Quit: castan)
09:29:23 <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
09:30:06 <merijn> Good to see that that code hasn't been maintained/updated for, like, 10 GHC releases now >.>
09:34:53 × prdak quits (~Thunderbi@user/prdak) (Ping timeout: 272 seconds)
09:37:49 <[exa]> is there a "strict" generic monoidal `fold` ?
09:38:11 <[exa]> the docs recommend going for `foldMap' id` but that's not cute
09:38:17 <[exa]> y no fold'
09:38:55 <[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?
09:39:42 kuribas joins (~user@2a02-1810-2825-6000-46e-614f-97bf-a1c6.ip6.access.telenet.be)
09:40:28 <kuribas> Is a lot of haskell code now also "vibecoded"?
09:40:33 <kuribas> I noticed this PR: https://github.com/winterland1989/mysql-haskell/pull/72
09:40:56 <kuribas> "Generated with Claude Code"
09:42:48 prdak joins (~Thunderbi@user/prdak)
09:43:12 × akegalj quits (~akegalj@246-221.dsl.iskon.hr) (Quit: leaving)
09:43:39 <[exa]> kuribas: apparently even some haskell folks love to just pour code on stuff
09:44:14 <kuribas> "catch (void (waitCommandReply tlsIs')) ((\ _ -> return ()) :: SomeException -> IO ())"
09:45:01 <[exa]> it's for mysql so aesthetics arguments don't apply
09:45:22 <kuribas> right :)
09:45:38 <kuribas> Also "if isOK q then return () else decodeFromPacket q >>= throwIO . ERRException"
09:45:47 <kuribas> Instead "unless (isOk q) $ ..."
09:46:02 <[exa]> c'mon it's python encoded in haskell, newbie-friendly!
09:46:07 <mesaoptimizer> lol
09:46:34 × alinab quits (sid468903@id-468903.helmsley.irccloud.com) (Quit: Connection closed for inactivity)
09:47:04 <[exa]> I found that particular issue to be an interesting thing to write into homework assignments
09:48:15 <[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
09:51:04 <mesaoptimizer> I wonder if there are languages that are extremely resistant to LLM codegen, such that any code written is very likely human-written
09:51:52 <kuribas> idris?
09:53:02 <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)
09:53:38 <mesaoptimizer> one could also make syntax-semantics combinations that are extremely alien to the LLM
09:54:19 <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
09:54:59 <mesaoptimizer> (question is whether they will stay intuitive enough for programmers)
10:25:45 × xff0x quits (~xff0x@fsb6a9491c.tkyc517.ap.nuro.jp) (Ping timeout: 248 seconds)
10:28:49 vgtw joins (~vgtw@user/vgtw)
10:29:07 <merijn> [exa]: tbh, chatgpt seems to do much better with strongly typed code than other stuff imo
10:32:10 <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
10:33:45 <merijn> newmind: I've mostly been using it with Scala, so not entirely sure how it does for HAskell
10:34:03 <merijn> mesaoptimizer: I mean, that's just reinventing Epigram but unprincipled :p\
10:35:18 <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
10:41:58 × dutchie quits (~dutchie@user/dutchie) (Remote host closed the connection)
10:42:41 dutchie joins (~dutchie@user/dutchie)
10:48:42 arthurvl joins (~arthurvl@2a02-a469-f5e2-1-83d2-ca43-57a2-dc81.fixed6.kpn.net)
10:59:05 × j1n37 quits (~j1n37@user/j1n37) (Read error: Connection reset by peer)
11:00:19 j1n37 joins (~j1n37@user/j1n37)
11:18:47 <int-e> "but it compiles" -- yeah because they throw the code at the compiler until it does
11:19:57 <newmind> int-e: more or less, yes :) still more successful than just inventing code that then just crashes at runtime
11:20:02 <mauke> I strongly prefer code to be typed, not generated
11:20:14 × dutchie quits (~dutchie@user/dutchie) (Remote host closed the connection)
11:20:28 <int-e> mauke: with Haskell you can have both!
11:20:30 int-e runs
11:20:33 × prdak quits (~Thunderbi@user/prdak) (Ping timeout: 265 seconds)
11:21:14 dutchie joins (~dutchie@user/dutchie)
11:21:50 dhil joins (~dhil@5.151.29.139)
11:28:07 prdak joins (~Thunderbi@user/prdak)
11:29:11 danza joins (~danza@user/danza)
11:37:13 × _d0t quits (~{-d0t-}@user/-d0t-/x-7915216) (Ping timeout: 276 seconds)
11:42:20 _d0t joins (~{-d0t-}@user/-d0t-/x-7915216)
11:45:01 × oskarw quits (~user@user/oskarw) (Ping timeout: 276 seconds)
11:50:58 × danza quits (~danza@user/danza) (Read error: Connection reset by peer)
11:51:12 danza joins (~danza@user/danza)
11:52:02 × danza quits (~danza@user/danza) (Remote host closed the connection)
11:54:20 × CiaoSen quits (~Jura@2a02:8071:64e1:da0:5a47:caff:fe78:33db) (Ping timeout: 245 seconds)
11:56:18 wootehfoot joins (~wootehfoo@user/wootehfoot)
11:57:17 target_i joins (~target_i@user/target-i/x-6023099)
12:05:24 × czan quits (~czan@user/mange) (Ping timeout: 246 seconds)
12:06:12 CiaoSen joins (~Jura@2a02:8071:64e1:da0:5a47:caff:fe78:33db)
12:09:56 × bitdex quits (~bitdex@gateway/tor-sasl/bitdex) (Quit: = "")
12:24:29 xff0x joins (~xff0x@2405:6580:b080:900:3f2f:c15f:718f:76d4)
12:25:46 <ski> EvanR : yea, the point of that respone was to provide perhaps a more mathematical/logical aspect to the FD semantics. but yes, neither of the mentioned two effects have anything to do with actually selecting an instance, but rather to constrain the usage (merging used instances (demanded constraints)) and definition (disallowing instances violating the FD) of instances
12:31:24 × YoungFrog quits (~youngfrog@39.129-180-91.adsl-dyn.isp.belgacom.be) (Quit: ZNC 1.7.x-git-3-96481995 - https://znc.in)
12:32:41 YoungFrog joins (~youngfrog@2a02:a03f:ca07:f900:1032:66d2:1281:f541)
12:46:32 Square2 joins (~Square4@user/square)
12:54:06 × prdak quits (~Thunderbi@user/prdak) (Read error: Connection reset by peer)
12:54:17 prdak1 joins (~Thunderbi@user/prdak)
12:58:29 prdak1 is now known as prdak
13:13:34 × wootehfoot quits (~wootehfoo@user/wootehfoot) (Read error: Connection reset by peer)
13:16:17 × Fischmiep quits (~Fischmiep@user/Fischmiep) (Remote host closed the connection)
13:26:07 oskarw joins (~user@user/oskarw)
13:35:59 × st_aldini quits (~Betterbir@136.48.46.187) (Quit: st_aldini)
13:54:05 comerijn joins (~merijn@77.242.116.146)
13:57:00 × merijn quits (~merijn@77.242.116.146) (Ping timeout: 268 seconds)
14:01:49 ezzieyguywuf joins (~Unknown@user/ezzieyguywuf)
14:09:00 × aka_dude quits (~aka_dude@2a03:f80:30:f490::1) (Quit: Gateway shutdown)
14:10:10 aka_dude joins (~aka_dude@2a03:f80:30:f490::1)
14:11:56 danza joins (~danza@user/danza)
14:26:12 × arandombit quits (~arandombi@user/arandombit) (Ping timeout: 264 seconds)
14:27:48 arandombit joins (~arandombi@2a02:2455:8656:7100:2149:c35e:cd23:4e9a)
14:27:48 × arandombit quits (~arandombi@2a02:2455:8656:7100:2149:c35e:cd23:4e9a) (Changing host)
14:27:48 arandombit joins (~arandombi@user/arandombit)
14:48:30 × Digit quits (~user@user/digit) (Ping timeout: 245 seconds)
14:48:53 Digitteknohippie joins (~user@user/digit)
14:57:44 × danza quits (~danza@user/danza) (Remote host closed the connection)
15:02:12 machinedgod joins (~machinedg@d172-219-48-230.abhsia.telus.net)
15:10:24 × arandombit quits (~arandombi@user/arandombit) (Ping timeout: 244 seconds)
15:18:22 × loonycyborg quits (~loonycybo@wesnoth/developer/loonycyborg) (Quit: ZNC - http://znc.sourceforge.net)
15:22:13 systemhalted joins (~systemhal@108.147.100.161)
15:22:54 peterbecich joins (~Thunderbi@71.84.33.135)
15:23:35 × systemhalted quits (~systemhal@108.147.100.161) (Remote host closed the connection)
15:24:20 × Digitteknohippie quits (~user@user/digit) (Ping timeout: 268 seconds)
15:27:35 tremon joins (~tremon@83.80.159.219)
15:37:00 Fischmiep joins (~Fischmiep@user/Fischmiep)
15:40:18 × pabs3 quits (~pabs3@user/pabs3) (Ping timeout: 246 seconds)
15:48:14 × CiaoSen quits (~Jura@2a02:8071:64e1:da0:5a47:caff:fe78:33db) (Ping timeout: 245 seconds)
15:52:12 × j1n37 quits (~j1n37@user/j1n37) (Ping timeout: 255 seconds)
15:53:51 pabs3 joins (~pabs3@user/pabs3)
15:58:32 jmcantrell_ joins (~weechat@user/jmcantrell)
16:03:04 × fp quits (~Thunderbi@2001:708:20:1406::1370) (Ping timeout: 276 seconds)
16:08:04 <[exa]> is there any reason why `toList` could not serve as a sufficient minimal definition of Foldable?
16:09:37 <[exa]> (somewhat stupidly I assumeth and debuggeth)
16:10:02 <mesaoptimizer> :t toList
16:10:03 <lambdabot> Foldable t => t a -> [a]
16:11:35 ezzieyguywuf parts (~Unknown@user/ezzieyguywuf) ()
16:14:12 × prdak quits (~Thunderbi@user/prdak) (Ping timeout: 264 seconds)
16:14:52 × pavonia quits (~user@user/siracusa) (Quit: Bye!)
16:15:44 Digit joins (~user@user/digit)
16:16:00 × vgtw quits (~vgtw@user/vgtw) (Ping timeout: 246 seconds)
16:16:30 <dolio> [exa]: I think the obstacle is how default definitions work. You can only give one default definition for each method, and those determine the minimal definitions.
16:16:31 <[exa]> (oh ok I guess because the defaults would be a mess)
16:16:54 <[exa]> yeah I assume that if we could default from 3 different ones, the 2 would need to pick which one to default from
16:16:59 <[exa]> or make a 3-cycle of them all
16:17:01 <[exa]> wild
16:18:07 <dolio> You could make a cycle betwee foldMap, foldr and toList. But that might make some choices of minimal implementation kind of bad.
16:18:58 <[exa]> yeah I myself already have 2 different correct opinions on which direction of the cycle is more correct... imagine giving it to more people :)
16:22:59 Digit is now known as Digitteknohippie
16:23:26 vgtw joins (~vgtw@user/vgtw)
16:23:46 Digitteknohippie is now known as Digit
16:29:48 × peterbecich quits (~Thunderbi@71.84.33.135) (Ping timeout: 264 seconds)
16:34:49 × kuribas quits (~user@2a02-1810-2825-6000-46e-614f-97bf-a1c6.ip6.access.telenet.be) (Ping timeout: 248 seconds)
16:36:24 × bggd_ quits (~bgg@2a01:e0a:fd5:f510:d84e:bd19:3fca:eb64) (Remote host closed the connection)
16:37:00 × vgtw quits (~vgtw@user/vgtw) (Ping timeout: 246 seconds)
16:37:26 vgtw joins (~vgtw@user/vgtw)
16:40:49 × oats quits (~oats@user/oats) (Read error: Connection reset by peer)
16:41:04 oats joins (~oats@user/oats)
16:43:55 × infinity0 quits (~infinity0@pwned.gg) (Ping timeout: 245 seconds)
16:53:34 kuribas joins (~user@2a02-1810-2825-6000-414c-630a-ac36-9026.ip6.access.telenet.be)
16:58:56 × kimiamania4 quits (~b4b260c9@user/kimiamania) (Quit: PegeLinux)
17:00:03 kimiamania4 joins (~b4b260c9@user/kimiamania)
17:04:22 infinity0 joins (~infinity0@pwned.gg)
17:06:24 AlexNoo joins (~AlexNoo@178.34.160.184)
17:07:09 AlexNoo_ joins (~AlexNoo@178.34.160.184)
17:07:52 AlexNoo__ joins (~AlexNoo@178.34.160.184)
17:10:00 × comerijn quits (~merijn@77.242.116.146) (Ping timeout: 265 seconds)
17:10:36 × AlexNoo quits (~AlexNoo@178.34.160.184) (Ping timeout: 246 seconds)
17:10:58 AlexNoo joins (~AlexNoo@178.34.160.184)
17:11:18 × AlexNoo_ quits (~AlexNoo@178.34.160.184) (Ping timeout: 246 seconds)
17:12:00 × AlexNoo__ quits (~AlexNoo@178.34.160.184) (Ping timeout: 246 seconds)
17:24:01 <tccq> what is the correct state variable s to use for STArray? I want to have some monadic stuff over a large array of ints and a record of some other info (to make a stack machine)
17:24:18 <tccq> not sure I understand how STArray and regular ST fit together
17:25:24 <mauke> s
17:25:49 <mauke> for ST to work, you have to leave s generic
17:26:23 <mauke> well, and it has to match all the other 's's of the ST context and all the variables used in that context
17:27:01 <[exa]> tccq: `s` is voidy like RealWorld but without RealWorld
17:27:36 × raincomplex quits (~rain@user/raincomplex) (Read error: Connection reset by peer)
17:28:02 <[exa]> tccq: as a minor annoyance, if you want to type stuff correctly you might need higher-rank types with a (forall s. ...) somewhere
17:29:14 raincomplex joins (~rain@pool-173-54-183-192.nwrknj.fios.verizon.net)
17:29:14 × raincomplex quits (~rain@pool-173-54-183-192.nwrknj.fios.verizon.net) (Changing host)
17:29:14 raincomplex joins (~rain@user/raincomplex)
17:31:49 <tccq> hmm ok
17:32:22 <tccq> if I want my mutable array and a regular state var should I have two nested ST's then? One generic s for the array and one with my Info struct?
17:32:36 <mauke> no, you can use the same s for both
17:33:53 <tccq> something like `type MemM a = (STArray RegInfo) Int Slot (ST RegInfo) a`?
17:34:09 <tccq> use get/put for RegInfo and read/writeArray for the array?
17:34:16 <[exa]> tccq: the "state" there is more of a token that doesn't really carry anything
17:34:51 <mauke> that doesn't look like s
17:35:39 <mauke> you don't get to choose an s
17:35:41 <mauke> :t runST
17:35:42 <lambdabot> (forall s. ST s a) -> a
17:35:42 <[exa]> tccq: more like `type MemM s a = STArray s Int Slot`
17:35:46 <mauke> ^ this fella does
17:36:09 <mauke> :t runSTArray
17:36:09 <[exa]> tccq: (not sure what RegInfo is)
17:36:10 <lambdabot> error: [GHC-88464]
17:36:10 <lambdabot> Variable not in scope: runSTArray
17:36:33 <tccq> RegInfo is just a big record if ints and stuff
17:36:41 <tccq> like I said I'm trying to make a little stack machine
17:37:29 <tccq> I understand s is scoped so that the state can't escape, but I want to use it at some specific type right?
17:37:35 <mauke> no
17:37:38 <mauke> never
17:37:50 <mauke> the "state" is not your data
17:38:05 <[exa]> tccq: ahh so reginfo is the actual state that you want to hold, together with the array
17:38:09 <tccq> eys
17:38:38 <tccq> I could write all of this by passing an array and this record to every function
17:38:39 <[exa]> tccq: in short, you don't need to carry these in the type -- you make arrays like you would with mutable vectors in IO. These are "carried through" but only implicitly.
17:38:53 <tccq> but I don't want to do that and hint to the compiler that there is only ever one array
17:39:15 <mauke> that sounds more like State, not ST
17:39:27 <[exa]> yes, State or Reader (ok for mutables) over the ST
17:39:27 <tccq> possibly, not sure I understand the difference
17:39:29 <mauke> or maybe Reader
17:39:56 <EvanR> an ST program can create mutable variables and arrays for use within its scope
17:40:07 <EvanR> State only has 1 "mutable" variable
17:40:13 <EvanR> accessed using get and put
17:40:23 <[exa]> tccq: the point is that the type `s` there only serves the ordering of operations. Your array is indexed by the `s` for (among other) the purpose that it's hard to get it out of the execution of runST that uses some concrete `s` (that you don't know)
17:40:32 <mauke> Reader is roughly equivalent to function arguments: it takes care of passing a "context value" around
17:41:01 <mauke> State emulates a single mutable value (by secretly taking an extra argument and returning an extra value, the "updated" value)
17:41:47 <mauke> ST is an execution environment that provides genuine mutable variables (and arrays), which you can allocate/read/write within the ST context. the catch is that all variables are "local": you must return a pure result
17:41:58 tzh joins (~tzh@c-76-115-131-146.hsd1.or.comcast.net)
17:42:04 <EvanR> just give me a tall State and a do notation to steer her by
17:42:19 <mauke> ST is meant for situations where you want to use imperative features internally, but your public interface is still pure
17:42:46 <[exa]> tccq: ...so I guess: type MemM s a = StateT (RegInfo, STArray s Int Slot) (St s) a
17:43:07 <tccq> yea ok so the other question is which order to layer them in
17:43:07 <[exa]> might be faster as ReaderT if you can store RegInfo behind some kind of ST reference (TVar ?)
17:43:13 <tccq> I think normally I want to update both most of the time
17:43:17 <tccq> so maybe it doesn't matter?
17:43:51 <[exa]> yeah if you want the _values_ in State, you don't need `ST` btw
17:43:54 <tccq> cause the STArray also takes a monad to sequence with right? and that could be my State RegInfo
17:44:19 <EvanR> no STArray does not
17:44:31 <[exa]> the above keeps references in Reader, where you only use the references for mutation, and don't modify the state
17:44:49 <EvanR> having an STArray in a State doesn't sound right at all
17:45:56 <[exa]> tccq: for comparison, did you work with mutable vectors?
17:46:28 <tccq> nope. I've done stuff w/ StateT and ReaderT (a while ago), but never really touched vectors or arrays in haskell
17:47:12 <[exa]> tccq: see https://hackage-content.haskell.org/package/vector-0.13.2.0/docs/Data-Vector-Mutable.html -- they are also parametrized by the `s`
17:47:47 <[exa]> tccq: but the 's' doesn't hold anything and actually cannot, because it's used internally for the state serialization (see the PrimMonad m constraints)
17:47:57 <[exa]> s/state/imperative computations/
17:48:51 <EvanR> so you want to update a mutable array, let me first introduce you to some category theory
17:48:57 <[exa]> tccq: and with that single `s`, you can allocate and deallocate (and read&write) as many vectors/arrays as you like. The only thing they have in common is that their operations depend on each other (to assert order) via something that the `s` becomes.
17:49:48 <tccq> alright, think I've got it by the right end now, thank you
17:50:12 <tccq> the worst part is the the category theory isn't even that bad, it's the applications that are the hardest to parse ime
17:50:23 <tccq> but practice makes perfect I suppose
17:50:27 <[exa]> tccq: so then you have a bit of a choice of whether store stateful stuff in actual State, or have it "allocated aside" as a side effect, using e.g. the mutable vectors or STArrays, or e.g. TVar
17:50:44 <EvanR> I find vector is a good default when reaching for arrays
17:51:36 <mauke> stateful immutable arrays kind of suck because there are no partial updates. you can only rewrite the whole array
17:51:56 <mauke> so if you're dealing with array updates, State is not a good fit
17:52:18 <[exa]> ..is there a TVar that can be easily run in `ST s` ?
17:52:32 <tccq> I was only looking into STArrays because they seem relatively builtin
17:52:39 <tccq> though that line is never quite clear to me in haskell
17:53:05 <[exa]> tccq: builtin primitives might be tough :)
17:53:24 <[exa]> tbh I'd really recommend going with a mutable vector, it's a very friendly for first tries
17:53:42 <[exa]> *a very friendly choice
17:53:57 <mauke> [exa]: does that even make sense? how would you get a multi-threaded ST?
17:54:02 <tccq> I'll take a look through vector
17:54:32 <tccq> builtin meaning standard library, not necessarily VoidTM### or whatever goes on internally
17:54:55 <tccq> any the vague restriction of it would be cool to have it work with microhs too :)
17:54:58 × chele quits (~chele@user/chele) (Remote host closed the connection)
17:55:01 <tccq> s/any/and
17:56:19 <EvanR> lol TVar. Here I was thinking it would be bad form to bring up STM in a discussion about the confusion between ST and State
17:58:34 CiaoSen joins (~Jura@2a02:8071:64e1:da0:5a47:caff:fe78:33db)
17:59:29 <mauke> yeah, love those names
18:00:26 Square joins (~Square@user/square)
18:00:27 <mauke> State: mutable state (emulated). STM: software transactional memory (for safe state in multi-threaded code). ST: state threads (not related to State or threads)
18:02:40 × Square2 quits (~Square4@user/square) (Ping timeout: 245 seconds)
18:03:23 wootehfoot joins (~wootehfoo@user/wootehfoot)
18:04:54 wickedjargon joins (~user@S0106f89e28d5699a.vc.shawcable.net)
18:08:06 <EvanR> Data.Array is its own package now and not included in base?
18:08:17 <EvanR> or it always was
18:19:15 euphores joins (~SASL_euph@user/euphores)
18:25:49 <monochrom> On my CV: "I know C/C++, J/Java/Javascript, ST/STM". >:)
18:26:43 <monochrom> yikes I should have "improved" that to "ST/STM/StateT/" too
18:42:26 × machinedgod quits (~machinedg@d172-219-48-230.abhsia.telus.net) (Ping timeout: 248 seconds)
18:51:58 × DetourNetworkUK quits (~DetourNet@user/DetourNetworkUK) (Read error: Connection reset by peer)
18:52:22 DetourNetworkUK joins (~DetourNet@user/DetourNetworkUK)
18:52:40 Everything joins (~Everythin@172-232-54-192.ip.linodeusercontent.com)
19:10:45 <__monty__> Forgot C-- as well.
19:11:22 <monochrom> I am not familiar enough with C--.
19:11:59 <monochrom> But I should be putting "C/C++/C#" there. :)
19:25:24 × Googulator quits (~Googulato@2a01-036d-0106-0119-01e8-0aed-2fac-7c8a.pool6.digikabel.hu) (Quit: Client closed)
19:25:41 Googulator joins (~Googulato@2a01-036d-0106-0119-01e8-0aed-2fac-7c8a.pool6.digikabel.hu)
19:25:49 <Rembane> monochrom: Has your CV turned into a prefix tree?
19:25:58 Everything parts (~Everythin@172-232-54-192.ip.linodeusercontent.com) ()
19:26:19 arandombit joins (~arandombi@2a02:2455:8656:7100:2149:c35e:cd23:4e9a)
19:26:19 × arandombit quits (~arandombi@2a02:2455:8656:7100:2149:c35e:cd23:4e9a) (Changing host)
19:26:19 arandombit joins (~arandombi@user/arandombit)
19:26:29 <monochrom> haha
19:26:52 karenw_ joins (~karenw@user/karenw)
19:26:57 <monochrom> Theorem: Every CV is a forest of prefix trees. >:)
19:27:18 <Rembane> I should start my CV with that theorem. :D
19:29:16 × igemnace quits (~igemnace@user/igemnace) (Quit: ZNC 1.9.0+deb2build3 - https://znc.in)
19:30:10 igemnace joins (~igemnace@user/igemnace)
19:30:28 <mauke> https://github.com/Perl/perl5/blob/3ed2439bc15f60b2ab82a0f91b568a32f9c8bd7d/perl.h#L3203
19:33:42 <EvanR> including C-- and C++ would be optimized away to nothing
19:35:58 <monochrom> heh
19:41:04 <Rembane> <<anti particle noises intensifies>>
19:49:21 × redshuffle quits (~quassel@45.43.70.75) (Remote host closed the connection)
19:49:28 redshuffle joins (~quassel@45.43.70.75)
19:49:45 × Lord_of_Life quits (~Lord@user/lord-of-life/x-2819915) (Ping timeout: 245 seconds)
19:51:05 × oskarw quits (~user@user/oskarw) (Remote host closed the connection)
19:53:29 Lord_of_Life joins (~Lord@user/lord-of-life/x-2819915)
20:15:03 humasect joins (~humasect@dyn-192-249-132-90.nexicom.net)
20:26:23 stackdroid18 joins (~stackdroi@user/stackdroid)
20:29:55 merijn joins (~merijn@host-cl.cgnat-g.v4.dfn.nl)
20:32:05 prdak joins (~Thunderbi@user/prdak)
20:36:36 × merijn quits (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 255 seconds)
20:37:10 <haskellbridge> <Zemyla> https://kf8nh.com/_heisenbridge/media/matrix.org/ecaDIhWASUiqwslBshXLptUU/3mmWxB2OSxU/1000008748.jpg
20:38:23 × prdak quits (~Thunderbi@user/prdak) (Ping timeout: 252 seconds)
20:38:40 <EvanR> lol
20:39:54 prdak joins (~Thunderbi@user/prdak)
20:40:06 stackdroid18 parts (~stackdroi@user/stackdroid) ()
20:42:58 <haskellbridge> <ijouw> I am trying to rewrite code using TypeFamilies to code using FunctionalDependencies.
20:42:58 <haskellbridge> ... long message truncated: https://kf8nh.com/_heisenbridge/media/kf8nh.com/ouImFDHsBujlCvzYMRmRaqsY/0YxzMbI9yFk (4 lines)
20:45:03 stackdroid18 joins (~stackdroi@user/stackdroid)
20:45:43 × dhil quits (~dhil@5.151.29.139) (Ping timeout: 244 seconds)
20:45:59 <haskellbridge> <ijouw> Ah, obviously C' a b (I did this 5 minutes ago with another class).
20:47:58 merijn joins (~merijn@host-cl.cgnat-g.v4.dfn.nl)
20:53:18 × merijn quits (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 265 seconds)
20:55:42 stackdroid18 parts (~stackdroi@user/stackdroid) ()
20:59:27 stackdroid18 joins (~stackdroi@user/stackdroid)
20:59:32 × kuribas quits (~user@2a02-1810-2825-6000-414c-630a-ac36-9026.ip6.access.telenet.be) (Remote host closed the connection)
21:03:49 merijn joins (~merijn@host-cl.cgnat-g.v4.dfn.nl)
21:08:34 × merijn quits (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 248 seconds)
21:09:25 Tuplanolla joins (~Tuplanoll@88-114-89-88.elisa-laajakaista.fi)
21:10:51 stackdroid18 parts (~stackdroi@user/stackdroid) ()
21:12:49 sam113102 joins (~sam@modemcable200.189-202-24.mc.videotron.ca)
21:13:07 × sam113101 quits (~sam@modemcable200.189-202-24.mc.videotron.ca) (Read error: Connection reset by peer)
21:13:10 sam113102 is now known as sam113101
21:19:34 merijn joins (~merijn@host-cl.cgnat-g.v4.dfn.nl)
21:20:00 × Googulator quits (~Googulato@2a01-036d-0106-0119-01e8-0aed-2fac-7c8a.pool6.digikabel.hu) (Quit: Client closed)
21:20:19 Googulator joins (~Googulato@2a01-036d-0106-0119-01e8-0aed-2fac-7c8a.pool6.digikabel.hu)
21:24:42 × merijn quits (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 268 seconds)
21:27:10 × takuan quits (~takuan@d8D86B9E9.access.telenet.be) (Ping timeout: 268 seconds)
21:27:32 emmanuelux joins (~em@user/emmanuelux)
21:27:36 Square2 joins (~Square4@user/square)
21:28:30 × Square quits (~Square@user/square) (Ping timeout: 245 seconds)
21:34:08 pavonia joins (~user@user/siracusa)
21:35:21 merijn joins (~merijn@host-cl.cgnat-g.v4.dfn.nl)
21:37:33 machinedgod joins (~machinedg@d172-219-48-230.abhsia.telus.net)
21:39:24 karenw_ is now known as karenw
21:40:20 × merijn quits (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 256 seconds)
21:47:26 Kamuela_ joins (~textual@2601:18c:8203:d800:145:1034:2ba9:8fdf)
21:48:26 × Kamuela quits (sid111576@id-111576.tinside.irccloud.com) ()
21:48:59 Kamuela_ is now known as Kamuela
21:51:08 merijn joins (~merijn@host-cl.cgnat-g.v4.dfn.nl)
21:56:07 × merijn quits (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 264 seconds)
22:08:43 merijn joins (~merijn@host-cl.cgnat-g.v4.dfn.nl)
22:11:18 × michalz quits (~michalz@185.246.207.200) (Read error: Connection reset by peer)
22:12:04 stackdroid18 joins (~stackdroi@user/stackdroid)
22:12:42 michalz joins (~michalz@185.246.207.205)
22:15:37 × merijn quits (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 248 seconds)
22:17:04 × Kamuela quits (~textual@2601:18c:8203:d800:145:1034:2ba9:8fdf) (Quit: My Mac has gone to sleep. ZZZzzz…)
22:26:17 × wickedjargon quits (~user@S0106f89e28d5699a.vc.shawcable.net) (Ping timeout: 272 seconds)
22:26:47 merijn joins (~merijn@host-cl.cgnat-g.v4.dfn.nl)
22:31:25 × merijn quits (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 245 seconds)
22:39:12 × sord937 quits (~sord937@gateway/tor-sasl/sord937) (Quit: sord937)
22:42:34 merijn joins (~merijn@host-cl.cgnat-g.v4.dfn.nl)
22:44:52 × __monty__ quits (~toonn@user/toonn) (Quit: leaving)
22:47:48 × merijn quits (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 264 seconds)
22:51:11 Kamuela joins (~kamuela@2601:18c:8203:d800:145:1034:2ba9:8fdf)
22:53:11 × skum quits (~skum@user/skum) (Ping timeout: 265 seconds)
22:58:21 merijn joins (~merijn@host-cl.cgnat-g.v4.dfn.nl)
23:03:13 × mangoiv quits (~mangoiv@user/mangoiv) (Quit: The Lounge - https://thelounge.chat)
23:03:14 × merijn quits (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 245 seconds)
23:03:42 × Vajb quits (~Vajb@n7m5g0hrctljxjtgjiv-1.v6.elisa-mobile.fi) (Remote host closed the connection)
23:03:52 Vajb joins (~Vajb@n7m5g0hrctljxjtgjiv-1.v6.elisa-mobile.fi)
23:04:36 mangoiv joins (~mangoiv@2a01:4f9:c012:6c0e::)
23:05:44 × humasect quits (~humasect@dyn-192-249-132-90.nexicom.net) (Remote host closed the connection)
23:07:35 × mangoiv quits (~mangoiv@2a01:4f9:c012:6c0e::) (Changing host)
23:07:35 mangoiv joins (~mangoiv@user/mangoiv)
23:09:23 humasect joins (~humasect@dyn-192-249-132-90.nexicom.net)
23:09:26 × emmanuelux quits (~em@user/emmanuelux) (Read error: Connection reset by peer)
23:12:46 emmanuelux joins (~em@user/emmanuelux)
23:14:08 merijn joins (~merijn@host-cl.cgnat-g.v4.dfn.nl)
23:17:57 × humasect quits (~humasect@dyn-192-249-132-90.nexicom.net) (Quit: Leaving...)
23:19:36 × merijn quits (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 264 seconds)
23:21:39 Sgeo joins (~Sgeo@user/sgeo)
23:25:09 × xff0x quits (~xff0x@2405:6580:b080:900:3f2f:c15f:718f:76d4) (Quit: xff0x)
23:26:42 × CiaoSen quits (~Jura@2a02:8071:64e1:da0:5a47:caff:fe78:33db) (Ping timeout: 248 seconds)
23:27:20 xff0x joins (~xff0x@2405:6580:b080:900:2fb0:3523:ec48:69d)
23:31:24 merijn joins (~merijn@62.45.136.136)
23:31:34 × GdeVolpi1 quits (~GdeVolpia@user/GdeVolpiano) (Ping timeout: 244 seconds)
23:33:29 GdeVolpiano joins (~GdeVolpia@user/GdeVolpiano)
23:36:07 × merijn quits (~merijn@62.45.136.136) (Ping timeout: 276 seconds)
23:46:42 merijn joins (~merijn@host-cl.cgnat-g.v4.dfn.nl)
23:53:38 × merijn quits (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds)
23:57:40 × xff0x quits (~xff0x@2405:6580:b080:900:2fb0:3523:ec48:69d) (Ping timeout: 245 seconds)
23:58:32 xff0x joins (~xff0x@2405:6580:b080:900:90e4:21a8:dac4:88fd)

All times are in UTC on 2026-03-09.