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.