Logs on 2024-01-27 (liberachat/#haskell)
| 00:10:51 | <hackyhacker> | juri_: Can you share a bit more about what you're testing? Did you figure it out in the meantime? |
| 00:11:19 | × | gmg quits (~user@user/gehmehgeh) (Quit: Leaving) |
| 00:14:49 | × | crook1389 quits (uid581388@id-581388.ilkley.irccloud.com) (Quit: Connection closed for inactivity) |
| 00:15:20 | × | stiell quits (~stiell@gateway/tor-sasl/stiell) (Ping timeout: 255 seconds) |
| 00:15:43 | × | a51 quits (a51@gateway/vpn/protonvpn/a51) (Ping timeout: 268 seconds) |
| 00:15:53 | → | stiell joins (~stiell@gateway/tor-sasl/stiell) |
| 00:23:03 | × | hackyhacker quits (~user@212.71.9.113) (Quit: rcirc on GNU Emacs 29.1) |
| 00:29:55 | → | peterbecich joins (~Thunderbi@047-229-123-186.res.spectrum.com) |
| 00:29:56 | → | hackyhacker joins (~hackyhack@212.71.9.113) |
| 00:30:44 | × | johnw quits (~johnw@69.62.242.138) (Quit: ZNC - http://znc.in) |
| 00:31:17 | × | Tuplanolla quits (~Tuplanoll@91-159-68-95.elisa-laajakaista.fi) (Quit: Leaving.) |
| 00:45:19 | × | foul_owl quits (~kerry@174-21-148-34.tukw.qwest.net) (Ping timeout: 268 seconds) |
| 00:58:20 | → | foul_owl joins (~kerry@185.219.141.160) |
| 01:12:28 | × | tremon quits (~tremon@83.80.159.219) (Quit: getting boxed in) |
| 01:26:01 | × | hackyhacker quits (~hackyhack@212.71.9.113) (Ping timeout: 276 seconds) |
| 01:33:17 | → | ddellacosta joins (~ddellacos@ool-44c73d16.dyn.optonline.net) |
| 01:34:13 | → | tabemann joins (~tabemann@2600:1700:7990:24e0:d92c:5469:8cb0:8d14) |
| 01:35:16 | × | tabemann_ quits (~tabemann@2600:1700:7990:24e0:aad7:ae4:6df1:f3e8) (Ping timeout: 268 seconds) |
| 01:36:30 | × | Lord_of_Life quits (~Lord@user/lord-of-life/x-2819915) (Ping timeout: 268 seconds) |
| 01:36:51 | → | Lord_of_Life joins (~Lord@user/lord-of-life/x-2819915) |
| 01:44:29 | × | thegeekinside quits (~thegeekin@189.180.65.186) (Ping timeout: 240 seconds) |
| 01:47:42 | × | tabemann quits (~tabemann@2600:1700:7990:24e0:d92c:5469:8cb0:8d14) (Quit: Leaving) |
| 01:48:50 | × | mima quits (~mmh@aftr-62-216-211-173.dynamic.mnet-online.de) (Ping timeout: 268 seconds) |
| 01:53:07 | × | igemnace quits (~ian@user/igemnace) (Remote host closed the connection) |
| 02:08:10 | → | tri joins (~tri@ool-18bc2e74.dyn.optonline.net) |
| 02:09:34 | × | shapr quits (~user@c-24-218-186-89.hsd1.ma.comcast.net) (Ping timeout: 276 seconds) |
| 02:12:38 | → | rosco joins (~rosco@175.136.156.77) |
| 02:14:13 | × | peterbecich quits (~Thunderbi@047-229-123-186.res.spectrum.com) (Ping timeout: 264 seconds) |
| 02:18:02 | → | fansly joins (~fansly@2404:c0:2020::cf0:141d) |
| 02:18:43 | → | tabemann joins (~tabemann@2600:1700:7990:24e0:f3c9:7285:9b5:ded8) |
| 02:24:29 | → | otto_s joins (~daniel@p54993447.dip0.t-ipconnect.de) |
| 02:24:39 | ← | otto_s parts (~daniel@p54993447.dip0.t-ipconnect.de) () |
| 02:24:43 | → | otto_s joins (~daniel@p54993447.dip0.t-ipconnect.de) |
| 02:24:49 | ← | otto_s parts (~daniel@p54993447.dip0.t-ipconnect.de) () |
| 02:25:22 | → | otto_s joins (~daniel@p54993447.dip0.t-ipconnect.de) |
| 02:31:44 | × | otto_s quits (~daniel@p54993447.dip0.t-ipconnect.de) (Ping timeout: 252 seconds) |
| 02:31:55 | × | gorignak quits (~gorignak@user/gorignak) (Quit: quit) |
| 02:32:12 | → | otto_s joins (~otto_s@p5499379a.dip0.t-ipconnect.de) |
| 02:46:23 | × | tri quits (~tri@ool-18bc2e74.dyn.optonline.net) (Remote host closed the connection) |
| 02:47:13 | × | eggplantade quits (~Eggplanta@2600:1700:38c5:d800:5014:5b74:113d:d036) (Remote host closed the connection) |
| 02:47:24 | → | bilegeek joins (~bilegeek@2600:1008:b0a2:2201:7d6a:5c17:5067:9b92) |
| 02:47:31 | → | eggplantade joins (~Eggplanta@2600:1700:38c5:d800:5014:5b74:113d:d036) |
| 02:51:24 | × | szkl quits (uid110435@uxbridge.irccloud.com) (Quit: Connection closed for inactivity) |
| 02:53:32 | → | peterbecich joins (~Thunderbi@047-229-123-186.res.spectrum.com) |
| 03:03:16 | × | fansly quits (~fansly@2404:c0:2020::cf0:141d) (Remote host closed the connection) |
| 03:18:34 | → | gorignak joins (~gorignak@user/gorignak) |
| 03:31:13 | → | sm joins (~user@plaintextaccounting/sm) |
| 03:35:39 | × | pavonia quits (~user@user/siracusa) (Quit: Bye!) |
| 03:37:42 | × | rosco quits (~rosco@175.136.156.77) (Quit: Lost terminal) |
| 03:48:53 | × | td_ quits (~td@i5387091B.versanet.de) (Ping timeout: 240 seconds) |
| 03:49:37 | × | TonyStone quits (~TonyStone@074-076-057-186.res.spectrum.com) (Quit: Leaving) |
| 03:51:04 | → | td_ joins (~td@i5387092D.versanet.de) |
| 04:00:55 | × | peterbecich quits (~Thunderbi@047-229-123-186.res.spectrum.com) (Ping timeout: 256 seconds) |
| 04:05:35 | × | czy` quits (~user@114.226.59.181) (Remote host closed the connection) |
| 04:05:35 | × | czy quits (~user@114.226.59.181) (Remote host closed the connection) |
| 04:12:14 | → | Lycurgus joins (~georg@user/Lycurgus) |
| 04:14:09 | × | otto_s quits (~otto_s@p5499379a.dip0.t-ipconnect.de) (Ping timeout: 260 seconds) |
| 04:18:00 | × | nicos quits (~nsm@2800:2131:5400:883:28f6:1624:5755:79b0) (Read error: Connection reset by peer) |
| 04:18:13 | → | nicos joins (~nsm@2800:2131:5400:883:28f6:1624:5755:79b0) |
| 04:50:26 | → | tri joins (~tri@ool-18bc2e74.dyn.optonline.net) |
| 04:56:13 | → | aforemny_ joins (~aforemny@i59F516CF.versanet.de) |
| 04:56:13 | × | aforemny quits (~aforemny@2001:9e8:6cda:4600:7747:ed4:88dc:55a7) (Ping timeout: 264 seconds) |
| 05:07:06 | × | whatsupdoc quits (uid509081@id-509081.hampstead.irccloud.com) (Quit: Connection closed for inactivity) |
| 05:18:36 | × | Lycurgus quits (~georg@user/Lycurgus) (Quit: leaving) |
| 05:28:32 | → | trev joins (~trev@user/trev) |
| 05:40:28 | → | thegeekinside joins (~thegeekin@189.180.65.186) |
| 05:45:38 | × | thegeekinside quits (~thegeekin@189.180.65.186) (Ping timeout: 268 seconds) |
| 06:06:00 | → | rosco joins (~rosco@175.136.156.77) |
| 06:06:29 | × | tri quits (~tri@ool-18bc2e74.dyn.optonline.net) (Remote host closed the connection) |
| 06:07:43 | → | tri joins (~tri@ool-18bc2e74.dyn.optonline.net) |
| 06:12:40 | × | tri quits (~tri@ool-18bc2e74.dyn.optonline.net) (Ping timeout: 276 seconds) |
| 06:15:24 | → | takuan joins (~takuan@178-116-218-225.access.telenet.be) |
| 06:20:01 | × | myxos quits (~myxos@065-028-251-121.inf.spectrum.com) (Remote host closed the connection) |
| 06:21:51 | × | echoreply quits (~echoreply@45.32.163.16) (Quit: WeeChat 2.8) |
| 06:23:12 | → | echoreply joins (~echoreply@2001:19f0:9002:1f3b:5400:ff:fe6f:8b8d) |
| 06:25:36 | → | harveypwca joins (~harveypwc@2601:246:c201:d680:59a0:7761:1557:ead5) |
| 06:33:06 | × | Szilva quits (~Szilva@87-97-12-229.pool.digikabel.hu) (Remote host closed the connection) |
| 06:33:17 | → | myxos joins (~myxos@065-028-251-121.inf.spectrum.com) |
| 06:33:29 | → | tri joins (~tri@ool-18bc2e74.dyn.optonline.net) |
| 06:37:40 | × | tri quits (~tri@ool-18bc2e74.dyn.optonline.net) (Ping timeout: 246 seconds) |
| 06:58:21 | → | yeahitsme joins (~bob@user/yeahitsme) |
| 07:06:50 | → | tri joins (~tri@ool-18bc2e74.dyn.optonline.net) |
| 07:10:53 | × | tri quits (~tri@ool-18bc2e74.dyn.optonline.net) (Ping timeout: 240 seconds) |
| 07:15:25 | → | causal joins (~eric@50.35.85.7) |
| 07:28:31 | → | Unicorn_Princess joins (~Unicorn_P@user/Unicorn-Princess/x-3540542) |
| 07:34:28 | → | peterbecich joins (~Thunderbi@047-229-123-186.res.spectrum.com) |
| 07:35:04 | → | Vajb joins (~Vajb@n7kymlrhl8zspe1o45k-1.v6.elisa-mobile.fi) |
| 07:37:40 | → | tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) |
| 07:39:20 | → | tri joins (~tri@ool-18bc2e74.dyn.optonline.net) |
| 07:40:02 | × | rosco quits (~rosco@175.136.156.77) (Read error: Connection reset by peer) |
| 07:44:41 | × | tri quits (~tri@ool-18bc2e74.dyn.optonline.net) (Ping timeout: 252 seconds) |
| 07:57:46 | × | harveypwca quits (~harveypwc@2601:246:c201:d680:59a0:7761:1557:ead5) (Quit: Leaving) |
| 08:02:29 | → | rosco joins (~rosco@175.136.156.77) |
| 08:10:55 | × | econo_ quits (uid147250@id-147250.tinside.irccloud.com) (Quit: Connection closed for inactivity) |
| 08:26:13 | → | tri joins (~tri@ool-18bc2e74.dyn.optonline.net) |
| 08:28:46 | → | sord937 joins (~sord937@gateway/tor-sasl/sord937) |
| 08:28:48 | × | sord937 quits (~sord937@gateway/tor-sasl/sord937) (Client Quit) |
| 08:29:07 | → | sord937 joins (~sord937@gateway/tor-sasl/sord937) |
| 08:30:39 | × | tri quits (~tri@ool-18bc2e74.dyn.optonline.net) (Ping timeout: 260 seconds) |
| 08:37:31 | × | sord937 quits (~sord937@gateway/tor-sasl/sord937) (Remote host closed the connection) |
| 08:38:23 | → | sord937 joins (~sord937@gateway/tor-sasl/sord937) |
| 08:41:23 | × | shriekingnoise quits (~shrieking@186.137.175.87) (Ping timeout: 268 seconds) |
| 08:41:23 | × | euleritian quits (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) (Read error: Connection reset by peer) |
| 08:41:39 | → | euleritian joins (~euleritia@77.22.252.56) |
| 08:47:26 | × | sord937 quits (~sord937@gateway/tor-sasl/sord937) (Quit: sord937) |
| 08:47:42 | × | Unicorn_Princess quits (~Unicorn_P@user/Unicorn-Princess/x-3540542) (Remote host closed the connection) |
| 08:49:37 | → | tri joins (~tri@ool-18bc2e74.dyn.optonline.net) |
| 08:50:57 | → | danza joins (~danza@151.47.71.134) |
| 08:54:35 | × | tri quits (~tri@ool-18bc2e74.dyn.optonline.net) (Ping timeout: 264 seconds) |
| 08:59:23 | × | Square2 quits (~Square@user/square) (Ping timeout: 264 seconds) |
| 09:05:12 | × | Tisoxin quits (~Ikosit@user/ikosit) (Quit: The Lounge - https://thelounge.chat) |
| 09:05:33 | → | Tisoxin joins (~Ikosit@user/ikosit) |
| 09:07:28 | × | alexherbo2 quits (~alexherbo@2a02-8440-3140-b89b-a08f-42e2-c7fb-39b2.rev.sfr.net) (Remote host closed the connection) |
| 09:07:49 | → | alexherbo2 joins (~alexherbo@2a02-8440-3140-b89b-a08f-42e2-c7fb-39b2.rev.sfr.net) |
| 09:10:17 | → | _ht joins (~Thunderbi@28-52-174-82.ftth.glasoperator.nl) |
| 09:11:17 | × | azimut quits (~azimut@gateway/tor-sasl/azimut) (Ping timeout: 255 seconds) |
| 09:14:38 | → | fansly joins (~fansly@182.0.171.248) |
| 09:16:04 | × | megaTherion quits (~therion@unix.io) (Quit: ZNC 1.8.2 - https://znc.in) |
| 09:16:34 | × | eggplantade quits (~Eggplanta@2600:1700:38c5:d800:5014:5b74:113d:d036) (Remote host closed the connection) |
| 09:17:11 | → | megaTherion joins (~therion@unix.io) |
| 09:20:08 | → | tri joins (~tri@ool-18bc2e74.dyn.optonline.net) |
| 09:20:35 | × | tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…) |
| 09:21:28 | × | euleritian quits (~euleritia@77.22.252.56) (Ping timeout: 246 seconds) |
| 09:22:33 | → | euleritian joins (~euleritia@dynamic-176-007-002-044.176.7.pool.telefonica.de) |
| 09:22:40 | → | bobby joins (~bob@80.158-248-1.customer.lyse.net) |
| 09:22:45 | × | yeahitsme quits (~bob@user/yeahitsme) (Read error: Connection reset by peer) |
| 09:23:49 | × | peterbecich quits (~Thunderbi@047-229-123-186.res.spectrum.com) (Ping timeout: 264 seconds) |
| 09:25:45 | × | tri quits (~tri@ool-18bc2e74.dyn.optonline.net) (Ping timeout: 256 seconds) |
| 09:29:26 | × | euleritian quits (~euleritia@dynamic-176-007-002-044.176.7.pool.telefonica.de) (Read error: Connection reset by peer) |
| 09:29:43 | → | euleritian joins (~euleritia@77.22.252.56) |
| 09:34:29 | × | euleritian quits (~euleritia@77.22.252.56) (Read error: Connection reset by peer) |
| 09:35:13 | → | euleritian joins (~euleritia@77.22.252.56) |
| 09:39:26 | → | tri joins (~tri@ool-18bc2e74.dyn.optonline.net) |
| 09:44:59 | × | tri quits (~tri@ool-18bc2e74.dyn.optonline.net) (Ping timeout: 264 seconds) |
| 09:45:01 | → | gmg joins (~user@user/gehmehgeh) |
| 09:46:01 | → | mobivme joins (~mobivme@130.105.162.252) |
| 09:47:09 | × | alexherbo2 quits (~alexherbo@2a02-8440-3140-b89b-a08f-42e2-c7fb-39b2.rev.sfr.net) (Remote host closed the connection) |
| 09:47:28 | → | alexherbo2 joins (~alexherbo@2a02-8440-3140-b89b-a08f-42e2-c7fb-39b2.rev.sfr.net) |
| 09:53:45 | → | SAJAT joins (~sajat@87-97-12-229.pool.digikabel.hu) |
| 09:53:46 | → | eggplantade joins (~Eggplanta@2600:1700:38c5:d800:5014:5b74:113d:d036) |
| 09:53:49 | × | Erutuon quits (~Erutuon@user/erutuon) (Ping timeout: 264 seconds) |
| 09:53:53 | → | target_i joins (~target_i@217.175.14.39) |
| 09:58:59 | → | tri joins (~tri@ool-18bc2e74.dyn.optonline.net) |
| 10:03:41 | × | tri quits (~tri@ool-18bc2e74.dyn.optonline.net) (Ping timeout: 260 seconds) |
| 10:05:00 | → | Erutuon joins (~Erutuon@user/erutuon) |
| 10:07:03 | → | Tuplanolla joins (~Tuplanoll@91-159-68-95.elisa-laajakaista.fi) |
| 10:09:18 | × | bilegeek quits (~bilegeek@2600:1008:b0a2:2201:7d6a:5c17:5067:9b92) (Quit: Leaving) |
| 10:09:33 | × | fansly quits (~fansly@182.0.171.248) (Remote host closed the connection) |
| 10:14:09 | × | mobivme quits (~mobivme@130.105.162.252) (Remote host closed the connection) |
| 10:15:33 | × | Erutuon quits (~Erutuon@user/erutuon) (Quit: WeeChat 2.8) |
| 10:18:09 | × | mei quits (~mei@user/mei) (Remote host closed the connection) |
| 10:18:30 | → | mima joins (~mmh@aftr-62-216-211-171.dynamic.mnet-online.de) |
| 10:30:41 | → | tri joins (~tri@ool-18bc2e74.dyn.optonline.net) |
| 10:32:39 | × | rosco quits (~rosco@175.136.156.77) (Quit: Lost terminal) |
| 10:32:53 | × | bobby quits (~bob@80.158-248-1.customer.lyse.net) (Changing host) |
| 10:32:53 | → | bobby joins (~bob@user/yeahitsme) |
| 10:34:25 | × | alexherbo2 quits (~alexherbo@2a02-8440-3140-b89b-a08f-42e2-c7fb-39b2.rev.sfr.net) (Remote host closed the connection) |
| 10:34:45 | → | alexherbo2 joins (~alexherbo@2a02-8440-3140-b89b-a08f-42e2-c7fb-39b2.rev.sfr.net) |
| 10:35:11 | → | coot joins (~coot@89-69-206-216.dynamic.chello.pl) |
| 10:35:12 | × | coot quits (~coot@89-69-206-216.dynamic.chello.pl) (Remote host closed the connection) |
| 10:35:24 | → | coot joins (~coot@89-69-206-216.dynamic.chello.pl) |
| 10:36:24 | × | tri quits (~tri@ool-18bc2e74.dyn.optonline.net) (Ping timeout: 268 seconds) |
| 10:39:03 | × | tzh quits (~tzh@c-71-193-181-0.hsd1.or.comcast.net) (Quit: zzz) |
| 10:40:00 | × | lambdabot quits (~lambdabot@haskell/bot/lambdabot) (Remote host closed the connection) |
| 10:40:30 | → | lambdabot joins (~lambdabot@silicon.int-e.eu) |
| 10:40:30 | × | lambdabot quits (~lambdabot@silicon.int-e.eu) (Changing host) |
| 10:40:30 | → | lambdabot joins (~lambdabot@haskell/bot/lambdabot) |
| 10:40:30 | ChanServ | sets mode +v lambdabot |
| 10:46:00 | → | tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) |
| 10:50:14 | → | fansly joins (~fansly@2001:448a:2010:476e:c9c:17f1:874c:ee93) |
| 11:02:57 | × | euleritian quits (~euleritia@77.22.252.56) (Read error: Connection reset by peer) |
| 11:03:35 | → | euleritian joins (~euleritia@77.22.252.56) |
| 11:04:50 | → | tri joins (~tri@ool-18bc2e74.dyn.optonline.net) |
| 11:11:14 | × | tri quits (~tri@ool-18bc2e74.dyn.optonline.net) (Ping timeout: 268 seconds) |
| 11:12:03 | × | Sgeo quits (~Sgeo@user/sgeo) (Read error: Connection reset by peer) |
| 11:14:52 | × | welterde quits (welterde@thinkbase.srv.welterde.de) (Quit: Moving day) |
| 11:14:52 | × | euleritian quits (~euleritia@77.22.252.56) (Read error: Connection reset by peer) |
| 11:15:05 | → | euleritian joins (~euleritia@77.22.252.56) |
| 11:20:31 | × | EvanR quits (~EvanR@user/evanr) (Ping timeout: 260 seconds) |
| 11:34:30 | → | [_] joins (~itchyjunk@user/itchyjunk/x-7353470) |
| 11:37:41 | × | AlexZenon quits (~alzenon@94.233.241.143) (Ping timeout: 240 seconds) |
| 11:38:13 | × | [itchyjunk] quits (~itchyjunk@user/itchyjunk/x-7353470) (Ping timeout: 264 seconds) |
| 11:39:18 | → | otto_s joins (~otto_s@p5499379a.dip0.t-ipconnect.de) |
| 11:39:22 | × | AlexNoo quits (~AlexNoo@94.233.241.143) (Ping timeout: 246 seconds) |
| 11:39:52 | → | tri joins (~tri@ool-18bc2e74.dyn.optonline.net) |
| 11:44:58 | × | tri quits (~tri@ool-18bc2e74.dyn.optonline.net) (Ping timeout: 246 seconds) |
| 11:50:47 | × | driib quits (~driib@vmi931078.contaboserver.net) (Quit: The Lounge - https://thelounge.chat) |
| 11:55:50 | × | NiKaN quits (sid385034@id-385034.helmsley.irccloud.com) (Ping timeout: 256 seconds) |
| 11:58:57 | × | average quits (uid473595@user/average) (Ping timeout: 260 seconds) |
| 11:59:07 | × | alexherbo2 quits (~alexherbo@2a02-8440-3140-b89b-a08f-42e2-c7fb-39b2.rev.sfr.net) (Remote host closed the connection) |
| 11:59:27 | → | alexherbo2 joins (~alexherbo@2a02-8440-3140-b89b-a08f-42e2-c7fb-39b2.rev.sfr.net) |
| 11:59:38 | → | NiKaN joins (sid385034@id-385034.helmsley.irccloud.com) |
| 12:01:33 | → | average joins (uid473595@user/average) |
| 12:02:30 | → | tri joins (~tri@ool-18bc2e74.dyn.optonline.net) |
| 12:03:16 | → | igemnace joins (~ian@user/igemnace) |
| 12:08:08 | × | tri quits (~tri@ool-18bc2e74.dyn.optonline.net) (Ping timeout: 252 seconds) |
| 12:10:03 | → | driib joins (~driib@vmi931078.contaboserver.net) |
| 12:14:13 | <ski> | albet70 : for nqCPS, you may need an indexed monad |
| 12:15:12 | × | causal quits (~eric@50.35.85.7) (Quit: WeeChat 4.1.1) |
| 12:21:49 | × | driib quits (~driib@vmi931078.contaboserver.net) (Quit: The Lounge - https://thelounge.chat) |
| 12:23:01 | → | tri joins (~tri@ool-18bc2e74.dyn.optonline.net) |
| 12:23:09 | → | driib joins (~driib@vmi931078.contaboserver.net) |
| 12:23:55 | → | szkl joins (uid110435@id-110435.uxbridge.irccloud.com) |
| 12:25:45 | → | AlexNoo joins (~AlexNoo@178.34.160.228) |
| 12:30:10 | × | tri quits (~tri@ool-18bc2e74.dyn.optonline.net) (Ping timeout: 268 seconds) |
| 12:36:50 | × | fansly quits (~fansly@2001:448a:2010:476e:c9c:17f1:874c:ee93) (Remote host closed the connection) |
| 12:37:10 | → | AlexZenon joins (~alzenon@178.34.160.228) |
| 12:44:29 | → | tri joins (~tri@ool-18bc2e74.dyn.optonline.net) |
| 12:45:35 | × | eggplantade quits (~Eggplanta@2600:1700:38c5:d800:5014:5b74:113d:d036) (Ping timeout: 268 seconds) |
| 12:48:35 | × | danza quits (~danza@151.47.71.134) (Ping timeout: 264 seconds) |
| 12:49:06 | → | ph88 joins (~ph88@ip5b403f30.dynamic.kabel-deutschland.de) |
| 12:58:14 | → | fansly joins (~fansly@103.3.221.236) |
| 13:09:41 | × | fansly quits (~fansly@103.3.221.236) (Ping timeout: 240 seconds) |
| 13:10:03 | → | pavonia joins (~user@user/siracusa) |
| 13:10:27 | → | fansly joins (~fansly@2001:448a:2010:476e:c9c:17f1:874c:ee93) |
| 13:15:28 | × | ph88 quits (~ph88@ip5b403f30.dynamic.kabel-deutschland.de) (Read error: Connection reset by peer) |
| 13:16:59 | → | eggplantade joins (~Eggplanta@2600:1700:38c5:d800:5014:5b74:113d:d036) |
| 13:21:54 | → | Lycurgus joins (~georg@user/Lycurgus) |
| 13:22:32 | × | jmdaemon quits (~jmdaemon@user/jmdaemon) (Ping timeout: 256 seconds) |
| 13:30:24 | → | fendor joins (~fendor@2a02:8388:1605:d100:267b:1353:13d7:4f0c) |
| 13:34:33 | × | tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…) |
| 13:39:02 | × | FinnElija quits (~finn_elij@user/finn-elija/x-0085643) (Ping timeout: 255 seconds) |
| 13:39:10 | → | tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) |
| 13:42:46 | → | FinnElija joins (~finn_elij@user/finn-elija/x-0085643) |
| 13:42:48 | × | fansly quits (~fansly@2001:448a:2010:476e:c9c:17f1:874c:ee93) (Remote host closed the connection) |
| 13:44:38 | × | FinnElija quits (~finn_elij@user/finn-elija/x-0085643) (Remote host closed the connection) |
| 13:45:15 | → | FinnElija joins (~finn_elij@user/finn-elija/x-0085643) |
| 13:46:45 | × | tri quits (~tri@ool-18bc2e74.dyn.optonline.net) (Ping timeout: 260 seconds) |
| 13:47:14 | → | Bylllie joins (~Bylllie@37.143.55.92) |
| 13:47:18 | → | tri joins (~tri@ool-18bc2e74.dyn.optonline.net) |
| 13:47:33 | × | adium quits (adium@user/adium) (Ping timeout: 256 seconds) |
| 13:49:34 | × | nicos quits (~nsm@2800:2131:5400:883:28f6:1624:5755:79b0) (Ping timeout: 246 seconds) |
| 13:49:37 | ← | Bylllie parts (~Bylllie@37.143.55.92) () |
| 13:49:56 | → | nicos joins (~nsm@186.143.200.157) |
| 13:51:24 | × | tri quits (~tri@ool-18bc2e74.dyn.optonline.net) (Remote host closed the connection) |
| 13:51:36 | → | tri joins (~tri@ool-18bc2e74.dyn.optonline.net) |
| 13:54:02 | × | tri quits (~tri@ool-18bc2e74.dyn.optonline.net) (Remote host closed the connection) |
| 13:55:37 | → | tri joins (~tri@ool-18bc2e74.dyn.optonline.net) |
| 13:57:22 | × | tri quits (~tri@ool-18bc2e74.dyn.optonline.net) (Remote host closed the connection) |
| 14:01:04 | → | tri joins (~tri@ool-18bc2e74.dyn.optonline.net) |
| 14:04:44 | → | fansly joins (~fansly@2001:448a:2010:476e:c9c:17f1:874c:ee93) |
| 14:07:15 | × | tri quits (~tri@ool-18bc2e74.dyn.optonline.net) (Ping timeout: 256 seconds) |
| 14:09:52 | → | a51 joins (a51@gateway/vpn/protonvpn/a51) |
| 14:11:55 | <albet70> | ski , what is an indexed monad? |
| 14:12:35 | <albet70> | what does nq stand for? |
| 14:13:13 | → | aljazmc joins (~aljazmc@user/aljazmc) |
| 14:16:56 | × | bliminse quits (~bliminse@user/bliminse) (Quit: leaving) |
| 14:22:40 | × | gorignak quits (~gorignak@user/gorignak) (Quit: quit) |
| 14:23:46 | × | nicos quits (~nsm@186.143.200.157) (Read error: Connection reset by peer) |
| 14:24:13 | → | nicos joins (~nsm@186.141.133.46) |
| 14:25:51 | × | Lycurgus quits (~georg@user/Lycurgus) (Quit: leaving) |
| 14:33:07 | → | sprout_ joins (~quassel@2a02:a448:3a80:0:885c:b783:ab5:eac3) |
| 14:34:58 | <ski> | albet70 : "not quite", for when the continuation isn't always tail-called. this gives you composable / delimited / sub- continuations, as with `shift' and `reset' (or `control' and `prompt'), rather than `callCC' primitive |
| 14:36:17 | × | sprout quits (~quassel@2a02-a448-3a80-0-c82d-ac36-f811-1f58.fixed6.kpn.net) (Ping timeout: 268 seconds) |
| 14:37:29 | <ski> | albet70 : `class IxMonad ixm where ixreturn :: a -> ixm i i a; ixbind :: ixm i j a -> (a -> ixm j k b) -> ixm i k b'. `newtype IxState s t a = MkIxState {runIxState :: s -> (t,a)}' resp. `newtype IxCont o p a = MkIxCont {runIxCont :: (a -> p) -> o}' are the main instances |
| 14:38:01 | <ski> | in the former case, the type of the state can change along the computation. in the latter case, the type of the final answer/result can change along the computation |
| 14:38:39 | <ski> | @type forM |
| 14:38:40 | <lambdabot> | (Traversable t, Monad m) => t a -> (a -> m b) -> m (t b) |
| 14:40:24 | <ski> | this can give us `iterM :: Traversable t => t a -> IxContT m (t b) b a' |
| 14:41:06 | × | szkl quits (uid110435@id-110435.uxbridge.irccloud.com) (Quit: Connection closed for inactivity) |
| 14:41:25 | <ski> | so you use `iterM' to get at the `a's inside a `t a', eventually producing a `b' result from that. then the `IxContT' will collect all those `b's together into a corresponding `t b' |
| 14:48:25 | × | nicos quits (~nsm@186.141.133.46) (Read error: Connection reset by peer) |
| 14:49:02 | → | nicos joins (~nsm@2800:2131:5400:883:28f6:1624:5755:79b0) |
| 14:49:04 | <ski> | monadic reflection (per Andrzej Filinski, see "Representing Monads" in 1994-01,"Representing Layered Monads" in 1999-01, at <http://hjemmesider.diku.dk/~andrzej/papers/>) also wraps up `(>>=) :: Monad m => m a -> (a -> m b) -> m b' as `reflect :: Monad m => m a -> Cont (m b) a', together with `reify :: Monad m => Cont (m a) a -> m a', but in a language with first-class continuation side-effects (like |
| 14:49:10 | <ski> | Scheme,SML/NJ,..) these become val reflect : 'a m -> 'a resp. val reify : (unit -> 'a) -> 'a m allowing you to treat any monad (e.g. parsing) that you can define as if it were a built-in side-effect in the language |
| 14:53:42 | → | azimut joins (~azimut@gateway/tor-sasl/azimut) |
| 14:53:45 | → | michalz joins (~michalz@185.246.207.200) |
| 14:54:21 | <ski> | "Fun with Linear Implicit Parameters" by TheHunter (aka Thomas Jäger) in 2005-05-02 at <https://wiki.haskell.org/The_Monad.Reader/Issue2/FunWithLinearImplicitParameters> used some dirty tricks to get this (monadic side-effects) in Haskell (GHC) |
| 14:55:09 | <ski> | (you need an old version of GHC, that still supports `LinearImplicitParameters', in order to make that run) |
| 14:55:58 | → | adium joins (adium@user/adium) |
| 14:56:16 | → | tri joins (~tri@ool-18bc2e74.dyn.optonline.net) |
| 14:58:50 | <ski> | oh, and here's a dpiponi article about indexed/parameterized monads, <http://blog.sigfpe.com/2009/02/beyond-monads.html> (2009-02-14) |
| 15:00:42 | → | bliminse joins (~bliminse@user/bliminse) |
| 15:07:46 | → | tri_ joins (~tri@2607:fb90:5502:9b78:3c5e:bb:8ec1:2792) |
| 15:07:57 | <albet70> | wow |
| 15:11:38 | <ski> | Oleg has more info on delimited/composable continuations, see <https://okmij.org/ftp/continuations/index.html> |
| 15:11:49 | × | tri quits (~tri@ool-18bc2e74.dyn.optonline.net) (Ping timeout: 264 seconds) |
| 15:11:51 | × | fansly quits (~fansly@2001:448a:2010:476e:c9c:17f1:874c:ee93) (Remote host closed the connection) |
| 15:12:10 | <ski> | oh, and "Implementations of delimited control in OCaml, Haskell, Scheme" <https://okmij.org/ftp/continuations/implementations.html> |
| 15:14:42 | <kaol> | I've used indexed monads (on PureScript but it's pretty much the same) with React. A library there uses them to enforce a requirement React has for render functions: Make sure that all steps of a computation happen in the same order and none are skipped. Try expressing that with TypeScript. |
| 15:14:48 | → | welterde joins (welterde@thinkbase.srv.welterde.de) |
| 15:17:58 | → | fansly joins (~fansly@2001:448a:2010:476e:c9c:17f1:874c:ee93) |
| 15:18:28 | × | fansly quits (~fansly@2001:448a:2010:476e:c9c:17f1:874c:ee93) (Remote host closed the connection) |
| 15:20:53 | × | euleritian quits (~euleritia@77.22.252.56) (Ping timeout: 240 seconds) |
| 15:21:20 | → | euleritian joins (~euleritia@dynamic-176-007-006-139.176.7.pool.telefonica.de) |
| 15:21:38 | × | azimut quits (~azimut@gateway/tor-sasl/azimut) (Ping timeout: 255 seconds) |
| 15:22:00 | × | a51 quits (a51@gateway/vpn/protonvpn/a51) (Quit: WeeChat 4.2.1) |
| 15:24:50 | <kaol> | Probably a stupid extension idea: If a case pattern matches only one variable of type a, allow leaving it unnamed and writing the right hand side as a function (a -> b). Not going to save all that much to save adding a "$ x" to the end but it still annoys me to not get to make it pointless. |
| 15:30:18 | × | euleritian quits (~euleritia@dynamic-176-007-006-139.176.7.pool.telefonica.de) (Read error: Connection reset by peer) |
| 15:30:37 | → | euleritian joins (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) |
| 15:34:15 | × | alexherbo2 quits (~alexherbo@2a02-8440-3140-b89b-a08f-42e2-c7fb-39b2.rev.sfr.net) (Remote host closed the connection) |
| 15:35:45 | × | tri_ quits (~tri@2607:fb90:5502:9b78:3c5e:bb:8ec1:2792) (Remote host closed the connection) |
| 15:37:07 | → | tri joins (~tri@ool-18bc2e74.dyn.optonline.net) |
| 15:37:38 | × | euleritian quits (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) (Ping timeout: 268 seconds) |
| 15:38:34 | → | euleritian joins (~euleritia@dynamic-176-007-006-139.176.7.pool.telefonica.de) |
| 15:40:04 | → | zetef joins (~quassel@5.2.182.98) |
| 15:40:41 | × | euleritian quits (~euleritia@dynamic-176-007-006-139.176.7.pool.telefonica.de) (Read error: Connection reset by peer) |
| 15:40:46 | → | fansly joins (~fansly@2001:448a:2010:476e:c9c:17f1:874c:ee93) |
| 15:40:59 | → | euleritian joins (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) |
| 15:41:33 | × | tri quits (~tri@ool-18bc2e74.dyn.optonline.net) (Ping timeout: 260 seconds) |
| 15:45:25 | × | euleritian quits (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) (Ping timeout: 264 seconds) |
| 15:45:41 | → | euleritian joins (~euleritia@dynamic-176-007-006-139.176.7.pool.telefonica.de) |
| 15:47:23 | → | tri joins (~tri@ool-18bc2e74.dyn.optonline.net) |
| 15:53:22 | × | euleritian quits (~euleritia@dynamic-176-007-006-139.176.7.pool.telefonica.de) (Read error: Connection reset by peer) |
| 15:53:39 | → | euleritian joins (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) |
| 15:55:02 | × | fansly quits (~fansly@2001:448a:2010:476e:c9c:17f1:874c:ee93) (Remote host closed the connection) |
| 15:58:45 | × | zetef quits (~quassel@5.2.182.98) (Remote host closed the connection) |
| 15:59:04 | <kaol> | Could someone explain the type application in this: "\n -> ($>) @Maybe <$> guard . (>n) <*> flip div n"? I wrote it myself but I'm not at all sure how putting a * -> * in that position works. |
| 15:59:07 | × | euleritian quits (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) (Read error: Connection reset by peer) |
| 15:59:16 | → | euleritian joins (~euleritia@dynamic-176-007-006-139.176.7.pool.telefonica.de) |
| 15:59:37 | × | euleritian quits (~euleritia@dynamic-176-007-006-139.176.7.pool.telefonica.de) (Read error: Connection reset by peer) |
| 15:59:55 | → | euleritian joins (~euleritia@77.22.252.56) |
| 16:02:01 | ← | otto_s parts (~otto_s@p5499379a.dip0.t-ipconnect.de) () |
| 16:05:00 | × | tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…) |
| 16:05:10 | <int-e> | :t ($>) |
| 16:05:11 | <lambdabot> | Functor f => f a -> b -> f b |
| 16:06:05 | → | fansly joins (~fansly@2001:448a:2010:476e:c9c:17f1:874c:ee93) |
| 16:06:21 | <int-e> | `@Maybe` is parsed like a function argument at the level of function applications |
| 16:07:10 | × | euleritian quits (~euleritia@77.22.252.56) (Ping timeout: 264 seconds) |
| 16:07:54 | → | euleritian joins (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) |
| 16:08:09 | <int-e> | (so `f` is substituted by `Maybe` in `($>)`'s type) |
| 16:09:42 | → | Silver_X joins (~Silver_X@182.178.244.60) |
| 16:10:56 | <kaol> | I'm not sure I follow. fmap @_ @Maybe expects a kind *, not * -> *. Whats the difference? |
| 16:12:13 | <int-e> | :t fmap |
| 16:12:15 | <lambdabot> | Functor f => (a -> b) -> f a -> f b |
| 16:12:29 | <int-e> | :t fmap @Maybe |
| 16:12:31 | <lambdabot> | error: |
| 16:12:31 | <lambdabot> | Pattern syntax in expression context: fmap@Maybe |
| 16:12:31 | <lambdabot> | Did you mean to enable TypeApplications? |
| 16:12:43 | <int-e> | % :t fmap @Maybe |
| 16:12:43 | <yahb2> | fmap @Maybe :: forall a b. (a -> b) -> Maybe a -> Maybe b |
| 16:13:13 | <kaol> | And the type application in that use seems to target the type contained in the functor and not the functor like in my original code. |
| 16:13:13 | <int-e> | % :t fmap @Maybe @() |
| 16:13:13 | <yahb2> | fmap @Maybe @() :: forall b. (() -> b) -> Maybe () -> Maybe b |
| 16:13:53 | <int-e> | kaol: I don't know how to see this without explicit quantifiers but the first type argument here is `f`, the second one is `a` and the third one is `b`. |
| 16:13:54 | <kaol> | Interesting. |
| 16:14:27 | <kaol> | Ok, that makes sense if you look at it like that. Thanks. |
| 16:15:02 | <int-e> | Note that 'Functor f =>' mentions f, so it's syntactically first. |
| 16:16:46 | <kaol> | I see. I was thinking of function arguments but I should have thought of type variables instead. |
| 16:18:50 | × | Goodbye_Vincent quits (cyvahl@freakshells.net) (Ping timeout: 260 seconds) |
| 16:20:07 | → | shriekingnoise joins (~shrieking@186.137.175.87) |
| 16:21:58 | → | alexherbo2 joins (~alexherbo@2a02-8440-3140-de35-0855-5240-2ad6-cd9a.rev.sfr.net) |
| 16:25:34 | → | tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) |
| 16:25:48 | → | Goodbye_Vincent joins (cyvahl@freakshells.net) |
| 16:30:52 | → | paolo joins (~paolo@net-2-39-54-152.cust.vodafonedsl.it) |
| 16:32:22 | × | Silver_X quits (~Silver_X@182.178.244.60) (Remote host closed the connection) |
| 16:32:36 | × | average quits (uid473595@user/average) (Quit: Connection closed for inactivity) |
| 16:34:25 | <paolo> | @pl \xs n -> take n xs |
| 16:34:25 | <lambdabot> | flip take |
| 16:35:07 | <paolo> | @pl \x y -> f (x,y) |
| 16:35:07 | <lambdabot> | (f .) . (,) |
| 16:35:34 | <paolo> | @pl \x y z -> f (x,y,z) |
| 16:35:34 | <lambdabot> | ((f .) .) . (,,) |
| 16:36:19 | <paolo> | @pl map . map |
| 16:36:19 | <lambdabot> | map . map |
| 16:39:16 | <tomsmeding> | % :set -fprint-explicit-foralls |
| 16:39:16 | <yahb2> | <no output> |
| 16:39:19 | <tomsmeding> | % :t fmap |
| 16:39:19 | <yahb2> | fmap ; :: forall (f :: Type -> Type) a b. ; Functor f => ; (a -> b) -> f a -> f b |
| 16:39:24 | <tomsmeding> | kaol: ^ |
| 16:39:50 | <tomsmeding> | paolo: you can private-message with lambdabot too, and there's also https://pointfree.io/ ;) |
| 16:42:19 | <kaol> | I think it wouldn't hurt to add a second example to the documentation, show (read @Int "5") is a bit too concise. fmap @[] equals map could be a good one. |
| 16:43:34 | × | Goodbye_Vincent quits (cyvahl@freakshells.net) (Ping timeout: 260 seconds) |
| 16:44:21 | × | son0p quits (~ff@152.203.88.4) (Quit: Bye) |
| 16:46:01 | × | dsrt^ quits (~cd@c-98-242-74-66.hsd1.ga.comcast.net) (Ping timeout: 264 seconds) |
| 16:46:47 | <ski> | kaol : yea, i've wanted that `case' idea before (for "unboxed sum types" (not the `UnboxedSums' extension, rather unboxing the continuation, a la "Multi-return function call" by Olin Shivers,David Fisher in 2004-09,2006-0(79) at <https://www.khoury.northeastern.edu/home/shivers/citations.html#mrlc")) |
| 16:47:08 | <ski> | > (reads :: ReadS Int) "5" |
| 16:47:10 | <lambdabot> | [(5,"")] |
| 16:49:20 | <ski> | @where pointfree |
| 16:49:21 | <lambdabot> | http://haskell.org/haskellwiki/Haskell/Pointfree |
| 16:49:33 | <ski> | @where+ pointfree <https://haskell.org/haskellwiki/Haskell/Pointfree>,<https://pointfree.io/> |
| 16:49:33 | <lambdabot> | Nice! |
| 16:50:51 | <kaol> | Or why limit to just one, go bonkers and steal how SQL's numbered placeholders do it. case x of ($2,$1) -> f and f would then be a -> b -> c. |
| 16:51:13 | × | coot quits (~coot@89-69-206-216.dynamic.chello.pl) (Quit: coot) |
| 16:51:14 | <ski> | i'd rather not |
| 16:51:36 | <kaol> | I'm not being entirely serious. |
| 16:54:05 | → | Goodbye_Vincent joins (cyvahl@freakshells.net) |
| 16:56:03 | → | son0p joins (~ff@152.203.88.4) |
| 16:58:21 | × | nicos quits (~nsm@2800:2131:5400:883:28f6:1624:5755:79b0) (Quit: Quit) |
| 17:01:26 | → | a51 joins (a51@gateway/vpn/protonvpn/a51) |
| 17:02:17 | → | P1RATEZ joins (~piratez@user/p1ratez) |
| 17:04:10 | <ski> | anyway, point being that, given |
| 17:04:21 | <ski> | data Change# a = Unchanged# |
| 17:04:34 | <ski> | | Changed# a |
| 17:04:38 | <ski> | in |
| 17:05:08 | <ski> | parsimoniousFilter :: (a -> Bool) -> [a] -> Change# [a] |
| 17:05:27 | <ski> | parsimonisousFilter p [ ] = Unchanged# |
| 17:05:39 | <ski> | parsimoniousFilter p (x:xs) |
| 17:05:54 | <ski> | | p x = case parsimoniousFilter p xs of |
| 17:06:14 | <ski> | Unchanged# -> Unchanged# |
| 17:06:31 | <ski> | Changed# xs -> Changed# (x:xs) |
| 17:06:45 | <ski> | | otherwise = case parsimoniousFilter p xs of |
| 17:06:58 | <ski> | Unchanged# -> Changed# xs |
| 17:07:09 | <ski> | Changed# xs -> Changed# xs |
| 17:08:10 | <ski> | we'd like to eta-reduce the last branch, in order to pass the same continuation to the second recursive call, for the sake of efficiency, so that this becomes a semi-tail call (a tail call, if the `Changed#' continuation is invoked, rather than the alternative `Unchanged#' one) |
| 17:09:12 | <ski> | (the first case, `Unchanged# -> Unchanged#' is also a semi-tail call, but this issue doesn't arise here, because there's no value(s) being returned here, as parameters/components/fields of this continuation ("data constructor")) |
| 17:09:45 | <ski> | the point of `parsimoniousFilter' is to share as long as a tail as possible, with the input list |
| 17:10:59 | <kaol> | This may be a stupid question but would writing the last line as a@(Changed# _) -> a be any different? |
| 17:11:17 | <ski> | (to call it from elsewhere, you'd use `case parsimoniousFilter somePred someList of Unchanged# -> someList; Changed# newList -> newList'. obviously this would be packaged up into a wrapper function, with same type as `filter') |
| 17:11:40 | × | paolo quits (~paolo@net-2-39-54-152.cust.vodafonedsl.it) (Quit: leaving) |
| 17:13:35 | <ski> | hm, interesting idea .. i guess that might be a possible solution to this issue. however, there'd be some special case governing how such a variable, bound to a type of "unboxed sum" kind, could be used. because `a@(Changed# _) -> (2,a)' would be illegal, since `a' here is not materialized, but virtual |
| 17:15:39 | <ski> | the idea is to pass the branches of the `case' directly as alternative continuations to the invokation, to allow it to select one and jump directly to it. and to then allow forwarding of continuations, as in that `Changed# xs -> Changed# xs' |
| 17:16:27 | → | econo_ joins (uid147250@id-147250.tinside.irccloud.com) |
| 17:18:05 | × | eggplantade quits (~Eggplanta@2600:1700:38c5:d800:5014:5b74:113d:d036) (Remote host closed the connection) |
| 17:18:26 | → | eggplantade joins (~Eggplanta@2600:1700:38c5:d800:5014:5b74:113d:d036) |
| 17:18:39 | × | tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Read error: Connection reset by peer) |
| 17:18:54 | <ski> | however, it would be nice if one could also forward to a different continuation, as `Foo# x -> Bar# x' (which isn't supported by the above `@' idea) .. perhaps even `Foo# x -> Baz# t x' (not sure if that'd work, operationally speaking .. constructing `Baz# t' before the call, so that when invoked with `x', it'd invoke `Bar#' with `t' and `x') |
| 17:19:29 | × | Goodbye_Vincent quits (cyvahl@freakshells.net) (Ping timeout: 256 seconds) |
| 17:20:54 | <ski> | (an example of such swapping of continuations would be mutually recursive `even,odd :: Integral a => a -> Bool#', with `data Bool# = False# | True#') |
| 17:21:29 | → | zetef joins (~quassel@5.2.182.98) |
| 17:21:44 | <kaol> | I'm still tripped by how eta reduction comes with its own semantics in Haskell. I tend to go for them just because it feels more like functional programming to get to write more functions. I don't know what it'd look like but I'd prefer it if there were some other explicit ways to express the things that eta reduction changes. |
| 17:23:04 | <ski> | btw .. you can code up `parsimoniousFilter :: (a -> Bool) -> [a] -> o -> ([a] -> o) -> o' with the proper semi-tail call semantics (eta-reducing the relevant continuation parameter) .. but the point would be to allow this, in direct style, rather than in CPS (continuation-passing style) |
| 17:23:32 | <ski> | "go for them" meaning ? |
| 17:24:00 | <kaol> | I prefer them as a stylistic choice. |
| 17:24:08 | <ski> | what is "them" ? |
| 17:24:27 | <kaol> | Pointfree. |
| 17:25:27 | × | trev quits (~trev@user/trev) (Quit: trev) |
| 17:25:28 | <ski> | well .. i was more talking about eta-reducing for efficiency here, rather than the stylistic choice of pointless |
| 17:25:28 | <kaol> | Ok, I guess I could have expressed that better. I just don't like naming variables if I can avoid it. |
| 17:26:04 | <ski> | (tail calling in general amounts to eta-reducing the continuation, after transforming to CPS) |
| 17:26:28 | <kaol> | It just feels to me that it should be a purely difference in syntax. If there's other things that it affects I think it should have some other mechanism for expressing it. |
| 17:29:52 | <ski> | there's also eta-reduction for other types than functions (`\x -> f x = f'). e.g. for pairs, `(fst p,snd p) = p'; for `Either's, `case e of Left x0 -> b[x |-> Left x0]; Right x1 -> b[x |- Right x1] = b[x |-> e]', .. |
| 17:30:50 | <ski> | (those latter two ones, especially the last one, are also not strictly valid, in the presence of bottoms (and `seq' / `!'-patterns)) |
| 17:31:26 | <ski> | kaol : hm, difference in syntax, how ? |
| 17:32:22 | <ski> | (some kind of point-less categorical syntax, maybe like `Arrow' (but for `Category' in general) ?) |
| 17:32:29 | <kaol> | That there'd never be any observable difference between \x -> f $ x and just f. |
| 17:33:01 | → | johnw joins (~johnw@69.62.242.138) |
| 17:33:14 | <ski> | (by `Arrow', i mean the extension named that, giving you `proc x -> do y <- f -< x; returnA -< (x,y)' syntax) |
| 17:33:26 | <ski> | ah |
| 17:33:43 | <kaol> | It's the story you tell to someone learning Haskell. |
| 17:34:09 | <ski> | so, we'd have to eschew `seq' (/ `!'-patterns) on functions, to begin with |
| 17:34:42 | <ski> | the original version of `seq' had type `Eval a => a -> b -> b', where function types were not in the type class `Eval'. this was in Haskell 1.4 or something |
| 17:34:47 | × | zetef quits (~quassel@5.2.182.98) (Ping timeout: 260 seconds) |
| 17:35:58 | <kaol> | I'd expect that what we have is a very good compromise for a number of reasons. But there's still something about it that makes me disappointed. |
| 17:36:34 | <ski> | also, you can code `seqPair :: (a,b) -> c -> c; seqPair (_,_) z = z' (or just use general `seq' or `!'-patterns), so that `(fst p,snd p)' can be distinguished from `p' (if `p = _|_', then `(fst p,snd p) = (_|_,_|_)', which is distinct from `_|_') |
| 17:37:32 | <ski> | one way to avoid this would be to make sure that pattern-matching on a tuple pattern actually forced nothing, unless and until some nested pattern got forced (like `(False,y)', say. or `(x,y)' and later forcing `x') |
| 17:37:33 | → | harveypwca joins (~harveypwc@2601:246:c201:d680:59a0:7761:1557:ead5) |
| 17:38:01 | <tri> | https://paste.tomsmeding.com/qT54eich |
| 17:39:05 | <tri> | hi, im confused why (,) <$> Concurrently action1 <*> Concurrently action2 has type Concurrently (Int, String), rather than Concurrently (IO Int, IO String) |
| 17:39:37 | <tri> | im fmap-ing the (,) over Concurrently structure, so it should by pass that structure and apply directly to the value action1 action2 inside |
| 17:39:54 | <ski> | f <$> foo <*> bar = liftA2 f foo bar |
| 17:40:11 | <tri> | since action1 :: IO Int and action2 :: IO String, (,) applying to them should also be (IO Int, IO String) |
| 17:40:13 | <ski> | liftA2 :: Applicative i => (a -> b -> c) -> (i a -> i b -> i c) |
| 17:40:32 | <ski> | liftA2 (,) :: Applicative i => i a -> i b -> i (a,b) |
| 17:40:46 | <ski> | so |
| 17:40:48 | → | Goodbye_Vincent joins (cyvahl@freakshells.net) |
| 17:41:06 | <ski> | liftA2 (,) action1 action2 :: IO (String,String) |
| 17:41:22 | <ski> | liftA2 (,) (Concurrently action1) (Concurrently action2) :: Concurrently (String,String) |
| 17:41:31 | <ski> | but |
| 17:41:53 | <ski> | (action1,action2) :: (IO String,IO String) |
| 17:42:08 | <ski> | and trying to apply `Concurrently' to that doesn't work, since |
| 17:42:21 | <ski> | Concurrently :: IO a -> Concurrently a |
| 17:42:42 | <tri> | hold on ski |
| 17:42:54 | <ski> | and the formal (expected) parameter type `IO a' doesn't match with the actual parameter type `(IO String,IO String)' |
| 17:43:24 | <ski> | if you do |
| 17:44:01 | <ski> | Concurrently (liftA2 (,) action1 action2) :: Concurrently (String,String) |
| 17:44:03 | <ski> | then that'll work |
| 17:44:11 | <ski> | or, if you prefer |
| 17:44:21 | <ski> | Concurrently ((,) <$> action1 <*> action2) :: Concurrently (String,String) |
| 17:44:36 | <tri> | hold on |
| 17:45:00 | <tri> | (,) <$> Concurrently action1 <*> Concurrently action2 |
| 17:45:09 | <ski> | yes |
| 17:45:17 | <tri> | <$> is bypassing Concurrently and applying (,) to action1 right |
| 17:45:25 | <tri> | and since action1 is IO Int |
| 17:45:29 | × | krei-se quits (~krei-se@p508747fd.dip0.t-ipconnect.de) (Quit: ZNC 1.8.2 - https://znc.in) |
| 17:45:31 | <tri> | the first step will be |
| 17:45:35 | <kaol> | How I'd put it: Concurrently is a functor on its own, not in terms of IO, even though you need an IO action to build one. Nothing with using it as a functor is going show that IO to you anymore. |
| 17:45:38 | <ski> | oh, sorry, you had `action1 :: IO Int', not `action1 :: IO String' |
| 17:45:51 | <tri> | Concurrently (IO Int , ) <*> action2 |
| 17:46:11 | → | destituion joins (~destituio@2001:4644:c37:0:57f:87b2:efe8:e836) |
| 17:46:18 | <tri> | i mean Concurrently (IO Int , ) <*> Concurretnly action2 |
| 17:46:19 | → | krei-se joins (~krei-se@p508747fd.dip0.t-ipconnect.de) |
| 17:46:35 | <tri> | then the second step <*> will continue to carry (IO Int , ) to action2 |
| 17:46:47 | <tri> | result in Concurrently (IO Int , IO String) |
| 17:47:02 | <tri> | that's my reasoning, but apprarently, that's wrong |
| 17:47:36 | <kaol> | You won't see the IO come up again unless you use runConcurrently. |
| 17:47:41 | <tri> | somehow the type output is Concurrently (Int, String), my IO is gone |
| 17:47:42 | <ski> | "Concurrently (IO Int , ) <*> action2" -- this is writing types (`IO Int') where expressions are expected. please don't mix the value-level with the type-level like that |
| 17:48:06 | <ski> | if you want to indicate the type of that position, in an expression, write `Concurrently (_ :: IO Int , ) <*> action2' |
| 17:48:57 | <tri> | kaol: but where did my IO go?, im just fmap-ing over Concurrently, it should have preseve my IO Int |
| 17:49:24 | <tri> | that's where im confused at |
| 17:49:27 | <tri> | ski: gotcha |
| 17:49:36 | <haskellbridge> | 14<mauke> What's the type of Concurrently? |
| 17:49:38 | <ski> | (part of the issue that's confusing you here is that the type constructor in `newtype Concurrently a = Concurrently (IO a)' is spelled the same as the data constructor. i think you'd be less confused, if you imagined it was (or if it actually was) `newtype Concurrently a = MkConcurrently (IO a)')) |
| 17:49:55 | <haskellbridge> | 14<mauke> Ah |
| 17:49:57 | → | EvanR joins (~EvanR@user/evanr) |
| 17:50:43 | <tri> | so you are saying before i fmap (,), the Concurrently data constructor was applied to the action1 and action2? |
| 17:50:50 | <haskellbridge> | 14<mauke> Then you can't have IO in the result type. The types of <$> and <*> don't allow it |
| 17:51:16 | <tri> | ski: resulting in the type Concurrently Int and Concurrently String? |
| 17:51:46 | <kaol> | To move from IO to Concurrently, you use the Concurrently type constructor. To get from Concurrently to IO, you use runConcurrently. IO exists necessarily inside the module but you have no direct access or visibility to it. |
| 17:52:02 | × | krei-se quits (~krei-se@p508747fd.dip0.t-ipconnect.de) (Read error: Connection reset by peer) |
| 17:52:07 | <tri> | hold on lemme recap |
| 17:52:11 | <ski> | in a (value) *expression*, the types of `action1' and `action2' in `Concurrently ((,) <$> action1 <*> action2)' (or, better, `MkConcurrently ((,) <$> action1 <*> action2)') will be `IO Int' and `IO String', in your case. but in the corresponding *type* (expression), it will be `Concurrently (Int,String)' |
| 17:52:14 | × | P1RATEZ quits (~piratez@user/p1ratez) (Remote host closed the connection) |
| 17:53:53 | <ski> | if you want to, you could try |
| 17:54:30 | <ski> | import qualified Control.Concurrent.Async as CCA (Concurrently (..)) |
| 17:54:43 | <ski> | import Control.Concurrent.Async (Concurrently) |
| 17:54:46 | <tri> | ah wait i think i understand why |
| 17:55:05 | <ski> | patterm MkConcurrently :: IO a -> Concurrently a |
| 17:55:13 | <tri> | as you said, it's clear when i refer to it as MkConcurrently |
| 17:55:22 | <ski> | pattern MkConcurrently action = CCA.Concurrently action |
| 17:55:27 | <ski> | well, you'd also need |
| 17:55:50 | <ski> | {-# LANGUAGE PatternSynonyms #-} |
| 17:55:53 | <ski> | at the top |
| 17:56:15 | <ski> | this would simulate it actually being named like `newtype Concurrently a = MkConcurrently (IO a) |
| 17:56:26 | <tri> | ah ok let me check it out |
| 17:56:39 | <tri> | btw thank you kaol and haskellbridge |
| 17:56:51 | <EvanR> | haskellbridge is great |
| 17:56:58 | <ski> | well, you'll probably want to import more stuff in the second `import' above, to actually use it |
| 17:57:12 | <ski> | e.g. `runConcurrently' |
| 17:57:21 | <haskellbridge> | 14<mauke> Yay I'm a bridge |
| 17:57:50 | <ski> | (fwi, that's mauke. haskellbridge is a bridge to a Matrix Haskell channel) |
| 17:58:02 | ski | hides a troll under mauke |
| 17:58:02 | <monochrom> | Burn all bridges! >:) |
| 17:58:58 | <haskellbridge> | 14<mauke> Speaking of import, I've discovered I quite like postfix "qualified" |
| 17:59:18 | <sshine> | what's not to like! |
| 17:59:25 | <ski> | tri : "so you are saying before i fmap (,), the Concurrently data constructor was applied to the action1 and action2?","resulting in the type Concurrently Int and Concurrently String?" -- in the `(,) <$> Concurrently action1 <*> Concurrently action2' version, yes |
| 18:00:02 | <tri> | you are right ski |
| 18:00:05 | × | Goodbye_Vincent quits (cyvahl@freakshells.net) (Ping timeout: 268 seconds) |
| 18:00:14 | <tri> | it was because... hmmm |
| 18:00:35 | <ski> | it was because the identical naming of the type constructor and the value constructor confused you |
| 18:00:41 | <monochrom> | Yes I like postfix qualified too. |
| 18:01:13 | <monochrom> | You know what, I like all of GHC2021, and even then I think it is not radical enough. >:) |
| 18:01:14 | ski | realizes they read mauke as saying s/like/dislike/ |
| 18:01:17 | <tri> | yea |
| 18:01:57 | <EvanR> | someone dropped a bridge on several channel regulars |
| 18:02:20 | ski | . o O ( .. anyone fancy a game of bridge ? ) |
| 18:02:42 | <haskellbridge> | 14<mauke> Libera bridge is falling down |
| 18:02:58 | <monochrom> | Oh, bridge. I almost forgot it. |
| 18:02:59 | <ski> | falling down, falling down |
| 18:03:49 | × | shriekingnoise quits (~shrieking@186.137.175.87) (Quit: Quit) |
| 18:03:53 | <monochrom> | (Contract) Bridge was too hard for me, I settled for German Bridge instead. >:) |
| 18:04:26 | ski | idly ponders contact bridges |
| 18:04:53 | <ski> | (i guess there might also be contract lenses ?) |
| 18:05:15 | <monochrom> | And I learned German Bridge from a computer magazine that had "here is BASIC code for German Bridge". :) |
| 18:05:33 | <ski> | i imagine that's a version of the game of Bridge ? |
| 18:05:55 | <haskellbridge> | 14<mauke> Full-contact bridge tournament |
| 18:06:10 | <monochrom> | OK, Contract Bridge is normal standard Bridge. |
| 18:06:47 | <monochrom> | I imagine that eventually someone had to prefix it with Contract to emphasize that it's not German Bridge. :) |
| 18:07:18 | <monochrom> | Like how after someone invented CPS, now you need to also think up a name for not-CPS. |
| 18:11:24 | <monochrom> | Contactless Bridge = tap your credit card to pay/play >:) |
| 18:12:16 | <monochrom> | "play to pay" |
| 18:12:39 | <monochrom> | OK sorry for the digression! Here is my ObHaskell: |
| 18:13:42 | <monochrom> | I recently used https://www.vex.net/~trebla/haskell/cont.xhtml#yield for a binary-search-tree rebalancing algorithm. |
| 18:14:45 | <monochrom> | The motivation is that it is equivalent to zippers. I tried the zipper way for 5 minutes, then decided "too many data types to define" and switched. :) |
| 18:15:36 | <monochrom> | OK why do I need either zipper or yield? Because at every intermediate stage I want to print "the whole tree we have so far". |
| 18:17:43 | <monochrom> | So instead of coding up BST algorithms the normal way (recurse to subtree, but then the recursive call no longer knows the rest of the tree), I need a zipper or cursor (which has the rest of the tree in some representation). |
| 18:21:14 | → | Lycurgus joins (~georg@user/Lycurgus) |
| 18:23:05 | <EvanR> | wait, what is the word for not-CPS |
| 18:23:13 | <monochrom> | direct style :) |
| 18:23:51 | <ncf> | i prefer not-not-CPS, (CPS → ⊥) → ⊥ |
| 18:24:36 | <monochrom> | haha |
| 18:24:57 | ski | . o O ( "(The Fibonacci sequence is everywhere in nature, for example Haskell tutorials and Python tutorials.)" ) |
| 18:25:19 | <enikar> | :D |
| 18:25:22 | <EvanR> | python, really |
| 18:25:36 | <enikar> | yes |
| 18:25:42 | <EvanR> | how do you do it in python |
| 18:25:54 | <enikar> | for multiple assignements |
| 18:26:00 | <EvanR> | or is it not a one liner |
| 18:26:01 | <ski> | ah, i've thought up `data Iterator i o r = Result r | Susp o (i -> Iterator i o r)' before :) |
| 18:26:13 | <EvanR> | (and don't tell me there's more than one way to do it!) |
| 18:26:38 | <haskellbridge> | 14<mauke> Haha |
| 18:26:39 | <ski> | (defunctionalizing the double-CPS implementation of backtracking (for logic programming)) |
| 18:26:40 | <monochrom> | I am considering adding a 2nd remark "If you're also wondering if it is an algebraic effect too, YES!" >:) |
| 18:28:02 | <monochrom> | https://docs.python.org/3/tutorial/introduction.html#first-steps-towards-programming is where the official python tutorial uses Fibonacci. |
| 18:28:14 | <monochrom> | Bloody official tutorial. |
| 18:28:48 | <monochrom> | Any pythonista who mocks Haskell for using Fibonacci examples is a bloody goddamnned hypocrite. |
| 18:29:18 | <haskellbridge> | 14<mauke> print(", ".join(100.fibn())) |
| 18:31:19 | × | euleritian quits (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) (Read error: Connection reset by peer) |
| 18:31:53 | → | euleritian joins (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) |
| 18:33:52 | <ski> | data Ω (ο,π) α = Failure ο | Success α (π → Ω (ο,π) α) -- in my case |
| 18:34:40 | × | alexherbo2 quits (~alexherbo@2a02-8440-3140-de35-0855-5240-2ad6-cd9a.rev.sfr.net) (Ping timeout: 250 seconds) |
| 18:34:48 | × | harveypwca quits (~harveypwc@2601:246:c201:d680:59a0:7761:1557:ead5) (Quit: Leaving) |
| 18:34:58 | <EvanR> | that's greek to me |
| 18:35:16 | <ski> | naturally, my dear Watson |
| 18:36:17 | <monochrom> | Is that, like, addiction? data Addiction meh p a = NotHigh meh | HighSoYesAgainPlease a (p -> ...) |
| 18:36:52 | → | Goodbye_Vincent joins (~Goodbye_V@freakshells.net) |
| 18:37:00 | <ski> | (btw, note how the last parameter is the `Result'/⌜Failure⌝ one for `Iterator', while for ⌜Ω⌝ it was the first component of `Susp'/⌜Success⌝) |
| 18:37:43 | <monochrom> | Drug abuse is not the answer! :( |
| 18:37:45 | <monochrom> | :D |
| 18:37:49 | <ncf> | Susp, Ω, is this homotopy theory? |
| 18:37:57 | <monochrom> | haha |
| 18:38:09 | <EvanR> | :among_us: |
| 18:38:22 | <ski> | "How to replace sobriety by a sequence of highs" by Wilip Phadler ? |
| 18:38:31 | <monochrom> | hahaha |
| 18:38:35 | <ski> | ncf : nah :p |
| 18:38:48 | → | tzh joins (~tzh@c-71-193-181-0.hsd1.or.comcast.net) |
| 18:39:38 | <monochrom> | That probably also describes the premise of the movie Another Round >:) |
| 18:39:41 | × | Lycurgus quits (~georg@user/Lycurgus) (Quit: leaving) |
| 18:43:19 | <EvanR> | if this wasn't the post apocalyptic IRC afterscape I'd say all these substance references were inappropriate! |
| 18:46:26 | <kaol> | Non-intuitive logic programming: Instead of providing a function definition, show that the negation of the type always leads to bottom. |
| 18:47:18 | <ncf> | it's called call/cc |
| 18:47:22 | <tri> | im trying to use repeatedStart in the timer package. As i understand, it will immediately start a computation, then will repeat it after the timer elapses |
| 18:47:27 | <tri> | https://hackage.haskell.org/package/timers-0.2.0.4/docs/Control-Concurrent-Timer.html#t:Timer |
| 18:47:28 | → | Square2 joins (~Square@user/square) |
| 18:47:35 | × | Goodbye_Vincent quits (~Goodbye_V@freakshells.net) (Ping timeout: 260 seconds) |
| 18:47:44 | <tri> | but i dont know what to feed in the first arg of repeatedStart |
| 18:48:04 | <tri> | it's asking for a TimerIO |
| 18:48:26 | <tri> | but idk how to instantiate a TimerIO |
| 18:48:36 | <tri> | could someone help me please |
| 18:48:53 | <mauke> | repeatedStart reconfigures an existing timer |
| 18:49:01 | <mauke> | you can create a new timer with newTimer |
| 18:49:16 | ski | . o O ( "How to Replace Failure by a List of Successes: A method for exception handling, backtracking, and pattern-matching in lazy functional languages" by Philip Wadler in 1985 at <https://link.springer.com/chapter/10.1007/3-540-15975-4_33#preview>,<https://www.cs.tufts.edu/comp/150FP/archive/phil-wadler/failure.djvu> ) |
| 18:49:16 | <tri> | ah i see |
| 18:49:19 | <geekosaur> | or repeatedTimer, which is just above repeatedStart |
| 18:49:21 | <tri> | it's all the way at the bottom |
| 18:49:36 | <tri> | thank you |
| 18:49:48 | <mauke> | yeah, repeatedTimer = newTimer + repeatedStart |
| 18:50:03 | <ski> | kaol : that's how LP is traditionally explained (sortof) |
| 18:50:26 | <kaol> | Do note that repeatedTimer returns a Timer as well, not only newTimer. |
| 18:50:56 | <ski> | monochrom : hm, interesting application |
| 18:51:17 | → | Goodbye_Vincent joins (cyvahl@freakshells.net) |
| 18:53:08 | <ski> | (LP with Horn Clauses is traditionally explained in terms of assuming the negation of the query `?- Query.' as a clause `:- Clause.' (meaning `Clause => false'), and then doing forward-chaining from that, trying to derive the empty sequent/judgement `:-' (meaning `true => false') aka a contradiction. along the way, we find some variable substitions which constitute a solution of the query. backtracking to |
| 18:53:14 | <ski> | find alternative ways to derive contradiction gives the remaining solutions) |
| 18:55:02 | <ski> | (a better way, imho, is to construe it as bottom-up, rather than top-down, construction of a proof-tree, in direct style, of `Query' (or `Program |- Query'. `Program' containing the remaining clauses) .. this can be done in natural deduction, but the part with using clauses is nicer if we instead use sequent calculus) |
| 18:55:06 | → | Sgeo joins (~Sgeo@user/sgeo) |
| 18:57:50 | <monochrom> | kaol: What ncf said is actually how to do what you said, even if you were probably joking. :) Short story is if you give a type to call/cc, it's Pierce's Law. There is a paper for the long story, but I forgot which paper. |
| 18:59:02 | → | bitdex joins (~bitdex@gateway/tor-sasl/bitdex) |
| 18:59:08 | <ski> | (these two ways to think about LP are e.g. explained in the intro to Jeff Polakow's thesis (about ordered logic, and ordered logic programming, and ordered logic logical frameworks, see <https://web.archive.org/web/20080418204348/http://www-2.cs.cmu.edu/~jpolakow/diss.ps>)) |
| 18:59:48 | <kaol> | I consider myself a decent programmer but I know CS is full of rabbit holes I'd lose myself into if I tried. |
| 19:01:03 | → | krei-se joins (~krei-se@p508747fd.dip0.t-ipconnect.de) |
| 19:01:09 | <monochrom> | Ah yeah, resolution proofs are very much thinking in terms of proof-by-contradiction (the double-negation kind). |
| 19:01:46 | <monochrom> | (And then Prolog etc extend the resolution proof algorithm.) |
| 19:02:33 | <monochrom> | Oh there are way more rabbit holes in physics, so don't you worry. |
| 19:02:37 | <ski> | Pierce's law is `((a -> b) -> a) -> a'. it's an example of a classically valid formula, which isn't intuitionistically valid, and which only uses the implication connective |
| 19:02:38 | <ski> | yea .. as are Semantic Tableaux |
| 19:02:48 | <ski> | @type callCC |
| 19:02:49 | <lambdabot> | MonadCont m => ((a -> m b) -> m a) -> m a |
| 19:02:52 | <ski> | .. there we go |
| 19:02:53 | <monochrom> | And in the case of general relativity and/or cosmology, you have literally black holes. >:) |
| 19:03:22 | × | xacktm quits (xacktm@user/xacktm) (Quit: fBNC - https://bnc4free.com) |
| 19:03:28 | × | kuruczgy quits (55b66dd3ae@2a03:6000:1812:100::127f) (Ping timeout: 255 seconds) |
| 19:03:29 | × | adanwan quits (~adanwan@gateway/tor-sasl/adanwan) (Ping timeout: 255 seconds) |
| 19:03:48 | → | xacktm joins (xacktm@user/xacktm) |
| 19:04:22 | × | akspecs quits (00cc8321af@sourcehut/user/akspecs) (Ping timeout: 255 seconds) |
| 19:04:36 | → | adanwan joins (~adanwan@gateway/tor-sasl/adanwan) |
| 19:06:20 | → | kuruczgy joins (55b66dd3ae@2a03:6000:1812:100::127f) |
| 19:06:23 | <ski> | well .. you can code up `val excludedMiddle : unit -> ('a cont,'a) either', expressing `Either (Not a) a', in SML/NJ .. and this kinda corresponds to a virtual pair of a particle and anti-particle suddenly appearing. if you fuse the anti-one (the continuation) with a value, using `val throw : 'a cont -> 'a -> 'b' (basically `(Not a,a) -> b', or `(Not a,a) -> Void', or `Not (Not a,a)'), annihilating both of |
| 19:06:29 | <ski> | them, the particle/value from the `excludedMiddle' gets activated (the function returns again). in terms of Feynmann diagrams, the particle has travelled "backwards in time", for a little while |
| 19:07:04 | → | akspecs joins (00cc8321af@sourcehut/user/akspecs) |
| 19:08:02 | <monochrom> | https://www.umsu.de/trees/ is a semantic tableau algorithm writtne in javascript(!). (I don't envy the author. >:) ) |
| 19:08:07 | × | caconym quits (~caconym@user/caconym) (Quit: bye) |
| 19:09:29 | <ski> | hm, nice |
| 19:09:32 | <ski> | reminds me of |
| 19:09:33 | <ski> | @where logitext |
| 19:09:34 | <lambdabot> | "Interactive Tutorial of the Sequent Calculus" by ezyang at <http://logitext.mit.edu/logitext.fcgi/tutorial>,<http://logitext.mit.edu/logitext.fcgi/main>,<http://blog.ezyang.com/2012/05/an-interactive |
| 19:09:34 | <lambdabot> | -tutorial-of-the-sequent-calculus/> |
| 19:11:27 | <ski> | compare <https://www.umsu.de/trees/#%E2%88%83y%E2%88%80x(Fy%E2%86%92Fx)> to the "⊢ ∃x. P(x) → (∀y. P(y))" example, just above the conclusion of <http://logitext.mit.edu/logitext.fcgi/tutorial> |
| 19:11:55 | <leah2> | ah yes, i was unable to find that recently. thx! |
| 19:13:31 | → | caconym joins (~caconym@user/caconym) |
| 19:24:31 | <ski> | apropos that with Feynmann, cf. "The Two Dualities of Computation: Negative and Fractional Types" by Roshan P. James,Amr Sabry in ~2012 (?) at <https://legacy.cs.indiana.edu/~sabry/papers/rational.pdf>,<http://lambda-the-ultimate.org/node/4964>, "Fractional Types" by Roshan P. James,Zachary Sparks,Jacques Carette,Amr Sabry in ~2012 (?) at |
| 19:24:36 | <ski> | <https://legacy.cs.indiana.edu/~sabry/papers/fractionals.pdf>,<https://www.cas.mcmaster.ca/~carette/PiFractional/frac.pdf>,<https://www.cas.mcmaster.ca/~carette/PiFractional/>, "Information Effects" by Roshan P. James,Amr Sabry in 2012-01-2[5-7] at <https://www.cs.indiana.edu/~sabry/papers/information-effects.pdf>,<https://golem.ph.utexas.edu/category/2009/08/the_pi_calculus.html> |
| 19:32:07 | → | dsrt^ joins (~cd@c-98-242-74-66.hsd1.ga.comcast.net) |
| 19:42:58 | <monochrom> | OOoohhhh the zipper/cursor idea is what I have been missing in coding up Kripke's algorithm for auto-generating tableux for intuitionistic logic! Now I know how to do it! :) |
| 19:45:13 | → | alexherbo2 joins (~alexherbo@2a02-8440-3141-1388-ed74-c0ff-9a4e-09db.rev.sfr.net) |
| 19:55:01 | <ski> | what's that idea ? |
| 19:55:43 | <c_wraith> | Cursors? probably involved automating your cursing at the computer. |
| 19:58:38 | <monochrom> | Each work-in-progress tableau is a linked list or tree that have "TODO" leafs. So it is the context part of a zipper! |
| 19:58:50 | × | adanwan quits (~adanwan@gateway/tor-sasl/adanwan) (Ping timeout: 255 seconds) |
| 19:58:58 | <mauke> | recursing is when you curse at the computer again |
| 20:00:26 | <monochrom> | Why does the untyped lambda calculus come with recursion out of the box? Because you don't type it up, so you write by hand, and the handwriting is cursive! >:) |
| 20:01:13 | → | adanwan joins (~adanwan@gateway/tor-sasl/adanwan) |
| 20:06:30 | × | EvanR quits (~EvanR@user/evanr) (Ping timeout: 268 seconds) |
| 20:09:38 | × | ec quits (~ec@gateway/tor-sasl/ec) (Ping timeout: 255 seconds) |
| 20:10:13 | × | adanwan quits (~adanwan@gateway/tor-sasl/adanwan) (Remote host closed the connection) |
| 20:10:36 | → | adanwan joins (~adanwan@gateway/tor-sasl/adanwan) |
| 20:11:42 | → | ec joins (~ec@gateway/tor-sasl/ec) |
| 20:15:10 | → | CiaoSen joins (~Jura@2a05:5800:287:6f00:ca4b:d6ff:fec1:99da) |
| 20:19:20 | <tri> | is it legal to use typeclass in a data declaration? I have data PostitionCollection = PostitionCollection {positions :: [Position]} |
| 20:19:32 | <tri> | can i make it a traversable, instead of a list of Position? |
| 20:22:30 | <tri> | hmm, chatgpt says i can't, so i guess i can't. There *could* be a way, but i guess it's not practical |
| 20:24:35 | <ncf> | don't listen to chatgpt it's dumb and stupid |
| 20:25:09 | <ncf> | data PositionCollection = forall t. Traversable t => PositionCollection {positions :: t Position} |
| 20:26:44 | <tri> | oh thank yoy |
| 20:26:50 | <tri> | i was thinking about this |
| 20:27:07 | <tri> | data PositionCollection a = PositionCollection {position :: a Posistion} |
| 20:27:12 | <ski> | data PositionCollection t = MkPositionCollection {positions :: t Position} |
| 20:27:19 | <ski> | yes |
| 20:27:49 | <tri> | between ncf solution and ski's. Which one is more common? |
| 20:27:49 | <ski> | with ncf's version, you have `t' existential, which may not be what you want .. |
| 20:28:00 | × | inedia quits (~irc@2602:2da:0:80:5054:ff:fe3c:8d93) (Quit: WeeChat 4.1.2) |
| 20:28:38 | <tri> | yea i think i came across that existential when i read up on forall. And that's some really deep rabit hole of academic aspect of haskell |
| 20:28:45 | <tri> | in other words, i shouldn't touch it |
| 20:29:15 | <ski> | it's not that advanced, really |
| 20:29:51 | <tri> | i will get there, i will get there, slowly |
| 20:30:09 | <ski> | one use of it is to have "heterogenous collections", where the items in it may have different types, as long as those types all belong to some type class, say |
| 20:30:24 | <ski> | you can do "OO-like" programming, with this |
| 20:31:20 | → | inedia joins (~irc@2602:2da:0:80:5054:ff:fe3c:8d93) |
| 20:31:23 | <ski> | (but you probably shouldn't, unless there's a real reason to .. when people discover this, they often go overboard with it. but when appropriate (which is occasionally, not too often), existentials are indispensible) |
| 20:31:44 | <ski> | @where existential-antipattern |
| 20:31:44 | <lambdabot> | "Haskell Antipattern: Existential Typeclass" by Luke Palmer at <http://lukepalmer.wordpress.com/2010/01/24/haskell-antipattern-existential-typeclass/> |
| 20:32:27 | <tri> | wow thank you |
| 20:32:33 | → | mobivme joins (~mobivme@130.105.162.16) |
| 20:34:00 | <ski> | (i'd offer to explain the basics of existentials to you .. but atm i'm a bit busy .. perhaps later, if you want to ?) |
| 20:35:12 | <tri> | holy cow well hold on |
| 20:35:13 | <kaol> | Generally I'd say it's enough if the functions where you use PositionCollection t have Traversable t => PositionCollection t. GHC will tell you if you put something nonsensible there. |
| 20:35:32 | <tri> | ski: i need to read up on that to get the basic first |
| 20:35:55 | <tri> | ski: otherwise it's a big hurdle for you to explain from scratch |
| 20:36:29 | <tri> | kaol: huh? |
| 20:36:55 | <tri> | kaol: sorry i dont get it |
| 20:36:57 | <mauke> | "don't put typeclass constraints in data declarations. put them on your functions instead" |
| 20:36:57 | <kaol> | I'd think of functions first when considering type class constraints, not data definitions. |
| 20:37:23 | <tri> | mauke: you translated kaol's? |
| 20:37:32 | <kaol> | Existentials exists and have their uses but I'd recommend getting comfortable with that first. |
| 20:37:34 | <mauke> | yes :-) |
| 20:37:44 | × | sudden quits (~cat@user/sudden) (Ping timeout: 256 seconds) |
| 20:38:44 | <tri> | kaol: but in my case, i want to abstract away the collection type, so that must be set in the data definition. How else can i do it in a function? |
| 20:39:41 | <tri> | kaol: like when i create PostiionCollection, i want to have the flexibility of speicfying the collection type, say either list or vector. How could i do it via function then? |
| 20:40:15 | <mauke> | data |
| 20:40:17 | <tri> | (i could totally when with list, but i was experimenting how to over-abstract it) |
| 20:40:18 | <mauke> | er |
| 20:40:28 | <ski> | with existential collection, using just `Traversable', you could basically just use a list instead of that (since you can't query which type of collection you have, so you basically can just use `Foldable' to extract some information) |
| 20:40:37 | <mauke> | data PositionCollection t = PositionCollection (t Position) |
| 20:40:56 | <mauke> | someOperation :: (Traversable t) => PositionCollection t -> ... |
| 20:41:40 | <kaol> | You could even derive Traversable for it. |
| 20:41:44 | <tri> | mauke: that's exactly what i did: data PositionCollection t = PositionCollection (t Position). Just like ski suggetsion |
| 20:42:15 | <tri> | kaol: you mean make instance of Traversable from my data PositionCollection? |
| 20:43:10 | <dmj`> | tri: here's the wayback link, since the one lambdabot gave seems to be dead. https://web.archive.org/web/20120103204949/https://lukepalmer.wordpress.com/2010/01/24/haskell-antipattern-existential-typeclass/ |
| 20:43:26 | <kaol> | I'd question whether you even need a PositionCollection if your functions could just use any traversable. |
| 20:43:55 | <tri> | dmj`: thanks |
| 20:44:03 | → | sudden joins (~cat@user/sudden) |
| 20:44:32 | <tri> | kaol: well here is my original problem. I have a list of positions. Then i need to have some metadata on it, so i create PostiionCollection |
| 20:44:53 | <kaol> | Ok, that's fair. |
| 20:44:57 | <tri> | data PositionCOllection = PositionCollection {filename :: String, positions :: [Position]} |
| 20:45:25 | <tri> | kaol: then i think can i make the [Position] be any kind of collection? just for fun |
| 20:45:49 | <tri> | and then here i am |
| 20:45:54 | <tomsmeding> | I echo kaol's suggestion of replacing the list with 't' and putting the 'Traversable t' constraint on the functions that work with the data type |
| 20:46:06 | <geekosaur> | this is one of the risks of over-abstraction 🙂 |
| 20:46:13 | <tomsmeding> | absent further information, this sounds to me like the most idiomatic way to do it |
| 20:46:23 | <geekosaur> | another is that it comes at a price, usually in performance |
| 20:46:45 | <kaol> | One design option would be to not export the data constructor from the module containing PositionCollection. Then you could limit how a PositionCollection can be created. |
| 20:47:07 | <tri> | tomsmeding: you mean it's data PositionCollection t = PositionCollection {position :: t Position} right |
| 20:47:11 | <tomsmeding> | yes |
| 20:47:25 | <tri> | yea that's what me and ski settled on |
| 20:47:54 | <tri> | the other ncf suggestion :data PositionCollection = forall t. Traversable t => PositionCollection {positions :: t Position} |
| 20:48:36 | <tomsmeding> | yeah that is also possible, but it's only better than the thing kaol suggested if you need to have a collection of PositionCollections that all have different traversable structures |
| 20:48:37 | <tri> | which involves Existential, which i haven't learned about |
| 20:48:44 | <tomsmeding> | which is typically not what you need |
| 20:48:51 | <dmj`> | probably better to avoid existentials if you can help it |
| 20:49:41 | <tri> | ok no existential for now. Thank you guys |
| 20:50:14 | <tomsmeding> | sometimes you need them, but typically quality of life goes up as the number of existentials in your haskell program goes down |
| 20:50:38 | → | mcfilib joins (uid302703@user/mcfilib) |
| 20:51:12 | <tri> | btw how do you guys i have the IRC format your text to simulate an action |
| 20:51:17 | <tomsmeding> | (and what ski also said: they're not very difficult to understand, they're just a bit... clumsy, I guess?) |
| 20:51:28 | <tomsmeding> | /me |
| 20:51:37 | tri | try something |
| 20:51:40 | <tri> | ah ok thanks |
| 20:51:46 | <dmj`> | tri: it breaks deriving, and makes type inference difficult |
| 20:52:40 | <tri> | sure, i mean i will give it a read. That's related to the forall keyword afterall, and it's itchy whenever i look at it and don't understand it |
| 20:54:07 | → | coot joins (~coot@89-69-206-216.dynamic.chello.pl) |
| 20:54:08 | <dmj`> | the forall keyword has as really overloaded meaning |
| 20:57:44 | <tri> | ah i just realize that data PositionCollection = forall t. Traversable t => PositionCollection {positions :: t Position} could actually be better suit for my idea, since it restrain t to only be Traversable |
| 20:57:57 | <tomsmeding> | don't give in to that temptation |
| 20:58:10 | <tri> | whereas data PositionCollection t = PositionCollection {position :: t Position} t could be *anything* |
| 20:58:11 | <tomsmeding> | it tends to work much better in haskell if you put the constraints on the functions, not on the data |
| 20:58:28 | <tomsmeding> | if the functions all require it, then you can't do anything with a "bad" t anyway |
| 20:58:42 | <tri> | tomsmeding: ah i see what you mean |
| 20:58:58 | <tomsmeding> | and maybe it turns out that there are some functions (getFilename?) that don't actually need the constraint! |
| 20:59:11 | <dmj`> | tri: try deriving Eq with that |
| 20:59:44 | <tomsmeding> | I mean, there's StandaloneDeriving you could use instead |
| 21:00:09 | <tomsmeding> | but don't do it unless you must |
| 21:00:19 | <tomsmeding> | in which case come back here :p |
| 21:00:47 | <tri> | dmj`: it doesn't work and require something standalonederiving like tomsmeding said |
| 21:00:56 | <tri> | but yea, i don't want to venture into that area yet |
| 21:01:05 | <tomsmeding> | tri: that was the point they're making, it makes stuff more clunky |
| 21:01:13 | <tri> | ah ok |
| 21:01:36 | <tri> | and haskell had me turn on QualifiedExistential or GDAT or something |
| 21:01:44 | <tri> | which is gatekeeping people from using it |
| 21:01:45 | <tomsmeding> | the most important situation where you _do_ need that existential is if you need a collection of PositionCollections where each of them have different Traversable structures inside |
| 21:01:50 | <tomsmeding> | lol |
| 21:01:54 | <tomsmeding> | have you seen my haskell files |
| 21:02:26 | <tri> | haha i can imagine it's decorated with lots of metadata stuff |
| 21:03:50 | <tomsmeding> | my latest thing has 2 files with 15 extensions (though that's on top of Haskell2010, some of those are in GHC2021) |
| 21:03:51 | <monochrom> | Huh why does the new generation accuse everyone of gatekeeping? I'm not impressed. |
| 21:04:11 | <tomsmeding> | yeah it's more like "discouraging" |
| 21:04:17 | <tomsmeding> | which is accurate |
| 21:05:30 | → | shapr joins (~user@c-24-218-186-89.hsd1.ma.comcast.net) |
| 21:05:55 | <mauke> | help, rust doesn't let me access this reference after I've passed ownership elsewhere. this is gatekeeping!1 |
| 21:06:30 | <int-e> | trust me I know what I'm doSegmentation fault. Core dumped. |
| 21:07:31 | <mauke> | I was trying to access this variable from another program, but the operating system is hiding the real memory from me. all I get is some "virtual address" and stuff. this is literally gaslighting |
| 21:08:14 | <tomsmeding> | (I mean, it's not deceiving you.) |
| 21:09:10 | geekosaur | has flashbacks to programming on Altos 586/986 |
| 21:10:12 | <mauke> | oh yeah? when I put a value in RAM at 0x2f42 in one program and then I inspect 0x2f42 in another program and it looks completely different, is that not deception? |
| 21:10:37 | <tomsmeding> | with the danger of being offtopic: there's an electricity and gas utility company comparison website here in the netherlands that's called 'gaslicht.nl' -- "gas" is dutch for "gas" and "licht" is dutch for "light" |
| 21:10:55 | <mauke> | haha |
| 21:11:51 | <monochrom> | Oh let me tell you the story behind the Chinese idiom "engrave on the boat to find the sword"! |
| 21:11:51 | <mauke> | https://www.gaslicht.de/ also exists |
| 21:12:12 | <tomsmeding> | ... which is something completely different |
| 21:12:16 | <tomsmeding> | beautiful |
| 21:12:26 | <monochrom> | Supposedly it was a true story too! Someone was on a boat trip and accidentally dropped his sword into the water. |
| 21:12:50 | <mauke> | oh, I know that story |
| 21:13:02 | <monochrom> | He then engraved a mark on the side of the boat. His friend asks "what is the mark for?" |
| 21:13:23 | <monochrom> | "So that when we get to the shore, I know where to find the sword." |
| 21:13:30 | <mauke> | that's a chinese idiom? I know it from a joke :-) |
| 21:15:46 | <tomsmeding> | monochrom: what made you think of the idiom? |
| 21:16:00 | × | _ht quits (~Thunderbi@28-52-174-82.ftth.glasoperator.nl) (Remote host closed the connection) |
| 21:16:12 | <monochrom> | "I put a value in RAM at 0x2f42 in one program and then I inspect 0x2f42 in another program" :) |
| 21:16:25 | <tomsmeding> | ah :p |
| 21:35:02 | <tri> | i have a [ (FileName, FileData) ] and a function FileData -> CleanedData. How can i ignore the FileName please? the output type is [ ( FileName, CleanedData )] |
| 21:35:19 | <tomsmeding> | map (second f) |
| 21:35:28 | <tomsmeding> | Data.Bifunctor.second |
| 21:35:33 | <tomsmeding> | :t second |
| 21:35:34 | <lambdabot> | Arrow a => a b c -> a (d, b) (d, c) |
| 21:35:38 | <tomsmeding> | meh |
| 21:35:41 | <tomsmeding> | :t Data.Bifunctor.second |
| 21:35:43 | <lambdabot> | Bifunctor p => (b -> c) -> p a b -> p a c |
| 21:35:49 | <tomsmeding> | % :t Data.Bifunctor.second @(,) |
| 21:35:49 | <yahb2> | Data.Bifunctor.second @(,) ; :: forall b c a. (b -> c) -> (a, b) -> (a, c) |
| 21:35:53 | <tomsmeding> | there we go |
| 21:36:09 | <tri> | hmm ok thank you, let me try it out |
| 21:36:15 | <mauke> | fmap . fmap |
| 21:36:15 | <tomsmeding> | (no need for the '@(,)', type inference figures that out for you) |
| 21:36:20 | <tomsmeding> | second > fmap |
| 21:36:34 | <mauke> | there are two seconds, but only one fmap |
| 21:36:56 | <tomsmeding> | we ignore that Arrow exists |
| 21:37:02 | <mauke> | fmap fmap fmap |
| 21:37:02 | <tomsmeding> | then there is only one second :) |
| 21:37:18 | <tomsmeding> | that's a good type inference exercise |
| 21:38:04 | <tri> | can you ELI5 what's bifunctor? |
| 21:38:17 | <tomsmeding> | a thing with two values, both of which you can "map over" |
| 21:38:25 | <tomsmeding> | a functor is a thing with one "position" you can map over |
| 21:38:32 | <tri> | ah |
| 21:38:33 | <tomsmeding> | a bifunctor has two of them |
| 21:38:40 | <tri> | ah first and second then |
| 21:38:40 | <mauke> | > fmap fmap fmap length [('a', "hold"), ('b', "my"), ('c', "beer!")] |
| 21:38:42 | <lambdabot> | [('a',4),('b',2),('c',5)] |
| 21:38:44 | <tomsmeding> | (a, b) is the canonical example, but Either a b is also one |
| 21:39:00 | <tri> | i see, Functor can only map on Right |
| 21:39:07 | <tri> | but Bifunctor can also map on Left |
| 21:39:10 | <tomsmeding> | yep |
| 21:39:10 | <tri> | given the first function |
| 21:39:15 | <tri> | oh ok that's neat |
| 21:39:16 | <tri> | thank you |
| 21:39:19 | <mauke> | and Profunctor gets paid to do it |
| 21:39:30 | <tomsmeding> | but it's a professional so they can deal with it |
| 21:40:52 | × | fansly quits (~fansly@2001:448a:2010:476e:c9c:17f1:874c:ee93) (Ping timeout: 276 seconds) |
| 21:42:45 | <tri> | tomsmeding: i just realized that i can also do (fmap . fmap) fn myListOfTuples |
| 21:42:58 | <tomsmeding> | that's what mauke was saying |
| 21:43:05 | <tomsmeding> | I'm saying, if you're fmapping a pair, use second instead |
| 21:43:08 | → | remmie joins (ianremsen@tilde.team) |
| 21:43:26 | <tri> | how so? |
| 21:43:29 | <tomsmeding> | yes, it does the same thing, but it's much clearer and it will give you an error if you change your types and there's a list there instead of a tuple |
| 21:43:51 | <tomsmeding> | instead of silently still "working" |
| 21:43:54 | → | fansly joins (~fansly@2404:c0:2020::d01:bcec) |
| 21:44:20 | <tomsmeding> | this is the same discussion as "why is (a,) Foldable" |
| 21:44:24 | <tomsmeding> | > length (3, 4) |
| 21:44:26 | <lambdabot> | 1 |
| 21:44:26 | <tri> | because... list is not a bifunctor right |
| 21:44:40 | <tri> | im just logically guessing |
| 21:44:48 | <tri> | since list is [a] |
| 21:45:01 | <tri> | it only has type inside, so it's a "single" functor |
| 21:45:05 | <tomsmeding> | if you consider that length thing perfectly fine, you're probably a person that should use fmap . fmap here |
| 21:45:07 | <tri> | cannot be a bifunctor |
| 21:45:19 | <tomsmeding> | yes |
| 21:45:30 | <tomsmeding> | > second (+1) [1,2,3] |
| 21:45:31 | <lambdabot> | error: |
| 21:45:32 | <lambdabot> | • Couldn't match type ‘(d, b)’ with ‘[a0]’ |
| 21:45:32 | <lambdabot> | Expected type: [a0] -> (d, b) |
| 21:45:45 | <tomsmeding> | % Data.Bifunctor.second (+1) [1,2,3] |
| 21:45:45 | <yahb2> | <interactive>:155:28: error: ; • Couldn't match type ‘[]’ with ‘p a’ ; Expected: p a c ; Actual: [c] ; • In the second argument of ‘Data.Bifunctor.second’, namely ; ‘[... |
| 21:45:56 | tri | head explodes |
| 21:45:56 | <tomsmeding> | %% Data.Bifunctor.second (+1) [1,2,3] |
| 21:45:56 | <yahb2> | https://paste.tomsmeding.com/i4yx0Taf |
| 21:46:10 | <tomsmeding> | % :t Data.Bifunctor.second |
| 21:46:10 | <yahb2> | Data.Bifunctor.second ; :: forall (p :: Type -> Type -> Type) b c a. ; Data.Bifunctor.Bifunctor p => ; (b -> c) -> p a b -> p a c |
| 21:46:18 | <tomsmeding> | p a b -> p a c |
| 21:46:24 | <tomsmeding> | [a] doesn't match p a b |
| 21:46:30 | <tomsmeding> | because [] doesn't match 'p a' |
| 21:48:25 | × | fansly quits (~fansly@2404:c0:2020::d01:bcec) (Ping timeout: 264 seconds) |
| 21:48:45 | → | dtman34 joins (~dtman34@c-76-156-89-180.hsd1.mn.comcast.net) |
| 21:50:55 | <exarkun> | sometimes `[] a` (which is the same thing as `[a]`) makes this clearer |
| 21:52:34 | × | destituion quits (~destituio@2001:4644:c37:0:57f:87b2:efe8:e836) (Ping timeout: 276 seconds) |
| 21:53:14 | → | destituion joins (~destituio@2a02:2121:304:cc78:d9dc:8709:4c3b:d0d2) |
| 21:53:55 | → | fansly joins (~fansly@2404:c0:2020::d01:bcec) |
| 21:54:14 | → | peterbecich joins (~Thunderbi@047-229-123-186.res.spectrum.com) |
| 21:58:37 | × | fansly quits (~fansly@2404:c0:2020::d01:bcec) (Ping timeout: 264 seconds) |
| 21:59:10 | <mauke> | p = [ |
| 21:59:12 | <mauke> | a = ] |
| 22:02:42 | → | fansly joins (~fansly@2404:c0:2020::d01:bcec) |
| 22:05:45 | × | fansly quits (~fansly@2404:c0:2020::d01:bcec) (Remote host closed the connection) |
| 22:06:32 | × | fendor quits (~fendor@2a02:8388:1605:d100:267b:1353:13d7:4f0c) (Remote host closed the connection) |
| 22:08:10 | × | igemnace quits (~ian@user/igemnace) (Read error: Connection reset by peer) |
| 22:09:23 | <monochrom> | haha now I get the joke |
| 22:13:29 | → | wootehfoot joins (~wootehfoo@user/wootehfoot) |
| 22:17:46 | → | EvanR joins (~EvanR@user/evanr) |
| 22:17:56 | × | samhh quits (7569f027cf@2a03:6000:1812:100::e4) (Remote host closed the connection) |
| 22:17:56 | × | fn_lumi quits (3d621153a5@2a03:6000:1812:100::df7) (Remote host closed the connection) |
| 22:17:56 | × | samhh_ quits (7569f027cf@2a03:6000:1812:100::e4) (Remote host closed the connection) |
| 22:17:56 | × | ggb quits (a62ffbaf4f@2a03:6000:1812:100::3ac) (Read error: Connection reset by peer) |
| 22:17:56 | × | sm2n quits (ae95cb1267@user/sm2n) (Read error: Connection reset by peer) |
| 22:17:56 | × | lukec quits (9dfd4d094e@2a03:6000:1812:100::10e) (Remote host closed the connection) |
| 22:17:56 | × | cpli quits (77fc530071@2a03:6000:1812:100::252) (Write error: Connection reset by peer) |
| 22:17:56 | × | JoelMcCracken quits (5ea8252fbb@2a03:6000:1812:100::10e3) (Remote host closed the connection) |
| 22:17:56 | × | raghavgururajan quits (ea769b8000@user/raghavgururajan) (Read error: Connection reset by peer) |
| 22:17:56 | × | b0o quits (0e4a0bf4c9@2a03:6000:1812:100::1bf) (Read error: Connection reset by peer) |
| 22:17:56 | × | jleightcap quits (7bc4014b62@user/jleightcap) (Remote host closed the connection) |
| 22:17:56 | × | brettgilio quits (a35ba67324@2a03:6000:1812:100::260) (Read error: Connection reset by peer) |
| 22:17:56 | × | jkoshy quits (99b9359beb@user/jkoshy) (Remote host closed the connection) |
| 22:17:57 | × | ymherklotz quits (cb2c9cfbdd@2a03:6000:1812:100::29a) (Remote host closed the connection) |
| 22:17:57 | × | shreyasminocha quits (51fdc93eda@user/shreyasminocha) (Read error: Connection reset by peer) |
| 22:17:57 | × | rselim quits (ce261f06ff@user/milesrout) (Read error: Connection reset by peer) |
| 22:17:57 | × | akspecs quits (00cc8321af@sourcehut/user/akspecs) (Write error: Connection reset by peer) |
| 22:17:57 | × | henrytill quits (e0180937c3@2a03:6000:1812:100::e8c) (Remote host closed the connection) |
| 22:17:57 | × | Ankhers quits (e99e97ef8e@2a03:6000:1812:100::2a2) (Remote host closed the connection) |
| 22:17:57 | × | fvr quits (ef3e56ca8b@2a03:6000:1812:100::3c4) (Remote host closed the connection) |
| 22:17:57 | × | eso quits (a0662dfd5e@2a03:6000:1812:100::1266) (Remote host closed the connection) |
| 22:17:58 | × | fgaz_ quits (1ff9197ed6@2a03:6000:1812:100::11ea) (Remote host closed the connection) |
| 22:17:58 | × | fluffyballoon quits (45ce440a48@2a03:6000:1812:100::e2) (Read error: Connection reset by peer) |
| 22:17:58 | × | whereiseveryone quits (206ba86c98@2a03:6000:1812:100::2e4) (Read error: Connection reset by peer) |
| 22:17:58 | × | chaitlatte0 quits (ea29c0bb16@user/chaitlatte0) (Remote host closed the connection) |
| 22:17:58 | × | filwisher quits (2e6936c793@2a03:6000:1812:100::170) (Remote host closed the connection) |
| 22:17:58 | × | jmcantrell quits (644f1bed9a@user/jmcantrell) (Read error: Connection reset by peer) |
| 22:17:58 | × | probie quits (cc0b34050a@user/probie) (Remote host closed the connection) |
| 22:17:58 | × | kuruczgy quits (55b66dd3ae@2a03:6000:1812:100::127f) (Remote host closed the connection) |
| 22:17:58 | × | evanrelf quits (3addc196af@2a03:6000:1812:100::f0) (Remote host closed the connection) |
| 22:17:58 | × | jakzale quits (6291399afa@user/jakzale) (Remote host closed the connection) |
| 22:17:58 | × | aniketd quits (32aa4844cd@2a03:6000:1812:100::dcb) (Remote host closed the connection) |
| 22:17:58 | × | arcadewise quits (52968ed80d@2a03:6000:1812:100::3df) (Remote host closed the connection) |
| 22:17:58 | × | sus quits (1b7af6299f@user/zeromomentum) (Remote host closed the connection) |
| 22:17:58 | × | bsima1 quits (9d7e39c8ad@2a03:6000:1812:100::dd) (Remote host closed the connection) |
| 22:18:00 | × | tri quits (~tri@ool-18bc2e74.dyn.optonline.net) (Read error: Connection reset by peer) |
| 22:18:05 | → | ggb joins (a62ffbaf4f@2a03:6000:1812:100::3ac) |
| 22:18:06 | → | bsima1 joins (9d7e39c8ad@2a03:6000:1812:100::dd) |
| 22:18:06 | → | lukec joins (9dfd4d094e@2a03:6000:1812:100::10e) |
| 22:18:06 | → | filwisher joins (2e6936c793@2a03:6000:1812:100::170) |
| 22:18:07 | → | kuruczgy joins (55b66dd3ae@2a03:6000:1812:100::127f) |
| 22:18:07 | → | fgaz_ joins (1ff9197ed6@2a03:6000:1812:100::11ea) |
| 22:18:07 | → | raghavgururajan joins (ea769b8000@user/raghavgururajan) |
| 22:18:08 | → | jkoshy joins (99b9359beb@user/jkoshy) |
| 22:18:08 | → | b0o joins (0e4a0bf4c9@2a03:6000:1812:100::1bf) |
| 22:18:08 | → | probie joins (cc0b34050a@user/probie) |
| 22:18:08 | → | jmcantrell joins (644f1bed9a@user/jmcantrell) |
| 22:18:10 | → | samhh joins (7569f027cf@2a03:6000:1812:100::e4) |
| 22:18:10 | → | fluffyballoon joins (45ce440a48@2a03:6000:1812:100::e2) |
| 22:18:10 | → | chaitlatte0 joins (ea29c0bb16@user/chaitlatte0) |
| 22:18:12 | → | sus joins (1b7af6299f@user/zeromomentum) |
| 22:18:12 | → | aniketd joins (32aa4844cd@2a03:6000:1812:100::dcb) |
| 22:18:13 | → | evanrelf joins (3addc196af@2a03:6000:1812:100::f0) |
| 22:18:13 | → | jakzale joins (6291399afa@user/jakzale) |
| 22:18:13 | → | whereiseveryone joins (206ba86c98@2a03:6000:1812:100::2e4) |
| 22:18:14 | → | JoelMcCracken joins (5ea8252fbb@2a03:6000:1812:100::10e3) |
| 22:18:14 | → | akspecs joins (00cc8321af@sourcehut/user/akspecs) |
| 22:18:16 | → | fn_lumi joins (3d621153a5@2a03:6000:1812:100::df7) |
| 22:18:16 | → | shreyasminocha joins (51fdc93eda@user/shreyasminocha) |
| 22:18:18 | → | arcadewise joins (52968ed80d@2a03:6000:1812:100::3df) |
| 22:18:18 | → | ymherklotz joins (cb2c9cfbdd@2a03:6000:1812:100::29a) |
| 22:18:18 | → | rselim joins (ce261f06ff@user/milesrout) |
| 22:18:18 | → | henrytill joins (e0180937c3@2a03:6000:1812:100::e8c) |
| 22:18:19 | → | eso joins (a0662dfd5e@2a03:6000:1812:100::1266) |
| 22:18:20 | → | sm2n joins (ae95cb1267@user/sm2n) |
| 22:18:20 | → | fvr joins (ef3e56ca8b@2a03:6000:1812:100::3c4) |
| 22:18:20 | → | brettgilio joins (a35ba67324@2a03:6000:1812:100::260) |
| 22:18:20 | → | cpli joins (77fc530071@2a03:6000:1812:100::252) |
| 22:18:20 | → | Ankhers joins (e99e97ef8e@2a03:6000:1812:100::2a2) |
| 22:18:21 | → | jleightcap joins (7bc4014b62@user/jleightcap) |
| 22:20:34 | → | zetef joins (~quassel@5.2.182.98) |
| 22:20:58 | × | coot quits (~coot@89-69-206-216.dynamic.chello.pl) (Quit: coot) |
| 22:26:04 | → | igemnace joins (~ian@user/igemnace) |
| 22:29:55 | × | Katarushisu1 quits (~Katarushi@cpc147790-finc20-2-0-cust502.4-2.cable.virginm.net) (Quit: The Lounge - https://thelounge.chat) |
| 22:29:58 | <haskellbridge> | 15<Jade> is it just me, or is the fact that ghci clears all top level expressions when using `:check` very unintuitive? |
| 22:30:24 | <haskellbridge> | 15<Jade> I understand for things that actually modify what modules are loaded (load, add, unadd) but why check? |
| 22:31:01 | → | Katarushisu1 joins (~Katarushi@cpc147790-finc20-2-0-cust502.4-2.cable.virginm.net) |
| 22:32:22 | × | mobivme quits (~mobivme@130.105.162.16) (Remote host closed the connection) |
| 22:46:42 | <geekosaur> | the last line I see is "Ok, one module loaded" so I guess it's using :load behind the scenes |
| 22:46:49 | <geekosaur> | (also it seems to be undocumented) |
| 22:47:42 | <geekosaur> | yes, it's recompiling and reloading it, presumably collecting definitions as it goes |
| 22:50:21 | → | nicos joins (~nsm@host98.181-4-190.telecom.net.ar) |
| 23:00:10 | × | mcfilib quits (uid302703@user/mcfilib) (Quit: Connection closed for inactivity) |
| 23:01:53 | × | michalz quits (~michalz@185.246.207.200) (Quit: ZNC 1.8.2 - https://znc.in) |
| 23:04:55 | × | wootehfoot quits (~wootehfoo@user/wootehfoot) (Read error: Connection reset by peer) |
| 23:05:22 | × | nicos quits (~nsm@host98.181-4-190.telecom.net.ar) (Ping timeout: 276 seconds) |
| 23:09:35 | × | takuan quits (~takuan@178-116-218-225.access.telenet.be) (Remote host closed the connection) |
| 23:10:01 | → | nicos joins (~nsm@186.143.136.122) |
| 23:22:07 | × | target_i quits (~target_i@217.175.14.39) (Quit: leaving) |
| 23:24:00 | → | jargon joins (~jargon@211.sub-174-205-230.myvzw.com) |
| 23:25:04 | × | athan quits (~athan@173-042-095-241.biz.spectrum.com) (Ping timeout: 268 seconds) |
| 23:30:01 | × | zetef quits (~quassel@5.2.182.98) (Remote host closed the connection) |
| 23:32:22 | <haskellbridge> | 15<Jade> It doesn't "really" call `load` |
| 23:33:19 | <haskellbridge> | 15<Jade> I think it does recompile "properly" if I understand the effects of the `GhcMonad` correctly, but it sneakily calls `afterLoad` which is otherwise only used for things that *actually* load |
| 23:35:03 | → | [itchyjunk] joins (~itchyjunk@user/itchyjunk/x-7353470) |
| 23:38:57 | × | [_] quits (~itchyjunk@user/itchyjunk/x-7353470) (Ping timeout: 260 seconds) |
| 23:39:40 | → | athan joins (~athan@173-042-095-241.biz.spectrum.com) |
| 23:39:59 | <haskellbridge> | 15<Jade> correction, I don't think it does reload: https://paste.tomsmeding.com/XsffXpWv |
| 23:42:19 | × | nicos quits (~nsm@186.143.136.122) (Read error: Connection reset by peer) |
| 23:43:34 | → | nicos joins (~nsm@2800:2131:5400:883:28f6:1624:5755:79b0) |
| 23:45:02 | <geekosaur> | then I'd look to see if `afterLoad` is what resets CAFs etc. |
| 23:45:32 | <haskellbridge> | 15<Jade> yes it is, and that's why I was so confused as to why `check` uses it |
| 23:45:56 | <haskellbridge> | 15<Jade> because it doesn't seem like `check` would need to reset CAFs |
| 23:46:48 | <haskellbridge> | 15<Jade> unless the intention of check is to reload, but then it falls short on that end - something doesn't seem right here |
| 23:49:53 | → | samhh_ joins (7569f027cf@2a03:6000:1812:100::e4) |
| 23:50:10 | sprout_ | is now known as sprout |
| 23:50:36 | × | gmg quits (~user@user/gehmehgeh) (Quit: Leaving) |
| 23:50:53 | × | acidjnk_new quits (~acidjnk@p200300d6e737e7740dc421a1b52e3505.dip0.t-ipconnect.de) (Ping timeout: 240 seconds) |
| 23:52:21 | × | Axman6 quits (~Axman6@user/axman6) (Remote host closed the connection) |
| 23:54:00 | <geekosaur> | I wonder if the recompile changes things in such a way that e.g. background threads need to be killed |
| 23:56:08 | → | Axman6 joins (~Axman6@user/axman6) |
| 23:57:51 | × | CiaoSen quits (~Jura@2a05:5800:287:6f00:ca4b:d6ff:fec1:99da) (Ping timeout: 256 seconds) |
All times are in UTC on 2024-01-27.