Logs on 2024-03-10 (liberachat/#haskell)
| 00:09:56 | × | ski quits (~ski@ext-1-033.eduroam.chalmers.se) (Ping timeout: 252 seconds) |
| 00:10:11 | → | ski joins (~ski@ext-1-033.eduroam.chalmers.se) |
| 00:15:18 | × | a51 quits (a51@gateway/vpn/protonvpn/a51) (Quit: WeeChat 4.2.1) |
| 00:17:05 | × | rvalue quits (~rvalue@user/rvalue) (Ping timeout: 252 seconds) |
| 00:23:15 | → | rvalue joins (~rvalue@user/rvalue) |
| 00:25:35 | → | Square joins (~Square@user/square) |
| 00:25:43 | → | puke joins (~puke@user/puke) |
| 00:26:04 | × | puke quits (~puke@user/puke) (Max SendQ exceeded) |
| 00:27:11 | → | noumenon joins (~noumenon@113.51-175-156.customer.lyse.net) |
| 00:27:23 | → | puke joins (~puke@user/puke) |
| 00:46:23 | × | Tuplanolla quits (~Tuplanoll@91-159-69-59.elisa-laajakaista.fi) (Quit: Leaving.) |
| 00:50:36 | × | Unicorn_Princess quits (~Unicorn_P@user/Unicorn-Princess/x-3540542) (Remote host closed the connection) |
| 00:51:37 | × | ania123 quits (~ania123@94-43-231-47.dsl.utg.ge) (Quit: Client closed) |
| 00:53:16 | × | driib quits (~driib@vmi931078.contaboserver.net) (Quit: The Lounge - https://thelounge.chat) |
| 00:54:27 | × | mulk quits (~mulk@p5b2dc01b.dip0.t-ipconnect.de) (Ping timeout: 255 seconds) |
| 00:55:00 | → | mulk joins (~mulk@p5b1126ae.dip0.t-ipconnect.de) |
| 00:55:04 | → | driib joins (~driib@vmi931078.contaboserver.net) |
| 00:55:47 | × | oo_miguel quits (~Thunderbi@78-11-181-16.static.ip.netia.com.pl) (Ping timeout: 272 seconds) |
| 00:57:21 | × | TonyStone quits (~TonyStone@074-076-057-186.res.spectrum.com) (Remote host closed the connection) |
| 01:36:46 | × | peterbecich quits (~Thunderbi@047-229-123-186.res.spectrum.com) (Ping timeout: 255 seconds) |
| 01:44:03 | × | machinedgod quits (~machinedg@d173-183-246-216.abhsia.telus.net) (Quit: leaving) |
| 01:44:22 | → | machinedgod joins (~machinedg@d173-183-246-216.abhsia.telus.net) |
| 01:44:44 | → | TonyStone joins (~TonyStone@074-076-057-186.res.spectrum.com) |
| 02:01:11 | × | Lord_of_Life quits (~Lord@user/lord-of-life/x-2819915) (Ping timeout: 264 seconds) |
| 02:03:09 | → | Lord_of_Life joins (~Lord@user/lord-of-life/x-2819915) |
| 02:22:01 | × | ph88 quits (~ph88@2a02:8109:9e26:c800:61b8:7e22:3ff5:acf1) (Remote host closed the connection) |
| 02:33:21 | → | tri joins (~tri@ool-18bc2e74.dyn.optonline.net) |
| 02:43:27 | × | otto_s quits (~user@p4ff27bc5.dip0.t-ipconnect.de) (Ping timeout: 272 seconds) |
| 02:44:52 | → | otto_s joins (~user@p5b044d07.dip0.t-ipconnect.de) |
| 02:51:42 | → | bilegeek joins (~bilegeek@2600:1008:b015:7e93:e903:6f7f:5892:51df) |
| 02:55:29 | × | hughjfch1 quits (~hughjfche@vmi556545.contaboserver.net) (Quit: WeeChat 3.7.1) |
| 02:56:46 | → | hughjfchen joins (~hughjfche@vmi556545.contaboserver.net) |
| 03:05:02 | × | op_4 quits (~tslil@user/op-4/x-9116473) (Remote host closed the connection) |
| 03:05:35 | → | op_4 joins (~tslil@user/op-4/x-9116473) |
| 03:12:04 | × | tri quits (~tri@ool-18bc2e74.dyn.optonline.net) (Remote host closed the connection) |
| 03:12:25 | → | tri joins (~tri@ool-18bc2e74.dyn.optonline.net) |
| 03:21:40 | → | peterbecich joins (~Thunderbi@047-229-123-186.res.spectrum.com) |
| 03:29:50 | × | Inst quits (~Inst@120.244.192.27) (Remote host closed the connection) |
| 03:58:44 | × | td_ quits (~td@i5387090F.versanet.de) (Ping timeout: 252 seconds) |
| 04:00:27 | → | td_ joins (~td@i53870927.versanet.de) |
| 04:19:22 | × | azimut quits (~azimut@gateway/tor-sasl/azimut) (Ping timeout: 260 seconds) |
| 04:22:52 | → | aforemny joins (~aforemny@i59F516FE.versanet.de) |
| 04:22:59 | × | aforemny_ quits (~aforemny@2001:9e8:6cc9:7200:b326:eda8:743b:1401) (Ping timeout: 261 seconds) |
| 04:24:02 | × | ec quits (~ec@gateway/tor-sasl/ec) (Ping timeout: 260 seconds) |
| 04:30:35 | → | werneta joins (~werneta@024-205-076-158.res.spectrum.com) |
| 04:31:23 | × | werneta quits (~werneta@024-205-076-158.res.spectrum.com) (Client Quit) |
| 04:32:23 | × | TheCoffeMaker quits (~TheCoffeM@user/thecoffemaker) (Ping timeout: 264 seconds) |
| 04:38:26 | → | TheCoffeMaker joins (~TheCoffeM@user/thecoffemaker) |
| 04:39:39 | → | azimut joins (~azimut@gateway/tor-sasl/azimut) |
| 04:44:25 | → | dsrt^ joins (~cd@c-98-242-74-66.hsd1.ga.comcast.net) |
| 04:52:04 | × | RedNifre quits (~RedNifre@dslb-002-206-121-021.002.206.pools.vodafone-ip.de) (Ping timeout: 255 seconds) |
| 05:04:40 | → | RedNifre joins (~RedNifre@dslb-002-205-008-195.002.205.pools.vodafone-ip.de) |
| 05:05:17 | × | peterbecich quits (~Thunderbi@047-229-123-186.res.spectrum.com) (Ping timeout: 252 seconds) |
| 05:11:13 | × | machinedgod quits (~machinedg@d173-183-246-216.abhsia.telus.net) (Ping timeout: 264 seconds) |
| 05:17:06 | → | werneta joins (~werneta@024-205-076-158.res.spectrum.com) |
| 05:30:03 | → | __monty__ joins (~toonn@user/toonn) |
| 05:39:57 | → | ania123 joins (~ania123@94-43-231-47.dsl.utg.ge) |
| 05:42:30 | × | hgolden quits (~hgolden@2603-8000-9d00-3ed1-2678-8497-aa5c-7fa9.res6.spectrum.com) (Remote host closed the connection) |
| 05:53:09 | → | tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) |
| 05:56:35 | × | tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Client Quit) |
| 06:01:30 | → | igemnace joins (~ian@user/igemnace) |
| 06:01:55 | × | bilegeek quits (~bilegeek@2600:1008:b015:7e93:e903:6f7f:5892:51df) (Quit: Leaving) |
| 06:04:54 | → | jargon joins (~jargon@174.sub-174-205-227.myvzw.com) |
| 06:12:06 | × | euphores quits (~SASL_euph@user/euphores) (Quit: Leaving.) |
| 06:18:28 | → | takuan joins (~takuan@178-116-218-225.access.telenet.be) |
| 06:19:01 | × | bontaq quits (~user@ool-45779c03.dyn.optonline.net) (Ping timeout: 264 seconds) |
| 06:22:37 | → | euphores joins (~SASL_euph@user/euphores) |
| 06:23:42 | → | jau joins (~user@2a04:4540:7215:f000:d03e:3f46:b2b2:f465) |
| 06:41:57 | → | hgolden joins (~hgolden@2603-8000-9d00-3ed1-2678-8497-aa5c-7fa9.res6.spectrum.com) |
| 06:43:35 | × | ski quits (~ski@ext-1-033.eduroam.chalmers.se) (Remote host closed the connection) |
| 06:47:28 | → | peterbecich joins (~Thunderbi@047-229-123-186.res.spectrum.com) |
| 06:48:35 | → | ski joins (~ski@ext-1-033.eduroam.chalmers.se) |
| 06:54:12 | × | tri quits (~tri@ool-18bc2e74.dyn.optonline.net) (Remote host closed the connection) |
| 06:55:42 | × | azimut quits (~azimut@gateway/tor-sasl/azimut) (Ping timeout: 260 seconds) |
| 06:56:38 | → | waleee joins (~waleee@h-176-10-144-38.NA.cust.bahnhof.se) |
| 07:00:07 | × | tt1231 quits (~tt123@2603-6010-8700-4a81-219f-50d3-618a-a6ee.res6.spectrum.com) (Quit: The Lounge - https://thelounge.chat) |
| 07:01:15 | → | sam113102 joins (~sam@modemcable043.190-201-24.mc.videotron.ca) |
| 07:02:13 | → | tt1231 joins (~tt123@2603-6010-8700-4a81-219f-50d3-618a-a6ee.res6.spectrum.com) |
| 07:03:15 | → | Inst joins (~Inst@120.244.192.27) |
| 07:03:22 | <Inst> | I just discovered that Java is the most amazing language ever created |
| 07:03:27 | × | sam113101 quits (~sam@modemcable146.137-200-24.mc.videotron.ca) (Ping timeout: 255 seconds) |
| 07:03:29 | sam113102 | is now known as sam113101 |
| 07:03:54 | <Inst> | especially when it comes to PLT |
| 07:06:15 | <probie> | What ground-breaking features of Java have allowed you to come that conclusion? |
| 07:08:16 | <Inst> | absurd verbosity, deliberately user-hostile type system, the absence of all basic amenities necessary for modern programming |
| 07:08:20 | <Inst> | I didn't say it was good, just amazing |
| 07:08:26 | <Inst> | It makes every other language look good by comparison |
| 07:09:11 | <Inst> | It's like a committee got together to design the most ugly and inelegant language possible and, god forbid, actually succeeded |
| 07:09:14 | <Inst> | It's a masterpiece |
| 07:09:59 | <Inst> | https://cdn.discordapp.com/attachments/244230771232079873/1216281049718460426/image.png?ex=65ffd0ff&is=65ed5bff&hm=01a02ac48373d413986da110d67c47f4e5e3ef3d4138497d659f3ff2b2d33db9& |
| 07:10:19 | → | tri joins (~tri@ool-18bc2e74.dyn.optonline.net) |
| 07:10:26 | × | tri quits (~tri@ool-18bc2e74.dyn.optonline.net) (Remote host closed the connection) |
| 07:11:02 | → | tri joins (~tri@ool-18bc2e74.dyn.optonline.net) |
| 07:14:11 | <probie> | If you want an ugly language that was actually designed by committee, look at Ada |
| 07:14:40 | × | versatile_ quits (~versatile@176.254.244.83) (Ping timeout: 246 seconds) |
| 07:14:59 | × | m1dnight quits (~christoph@82.146.125.185) (Ping timeout: 264 seconds) |
| 07:15:47 | × | tri quits (~tri@ool-18bc2e74.dyn.optonline.net) (Ping timeout: 272 seconds) |
| 07:17:37 | <Inst> | Shouldn't you consider Ada to have redeeming factors? |
| 07:19:56 | <probie> | I love Ada. I wish that more languages (including Haskell) would have its numeric types. But it is ugly and verbose |
| 07:20:35 | <Inst> | Maybe I should get more into Java, but Java feels, at this point, to be the language that everyone should learn in and be forced to program in if only to learn how to stop complaining about other programming languages. |
| 07:20:38 | <Inst> | Nothing can be this bad. |
| 07:20:47 | → | misterfish joins (~misterfis@84.53.85.146) |
| 07:21:16 | <mauke> | a mediocre language for mediocre programmers to consistently churn out mediocre code |
| 07:21:25 | <probie> | There are worse languages than Java, it's just that none of them survive very long (apart from PHP) |
| 07:21:42 | <probie> | mauke: But there's a superior mediocre language for that; it's called golang |
| 07:22:50 | <Inst> | I can't hate Java programmers |
| 07:22:53 | <Inst> | they have to program in Java every day |
| 07:23:02 | <Inst> | that takes strength of spirit that requires respect |
| 07:23:29 | <Inst> | i'm looking at Ada code samples, and while it's not pretty, it's still better than Java |
| 07:25:28 | <haskellbridge> | <sm> Java has been productive. A lot of very effective software is written in it |
| 07:26:15 | <haskellbridge> | <sm> I think it has in common with Haskell that it's one of those languages where you can keep building bigger apps and it still works |
| 07:26:52 | <mauke> | https://blog.plover.com/prog/Java.html |
| 07:26:55 | <probie> | A lot of very effective software is written in COBOL |
| 07:26:56 | <haskellbridge> | <sm> scales pretty well, ie |
| 07:27:00 | <Inst> | but for the first time, I finally understand why people complain about Haskell idiomatically containing type signatures |
| 07:28:46 | <Inst> | I mean you can say it's a form of commenting, a favor from a developer to a developer, you can say it's a key element of program design, but it's faintly reminiscent of Java's boilerplate and now their disdain is understandable |
| 07:29:35 | → | airscape joins (~airscape@176.254.244.83) |
| 07:31:35 | → | tri joins (~tri@ool-18bc2e74.dyn.optonline.net) |
| 07:32:50 | × | bliminse quits (~bliminse@user/bliminse) (Quit: leaving) |
| 07:33:07 | → | bilegeek joins (~bilegeek@2600:1008:b087:8918:6578:b80:42d0:8b0e) |
| 07:42:37 | → | bliminse joins (~bliminse@user/bliminse) |
| 07:43:11 | × | tri quits (~tri@ool-18bc2e74.dyn.optonline.net) (Ping timeout: 260 seconds) |
| 07:43:28 | <Inst> | Java is neither a good nor a bad language. It is a mediocre language, and there is no struggle. In Haskell or even in Perl you are always worrying about whether you are doing something in the cleanest and the best way. In Java, you can forget about doing it in the cleanest or the best way, because that is impossible. Whatever you do, however hard you try, the code will come out mediocre, verbose, redundant, and bloated, and the only thing you can do is relax |
| 07:43:29 | <Inst> | and keep turning the crank until the necessary amount of code has come out of the spout. If it takes ten times as much code as it would to program in Haskell, that is all right, because the IDE will generate half of it for you, and you are still being paid to write the other half. |
| 07:43:54 | <Inst> | thanks mauke |
| 07:51:30 | × | werneta quits (~werneta@024-205-076-158.res.spectrum.com) (Quit: leaving) |
| 07:54:00 | → | tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) |
| 07:56:31 | <probie> | Also, you can turn writing Java into a game like "how many new classes can I create" and your coworkers can't tell, because it's Java and maybe that was actually the right solution |
| 07:58:05 | <probie> | Or another fun game, "no ifs allowed, except in a factory" |
| 08:04:46 | → | pwntips joins (~pwntips@user/pwntips) |
| 08:06:40 | × | pwntips quits (~pwntips@user/pwntips) (Remote host closed the connection) |
| 08:07:05 | → | pwntips joins (~pwntips@user/pwntips) |
| 08:11:02 | → | _ht joins (~Thunderbi@28-52-174-82.ftth.glasoperator.nl) |
| 08:11:29 | → | tri joins (~tri@ool-18bc2e74.dyn.optonline.net) |
| 08:16:35 | × | tri quits (~tri@ool-18bc2e74.dyn.optonline.net) (Ping timeout: 272 seconds) |
| 08:19:17 | × | econo_ quits (uid147250@id-147250.tinside.irccloud.com) (Quit: Connection closed for inactivity) |
| 08:30:25 | <haskellbridge> | <Jade> Inst: I think it's possible to write good java code, but the language actively works against you while doing so |
| 08:32:02 | <haskellbridge> | <Jade> probie: A rather simple feature I'm working on at the moment already has ~10 new classes. If I had written this in haskell it would be 1-2 modules with maybe 1/10th the code |
| 08:35:39 | → | acidjnk_new3 joins (~acidjnk@p200300d6e737e7747555095b6f843b59.dip0.t-ipconnect.de) |
| 08:36:20 | → | target_i joins (~target_i@user/target-i/x-6023099) |
| 08:36:41 | → | oo_miguel joins (~Thunderbi@78-11-181-16.static.ip.netia.com.pl) |
| 08:39:08 | → | wootehfoot joins (~wootehfoo@user/wootehfoot) |
| 08:41:02 | × | ania123 quits (~ania123@94-43-231-47.dsl.utg.ge) (Quit: Client closed) |
| 08:41:13 | × | tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…) |
| 08:42:55 | × | peterbecich quits (~Thunderbi@047-229-123-186.res.spectrum.com) (Ping timeout: 260 seconds) |
| 08:44:31 | → | tri joins (~tri@ool-18bc2e74.dyn.optonline.net) |
| 08:44:38 | × | micro quits (~micro@user/micro) (Remote host closed the connection) |
| 08:47:07 | → | micro joins (~micro@user/micro) |
| 08:48:04 | → | tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) |
| 08:48:59 | × | tri quits (~tri@ool-18bc2e74.dyn.optonline.net) (Ping timeout: 260 seconds) |
| 08:51:25 | × | ski quits (~ski@ext-1-033.eduroam.chalmers.se) (Ping timeout: 264 seconds) |
| 08:54:21 | → | gmg joins (~user@user/gehmehgeh) |
| 08:54:55 | × | __monty__ quits (~toonn@user/toonn) (Quit: leaving) |
| 08:57:51 | × | L29Ah quits (~L29Ah@wikipedia/L29Ah) (Ping timeout: 268 seconds) |
| 08:57:52 | → | tri joins (~tri@ool-18bc2e74.dyn.optonline.net) |
| 08:58:33 | × | tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…) |
| 09:04:02 | → | tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) |
| 09:09:29 | × | ft quits (~ft@p508db2e6.dip0.t-ipconnect.de) (Ping timeout: 252 seconds) |
| 09:11:26 | → | ft joins (~ft@p3e9bce6e.dip0.t-ipconnect.de) |
| 09:20:40 | × | bilegeek quits (~bilegeek@2600:1008:b087:8918:6578:b80:42d0:8b0e) (Quit: Leaving) |
| 09:35:42 | × | tzh quits (~tzh@c-73-164-206-160.hsd1.or.comcast.net) (Quit: zzz) |
| 09:36:20 | → | L29Ah joins (~L29Ah@wikipedia/L29Ah) |
| 09:37:38 | × | gmg quits (~user@user/gehmehgeh) (Ping timeout: 260 seconds) |
| 09:38:23 | → | gmg joins (~user@user/gehmehgeh) |
| 09:42:17 | → | gehmehgeh joins (~user@user/gehmehgeh) |
| 09:44:04 | → | Guest28 joins (~Guest28@103.165.84.206) |
| 09:45:06 | × | gmg quits (~user@user/gehmehgeh) (Ping timeout: 260 seconds) |
| 09:47:24 | × | Guest28 quits (~Guest28@103.165.84.206) (Client Quit) |
| 09:56:40 | × | Lycurgus quits (~georg@user/Lycurgus) (Quit: leaving) |
| 09:58:01 | → | qqq joins (~qqq@92.43.167.61) |
| 09:58:17 | × | L29Ah quits (~L29Ah@wikipedia/L29Ah) (Read error: Connection reset by peer) |
| 09:58:57 | → | pretty_dumm_guy joins (trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655) |
| 09:59:13 | × | tri quits (~tri@ool-18bc2e74.dyn.optonline.net) (Ping timeout: 264 seconds) |
| 10:01:11 | × | waleee quits (~waleee@h-176-10-144-38.NA.cust.bahnhof.se) (Ping timeout: 252 seconds) |
| 10:02:20 | → | johnw_ joins (~johnw@69.62.242.138) |
| 10:02:24 | → | fmd joins (~fmd@2a02:8429:4b52:f901:795a:84d0:5b8d:4db9) |
| 10:02:53 | × | anpad quits (~pandeyan@user/anpad) (Ping timeout: 240 seconds) |
| 10:03:46 | → | anpad joins (~pandeyan@user/anpad) |
| 10:04:48 | × | johnw quits (~johnw@69.62.242.138) (Ping timeout: 255 seconds) |
| 10:08:48 | → | raehik joins (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) |
| 10:17:56 | → | Tuplanolla joins (~Tuplanoll@91-159-69-59.elisa-laajakaista.fi) |
| 10:18:39 | × | sefidel quits (~sefidel@user/sefidel) (Remote host closed the connection) |
| 10:19:31 | → | sefidel joins (~sefidel@user/sefidel) |
| 10:20:18 | → | JimL joins (~quassel@89.162.16.26) |
| 10:23:35 | → | pavonia_ joins (~user@user/siracusa) |
| 10:25:30 | × | pavonia quits (~user@user/siracusa) (Ping timeout: 255 seconds) |
| 10:27:32 | → | tri joins (~tri@ool-18bc2e74.dyn.optonline.net) |
| 10:28:14 | × | pavonia_ quits (~user@user/siracusa) (Ping timeout: 256 seconds) |
| 10:30:30 | × | pretty_dumm_guy quits (trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655) (Quit: WeeChat 3.5) |
| 10:31:41 | × | tri quits (~tri@ool-18bc2e74.dyn.optonline.net) (Ping timeout: 240 seconds) |
| 10:32:18 | × | fmd quits (~fmd@2a02:8429:4b52:f901:795a:84d0:5b8d:4db9) (Quit: WeeChat 4.1.1) |
| 10:36:06 | → | pavonia joins (~user@user/siracusa) |
| 10:43:19 | → | michalz joins (~michalz@185.246.207.200) |
| 10:43:21 | gehmehgeh | is now known as gmg |
| 10:46:55 | × | Sgeo quits (~Sgeo@user/sgeo) (Read error: Connection reset by peer) |
| 11:00:57 | → | tri joins (~tri@ool-18bc2e74.dyn.optonline.net) |
| 11:01:26 | × | mrmr155334 quits (~mrmr@user/mrmr) (Quit: Bye, See ya later!) |
| 11:02:46 | × | igemnace quits (~ian@user/igemnace) (Read error: Connection reset by peer) |
| 11:05:48 | × | tri quits (~tri@ool-18bc2e74.dyn.optonline.net) (Ping timeout: 268 seconds) |
| 11:06:36 | → | mrmr155334 joins (~mrmr@user/mrmr) |
| 11:14:42 | × | gmg quits (~user@user/gehmehgeh) (Ping timeout: 260 seconds) |
| 11:15:53 | → | gmg joins (~user@user/gehmehgeh) |
| 11:21:03 | → | igemnace joins (~ian@user/igemnace) |
| 11:35:43 | → | tri joins (~tri@ool-18bc2e74.dyn.optonline.net) |
| 11:40:10 | × | tri quits (~tri@ool-18bc2e74.dyn.optonline.net) (Ping timeout: 264 seconds) |
| 11:53:57 | → | tri joins (~tri@ool-18bc2e74.dyn.optonline.net) |
| 11:54:35 | × | agrosant quits (~agrosant@77.49.41.227.dsl.dyn.forthnet.gr) (Ping timeout: 264 seconds) |
| 11:55:10 | × | michalz quits (~michalz@185.246.207.200) (Quit: ZNC 1.8.2 - https://znc.in) |
| 11:59:28 | × | tri quits (~tri@ool-18bc2e74.dyn.optonline.net) (Ping timeout: 256 seconds) |
| 12:05:30 | → | Domitar joins (~Domitar@193.198.16.218) |
| 12:08:07 | × | Domitar quits (~Domitar@193.198.16.218) (Remote host closed the connection) |
| 12:11:01 | → | __monty__ joins (~toonn@user/toonn) |
| 12:11:45 | → | machinedgod joins (~machinedg@d173-183-246-216.abhsia.telus.net) |
| 12:15:28 | × | raehik quits (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 260 seconds) |
| 12:20:45 | → | tri joins (~tri@ool-18bc2e74.dyn.optonline.net) |
| 12:28:21 | × | misterfish quits (~misterfis@84.53.85.146) (Ping timeout: 255 seconds) |
| 12:32:17 | → | Sciencentistguy9 joins (~sciencent@hacksoc/ordinary-member) |
| 12:34:13 | × | Sciencentistguy quits (~sciencent@hacksoc/ordinary-member) (Ping timeout: 255 seconds) |
| 12:35:06 | → | Sciencentistguy joins (~sciencent@hacksoc/ordinary-member) |
| 12:36:19 | × | tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…) |
| 12:36:55 | → | ski joins (~ski@ext-1-033.eduroam.chalmers.se) |
| 12:37:22 | × | Sciencentistguy9 quits (~sciencent@hacksoc/ordinary-member) (Ping timeout: 255 seconds) |
| 12:39:01 | → | agrosant joins (~agrosant@77.49.35.76.dsl.dyn.forthnet.gr) |
| 12:39:35 | <cheater> | if i'm writing a piece of code, is there a hack to let it know at runtime what file it was written in? |
| 12:39:55 | <cheater> | like "this code was in Foo.hs" |
| 12:41:06 | <mauke> | could be done with template haskell |
| 12:41:22 | → | raehik joins (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) |
| 12:42:35 | × | tri quits (~tri@ool-18bc2e74.dyn.optonline.net) (Ping timeout: 272 seconds) |
| 12:47:20 | → | waleee joins (~waleee@h-176-10-144-38.NA.cust.bahnhof.se) |
| 12:48:45 | → | L29Ah joins (~L29Ah@wikipedia/L29Ah) |
| 12:50:08 | <tomsmeding> | cheater: https://hackage.haskell.org/package/template-haskell-2.18.0.0/docs/Language-Haskell-TH.html#v:location |
| 12:52:06 | <tomsmeding> | % :set -XTemplateHaskell |
| 12:52:06 | <yahb2> | <no output> |
| 12:52:16 | <tomsmeding> | % import Language.Haskell.TH.Syntax |
| 12:52:16 | <yahb2> | <no output> |
| 12:52:21 | <tomsmeding> | % deriving instance Lift Loc |
| 12:52:21 | <yahb2> | <no output> |
| 12:52:29 | <tomsmeding> | % $(lift =<< location) |
| 12:52:29 | <yahb2> | Loc {loc_filename = "<interactive>", loc_package = "interactive", loc_module = "Ghci26", loc_start = (289,2), loc_end = (289,21)} |
| 12:52:51 | <tomsmeding> | or without the orphan Lift instance: |
| 12:53:04 | <tomsmeding> | % $(LitE . StringL . loc_filename <$> location) |
| 12:53:04 | <yahb2> | "<interactive>" |
| 12:53:34 | × | raehik quits (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 255 seconds) |
| 12:55:08 | × | pavonia quits (~user@user/siracusa) (Quit: Bye!) |
| 12:57:00 | × | ski quits (~ski@ext-1-033.eduroam.chalmers.se) (Ping timeout: 260 seconds) |
| 13:00:25 | → | tri joins (~tri@ool-18bc2e74.dyn.optonline.net) |
| 13:05:46 | × | tri quits (~tri@ool-18bc2e74.dyn.optonline.net) (Ping timeout: 256 seconds) |
| 13:07:13 | → | ski joins (~ski@ext-1-033.eduroam.chalmers.se) |
| 13:07:35 | → | Joao[3] joins (~Joao003@190.108.99.67) |
| 13:14:59 | × | waleee quits (~waleee@h-176-10-144-38.NA.cust.bahnhof.se) (Ping timeout: 264 seconds) |
| 13:20:10 | → | tri joins (~tri@ool-18bc2e74.dyn.optonline.net) |
| 13:22:06 | × | YoungFrog quits (~youngfrog@39.129-180-91.adsl-dyn.isp.belgacom.be) (Quit: ZNC 1.7.x-git-3-96481995 - https://znc.in) |
| 13:22:44 | → | raehik joins (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) |
| 13:23:15 | <cheater> | ty :) |
| 13:25:00 | → | a51 joins (a51@gateway/vpn/protonvpn/a51) |
| 13:25:01 | × | tri quits (~tri@ool-18bc2e74.dyn.optonline.net) (Ping timeout: 272 seconds) |
| 13:25:31 | → | YoungFrog joins (~youngfrog@39.129-180-91.adsl-dyn.isp.belgacom.be) |
| 13:38:42 | → | tri joins (~tri@ool-18bc2e74.dyn.optonline.net) |
| 13:47:07 | × | tri quits (~tri@ool-18bc2e74.dyn.optonline.net) (Remote host closed the connection) |
| 13:47:20 | → | tri joins (~tri@ool-18bc2e74.dyn.optonline.net) |
| 13:48:49 | × | tri quits (~tri@ool-18bc2e74.dyn.optonline.net) (Remote host closed the connection) |
| 13:50:59 | → | tri joins (~tri@ool-18bc2e74.dyn.optonline.net) |
| 13:55:42 | × | tri quits (~tri@ool-18bc2e74.dyn.optonline.net) (Ping timeout: 268 seconds) |
| 13:56:34 | → | misterfish joins (~misterfis@84.53.85.146) |
| 13:59:13 | × | raehik quits (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 272 seconds) |
| 14:00:06 | → | tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) |
| 14:10:38 | → | tri joins (~tri@ool-18bc2e74.dyn.optonline.net) |
| 14:15:00 | × | tri quits (~tri@ool-18bc2e74.dyn.optonline.net) (Ping timeout: 255 seconds) |
| 14:16:23 | × | misterfish quits (~misterfis@84.53.85.146) (Ping timeout: 252 seconds) |
| 14:22:20 | → | tri joins (~tri@ool-18bc2e74.dyn.optonline.net) |
| 14:23:38 | → | waleee joins (~waleee@h-176-10-144-38.NA.cust.bahnhof.se) |
| 14:26:51 | × | tri quits (~tri@ool-18bc2e74.dyn.optonline.net) (Ping timeout: 260 seconds) |
| 14:33:24 | → | raehik joins (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) |
| 14:33:39 | → | CiaoSen joins (~Jura@2a05:5800:29c:9e00:e6b9:7aff:fe80:3d03) |
| 14:40:25 | × | tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Read error: Connection reset by peer) |
| 14:45:47 | × | Arsen quits (arsen@gentoo/developer/managarm.dev.Arsen) (Quit: Quit.) |
| 14:46:09 | → | Arsen joins (arsen@gentoo/developer/managarm.dev.Arsen) |
| 14:46:19 | × | Arsen quits (arsen@gentoo/developer/managarm.dev.Arsen) (Client Quit) |
| 14:46:55 | → | Silver_X joins (~Silver_X@182.178.157.2) |
| 14:47:01 | → | Arsen joins (arsen@gentoo/developer/managarm.dev.Arsen) |
| 14:54:53 | → | tri joins (~tri@ool-18bc2e74.dyn.optonline.net) |
| 14:55:10 | × | Silver_X quits (~Silver_X@182.178.157.2) (Quit: Leaving) |
| 14:57:42 | → | azimut joins (~azimut@gateway/tor-sasl/azimut) |
| 14:59:50 | × | tri quits (~tri@ool-18bc2e74.dyn.optonline.net) (Ping timeout: 268 seconds) |
| 15:02:41 | × | noumenon quits (~noumenon@113.51-175-156.customer.lyse.net) (Quit: Leaving) |
| 15:02:55 | × | son0p quits (~ff@152.203.102.157) (Remote host closed the connection) |
| 15:08:43 | → | tri joins (~tri@ool-18bc2e74.dyn.optonline.net) |
| 15:10:38 | × | a51 quits (a51@gateway/vpn/protonvpn/a51) (Quit: WeeChat 4.2.1) |
| 15:12:53 | × | igemnace quits (~ian@user/igemnace) (Quit: WeeChat 4.2.1) |
| 15:12:57 | → | rscastilho2024 joins (~rscastilh@179.221.142.47) |
| 15:14:28 | → | a51 joins (a51@gateway/vpn/protonvpn/a51) |
| 15:15:08 | × | tri quits (~tri@ool-18bc2e74.dyn.optonline.net) (Ping timeout: 260 seconds) |
| 15:28:18 | → | Juani7 joins (~Juani7@static.203.52.itcsa.net) |
| 15:28:39 | ← | Juani7 parts (~Juani7@static.203.52.itcsa.net) () |
| 15:33:53 | <haskellbridge> | <irregularsphere> probie: "how many classes can I create" reminds me of "AbstractFactoryProxyDecoratorSingletonBuilder" |
| 15:34:53 | → | son0p joins (~ff@152.203.102.157) |
| 15:46:47 | × | Square quits (~Square@user/square) (Ping timeout: 264 seconds) |
| 15:47:45 | <haskellbridge> | <eldritchcookie> hello, for the people that use effectfull how important do you think being able to not need IOE is ? |
| 15:48:12 | <haskellbridge> | <eldritchcookie> basically i have a katip-effectful package which i forgot to upload to hackage |
| 15:48:46 | <haskellbridge> | <eldritchcookie> and i am considering rewriting it such that you do not need IOE to call logging functions |
| 15:54:14 | × | azimut quits (~azimut@gateway/tor-sasl/azimut) (Ping timeout: 260 seconds) |
| 15:54:42 | × | stiell_ quits (~stiell@gateway/tor-sasl/stiell) (Ping timeout: 260 seconds) |
| 15:57:48 | × | tabemann quits (~tabemann@2600:1700:7990:24e0:bade:358a:4ab3:923a) (Remote host closed the connection) |
| 15:58:03 | → | tabemann joins (~tabemann@2600:1700:7990:24e0:3862:7657:cc38:1f12) |
| 16:02:05 | → | stiell_ joins (~stiell@gateway/tor-sasl/stiell) |
| 16:02:23 | <glguy> | What's IOE? |
| 16:07:47 | × | machinedgod quits (~machinedg@d173-183-246-216.abhsia.telus.net) (Ping timeout: 272 seconds) |
| 16:19:46 | <glguy> | cheater: depending on what you're doing they'd also the HasCallstack type class |
| 16:20:12 | <cheater> | cool |
| 16:20:15 | <cheater> | ty |
| 16:20:40 | × | CiaoSen quits (~Jura@2a05:5800:29c:9e00:e6b9:7aff:fe80:3d03) (Ping timeout: 246 seconds) |
| 16:21:26 | × | rscastilho2024 quits (~rscastilh@179.221.142.47) (Remote host closed the connection) |
| 16:24:12 | → | CiaoSen joins (~Jura@5.83.182.171) |
| 16:28:10 | → | rscastilho2024 joins (~rscastilh@179.221.142.47) |
| 16:33:44 | × | CiaoSen quits (~Jura@5.83.182.171) (Ping timeout: 256 seconds) |
| 16:34:11 | → | azimut joins (~azimut@gateway/tor-sasl/azimut) |
| 16:35:27 | → | CiaoSen joins (~Jura@2a05:5800:2c2:1700:e6b9:7aff:fe80:3d03) |
| 16:36:31 | → | Unicorn_Princess joins (~Unicorn_P@user/Unicorn-Princess/x-3540542) |
| 16:42:49 | × | Natch quits (~natch@c-9e07225c.038-60-73746f7.bbcust.telenor.se) (Ping timeout: 268 seconds) |
| 16:44:11 | × | YoungFrog quits (~youngfrog@39.129-180-91.adsl-dyn.isp.belgacom.be) (Quit: ZNC 1.7.x-git-3-96481995 - https://znc.in) |
| 16:44:11 | → | byte joins (~byte@user/byte) |
| 16:57:24 | × | azimut quits (~azimut@gateway/tor-sasl/azimut) (Remote host closed the connection) |
| 16:57:42 | → | azimut joins (~azimut@gateway/tor-sasl/azimut) |
| 16:58:06 | × | emmanuelux quits (~emmanuelu@user/emmanuelux) (Read error: Connection reset by peer) |
| 17:00:11 | → | emmanuelux joins (~emmanuelu@user/emmanuelux) |
| 17:11:50 | × | rscastilho2024 quits (~rscastilh@179.221.142.47) (Ping timeout: 252 seconds) |
| 17:16:41 | → | rscastilho2024 joins (~rscastilh@179.221.142.47) |
| 17:20:56 | → | tzh joins (~tzh@c-73-164-206-160.hsd1.or.comcast.net) |
| 17:25:47 | × | rvalue quits (~rvalue@user/rvalue) (Ping timeout: 264 seconds) |
| 17:27:39 | → | Lycurgus joins (~georg@user/Lycurgus) |
| 17:31:01 | → | zetef joins (~quassel@5.2.182.98) |
| 17:34:35 | → | rvalue joins (~rvalue@user/rvalue) |
| 17:39:15 | → | Silver_X joins (~Silver_X@182.178.157.2) |
| 17:39:23 | × | Silver_X quits (~Silver_X@182.178.157.2) (Client Quit) |
| 17:40:55 | <haskellbridge> | <eldritchcookie> glguy: IOE is the Effect type used in Effectful to provide a MonadIO instance |
| 17:41:23 | × | zetef quits (~quassel@5.2.182.98) (Remote host closed the connection) |
| 17:41:32 | × | rscastilho2024 quits (~rscastilh@179.221.142.47) (Ping timeout: 252 seconds) |
| 17:42:42 | <glguy> | Oh. If you're going to go through the hassle of using an effect library it seems like it'd be nice to have the effects tracking at the higher level of "I'm logging" than "I'm doing arbitrary IO" |
| 17:44:09 | → | noumenon joins (~noumenon@113.51-175-156.customer.lyse.net) |
| 17:48:07 | <haskellbridge> | <eldritchcookie> i had the same idea |
| 17:48:21 | <c_wraith> | in fact, the documentation says so too |
| 17:48:30 | <c_wraith> | Note: it is not recommended to use this effect in application code as it is too liberal. Ideally, this is only used in handlers of more fine-grained effects. |
| 17:49:08 | <haskellbridge> | <eldritchcookie> good to know i haven't wasted the last hour |
| 17:50:38 | → | rscastilho2024 joins (~rscastilh@179.221.142.47) |
| 17:51:19 | <haskellbridge> | <eldritchcookie> anyways i met a problem, if i have IOE in the list of effects then i can use liftIO, but GHC is not accepting (MyEffect ': es) as containing IOE even though in the constraints i have es contains IOE |
| 17:52:58 | <glguy> | Might make a small reproduction and toss it on the paste bin |
| 17:53:02 | <EvanR> | liberals are ruining our effect libraries now too |
| 17:53:24 | <c_wraith> | Just in general, GHC doesn't know that one constraint implies another. |
| 17:54:44 | × | gentauro quits (~gentauro@user/gentauro) (Read error: Connection reset by peer) |
| 17:54:51 | <geekosaur> | don't most effects libraries offer plugins for things like this? |
| 17:55:38 | <c_wraith> | there is an effectful-plugin package |
| 17:56:38 | <c_wraith> | It isn't documented as handling that case, though its documentation is pretty minimal. |
| 18:00:16 | → | gentauro joins (~gentauro@user/gentauro) |
| 18:00:26 | × | ski quits (~ski@ext-1-033.eduroam.chalmers.se) (Ping timeout: 256 seconds) |
| 18:02:02 | → | ski joins (~ski@ext-1-033.eduroam.chalmers.se) |
| 18:03:06 | → | econo_ joins (uid147250@id-147250.tinside.irccloud.com) |
| 18:04:19 | × | CiaoSen quits (~Jura@2a05:5800:2c2:1700:e6b9:7aff:fe80:3d03) (Ping timeout: 272 seconds) |
| 18:05:46 | → | CiaoSen joins (~Jura@2a05:5800:28f:8800:e6b9:7aff:fe80:3d03) |
| 18:08:52 | <haskellbridge> | <eldritchcookie> hmm this just seems like it would be solvable with a quantified constraint |
| 18:14:02 | × | rscastilho2024 quits (~rscastilh@179.221.142.47) (Ping timeout: 256 seconds) |
| 18:17:25 | → | rscastilho2024 joins (~rscastilh@179.221.142.47) |
| 18:21:27 | × | wootehfoot quits (~wootehfoo@user/wootehfoot) (Read error: Connection reset by peer) |
| 18:25:22 | × | Vajb quits (~Vajb@n70t65z9ztei3blo55b-1.v6.elisa-mobile.fi) (Read error: Connection reset by peer) |
| 18:26:14 | → | Vajb joins (~Vajb@mobile-access-567351-201.dhcp.inet.fi) |
| 18:33:41 | × | rscastilho2024 quits (~rscastilh@179.221.142.47) (Ping timeout: 240 seconds) |
| 18:34:30 | → | machinedgod joins (~machinedg@d173-183-246-216.abhsia.telus.net) |
| 18:39:53 | → | rscastilho2024 joins (~rscastilh@179.221.142.47) |
| 18:48:58 | → | bontaq joins (~user@ool-45779c03.dyn.optonline.net) |
| 18:52:47 | × | euphores quits (~SASL_euph@user/euphores) (Quit: Leaving.) |
| 18:55:21 | × | Vajb quits (~Vajb@mobile-access-567351-201.dhcp.inet.fi) (Ping timeout: 255 seconds) |
| 18:55:44 | → | Vajb joins (~Vajb@2001:999:680:5044:15b1:c43e:d1c0:210f) |
| 18:59:30 | → | srz joins (~srz@181.228.49.93) |
| 19:01:09 | → | euphores joins (~SASL_euph@user/euphores) |
| 19:09:16 | × | rscastilho2024 quits (~rscastilh@179.221.142.47) (Ping timeout: 268 seconds) |
| 19:12:55 | × | raehik quits (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 256 seconds) |
| 19:13:39 | → | rscastilho2024 joins (rscastilho@179.221.142.47) |
| 19:21:10 | → | Sciencentistguy6 joins (~sciencent@hacksoc/ordinary-member) |
| 19:21:37 | → | ania123 joins (~ania123@146.255.226.194) |
| 19:23:16 | × | Sciencentistguy quits (~sciencent@hacksoc/ordinary-member) (Ping timeout: 255 seconds) |
| 19:23:16 | Sciencentistguy6 | is now known as Sciencentistguy |
| 19:25:07 | × | gabriel_sevecek quits (~gabriel@188-167-229-200.dynamic.chello.sk) (Quit: WeeChat 4.2.1) |
| 19:26:33 | → | gabriel_sevecek joins (~gabriel@188-167-229-200.dynamic.chello.sk) |
| 19:28:53 | → | Sgeo joins (~Sgeo@user/sgeo) |
| 19:32:02 | × | srz quits (~srz@181.228.49.93) (Remote host closed the connection) |
| 19:32:15 | × | Eoco quits (~ian@128.101.131.218) (Ping timeout: 255 seconds) |
| 19:33:22 | → | srz joins (~srz@181.228.49.93) |
| 19:38:05 | × | CiaoSen quits (~Jura@2a05:5800:28f:8800:e6b9:7aff:fe80:3d03) (Ping timeout: 240 seconds) |
| 19:39:33 | × | qqq quits (~qqq@92.43.167.61) (Read error: Connection reset by peer) |
| 19:41:14 | → | tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) |
| 19:43:46 | → | raehik joins (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) |
| 19:44:34 | → | qqq joins (~qqq@92.43.167.61) |
| 19:48:10 | → | srz_ joins (~srz@181.228.49.93) |
| 19:49:28 | × | srz quits (~srz@181.228.49.93) (Remote host closed the connection) |
| 19:50:51 | <haskellbridge> | <eldritchcookie> https://play.haskell.org/saved/6ySkyMjH why does it error on Katip and not Effectful? |
| 19:52:42 | <geekosaur> | dunno what packages tomsmeding exposed to the playground |
| 19:53:09 | × | tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…) |
| 19:55:33 | → | tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) |
| 19:56:45 | → | peterbecich joins (~Thunderbi@047-229-123-186.res.spectrum.com) |
| 20:06:38 | → | Eoco joins (~ian@128.101.131.218) |
| 20:06:56 | × | qqq quits (~qqq@92.43.167.61) (Read error: Connection reset by peer) |
| 20:07:46 | <nullie> | https://github.com/haskell/play-haskell/blob/a30f6149ed523b0b26cbd89cae96afc304829e7f/play-haskell-worker/bwrap-files/mkbuildscript.sh#L57 |
| 20:11:50 | → | qqq joins (~qqq@92.43.167.61) |
| 20:16:30 | → | michalz joins (~michalz@185.246.207.205) |
| 20:16:48 | × | Eoco quits (~ian@128.101.131.218) (Ping timeout: 255 seconds) |
| 20:20:07 | × | raehik quits (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 260 seconds) |
| 20:20:20 | × | rscastilho2024 quits (rscastilho@179.221.142.47) (Remote host closed the connection) |
| 20:27:15 | × | dcoutts quits (~duncan@cpc69402-oxfd27-2-0-cust903.4-3.cable.virginm.net) (Remote host closed the connection) |
| 20:27:37 | → | dcoutts joins (~duncan@cpc69402-oxfd27-2-0-cust903.4-3.cable.virginm.net) |
| 20:29:43 | × | tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…) |
| 20:48:09 | → | m1dnight joins (~christoph@82.146.125.185) |
| 20:52:15 | × | peterbecich quits (~Thunderbi@047-229-123-186.res.spectrum.com) (Ping timeout: 268 seconds) |
| 20:55:15 | → | tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) |
| 20:57:28 | <endojelly> | So here's another lens question. I have a traversal over a two level Map. In my case that traversal is "ix name.traversed._2.expiring". You can see from that: First level is a map (indexed by name) whose children are maps (traversed), whose children are tuples. The traversal chooses the second part of the tuple (_2) and applies my own prism, "expiring". |
| 20:58:18 | <endojelly> | Now traverseOf will return a list where all of this matches, i.e. the leaf element is "expiring". |
| 20:59:26 | <endojelly> | But what I would like to have is a list of all elements on the second level, whether expiring or not, and when they are not expiring, it should be nothing. |
| 21:00:02 | <endojelly> | Furthermore, I would like to be able to set an element to Nothing in the traversal to remove it. |
| 21:01:07 | <endojelly> | It feels like I need something like "at", but instead of "at" applying to an index, I'd like "at" applying to... another prism? |
| 21:01:20 | <ncf> | i'm gonna need an example |
| 21:01:27 | <endojelly> | yeah, let me prepare a simpler one |
| 21:02:39 | → | Etabeta1 joins (~Etabeta1@176.207.241.56) |
| 21:03:19 | <ncf> | superficially it sounds like this could have something to do with non' |
| 21:04:26 | <c_wraith> | or maybe this is like the first non-curiosity use case for my package :) |
| 21:08:30 | × | _ht quits (~Thunderbi@28-52-174-82.ftth.glasoperator.nl) (Remote host closed the connection) |
| 21:08:49 | <endojelly> | Okay, so, let's look at this: |
| 21:08:54 | <endojelly> | > let m = M.fromList [('a', 1), ('b', 2), ('c', 3), ('d', 4)] in traverseOf (traversed.filtered even) (return . (*2)) m |
| 21:08:56 | <lambdabot> | error: |
| 21:08:56 | <lambdabot> | • Ambiguous type variable ‘f0’ arising from a use of ‘show_M532113178426... |
| 21:08:56 | <lambdabot> | prevents the constraint ‘(Show |
| 21:09:10 | <endojelly> | > let m = M.fromList [('a', 1::Int), ('b', 2), ('c', 3), ('d', 4)] in traverseOf (traversed.filtered even) (return . (*2)) m |
| 21:09:11 | <lambdabot> | error: |
| 21:09:11 | <lambdabot> | • Ambiguous type variable ‘f0’ arising from a use of ‘show_M193502952598... |
| 21:09:11 | <lambdabot> | prevents the constraint ‘(Show |
| 21:09:21 | <endojelly> | hm, what's the issue? Works locally. |
| 21:10:03 | <endojelly> | > let m = M.fromList [('a', 1), ('b', 2), ('c', 3), ('d', 4)] in traverseOf (traversed.filtered even) (return . (*2) :: Int -> IO Int) m |
| 21:10:05 | <lambdabot> | <IO (Map Char Int)> |
| 21:10:19 | <endojelly> | > let m = M.fromList [('a', 1), ('b', 2), ('c', 3), ('d', 4)] in traverseOf (traversed.filtered even) (return . (*2) :: Int -> Identity Int) m |
| 21:10:20 | × | tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…) |
| 21:10:20 | <lambdabot> | Identity (fromList [('a',1),('b',4),('c',3),('d',8)]) |
| 21:10:25 | <endojelly> | makes sense. Sorry about that. |
| 21:10:44 | <endojelly> | Anyway, what you see, is that I've selected all map elements where the value is even, and applied *2 to them. |
| 21:11:13 | <endojelly> | Notably, the monadic action only got applied to elements which matched "filtered even" |
| 21:13:02 | <endojelly> | (hang on, preparing something else) |
| 21:18:20 | <ncf> | the suspense is unbearable |
| 21:20:39 | <Joao[3]> | > let m = M.fromList [('a',1),('b',2),('c',3),('d',4)] in traverseOf (traversed.filtered even) (print . (*2)) m |
| 21:20:41 | <lambdabot> | error: |
| 21:20:41 | <lambdabot> | • No instance for (Integral ()) arising from a use of ‘even’ |
| 21:20:41 | <lambdabot> | • In the first argument of ‘filtered’, namely ‘even’ |
| 21:21:02 | <Joao[3]> | > let m = M.fromList [('a',1),('b',2),('c',3),('d',4)] in traverseOf (traversed.filtered even) (Identity . (*2)) m |
| 21:21:04 | <lambdabot> | Identity (fromList [('a',1),('b',4),('c',3),('d',8)]) |
| 21:21:05 | <endojelly> | okay, now if we look at this instead: |
| 21:21:19 | <endojelly> | > let m = M.fromList [('a', 1), ('b', 2), ('c', 3), ('d', 4)] in traverseOf (at 'a') (\x -> return (Just 5) :: Identity (Maybe Int)) m |
| 21:21:20 | <lambdabot> | Identity (fromList [('a',5),('b',2),('c',3),('d',4)]) |
| 21:21:21 | <endojelly> | and this: |
| 21:21:30 | → | tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) |
| 21:21:31 | <endojelly> | > let m = M.fromList [('a', 1), ('b', 2), ('c', 3), ('d', 4)] in traverseOf (at 'a') (\x -> return Nothing :: Identity (Maybe Int)) m |
| 21:21:33 | <lambdabot> | Identity (fromList [('b',2),('c',3),('d',4)]) |
| 21:22:06 | <endojelly> | as you can see, when using at, I can return Nothing to delete the element. |
| 21:22:53 | <endojelly> | further more, these two examples don't show that, but my function operates on Maybes, not directly the integer. |
| 21:25:58 | <endojelly> | Actually, the only thing I would like, is to be able to return Nothing in the function applied to the traversal, to delete an element. |
| 21:26:31 | <c_wraith> | So... like... Do you want my lens-witherable package? |
| 21:26:38 | <endojelly> | Maybe? |
| 21:26:44 | <endojelly> | (pun unintended) |
| 21:27:07 | <c_wraith> | It seems like a use case for mapMaybeOf |
| 21:27:25 | <ncf> | so to summarise you want something like a Traversal' (Map k a) (Maybe a) that behaves like at but with multiple targets? |
| 21:27:38 | <endojelly> | oh, that looks promising, c_wraith |
| 21:27:48 | <endojelly> | ncf, yeah, pretty much |
| 21:27:48 | <ncf> | if so, that's not literally possible because this isn't a lawful traversal, but other solutions might exist |
| 21:28:08 | <c_wraith> | note that my package is intentionally not lenses. They're just things that happen to be compatible with them :) |
| 21:28:32 | <endojelly> | I was envisioning something like being able to say "edit . filtered even" instead of "traversed . filtered even", and then the function passed to traverseOf (or something else) would turn from "Int -> m Int" to "Int -> m (Maybe Int)" |
| 21:29:00 | <ncf> | > A Wither is like a Traversal, but you can also remove targets. |
| 21:29:01 | <lambdabot> | <hint>:1:29: error: parse error on input ‘,’ |
| 21:29:11 | <endojelly> | and to be able to do more complex things like "edit . _2 . filtered even" |
| 21:29:14 | <ncf> | right so the solution is basically "stop caring about traversal laws" :) |
| 21:29:44 | <endojelly> | qute possibly so! Looks like Withered is what I'm looking for... |
| 21:32:00 | <c_wraith> | and I've noticed some garbled sentences in my docs. Woo. Time to upload a change that only fixes docs! |
| 21:33:37 | <endojelly> | oh my, this works wonderfully. |
| 21:33:50 | <c_wraith> | The thing I did for fun has turned out to be useful! |
| 21:34:01 | <tomsmeding> | \o/ |
| 21:34:33 | <c_wraith> | endojelly: I'm making a doc fix release. If there's anything you see that could use a touchup besides the docs for guarded, let me know |
| 21:35:34 | <endojelly> | c_wraith, I straight ran into how it would be great if there's a mapMaybeOfM. I'm trying to build that myself with withering now. |
| 21:36:08 | <c_wraith> | That's fair. I can add that. and I suppose I should do the same for the other two, while I'm at it. |
| 21:36:21 | <endojelly> | but overall, it's great! |
| 21:36:33 | <endojelly> | Not sure yet, but does seem to solve my problem |
| 21:37:21 | <c_wraith> | specifically, you want (a -> m (Maybe b)) as one of those types? |
| 21:37:28 | × | tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…) |
| 21:37:37 | <c_wraith> | err, as the modification function type |
| 21:38:17 | <endojelly> | yep |
| 21:38:24 | <endojelly> | To state what I actually was trying to do: |
| 21:39:05 | <endojelly> | I want to perform IO actions on some data deep in my nested data structure. Depending on the result of the IO action, I want to choose to remove the entire element at a higher level in the data structure. |
| 21:39:11 | <c_wraith> | Yep, makes sense. |
| 21:39:13 | <ncf> | any reason witherOf won't do? |
| 21:39:32 | <c_wraith> | oh, right. Yes, that's what it does. |
| 21:39:35 | <endojelly> | (A more general solution will likely also allow modifying elements, and it looks like yours do, but in this specific case I just don't need that.) |
| 21:39:43 | <c_wraith> | Ok, I'll add some docs to point out that connection |
| 21:40:13 | <endojelly> | Ah, I did not see witherOf, because I *did not actually click through to the module* and only read the readme. Don't know why... |
| 21:40:29 | <endojelly> | yep, that is exactly what it does, thanks! |
| 21:40:30 | <c_wraith> | Totally fair. That's a way I can improve the docs. |
| 21:40:50 | <ncf> | you won't believe how it's implemented |
| 21:41:23 | <c_wraith> | I'm really sad I needed my own type in there. |
| 21:41:33 | <c_wraith> | But... MaybeT was too restrictive. |
| 21:42:32 | → | Eoco joins (~ian@128.101.131.218) |
| 21:42:41 | <ncf> | what type? |
| 21:43:23 | <c_wraith> | Withering is my own type alias that's nearly identical to MaybeT, except for the Applicative instance |
| 21:43:39 | <c_wraith> | err. newtype, rather than alias. but sure. |
| 21:44:04 | → | tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) |
| 21:44:06 | <ncf> | where's Withering? |
| 21:44:19 | <c_wraith> | https://hackage.haskell.org/package/lens-witherable-0.1.0.2/docs/Witherable-Lens-Withering.html |
| 21:44:41 | <endojelly> | Look at this, beautiful: |
| 21:44:42 | <endojelly> | > let m = M.fromList [('a', ("foo", 1)), ('b', ("bar", 2)), ('c', ("baz", 3)), ('d', ("xyzzy", 4))] in witherOf (withered._2.filtered even) (\x -> tell [x] >> return (if x == 2 then Nothing else Just 5)) m :: Writer [Int] (M.Map Char (String, Int)) |
| 21:44:44 | <lambdabot> | error: |
| 21:44:44 | <lambdabot> | Variable not in scope: |
| 21:44:44 | <lambdabot> | witherOf |
| 21:44:55 | <endojelly> | well, okay, let me paste the result. |
| 21:45:01 | <endojelly> | WriterT (Identity (fromList [('a',("foo",1)),('c',("baz",3)),('d',("xyzzy",5))],[2,4])) |
| 21:46:04 | <ncf> | i think that's Compose f Maybe |
| 21:46:15 | × | Joao[3] quits (~Joao003@190.108.99.67) (Quit: Bye!) |
| 21:46:22 | <c_wraith> | It is, but that's awful for documentation |
| 21:46:59 | <c_wraith> | eh, maybe I should take inspiration from lens and document everything in terms of aliases anyway |
| 21:47:09 | <ncf> | right so i was looking at the old Data.Witherable module for some reason |
| 21:47:18 | <endojelly> | So... how much do I need to care that this doesn't follow lens laws? |
| 21:47:49 | <endojelly> | Also, which laws exactly does it not follow? I'm still early in my journey of understanding the lens types. |
| 21:47:58 | <c_wraith> | the lens laws are about being able to refactor stuff blindly. Not following the laws means that you have to actually think about what's going on if you decide to refactor it. |
| 21:48:39 | <c_wraith> | I wouldn't be concerned that it's not following the laws. I mean, `filtered` doesn't follow the laws. |
| 21:49:12 | <ncf> | traversals aren't allowed to change the (number of) targets |
| 21:49:20 | <endojelly> | Hmm, but at follows the laws? Or not? |
| 21:49:27 | × | ania123 quits (~ania123@146.255.226.194) (Quit: Client closed) |
| 21:49:41 | <ncf> | so a Wither isn't a Traversal, but that's fine. it just obeys its own laws |
| 21:49:50 | <ncf> | at is a lawful Lens |
| 21:49:53 | <c_wraith> | Yeah, it's not even the right type to be a lens |
| 21:49:59 | <endojelly> | "Note that this introduces a change in types down the lens composition chain, which means that it is not a a valid optic at all." |
| 21:50:04 | <endojelly> | Does 'at' not do that as well? |
| 21:50:18 | <c_wraith> | No, at sticks with lens types |
| 21:51:03 | <ncf> | i'm not sure Wither isn't a valid optic. it's not a LensLike, but that's another issue |
| 21:51:03 | <c_wraith> | the lens-witherable stuff uses types that just aren't allowed in lens. Then it provides compatibility shims like unWithered to be type compatible if needed. |
| 21:51:21 | <ncf> | i guess it depends what one means by "valid optic" |
| 21:51:42 | <c_wraith> | Well, ok. I was strictly assuming things fitting the Lenslike alias |
| 21:51:44 | → | hgolden_ joins (~hgolden@172-251-233-141.res.spectrum.com) |
| 21:51:57 | <ncf> | can you compose Withers? i guess that would be my main criterion |
| 21:52:12 | <endojelly> | Well, I guess I will understand that when I digged into the lens types more. |
| 21:52:48 | <ncf> | i guess you can't, because you can't indicate which level you mean to delete by returning Nothing |
| 21:52:58 | <ncf> | you'd need to return Maybe (Maybe a) in the composite |
| 21:53:55 | × | hgolden quits (~hgolden@2603-8000-9d00-3ed1-2678-8497-aa5c-7fa9.res6.spectrum.com) (Ping timeout: 260 seconds) |
| 21:54:11 | <ncf> | i'm guessing too much |
| 21:54:44 | <c_wraith> | You're right. They don't compose well. Which is why I have rewithered in my library |
| 21:55:32 | → | otto_s_ joins (~otto_s@p54993456.dip0.t-ipconnect.de) |
| 21:56:26 | × | tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…) |
| 21:58:23 | <endojelly> | Hmm, so how about a version of decayed that turns it back into a lenslike? Removing the elements, but still passing them through (so that a monad can work on them) |
| 21:58:40 | → | Joao[3] joins (~Joao003@190.108.99.67) |
| 21:59:06 | <c_wraith> | I'm not sure quite how that would work |
| 21:59:41 | × | __monty__ quits (~toonn@user/toonn) (Quit: leaving) |
| 22:00:02 | <endojelly> | Yeah, not sure. Intuitively I'm looking for something like "traverseOf (withered._2.filtered even.decayed) (print) m" |
| 22:00:13 | × | byte quits (~byte@user/byte) (Remote host closed the connection) |
| 22:00:20 | <endojelly> | err, something else than decayed, of course |
| 22:00:55 | <c_wraith> | So... you're wanting to print the things that get removed? |
| 22:01:03 | <c_wraith> | (for example) |
| 22:01:14 | <endojelly> | as the example, yeah. |
| 22:01:57 | <endojelly> | this works with "witherOf" and "(>> return Nothing) . print" already of course. |
| 22:02:40 | × | oo_miguel quits (~Thunderbi@78-11-181-16.static.ip.netia.com.pl) (Quit: oo_miguel) |
| 22:03:04 | × | a51 quits (a51@gateway/vpn/protonvpn/a51) (Quit: WeeChat 4.2.1) |
| 22:03:11 | <endojelly> | I mean you could of course also just: let witherAllOf w f = witherOf w ((>> return Nothing) . f) |
| 22:03:25 | <endojelly> | but maybe there's advantage in turning it back into a lenslike? |
| 22:03:28 | <c_wraith> | I'm not sure that's generally useful enough as a combinator across all f |
| 22:03:36 | <endojelly> | yeah, good point |
| 22:04:03 | <c_wraith> | Especially since the functionality is currently available, even if a bit verbose at the moment. |
| 22:04:18 | <endojelly> | yep |
| 22:05:59 | × | takuan quits (~takuan@178-116-218-225.access.telenet.be) (Remote host closed the connection) |
| 22:06:13 | <endojelly> | anyway, great package. |
| 22:08:15 | <Joao[3]> | Hello. I installed the lens package, but ghci refuses to execute `import Control.Lens` |
| 22:09:25 | <c_wraith> | endojelly: thanks. I'll let you know when I get the update out, even though you probably won't actually benefit from having it in any way. :) |
| 22:10:08 | <endojelly> | heheh, probably true, but I won't mind having a look anyway! |
| 22:10:41 | <endojelly> | right now I'm perfectly happy with what it does already (and you said it's likely going to be documentation changes anyway) |
| 22:10:53 | × | srz_ quits (~srz@181.228.49.93) (Ping timeout: 268 seconds) |
| 22:11:07 | <c_wraith> | I've decided to add an effectful filterOf, but the rest is doc changes |
| 22:12:25 | → | byte joins (~byte@149.28.222.189) |
| 22:15:37 | → | tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) |
| 22:16:35 | <c_wraith> | Joao[3]: there could be a lot of things going on. How did you install it? How are you running ghci? |
| 22:16:53 | <Joao[3]> | I installed with `cabal install lens` |
| 22:20:02 | × | michalz quits (~michalz@185.246.207.205) (Quit: ZNC 1.8.2 - https://znc.in) |
| 22:20:16 | → | peterbecich joins (~Thunderbi@047-229-123-186.res.spectrum.com) |
| 22:20:23 | × | target_i quits (~target_i@user/target-i/x-6023099) (Quit: leaving) |
| 22:20:36 | <c_wraith> | Joao[3]: So... it was found that keeping a mutable package store that's always available to ghc leads to version conflicts that can be really difficult to deal with. As such, ghc and ghci don't automatically see packages that have been installed. |
| 22:21:14 | <Joao[3]> | So... how do I make them see those packages? |
| 22:22:21 | <c_wraith> | there are several major ways. They break down into a couple categories. You can run ghc/ghci via cabal, letting it set the environment, or you can tell cabal to modify a global environment description when it installs a package. |
| 22:23:20 | <c_wraith> | The former is more reliable (it will always pick a set of versions that are compatible without caring what is installed elsewhere), but it adds more overhead to starting stuff up, as it has to check on all of that. |
| 22:24:36 | <c_wraith> | so you could run `cabl repl -b lens` instead of ghci to get an interactive session with lens available. Or you could run `cabal install --lib lens` to tell cabal to modify the global environment when it installs it. The latter is easier for ad-hoc stuff, but gets fragile if you update the global environment in the future. |
| 22:25:28 | × | tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…) |
| 22:26:35 | × | gmg quits (~user@user/gehmehgeh) (Quit: Leaving) |
| 22:29:48 | → | tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) |
| 22:32:34 | → | a51 joins (a51@gateway/vpn/protonvpn/a51) |
| 22:38:38 | × | gorignak quits (~gorignak@user/gorignak) (Quit: quit) |
| 22:43:53 | → | Natch joins (~natch@c-9e07225c.038-60-73746f7.bbcust.telenor.se) |
| 22:46:32 | <tomsmeding> | I would recommend against 'cabal install --lib' |
| 22:46:55 | <c_wraith> | I also do, in general. It will always end up breaking. |
| 22:46:59 | <tomsmeding> | it does something that a new user probably doesn't expect |
| 22:47:29 | <tomsmeding> | it's fine if you know exactly what it does and have decided that that's the behaviour you want p |
| 22:47:31 | <tomsmeding> | * :p |
| 22:48:46 | <EvanR> | imagine if there was a command that didn't act like that |
| 22:49:11 | <monochrom> | NO. Imagine if GHC came with lens. >:D |
| 22:49:32 | <tomsmeding> | Joao[3]: my recommendation: outside a project, ad hoc: `cabal repl -b lens`. If you're working on a piece of code: make it a project (i.e. make a directory with a yourthing.cabal file) and add `lens` to your build-depends |
| 22:49:33 | <monochrom> | Go kitchen-sink-included or go home. |
| 22:49:48 | <tomsmeding> | @hackage acme-everything |
| 22:49:48 | <lambdabot> | https://hackage.haskell.org/package/acme-everything |
| 22:50:04 | <monochrom> | Oh haha cabal repl -b acme-everything |
| 22:50:13 | <Joao[3]> | I'd like to include lens in all of my GHCi sessions |
| 22:50:22 | <monochrom> | NO. cabal install --lib acme-everything >:D |
| 22:50:24 | <tomsmeding> | then always do `cabal repl -b lens` |
| 22:50:34 | <tomsmeding> | you can `cabal repl -b lens -b something-else -b another-thing` |
| 22:50:50 | <monochrom> | OK my serious advice is cabal repl -b lens too. |
| 22:51:19 | <tomsmeding> | the problem of installing something globally & implicitly is that 1. it's implicit, 2. it's hard to uninstall later, 3. it doesn't automatically upgrade, 4. it's for a single ghc version only |
| 22:51:22 | <monochrom> | When you are an advanced GHC user, you can start considering "install --lib". |
| 22:51:30 | <tomsmeding> | yes |
| 22:51:54 | <c_wraith> | endojelly: I've published 0.1.1.0 though docs take a while to build on hackage. It has one new function, and a couple doc changes. |
| 22:52:09 | <monochrom> | It requires manual trouble-shooting if something goes wrong. |
| 22:52:12 | <tomsmeding> | 5. it messes up other haskell tooling, 6. it has weird interactions if you install multiple things globally, somethimes |
| 22:52:24 | <tomsmeding> | (case for 5: stack breaks) |
| 22:52:55 | <c_wraith> | stack breaks? that strikes me as unexpected. I thought stack worked really hard to live in its own isolated world. |
| 22:53:12 | <monochrom> | But if you pay me cdn$10^100 per hour and give me unlimited escalated remote desktop access, I can do the manual trouble-shooting for you. |
| 22:53:16 | → | CiaoSen joins (~Jura@2a05:5800:28f:8800:e6b9:7aff:fe80:3d03) |
| 22:54:12 | <tomsmeding> | c_wraith: https://ircbrowse.tomsmeding.com/day/lchaskell/2024/02/08?id=1209716#trid1209716 |
| 22:54:18 | <tomsmeding> | the paste is gone, it seems, unfortunately |
| 22:55:10 | × | tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…) |
| 22:56:03 | <c_wraith> | when does hackage build docs these days? is it still every 6 hours? |
| 22:57:46 | × | otto_s_ quits (~otto_s@p54993456.dip0.t-ipconnect.de) (Quit: leaving) |
| 22:58:02 | <sclv> | its constantly, with a small delay |
| 22:58:21 | <sclv> | but it builds it one at a time and can get stuck |
| 22:58:36 | <sclv> | and then resets "from the top" like every half hour or so |
| 22:58:56 | <c_wraith> | ah, thanks |
| 22:59:14 | <sclv> | so if it gets stuck at a package at time t, then after the reset it will kill that stuckness and hit everything later than t before working chron back to get stuck at t again |
| 23:00:39 | <c_wraith> | Well, it's built now. Maybe it was just behind a couple things in the queue. Or Maybe the system is just really resource-constrained. |
| 23:00:50 | × | qhong_ quits (~qhong@DN160vrd000d6kpg009l6c0000fj.stanford.edu) (Ping timeout: 268 seconds) |
| 23:00:55 | <c_wraith> | but thanks for the info, sclv |
| 23:02:47 | → | tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) |
| 23:04:48 | × | son0p quits (~ff@152.203.102.157) (Read error: Connection reset by peer) |
| 23:07:01 | × | CiaoSen quits (~Jura@2a05:5800:28f:8800:e6b9:7aff:fe80:3d03) (Ping timeout: 264 seconds) |
| 23:08:29 | → | CiaoSen joins (~Jura@5.83.180.12) |
| 23:09:10 | × | Joao[3] quits (~Joao003@190.108.99.67) (Quit: Bye!) |
| 23:19:35 | × | tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…) |
| 23:21:24 | × | xff0x quits (~xff0x@ai082039.d.east.v6connect.net) (Ping timeout: 260 seconds) |
| 23:22:24 | → | xff0x joins (~xff0x@2405:6580:b080:900:3c28:2a60:76e7:9e59) |
| 23:22:50 | <endojelly> | c_wraith, sweet. What's the new function? |
| 23:30:02 | → | Guest498 joins (~Guest4@p54993456.dip0.t-ipconnect.de) |
| 23:30:55 | → | son0p joins (~ff@152.203.102.157) |
| 23:31:17 | <c_wraith> | endojelly: filterOfA. It's an effectful extension of filterOf |
| 23:48:24 | → | game9999999 joins (~game99999@83.22.143.46.ipv4.supernova.orange.pl) |
| 23:53:49 | × | destituion quits (~destituio@2a02:2121:650:17b6:7013:905e:d9bb:b716) (Ping timeout: 264 seconds) |
| 23:53:55 | → | werneta joins (~werneta@024-205-076-158.res.spectrum.com) |
| 23:54:40 | × | jau quits (~user@2a04:4540:7215:f000:d03e:3f46:b2b2:f465) (Quit: Leaving) |
| 23:55:11 | × | CiaoSen quits (~Jura@5.83.180.12) (Ping timeout: 272 seconds) |
All times are in UTC on 2024-03-10.