2024/01/27

2024-01-27 00:05:13 +0100peterbecich(~Thunderbi@047-229-123-186.res.spectrum.com) (Ping timeout: 264 seconds)
2024-01-27 00:15:01 +0100tcard(~tcard@2400:4051:5801:7500:cf17:befc:ff82:5303) (Quit: Leaving)
2024-01-27 00:16:47 +0100tcard(~tcard@2400:4051:5801:7500:cf17:befc:ff82:5303)
2024-01-27 00:19:38 +0100nicos(~nsm@186.143.134.1) (Read error: Connection reset by peer)
2024-01-27 00:22:22 +0100nicos(~nsm@2800:2131:5400:883:28f6:1624:5755:79b0)
2024-01-27 00:22:49 +0100average(uid473595@user/average)
2024-01-27 00:33:35 +0100remmie(ianremsen@tilde.team) (Ping timeout: 264 seconds)
2024-01-27 00:34:02 +0100[itchyjunk](~itchyjunk@user/itchyjunk/x-7353470)
2024-01-27 00:37:37 +0100[_](~itchyjunk@user/itchyjunk/x-7353470) (Ping timeout: 264 seconds)
2024-01-27 00:40:55 +0100tri(~tri@ool-18bc2e74.dyn.optonline.net) (Remote host closed the connection)
2024-01-27 00:57:26 +0100lovasko(~lovasko@213.55.225.33) (Quit: Client closed)
2024-01-27 01:10:51 +0100 <hackyhacker> juri_: Can you share a bit more about what you're testing? Did you figure it out in the meantime?
2024-01-27 01:11:19 +0100gmg(~user@user/gehmehgeh) (Quit: Leaving)
2024-01-27 01:14:49 +0100crook1389(uid581388@id-581388.ilkley.irccloud.com) (Quit: Connection closed for inactivity)
2024-01-27 01:15:20 +0100stiell(~stiell@gateway/tor-sasl/stiell) (Ping timeout: 255 seconds)
2024-01-27 01:15:43 +0100a51(a51@gateway/vpn/protonvpn/a51) (Ping timeout: 268 seconds)
2024-01-27 01:15:53 +0100stiell(~stiell@gateway/tor-sasl/stiell)
2024-01-27 01:23:03 +0100hackyhacker(~user@212.71.9.113) (Quit: rcirc on GNU Emacs 29.1)
2024-01-27 01:29:55 +0100peterbecich(~Thunderbi@047-229-123-186.res.spectrum.com)
2024-01-27 01:29:56 +0100hackyhacker(~hackyhack@212.71.9.113)
2024-01-27 01:30:44 +0100johnw(~johnw@69.62.242.138) (Quit: ZNC - http://znc.in)
2024-01-27 01:31:17 +0100Tuplanolla(~Tuplanoll@91-159-68-95.elisa-laajakaista.fi) (Quit: Leaving.)
2024-01-27 01:45:19 +0100foul_owl(~kerry@174-21-148-34.tukw.qwest.net) (Ping timeout: 268 seconds)
2024-01-27 01:58:20 +0100foul_owl(~kerry@185.219.141.160)
2024-01-27 02:12:28 +0100tremon(~tremon@83.80.159.219) (Quit: getting boxed in)
2024-01-27 02:26:01 +0100hackyhacker(~hackyhack@212.71.9.113) (Ping timeout: 276 seconds)
2024-01-27 02:33:17 +0100ddellacosta(~ddellacos@ool-44c73d16.dyn.optonline.net)
2024-01-27 02:34:13 +0100tabemann(~tabemann@2600:1700:7990:24e0:d92c:5469:8cb0:8d14)
2024-01-27 02:35:16 +0100tabemann_(~tabemann@2600:1700:7990:24e0:aad7:ae4:6df1:f3e8) (Ping timeout: 268 seconds)
2024-01-27 02:36:30 +0100Lord_of_Life(~Lord@user/lord-of-life/x-2819915) (Ping timeout: 268 seconds)
2024-01-27 02:36:51 +0100Lord_of_Life(~Lord@user/lord-of-life/x-2819915)
2024-01-27 02:44:29 +0100thegeekinside(~thegeekin@189.180.65.186) (Ping timeout: 240 seconds)
2024-01-27 02:47:42 +0100tabemann(~tabemann@2600:1700:7990:24e0:d92c:5469:8cb0:8d14) (Quit: Leaving)
2024-01-27 02:48:50 +0100mima(~mmh@aftr-62-216-211-173.dynamic.mnet-online.de) (Ping timeout: 268 seconds)
2024-01-27 02:53:07 +0100igemnace(~ian@user/igemnace) (Remote host closed the connection)
2024-01-27 03:08:10 +0100tri(~tri@ool-18bc2e74.dyn.optonline.net)
2024-01-27 03:09:34 +0100shapr(~user@c-24-218-186-89.hsd1.ma.comcast.net) (Ping timeout: 276 seconds)
2024-01-27 03:12:38 +0100rosco(~rosco@175.136.156.77)
2024-01-27 03:14:13 +0100peterbecich(~Thunderbi@047-229-123-186.res.spectrum.com) (Ping timeout: 264 seconds)
2024-01-27 03:18:02 +0100fansly(~fansly@2404:c0:2020::cf0:141d)
2024-01-27 03:18:43 +0100tabemann(~tabemann@2600:1700:7990:24e0:f3c9:7285:9b5:ded8)
2024-01-27 03:24:29 +0100otto_s(~daniel@p54993447.dip0.t-ipconnect.de)
2024-01-27 03:24:39 +0100otto_s(~daniel@p54993447.dip0.t-ipconnect.de) ()
2024-01-27 03:24:43 +0100otto_s(~daniel@p54993447.dip0.t-ipconnect.de)
2024-01-27 03:24:49 +0100otto_s(~daniel@p54993447.dip0.t-ipconnect.de) ()
2024-01-27 03:25:22 +0100otto_s(~daniel@p54993447.dip0.t-ipconnect.de)
2024-01-27 03:31:44 +0100otto_s(~daniel@p54993447.dip0.t-ipconnect.de) (Ping timeout: 252 seconds)
2024-01-27 03:31:55 +0100gorignak(~gorignak@user/gorignak) (Quit: quit)
2024-01-27 03:32:12 +0100otto_s(~otto_s@p5499379a.dip0.t-ipconnect.de)
2024-01-27 03:46:23 +0100tri(~tri@ool-18bc2e74.dyn.optonline.net) (Remote host closed the connection)
2024-01-27 03:47:13 +0100eggplantade(~Eggplanta@2600:1700:38c5:d800:5014:5b74:113d:d036) (Remote host closed the connection)
2024-01-27 03:47:24 +0100bilegeek(~bilegeek@2600:1008:b0a2:2201:7d6a:5c17:5067:9b92)
2024-01-27 03:47:31 +0100eggplantade(~Eggplanta@2600:1700:38c5:d800:5014:5b74:113d:d036)
2024-01-27 03:51:24 +0100szkl(uid110435@uxbridge.irccloud.com) (Quit: Connection closed for inactivity)
2024-01-27 03:53:32 +0100peterbecich(~Thunderbi@047-229-123-186.res.spectrum.com)
2024-01-27 04:03:16 +0100fansly(~fansly@2404:c0:2020::cf0:141d) (Remote host closed the connection)
2024-01-27 04:18:34 +0100gorignak(~gorignak@user/gorignak)
2024-01-27 04:31:13 +0100sm(~user@plaintextaccounting/sm)
2024-01-27 04:35:39 +0100pavonia(~user@user/siracusa) (Quit: Bye!)
2024-01-27 04:37:42 +0100rosco(~rosco@175.136.156.77) (Quit: Lost terminal)
2024-01-27 04:48:53 +0100td_(~td@i5387091B.versanet.de) (Ping timeout: 240 seconds)
2024-01-27 04:49:37 +0100TonyStone(~TonyStone@074-076-057-186.res.spectrum.com) (Quit: Leaving)
2024-01-27 04:51:04 +0100td_(~td@i5387092D.versanet.de)
2024-01-27 05:00:55 +0100peterbecich(~Thunderbi@047-229-123-186.res.spectrum.com) (Ping timeout: 256 seconds)
2024-01-27 05:05:35 +0100czy`(~user@114.226.59.181) (Remote host closed the connection)
2024-01-27 05:05:35 +0100czy(~user@114.226.59.181) (Remote host closed the connection)
2024-01-27 05:12:14 +0100Lycurgus(~georg@user/Lycurgus)
2024-01-27 05:14:09 +0100otto_s(~otto_s@p5499379a.dip0.t-ipconnect.de) (Ping timeout: 260 seconds)
2024-01-27 05:18:00 +0100nicos(~nsm@2800:2131:5400:883:28f6:1624:5755:79b0) (Read error: Connection reset by peer)
2024-01-27 05:18:13 +0100nicos(~nsm@2800:2131:5400:883:28f6:1624:5755:79b0)
2024-01-27 05:50:26 +0100tri(~tri@ool-18bc2e74.dyn.optonline.net)
2024-01-27 05:56:13 +0100aforemny_(~aforemny@i59F516CF.versanet.de)
2024-01-27 05:56:13 +0100aforemny(~aforemny@2001:9e8:6cda:4600:7747:ed4:88dc:55a7) (Ping timeout: 264 seconds)
2024-01-27 06:07:06 +0100whatsupdoc(uid509081@id-509081.hampstead.irccloud.com) (Quit: Connection closed for inactivity)
2024-01-27 06:18:36 +0100Lycurgus(~georg@user/Lycurgus) (Quit: leaving)
2024-01-27 06:28:32 +0100trev(~trev@user/trev)
2024-01-27 06:40:28 +0100thegeekinside(~thegeekin@189.180.65.186)
2024-01-27 06:45:38 +0100thegeekinside(~thegeekin@189.180.65.186) (Ping timeout: 268 seconds)
2024-01-27 07:06:00 +0100rosco(~rosco@175.136.156.77)
2024-01-27 07:06:29 +0100tri(~tri@ool-18bc2e74.dyn.optonline.net) (Remote host closed the connection)
2024-01-27 07:07:43 +0100tri(~tri@ool-18bc2e74.dyn.optonline.net)
2024-01-27 07:12:40 +0100tri(~tri@ool-18bc2e74.dyn.optonline.net) (Ping timeout: 276 seconds)
2024-01-27 07:15:24 +0100takuan(~takuan@178-116-218-225.access.telenet.be)
2024-01-27 07:20:01 +0100myxos(~myxos@065-028-251-121.inf.spectrum.com) (Remote host closed the connection)
2024-01-27 07:21:51 +0100echoreply(~echoreply@45.32.163.16) (Quit: WeeChat 2.8)
2024-01-27 07:23:12 +0100echoreply(~echoreply@2001:19f0:9002:1f3b:5400:ff:fe6f:8b8d)
2024-01-27 07:25:36 +0100harveypwca(~harveypwc@2601:246:c201:d680:59a0:7761:1557:ead5)
2024-01-27 07:33:06 +0100Szilva(~Szilva@87-97-12-229.pool.digikabel.hu) (Remote host closed the connection)
2024-01-27 07:33:17 +0100myxos(~myxos@065-028-251-121.inf.spectrum.com)
2024-01-27 07:33:29 +0100tri(~tri@ool-18bc2e74.dyn.optonline.net)
2024-01-27 07:37:40 +0100tri(~tri@ool-18bc2e74.dyn.optonline.net) (Ping timeout: 246 seconds)
2024-01-27 07:58:21 +0100yeahitsme(~bob@user/yeahitsme)
2024-01-27 08:06:50 +0100tri(~tri@ool-18bc2e74.dyn.optonline.net)
2024-01-27 08:10:53 +0100tri(~tri@ool-18bc2e74.dyn.optonline.net) (Ping timeout: 240 seconds)
2024-01-27 08:15:25 +0100causal(~eric@50.35.85.7)
2024-01-27 08:28:31 +0100Unicorn_Princess(~Unicorn_P@user/Unicorn-Princess/x-3540542)
2024-01-27 08:34:28 +0100peterbecich(~Thunderbi@047-229-123-186.res.spectrum.com)
2024-01-27 08:35:04 +0100Vajb(~Vajb@n7kymlrhl8zspe1o45k-1.v6.elisa-mobile.fi)
2024-01-27 08:37:40 +0100tromp(~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
2024-01-27 08:39:20 +0100tri(~tri@ool-18bc2e74.dyn.optonline.net)
2024-01-27 08:40:02 +0100rosco(~rosco@175.136.156.77) (Read error: Connection reset by peer)
2024-01-27 08:44:41 +0100tri(~tri@ool-18bc2e74.dyn.optonline.net) (Ping timeout: 252 seconds)
2024-01-27 08:57:46 +0100harveypwca(~harveypwc@2601:246:c201:d680:59a0:7761:1557:ead5) (Quit: Leaving)
2024-01-27 09:02:29 +0100rosco(~rosco@175.136.156.77)
2024-01-27 09:10:55 +0100econo_(uid147250@id-147250.tinside.irccloud.com) (Quit: Connection closed for inactivity)
2024-01-27 09:26:13 +0100tri(~tri@ool-18bc2e74.dyn.optonline.net)
2024-01-27 09:28:46 +0100sord937(~sord937@gateway/tor-sasl/sord937)
2024-01-27 09:28:48 +0100sord937(~sord937@gateway/tor-sasl/sord937) (Client Quit)
2024-01-27 09:29:07 +0100sord937(~sord937@gateway/tor-sasl/sord937)
2024-01-27 09:30:39 +0100tri(~tri@ool-18bc2e74.dyn.optonline.net) (Ping timeout: 260 seconds)
2024-01-27 09:37:31 +0100sord937(~sord937@gateway/tor-sasl/sord937) (Remote host closed the connection)
2024-01-27 09:38:23 +0100sord937(~sord937@gateway/tor-sasl/sord937)
2024-01-27 09:41:23 +0100shriekingnoise(~shrieking@186.137.175.87) (Ping timeout: 268 seconds)
2024-01-27 09:41:23 +0100euleritian(~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) (Read error: Connection reset by peer)
2024-01-27 09:41:39 +0100euleritian(~euleritia@77.22.252.56)
2024-01-27 09:47:26 +0100sord937(~sord937@gateway/tor-sasl/sord937) (Quit: sord937)
2024-01-27 09:47:42 +0100Unicorn_Princess(~Unicorn_P@user/Unicorn-Princess/x-3540542) (Remote host closed the connection)
2024-01-27 09:49:37 +0100tri(~tri@ool-18bc2e74.dyn.optonline.net)
2024-01-27 09:50:57 +0100danza(~danza@151.47.71.134)
2024-01-27 09:54:35 +0100tri(~tri@ool-18bc2e74.dyn.optonline.net) (Ping timeout: 264 seconds)
2024-01-27 09:59:23 +0100Square2(~Square@user/square) (Ping timeout: 264 seconds)
2024-01-27 10:05:12 +0100Tisoxin(~Ikosit@user/ikosit) (Quit: The Lounge - https://thelounge.chat)
2024-01-27 10:05:33 +0100Tisoxin(~Ikosit@user/ikosit)
2024-01-27 10:07:28 +0100alexherbo2(~alexherbo@2a02-8440-3140-b89b-a08f-42e2-c7fb-39b2.rev.sfr.net) (Remote host closed the connection)
2024-01-27 10:07:49 +0100alexherbo2(~alexherbo@2a02-8440-3140-b89b-a08f-42e2-c7fb-39b2.rev.sfr.net)
2024-01-27 10:10:17 +0100_ht(~Thunderbi@28-52-174-82.ftth.glasoperator.nl)
2024-01-27 10:11:17 +0100azimut(~azimut@gateway/tor-sasl/azimut) (Ping timeout: 255 seconds)
2024-01-27 10:14:38 +0100fansly(~fansly@182.0.171.248)
2024-01-27 10:16:04 +0100megaTherion(~therion@unix.io) (Quit: ZNC 1.8.2 - https://znc.in)
2024-01-27 10:16:34 +0100eggplantade(~Eggplanta@2600:1700:38c5:d800:5014:5b74:113d:d036) (Remote host closed the connection)
2024-01-27 10:17:11 +0100megaTherion(~therion@unix.io)
2024-01-27 10:20:08 +0100tri(~tri@ool-18bc2e74.dyn.optonline.net)
2024-01-27 10:20:35 +0100tromp(~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
2024-01-27 10:21:28 +0100euleritian(~euleritia@77.22.252.56) (Ping timeout: 246 seconds)
2024-01-27 10:22:33 +0100euleritian(~euleritia@dynamic-176-007-002-044.176.7.pool.telefonica.de)
2024-01-27 10:22:40 +0100bobby(~bob@80.158-248-1.customer.lyse.net)
2024-01-27 10:22:45 +0100yeahitsme(~bob@user/yeahitsme) (Read error: Connection reset by peer)
2024-01-27 10:23:49 +0100peterbecich(~Thunderbi@047-229-123-186.res.spectrum.com) (Ping timeout: 264 seconds)
2024-01-27 10:25:45 +0100tri(~tri@ool-18bc2e74.dyn.optonline.net) (Ping timeout: 256 seconds)
2024-01-27 10:29:26 +0100euleritian(~euleritia@dynamic-176-007-002-044.176.7.pool.telefonica.de) (Read error: Connection reset by peer)
2024-01-27 10:29:43 +0100euleritian(~euleritia@77.22.252.56)
2024-01-27 10:34:29 +0100euleritian(~euleritia@77.22.252.56) (Read error: Connection reset by peer)
2024-01-27 10:35:13 +0100euleritian(~euleritia@77.22.252.56)
2024-01-27 10:39:26 +0100tri(~tri@ool-18bc2e74.dyn.optonline.net)
2024-01-27 10:44:59 +0100tri(~tri@ool-18bc2e74.dyn.optonline.net) (Ping timeout: 264 seconds)
2024-01-27 10:45:01 +0100gmg(~user@user/gehmehgeh)
2024-01-27 10:46:01 +0100mobivme(~mobivme@130.105.162.252)
2024-01-27 10:47:09 +0100alexherbo2(~alexherbo@2a02-8440-3140-b89b-a08f-42e2-c7fb-39b2.rev.sfr.net) (Remote host closed the connection)
2024-01-27 10:47:28 +0100alexherbo2(~alexherbo@2a02-8440-3140-b89b-a08f-42e2-c7fb-39b2.rev.sfr.net)
2024-01-27 10:53:45 +0100SAJAT(~sajat@87-97-12-229.pool.digikabel.hu)
2024-01-27 10:53:46 +0100eggplantade(~Eggplanta@2600:1700:38c5:d800:5014:5b74:113d:d036)
2024-01-27 10:53:49 +0100Erutuon(~Erutuon@user/erutuon) (Ping timeout: 264 seconds)
2024-01-27 10:53:53 +0100target_i(~target_i@217.175.14.39)
2024-01-27 10:58:59 +0100tri(~tri@ool-18bc2e74.dyn.optonline.net)
2024-01-27 11:03:41 +0100tri(~tri@ool-18bc2e74.dyn.optonline.net) (Ping timeout: 260 seconds)
2024-01-27 11:05:00 +0100Erutuon(~Erutuon@user/erutuon)
2024-01-27 11:07:03 +0100Tuplanolla(~Tuplanoll@91-159-68-95.elisa-laajakaista.fi)
2024-01-27 11:09:18 +0100bilegeek(~bilegeek@2600:1008:b0a2:2201:7d6a:5c17:5067:9b92) (Quit: Leaving)
2024-01-27 11:09:33 +0100fansly(~fansly@182.0.171.248) (Remote host closed the connection)
2024-01-27 11:14:09 +0100mobivme(~mobivme@130.105.162.252) (Remote host closed the connection)
2024-01-27 11:15:33 +0100Erutuon(~Erutuon@user/erutuon) (Quit: WeeChat 2.8)
2024-01-27 11:18:09 +0100mei(~mei@user/mei) (Remote host closed the connection)
2024-01-27 11:18:30 +0100mima(~mmh@aftr-62-216-211-171.dynamic.mnet-online.de)
2024-01-27 11:30:41 +0100tri(~tri@ool-18bc2e74.dyn.optonline.net)
2024-01-27 11:32:39 +0100rosco(~rosco@175.136.156.77) (Quit: Lost terminal)
2024-01-27 11:32:53 +0100bobby(~bob@80.158-248-1.customer.lyse.net) (Changing host)
2024-01-27 11:32:53 +0100bobby(~bob@user/yeahitsme)
2024-01-27 11:34:25 +0100alexherbo2(~alexherbo@2a02-8440-3140-b89b-a08f-42e2-c7fb-39b2.rev.sfr.net) (Remote host closed the connection)
2024-01-27 11:34:45 +0100alexherbo2(~alexherbo@2a02-8440-3140-b89b-a08f-42e2-c7fb-39b2.rev.sfr.net)
2024-01-27 11:35:11 +0100coot(~coot@89-69-206-216.dynamic.chello.pl)
2024-01-27 11:35:12 +0100coot(~coot@89-69-206-216.dynamic.chello.pl) (Remote host closed the connection)
2024-01-27 11:35:24 +0100coot(~coot@89-69-206-216.dynamic.chello.pl)
2024-01-27 11:36:24 +0100tri(~tri@ool-18bc2e74.dyn.optonline.net) (Ping timeout: 268 seconds)
2024-01-27 11:39:03 +0100tzh(~tzh@c-71-193-181-0.hsd1.or.comcast.net) (Quit: zzz)
2024-01-27 11:40:00 +0100lambdabot(~lambdabot@haskell/bot/lambdabot) (Remote host closed the connection)
2024-01-27 11:40:30 +0100lambdabot(~lambdabot@silicon.int-e.eu)
2024-01-27 11:40:30 +0100lambdabot(~lambdabot@silicon.int-e.eu) (Changing host)
2024-01-27 11:40:30 +0100lambdabot(~lambdabot@haskell/bot/lambdabot)
2024-01-27 11:40:30 +0100ChanServ+v lambdabot
2024-01-27 11:46:00 +0100tromp(~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
2024-01-27 11:50:14 +0100fansly(~fansly@2001:448a:2010:476e:c9c:17f1:874c:ee93)
2024-01-27 12:02:57 +0100euleritian(~euleritia@77.22.252.56) (Read error: Connection reset by peer)
2024-01-27 12:03:35 +0100euleritian(~euleritia@77.22.252.56)
2024-01-27 12:04:50 +0100tri(~tri@ool-18bc2e74.dyn.optonline.net)
2024-01-27 12:11:14 +0100tri(~tri@ool-18bc2e74.dyn.optonline.net) (Ping timeout: 268 seconds)
2024-01-27 12:12:03 +0100Sgeo(~Sgeo@user/sgeo) (Read error: Connection reset by peer)
2024-01-27 12:14:52 +0100welterde(welterde@thinkbase.srv.welterde.de) (Quit: Moving day)
2024-01-27 12:14:52 +0100euleritian(~euleritia@77.22.252.56) (Read error: Connection reset by peer)
2024-01-27 12:15:05 +0100euleritian(~euleritia@77.22.252.56)
2024-01-27 12:20:31 +0100EvanR(~EvanR@user/evanr) (Ping timeout: 260 seconds)
2024-01-27 12:34:30 +0100[_](~itchyjunk@user/itchyjunk/x-7353470)
2024-01-27 12:37:41 +0100AlexZenon(~alzenon@94.233.241.143) (Ping timeout: 240 seconds)
2024-01-27 12:38:13 +0100[itchyjunk](~itchyjunk@user/itchyjunk/x-7353470) (Ping timeout: 264 seconds)
2024-01-27 12:39:18 +0100otto_s(~otto_s@p5499379a.dip0.t-ipconnect.de)
2024-01-27 12:39:22 +0100AlexNoo(~AlexNoo@94.233.241.143) (Ping timeout: 246 seconds)
2024-01-27 12:39:52 +0100tri(~tri@ool-18bc2e74.dyn.optonline.net)
2024-01-27 12:44:58 +0100tri(~tri@ool-18bc2e74.dyn.optonline.net) (Ping timeout: 246 seconds)
2024-01-27 12:50:47 +0100driib(~driib@vmi931078.contaboserver.net) (Quit: The Lounge - https://thelounge.chat)
2024-01-27 12:55:50 +0100NiKaN(sid385034@id-385034.helmsley.irccloud.com) (Ping timeout: 256 seconds)
2024-01-27 12:58:57 +0100average(uid473595@user/average) (Ping timeout: 260 seconds)
2024-01-27 12:59:07 +0100alexherbo2(~alexherbo@2a02-8440-3140-b89b-a08f-42e2-c7fb-39b2.rev.sfr.net) (Remote host closed the connection)
2024-01-27 12:59:27 +0100alexherbo2(~alexherbo@2a02-8440-3140-b89b-a08f-42e2-c7fb-39b2.rev.sfr.net)
2024-01-27 12:59:38 +0100NiKaN(sid385034@id-385034.helmsley.irccloud.com)
2024-01-27 13:01:33 +0100average(uid473595@user/average)
2024-01-27 13:02:30 +0100tri(~tri@ool-18bc2e74.dyn.optonline.net)
2024-01-27 13:03:16 +0100igemnace(~ian@user/igemnace)
2024-01-27 13:08:08 +0100tri(~tri@ool-18bc2e74.dyn.optonline.net) (Ping timeout: 252 seconds)
2024-01-27 13:10:03 +0100driib(~driib@vmi931078.contaboserver.net)
2024-01-27 13:14:13 +0100 <ski> albet70 : for nqCPS, you may need an indexed monad
2024-01-27 13:15:12 +0100causal(~eric@50.35.85.7) (Quit: WeeChat 4.1.1)
2024-01-27 13:21:49 +0100driib(~driib@vmi931078.contaboserver.net) (Quit: The Lounge - https://thelounge.chat)
2024-01-27 13:23:01 +0100tri(~tri@ool-18bc2e74.dyn.optonline.net)
2024-01-27 13:23:09 +0100driib(~driib@vmi931078.contaboserver.net)
2024-01-27 13:23:55 +0100szkl(uid110435@id-110435.uxbridge.irccloud.com)
2024-01-27 13:25:45 +0100AlexNoo(~AlexNoo@178.34.160.228)
2024-01-27 13:30:10 +0100tri(~tri@ool-18bc2e74.dyn.optonline.net) (Ping timeout: 268 seconds)
2024-01-27 13:36:50 +0100fansly(~fansly@2001:448a:2010:476e:c9c:17f1:874c:ee93) (Remote host closed the connection)
2024-01-27 13:37:10 +0100AlexZenon(~alzenon@178.34.160.228)
2024-01-27 13:44:29 +0100tri(~tri@ool-18bc2e74.dyn.optonline.net)
2024-01-27 13:45:35 +0100eggplantade(~Eggplanta@2600:1700:38c5:d800:5014:5b74:113d:d036) (Ping timeout: 268 seconds)
2024-01-27 13:48:35 +0100danza(~danza@151.47.71.134) (Ping timeout: 264 seconds)
2024-01-27 13:49:06 +0100ph88(~ph88@ip5b403f30.dynamic.kabel-deutschland.de)
2024-01-27 13:58:14 +0100fansly(~fansly@103.3.221.236)
2024-01-27 14:09:41 +0100fansly(~fansly@103.3.221.236) (Ping timeout: 240 seconds)
2024-01-27 14:10:03 +0100pavonia(~user@user/siracusa)
2024-01-27 14:10:27 +0100fansly(~fansly@2001:448a:2010:476e:c9c:17f1:874c:ee93)
2024-01-27 14:15:28 +0100ph88(~ph88@ip5b403f30.dynamic.kabel-deutschland.de) (Read error: Connection reset by peer)
2024-01-27 14:16:59 +0100eggplantade(~Eggplanta@2600:1700:38c5:d800:5014:5b74:113d:d036)
2024-01-27 14:21:54 +0100Lycurgus(~georg@user/Lycurgus)
2024-01-27 14:22:32 +0100jmdaemon(~jmdaemon@user/jmdaemon) (Ping timeout: 256 seconds)
2024-01-27 14:30:24 +0100fendor(~fendor@2a02:8388:1605:d100:267b:1353:13d7:4f0c)
2024-01-27 14:34:33 +0100tromp(~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
2024-01-27 14:39:02 +0100FinnElija(~finn_elij@user/finn-elija/x-0085643) (Ping timeout: 255 seconds)
2024-01-27 14:39:10 +0100tromp(~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
2024-01-27 14:42:46 +0100FinnElija(~finn_elij@user/finn-elija/x-0085643)
2024-01-27 14:42:48 +0100fansly(~fansly@2001:448a:2010:476e:c9c:17f1:874c:ee93) (Remote host closed the connection)
2024-01-27 14:44:38 +0100FinnElija(~finn_elij@user/finn-elija/x-0085643) (Remote host closed the connection)
2024-01-27 14:45:15 +0100FinnElija(~finn_elij@user/finn-elija/x-0085643)
2024-01-27 14:46:45 +0100tri(~tri@ool-18bc2e74.dyn.optonline.net) (Ping timeout: 260 seconds)
2024-01-27 14:47:14 +0100Bylllie(~Bylllie@37.143.55.92)
2024-01-27 14:47:18 +0100tri(~tri@ool-18bc2e74.dyn.optonline.net)
2024-01-27 14:47:33 +0100adium(adium@user/adium) (Ping timeout: 256 seconds)
2024-01-27 14:49:34 +0100nicos(~nsm@2800:2131:5400:883:28f6:1624:5755:79b0) (Ping timeout: 246 seconds)
2024-01-27 14:49:37 +0100Bylllie(~Bylllie@37.143.55.92) ()
2024-01-27 14:49:56 +0100nicos(~nsm@186.143.200.157)
2024-01-27 14:51:24 +0100tri(~tri@ool-18bc2e74.dyn.optonline.net) (Remote host closed the connection)
2024-01-27 14:51:36 +0100tri(~tri@ool-18bc2e74.dyn.optonline.net)
2024-01-27 14:54:02 +0100tri(~tri@ool-18bc2e74.dyn.optonline.net) (Remote host closed the connection)
2024-01-27 14:55:37 +0100tri(~tri@ool-18bc2e74.dyn.optonline.net)
2024-01-27 14:57:22 +0100tri(~tri@ool-18bc2e74.dyn.optonline.net) (Remote host closed the connection)
2024-01-27 15:01:04 +0100tri(~tri@ool-18bc2e74.dyn.optonline.net)
2024-01-27 15:04:44 +0100fansly(~fansly@2001:448a:2010:476e:c9c:17f1:874c:ee93)
2024-01-27 15:07:15 +0100tri(~tri@ool-18bc2e74.dyn.optonline.net) (Ping timeout: 256 seconds)
2024-01-27 15:09:52 +0100a51(a51@gateway/vpn/protonvpn/a51)
2024-01-27 15:11:55 +0100 <albet70> ski , what is an indexed monad?
2024-01-27 15:12:35 +0100 <albet70> what does nq stand for?
2024-01-27 15:13:13 +0100aljazmc(~aljazmc@user/aljazmc)
2024-01-27 15:16:56 +0100bliminse(~bliminse@user/bliminse) (Quit: leaving)
2024-01-27 15:22:40 +0100gorignak(~gorignak@user/gorignak) (Quit: quit)
2024-01-27 15:23:46 +0100nicos(~nsm@186.143.200.157) (Read error: Connection reset by peer)
2024-01-27 15:24:13 +0100nicos(~nsm@186.141.133.46)
2024-01-27 15:25:51 +0100Lycurgus(~georg@user/Lycurgus) (Quit: leaving)
2024-01-27 15:33:07 +0100sprout_(~quassel@2a02:a448:3a80:0:885c:b783:ab5:eac3)
2024-01-27 15:34:58 +0100 <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
2024-01-27 15:36:17 +0100sprout(~quassel@2a02-a448-3a80-0-c82d-ac36-f811-1f58.fixed6.kpn.net) (Ping timeout: 268 seconds)
2024-01-27 15:37:29 +0100 <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
2024-01-27 15:38:01 +0100 <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
2024-01-27 15:38:39 +0100 <ski> @type forM
2024-01-27 15:38:40 +0100 <lambdabot> (Traversable t, Monad m) => t a -> (a -> m b) -> m (t b)
2024-01-27 15:40:24 +0100 <ski> this can give us `iterM :: Traversable t => t a -> IxContT m (t b) b a'
2024-01-27 15:41:06 +0100szkl(uid110435@id-110435.uxbridge.irccloud.com) (Quit: Connection closed for inactivity)
2024-01-27 15:41:25 +0100 <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'
2024-01-27 15:48:25 +0100nicos(~nsm@186.141.133.46) (Read error: Connection reset by peer)
2024-01-27 15:49:02 +0100nicos(~nsm@2800:2131:5400:883:28f6:1624:5755:79b0)
2024-01-27 15:49:04 +0100 <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
2024-01-27 15:49:10 +0100 <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
2024-01-27 15:53:42 +0100azimut(~azimut@gateway/tor-sasl/azimut)
2024-01-27 15:53:45 +0100michalz(~michalz@185.246.207.200)
2024-01-27 15:54:21 +0100 <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)
2024-01-27 15:55:09 +0100 <ski> (you need an old version of GHC, that still supports `LinearImplicitParameters', in order to make that run)
2024-01-27 15:55:58 +0100adium(adium@user/adium)
2024-01-27 15:56:16 +0100tri(~tri@ool-18bc2e74.dyn.optonline.net)
2024-01-27 15:58:50 +0100 <ski> oh, and here's a dpiponi article about indexed/parameterized monads, <http://blog.sigfpe.com/2009/02/beyond-monads.html> (2009-02-14)
2024-01-27 16:00:42 +0100bliminse(~bliminse@user/bliminse)
2024-01-27 16:07:46 +0100tri_(~tri@2607:fb90:5502:9b78:3c5e:bb:8ec1:2792)
2024-01-27 16:07:57 +0100 <albet70> wow
2024-01-27 16:11:38 +0100 <ski> Oleg has more info on delimited/composable continuations, see <https://okmij.org/ftp/continuations/index.html>
2024-01-27 16:11:49 +0100tri(~tri@ool-18bc2e74.dyn.optonline.net) (Ping timeout: 264 seconds)
2024-01-27 16:11:51 +0100fansly(~fansly@2001:448a:2010:476e:c9c:17f1:874c:ee93) (Remote host closed the connection)
2024-01-27 16:12:10 +0100 <ski> oh, and "Implementations of delimited control in OCaml, Haskell, Scheme" <https://okmij.org/ftp/continuations/implementations.html>
2024-01-27 16:14:42 +0100 <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.
2024-01-27 16:14:48 +0100welterde(welterde@thinkbase.srv.welterde.de)
2024-01-27 16:17:58 +0100fansly(~fansly@2001:448a:2010:476e:c9c:17f1:874c:ee93)
2024-01-27 16:18:28 +0100fansly(~fansly@2001:448a:2010:476e:c9c:17f1:874c:ee93) (Remote host closed the connection)
2024-01-27 16:20:53 +0100euleritian(~euleritia@77.22.252.56) (Ping timeout: 240 seconds)
2024-01-27 16:21:20 +0100euleritian(~euleritia@dynamic-176-007-006-139.176.7.pool.telefonica.de)
2024-01-27 16:21:38 +0100azimut(~azimut@gateway/tor-sasl/azimut) (Ping timeout: 255 seconds)
2024-01-27 16:22:00 +0100a51(a51@gateway/vpn/protonvpn/a51) (Quit: WeeChat 4.2.1)
2024-01-27 16:24:50 +0100 <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.
2024-01-27 16:30:18 +0100euleritian(~euleritia@dynamic-176-007-006-139.176.7.pool.telefonica.de) (Read error: Connection reset by peer)
2024-01-27 16:30:37 +0100euleritian(~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de)
2024-01-27 16:34:15 +0100alexherbo2(~alexherbo@2a02-8440-3140-b89b-a08f-42e2-c7fb-39b2.rev.sfr.net) (Remote host closed the connection)
2024-01-27 16:35:45 +0100tri_(~tri@2607:fb90:5502:9b78:3c5e:bb:8ec1:2792) (Remote host closed the connection)
2024-01-27 16:37:07 +0100tri(~tri@ool-18bc2e74.dyn.optonline.net)
2024-01-27 16:37:38 +0100euleritian(~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) (Ping timeout: 268 seconds)
2024-01-27 16:38:34 +0100euleritian(~euleritia@dynamic-176-007-006-139.176.7.pool.telefonica.de)
2024-01-27 16:40:04 +0100zetef(~quassel@5.2.182.98)
2024-01-27 16:40:41 +0100euleritian(~euleritia@dynamic-176-007-006-139.176.7.pool.telefonica.de) (Read error: Connection reset by peer)
2024-01-27 16:40:46 +0100fansly(~fansly@2001:448a:2010:476e:c9c:17f1:874c:ee93)
2024-01-27 16:40:59 +0100euleritian(~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de)
2024-01-27 16:41:33 +0100tri(~tri@ool-18bc2e74.dyn.optonline.net) (Ping timeout: 260 seconds)
2024-01-27 16:45:25 +0100euleritian(~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) (Ping timeout: 264 seconds)
2024-01-27 16:45:41 +0100euleritian(~euleritia@dynamic-176-007-006-139.176.7.pool.telefonica.de)
2024-01-27 16:47:23 +0100tri(~tri@ool-18bc2e74.dyn.optonline.net)
2024-01-27 16:53:22 +0100euleritian(~euleritia@dynamic-176-007-006-139.176.7.pool.telefonica.de) (Read error: Connection reset by peer)
2024-01-27 16:53:39 +0100euleritian(~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de)
2024-01-27 16:55:02 +0100fansly(~fansly@2001:448a:2010:476e:c9c:17f1:874c:ee93) (Remote host closed the connection)
2024-01-27 16:58:45 +0100zetef(~quassel@5.2.182.98) (Remote host closed the connection)
2024-01-27 16:59:04 +0100 <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.
2024-01-27 16:59:07 +0100euleritian(~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) (Read error: Connection reset by peer)
2024-01-27 16:59:16 +0100euleritian(~euleritia@dynamic-176-007-006-139.176.7.pool.telefonica.de)
2024-01-27 16:59:37 +0100euleritian(~euleritia@dynamic-176-007-006-139.176.7.pool.telefonica.de) (Read error: Connection reset by peer)
2024-01-27 16:59:55 +0100euleritian(~euleritia@77.22.252.56)
2024-01-27 17:02:01 +0100otto_s(~otto_s@p5499379a.dip0.t-ipconnect.de) ()
2024-01-27 17:05:00 +0100tromp(~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
2024-01-27 17:05:10 +0100 <int-e> :t ($>)
2024-01-27 17:05:11 +0100 <lambdabot> Functor f => f a -> b -> f b
2024-01-27 17:06:05 +0100fansly(~fansly@2001:448a:2010:476e:c9c:17f1:874c:ee93)
2024-01-27 17:06:21 +0100 <int-e> `@Maybe` is parsed like a function argument at the level of function applications
2024-01-27 17:07:10 +0100euleritian(~euleritia@77.22.252.56) (Ping timeout: 264 seconds)
2024-01-27 17:07:54 +0100euleritian(~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de)
2024-01-27 17:08:09 +0100 <int-e> (so `f` is substituted by `Maybe` in `($>)`'s type)
2024-01-27 17:09:42 +0100Silver_X(~Silver_X@182.178.244.60)
2024-01-27 17:10:56 +0100 <kaol> I'm not sure I follow. fmap @_ @Maybe expects a kind *, not * -> *. Whats the difference?
2024-01-27 17:12:13 +0100 <int-e> :t fmap
2024-01-27 17:12:15 +0100 <lambdabot> Functor f => (a -> b) -> f a -> f b
2024-01-27 17:12:29 +0100 <int-e> :t fmap @Maybe
2024-01-27 17:12:31 +0100 <lambdabot> error:
2024-01-27 17:12:31 +0100 <lambdabot> Pattern syntax in expression context: fmap@Maybe
2024-01-27 17:12:31 +0100 <lambdabot> Did you mean to enable TypeApplications?
2024-01-27 17:12:43 +0100 <int-e> % :t fmap @Maybe
2024-01-27 17:12:43 +0100 <yahb2> fmap @Maybe :: forall a b. (a -> b) -> Maybe a -> Maybe b
2024-01-27 17:13:13 +0100 <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.
2024-01-27 17:13:13 +0100 <int-e> % :t fmap @Maybe @()
2024-01-27 17:13:13 +0100 <yahb2> fmap @Maybe @() :: forall b. (() -> b) -> Maybe () -> Maybe b
2024-01-27 17:13:53 +0100 <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`.
2024-01-27 17:13:54 +0100 <kaol> Interesting.
2024-01-27 17:14:27 +0100 <kaol> Ok, that makes sense if you look at it like that. Thanks.
2024-01-27 17:15:02 +0100 <int-e> Note that 'Functor f =>' mentions f, so it's syntactically first.
2024-01-27 17:16:46 +0100 <kaol> I see. I was thinking of function arguments but I should have thought of type variables instead.
2024-01-27 17:18:50 +0100Goodbye_Vincent(cyvahl@freakshells.net) (Ping timeout: 260 seconds)
2024-01-27 17:20:07 +0100shriekingnoise(~shrieking@186.137.175.87)
2024-01-27 17:21:58 +0100alexherbo2(~alexherbo@2a02-8440-3140-de35-0855-5240-2ad6-cd9a.rev.sfr.net)
2024-01-27 17:25:34 +0100tromp(~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
2024-01-27 17:25:48 +0100Goodbye_Vincent(cyvahl@freakshells.net)
2024-01-27 17:30:52 +0100paolo(~paolo@net-2-39-54-152.cust.vodafonedsl.it)
2024-01-27 17:32:22 +0100Silver_X(~Silver_X@182.178.244.60) (Remote host closed the connection)
2024-01-27 17:32:36 +0100average(uid473595@user/average) (Quit: Connection closed for inactivity)
2024-01-27 17:34:25 +0100 <paolo> @pl \xs n -> take n xs
2024-01-27 17:34:25 +0100 <lambdabot> flip take
2024-01-27 17:35:07 +0100 <paolo> @pl \x y -> f (x,y)
2024-01-27 17:35:07 +0100 <lambdabot> (f .) . (,)
2024-01-27 17:35:34 +0100 <paolo> @pl \x y z -> f (x,y,z)
2024-01-27 17:35:34 +0100 <lambdabot> ((f .) .) . (,,)
2024-01-27 17:36:19 +0100 <paolo> @pl map . map
2024-01-27 17:36:19 +0100 <lambdabot> map . map
2024-01-27 17:39:16 +0100 <tomsmeding> % :set -fprint-explicit-foralls
2024-01-27 17:39:16 +0100 <yahb2> <no output>
2024-01-27 17:39:19 +0100 <tomsmeding> % :t fmap
2024-01-27 17:39:19 +0100 <yahb2> fmap ; :: forall (f :: Type -> Type) a b. ; Functor f => ; (a -> b) -> f a -> f b
2024-01-27 17:39:24 +0100 <tomsmeding> kaol: ^
2024-01-27 17:39:50 +0100 <tomsmeding> paolo: you can private-message with lambdabot too, and there's also https://pointfree.io/ ;)
2024-01-27 17:42:19 +0100 <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.
2024-01-27 17:43:34 +0100Goodbye_Vincent(cyvahl@freakshells.net) (Ping timeout: 260 seconds)
2024-01-27 17:44:21 +0100son0p(~ff@152.203.88.4) (Quit: Bye)
2024-01-27 17:46:01 +0100dsrt^(~cd@c-98-242-74-66.hsd1.ga.comcast.net) (Ping timeout: 264 seconds)
2024-01-27 17:46:47 +0100 <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"))
2024-01-27 17:47:08 +0100 <ski> > (reads :: ReadS Int) "5"
2024-01-27 17:47:10 +0100 <lambdabot> [(5,"")]
2024-01-27 17:49:20 +0100 <ski> @where pointfree
2024-01-27 17:49:21 +0100 <lambdabot> http://haskell.org/haskellwiki/Haskell/Pointfree
2024-01-27 17:49:33 +0100 <ski> @where+ pointfree <https://haskell.org/haskellwiki/Haskell/Pointfree>,<https://pointfree.io/>
2024-01-27 17:49:33 +0100 <lambdabot> Nice!
2024-01-27 17:50:51 +0100 <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.
2024-01-27 17:51:13 +0100coot(~coot@89-69-206-216.dynamic.chello.pl) (Quit: coot)
2024-01-27 17:51:14 +0100 <ski> i'd rather not
2024-01-27 17:51:36 +0100 <kaol> I'm not being entirely serious.
2024-01-27 17:54:05 +0100Goodbye_Vincent(cyvahl@freakshells.net)
2024-01-27 17:56:03 +0100son0p(~ff@152.203.88.4)
2024-01-27 17:58:21 +0100nicos(~nsm@2800:2131:5400:883:28f6:1624:5755:79b0) (Quit: Quit)
2024-01-27 18:01:26 +0100a51(a51@gateway/vpn/protonvpn/a51)
2024-01-27 18:02:17 +0100P1RATEZ(~piratez@user/p1ratez)
2024-01-27 18:04:10 +0100 <ski> anyway, point being that, given
2024-01-27 18:04:21 +0100 <ski> data Change# a = Unchanged#
2024-01-27 18:04:34 +0100 <ski> | Changed# a
2024-01-27 18:04:38 +0100 <ski> in
2024-01-27 18:05:08 +0100 <ski> parsimoniousFilter :: (a -> Bool) -> [a] -> Change# [a]
2024-01-27 18:05:27 +0100 <ski> parsimonisousFilter p [ ] = Unchanged#
2024-01-27 18:05:39 +0100 <ski> parsimoniousFilter p (x:xs)
2024-01-27 18:05:54 +0100 <ski> | p x = case parsimoniousFilter p xs of
2024-01-27 18:06:14 +0100 <ski> Unchanged# -> Unchanged#
2024-01-27 18:06:31 +0100 <ski> Changed# xs -> Changed# (x:xs)
2024-01-27 18:06:45 +0100 <ski> | otherwise = case parsimoniousFilter p xs of
2024-01-27 18:06:58 +0100 <ski> Unchanged# -> Changed# xs
2024-01-27 18:07:09 +0100 <ski> Changed# xs -> Changed# xs
2024-01-27 18:08:10 +0100 <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)
2024-01-27 18:09:12 +0100 <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"))
2024-01-27 18:09:45 +0100 <ski> the point of `parsimoniousFilter' is to share as long as a tail as possible, with the input list
2024-01-27 18:10:59 +0100 <kaol> This may be a stupid question but would writing the last line as a@(Changed# _) -> a be any different?
2024-01-27 18:11:17 +0100 <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')
2024-01-27 18:11:40 +0100paolo(~paolo@net-2-39-54-152.cust.vodafonedsl.it) (Quit: leaving)
2024-01-27 18:13:35 +0100 <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
2024-01-27 18:15:39 +0100 <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'
2024-01-27 18:16:27 +0100econo_(uid147250@id-147250.tinside.irccloud.com)
2024-01-27 18:18:05 +0100eggplantade(~Eggplanta@2600:1700:38c5:d800:5014:5b74:113d:d036) (Remote host closed the connection)
2024-01-27 18:18:26 +0100eggplantade(~Eggplanta@2600:1700:38c5:d800:5014:5b74:113d:d036)
2024-01-27 18:18:39 +0100tromp(~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Read error: Connection reset by peer)
2024-01-27 18:18:54 +0100 <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')
2024-01-27 18:19:29 +0100Goodbye_Vincent(cyvahl@freakshells.net) (Ping timeout: 256 seconds)
2024-01-27 18:20:54 +0100 <ski> (an example of such swapping of continuations would be mutually recursive `even,odd :: Integral a => a -> Bool#', with `data Bool# = False# | True#')
2024-01-27 18:21:29 +0100zetef(~quassel@5.2.182.98)
2024-01-27 18:21:44 +0100 <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.
2024-01-27 18:23:04 +0100 <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)
2024-01-27 18:23:32 +0100 <ski> "go for them" meaning ?
2024-01-27 18:24:00 +0100 <kaol> I prefer them as a stylistic choice.
2024-01-27 18:24:08 +0100 <ski> what is "them" ?
2024-01-27 18:24:27 +0100 <kaol> Pointfree.
2024-01-27 18:25:27 +0100trev(~trev@user/trev) (Quit: trev)
2024-01-27 18:25:28 +0100 <ski> well .. i was more talking about eta-reducing for efficiency here, rather than the stylistic choice of pointless
2024-01-27 18:25:28 +0100 <kaol> Ok, I guess I could have expressed that better. I just don't like naming variables if I can avoid it.
2024-01-27 18:26:04 +0100 <ski> (tail calling in general amounts to eta-reducing the continuation, after transforming to CPS)
2024-01-27 18:26:28 +0100 <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.
2024-01-27 18:29:52 +0100 <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]', ..
2024-01-27 18:30:50 +0100 <ski> (those latter two ones, especially the last one, are also not strictly valid, in the presence of bottoms (and `seq' / `!'-patterns))
2024-01-27 18:31:26 +0100 <ski> kaol : hm, difference in syntax, how ?
2024-01-27 18:32:22 +0100 <ski> (some kind of point-less categorical syntax, maybe like `Arrow' (but for `Category' in general) ?)
2024-01-27 18:32:29 +0100 <kaol> That there'd never be any observable difference between \x -> f $ x and just f.
2024-01-27 18:33:01 +0100johnw(~johnw@69.62.242.138)
2024-01-27 18:33:14 +0100 <ski> (by `Arrow', i mean the extension named that, giving you `proc x -> do y <- f -< x; returnA -< (x,y)' syntax)
2024-01-27 18:33:26 +0100 <ski> ah
2024-01-27 18:33:43 +0100 <kaol> It's the story you tell to someone learning Haskell.
2024-01-27 18:34:09 +0100 <ski> so, we'd have to eschew `seq' (/ `!'-patterns) on functions, to begin with
2024-01-27 18:34:42 +0100 <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
2024-01-27 18:34:47 +0100zetef(~quassel@5.2.182.98) (Ping timeout: 260 seconds)
2024-01-27 18:35:58 +0100 <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.
2024-01-27 18:36:34 +0100 <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 `_|_')
2024-01-27 18:37:32 +0100 <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')
2024-01-27 18:37:33 +0100harveypwca(~harveypwc@2601:246:c201:d680:59a0:7761:1557:ead5)
2024-01-27 18:38:01 +0100 <tri> https://paste.tomsmeding.com/qT54eich
2024-01-27 18:39:05 +0100 <tri> hi, im confused why (,) <$> Concurrently action1 <*> Concurrently action2 has type Concurrently (Int, String), rather than Concurrently (IO Int, IO String)
2024-01-27 18:39:37 +0100 <tri> im fmap-ing the (,) over Concurrently structure, so it should by pass that structure and apply directly to the value action1 action2 inside
2024-01-27 18:39:54 +0100 <ski> f <$> foo <*> bar = liftA2 f foo bar
2024-01-27 18:40:11 +0100 <tri> since action1 :: IO Int and action2 :: IO String, (,) applying to them should also be (IO Int, IO String)
2024-01-27 18:40:13 +0100 <ski> liftA2 :: Applicative i => (a -> b -> c) -> (i a -> i b -> i c)
2024-01-27 18:40:32 +0100 <ski> liftA2 (,) :: Applicative i => i a -> i b -> i (a,b)
2024-01-27 18:40:46 +0100 <ski> so
2024-01-27 18:40:48 +0100Goodbye_Vincent(cyvahl@freakshells.net)
2024-01-27 18:41:06 +0100 <ski> liftA2 (,) action1 action2 :: IO (String,String)
2024-01-27 18:41:22 +0100 <ski> liftA2 (,) (Concurrently action1) (Concurrently action2) :: Concurrently (String,String)
2024-01-27 18:41:31 +0100 <ski> but
2024-01-27 18:41:53 +0100 <ski> (action1,action2) :: (IO String,IO String)
2024-01-27 18:42:08 +0100 <ski> and trying to apply `Concurrently' to that doesn't work, since
2024-01-27 18:42:21 +0100 <ski> Concurrently :: IO a -> Concurrently a
2024-01-27 18:42:42 +0100 <tri> hold on ski
2024-01-27 18:42:54 +0100 <ski> and the formal (expected) parameter type `IO a' doesn't match with the actual parameter type `(IO String,IO String)'
2024-01-27 18:43:24 +0100 <ski> if you do
2024-01-27 18:44:01 +0100 <ski> Concurrently (liftA2 (,) action1 action2) :: Concurrently (String,String)
2024-01-27 18:44:03 +0100 <ski> then that'll work
2024-01-27 18:44:11 +0100 <ski> or, if you prefer
2024-01-27 18:44:21 +0100 <ski> Concurrently ((,) <$> action1 <*> action2) :: Concurrently (String,String)
2024-01-27 18:44:36 +0100 <tri> hold on
2024-01-27 18:45:00 +0100 <tri> (,) <$> Concurrently action1 <*> Concurrently action2
2024-01-27 18:45:09 +0100 <ski> yes
2024-01-27 18:45:17 +0100 <tri> <$> is bypassing Concurrently and applying (,) to action1 right
2024-01-27 18:45:25 +0100 <tri> and since action1 is IO Int
2024-01-27 18:45:29 +0100krei-se(~krei-se@p508747fd.dip0.t-ipconnect.de) (Quit: ZNC 1.8.2 - https://znc.in)
2024-01-27 18:45:31 +0100 <tri> the first step will be
2024-01-27 18:45:35 +0100 <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.
2024-01-27 18:45:38 +0100 <ski> oh, sorry, you had `action1 :: IO Int', not `action1 :: IO String'
2024-01-27 18:45:51 +0100 <tri> Concurrently (IO Int , ) <*> action2
2024-01-27 18:46:11 +0100destituion(~destituio@2001:4644:c37:0:57f:87b2:efe8:e836)
2024-01-27 18:46:18 +0100 <tri> i mean Concurrently (IO Int , ) <*> Concurretnly action2
2024-01-27 18:46:19 +0100krei-se(~krei-se@p508747fd.dip0.t-ipconnect.de)
2024-01-27 18:46:35 +0100 <tri> then the second step <*> will continue to carry (IO Int , ) to action2
2024-01-27 18:46:47 +0100 <tri> result in Concurrently (IO Int , IO String)
2024-01-27 18:47:02 +0100 <tri> that's my reasoning, but apprarently, that's wrong
2024-01-27 18:47:36 +0100 <kaol> You won't see the IO come up again unless you use runConcurrently.
2024-01-27 18:47:41 +0100 <tri> somehow the type output is Concurrently (Int, String), my IO is gone
2024-01-27 18:47:42 +0100 <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
2024-01-27 18:48:06 +0100 <ski> if you want to indicate the type of that position, in an expression, write `Concurrently (_ :: IO Int , ) <*> action2'
2024-01-27 18:48:57 +0100 <tri> kaol: but where did my IO go?, im just fmap-ing over Concurrently, it should have preseve my IO Int
2024-01-27 18:49:24 +0100 <tri> that's where im confused at
2024-01-27 18:49:27 +0100 <tri> ski: gotcha
2024-01-27 18:49:36 +0100 <haskellbridge> 14<m​auke> What's the type of Concurrently?
2024-01-27 18:49:38 +0100 <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)'))
2024-01-27 18:49:55 +0100 <haskellbridge> 14<m​auke> Ah
2024-01-27 18:49:57 +0100EvanR(~EvanR@user/evanr)
2024-01-27 18:50:43 +0100 <tri> so you are saying before i fmap (,), the Concurrently data constructor was applied to the action1 and action2?
2024-01-27 18:50:50 +0100 <haskellbridge> 14<m​auke> Then you can't have IO in the result type. The types of <$> and <*> don't allow it
2024-01-27 18:51:16 +0100 <tri> ski: resulting in the type Concurrently Int and Concurrently String?
2024-01-27 18:51:46 +0100 <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.
2024-01-27 18:52:02 +0100krei-se(~krei-se@p508747fd.dip0.t-ipconnect.de) (Read error: Connection reset by peer)
2024-01-27 18:52:07 +0100 <tri> hold on lemme recap
2024-01-27 18:52:11 +0100 <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)'
2024-01-27 18:52:14 +0100P1RATEZ(~piratez@user/p1ratez) (Remote host closed the connection)
2024-01-27 18:53:53 +0100 <ski> if you want to, you could try
2024-01-27 18:54:30 +0100 <ski> import qualified Control.Concurrent.Async as CCA (Concurrently (..))
2024-01-27 18:54:43 +0100 <ski> import Control.Concurrent.Async (Concurrently)
2024-01-27 18:54:46 +0100 <tri> ah wait i think i understand why
2024-01-27 18:55:05 +0100 <ski> patterm MkConcurrently :: IO a -> Concurrently a
2024-01-27 18:55:13 +0100 <tri> as you said, it's clear when i refer to it as MkConcurrently
2024-01-27 18:55:22 +0100 <ski> pattern MkConcurrently action = CCA.Concurrently action
2024-01-27 18:55:27 +0100 <ski> well, you'd also need
2024-01-27 18:55:50 +0100 <ski> {-# LANGUAGE PatternSynonyms #-}
2024-01-27 18:55:53 +0100 <ski> at the top
2024-01-27 18:56:15 +0100 <ski> this would simulate it actually being named like `newtype Concurrently a = MkConcurrently (IO a)
2024-01-27 18:56:26 +0100 <tri> ah ok let me check it out
2024-01-27 18:56:39 +0100 <tri> btw thank you kaol and haskellbridge
2024-01-27 18:56:51 +0100 <EvanR> haskellbridge is great
2024-01-27 18:56:58 +0100 <ski> well, you'll probably want to import more stuff in the second `import' above, to actually use it
2024-01-27 18:57:12 +0100 <ski> e.g. `runConcurrently'
2024-01-27 18:57:21 +0100 <haskellbridge> 14<m​auke> Yay I'm a bridge
2024-01-27 18:57:50 +0100 <ski> (fwi, that's mauke. haskellbridge is a bridge to a Matrix Haskell channel)
2024-01-27 18:58:02 +0100skihides a troll under mauke
2024-01-27 18:58:02 +0100 <monochrom> Burn all bridges! >:)
2024-01-27 18:58:58 +0100 <haskellbridge> 14<m​auke> Speaking of import, I've discovered I quite like postfix "qualified"
2024-01-27 18:59:18 +0100 <sshine> what's not to like!
2024-01-27 18:59:25 +0100 <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
2024-01-27 19:00:02 +0100 <tri> you are right ski
2024-01-27 19:00:05 +0100Goodbye_Vincent(cyvahl@freakshells.net) (Ping timeout: 268 seconds)
2024-01-27 19:00:14 +0100 <tri> it was because... hmmm
2024-01-27 19:00:35 +0100 <ski> it was because the identical naming of the type constructor and the value constructor confused you
2024-01-27 19:00:41 +0100 <monochrom> Yes I like postfix qualified too.
2024-01-27 19:01:13 +0100 <monochrom> You know what, I like all of GHC2021, and even then I think it is not radical enough. >:)
2024-01-27 19:01:14 +0100skirealizes they read mauke as saying s/like/dislike/
2024-01-27 19:01:17 +0100 <tri> yea
2024-01-27 19:01:57 +0100 <EvanR> someone dropped a bridge on several channel regulars
2024-01-27 19:02:20 +0100ski. o O ( .. anyone fancy a game of bridge ? )
2024-01-27 19:02:42 +0100 <haskellbridge> 14<m​auke> Libera bridge is falling down
2024-01-27 19:02:58 +0100 <monochrom> Oh, bridge. I almost forgot it.
2024-01-27 19:02:59 +0100 <ski> falling down, falling down
2024-01-27 19:03:49 +0100shriekingnoise(~shrieking@186.137.175.87) (Quit: Quit)
2024-01-27 19:03:53 +0100 <monochrom> (Contract) Bridge was too hard for me, I settled for German Bridge instead. >:)
2024-01-27 19:04:26 +0100skiidly ponders contact bridges
2024-01-27 19:04:53 +0100 <ski> (i guess there might also be contract lenses ?)
2024-01-27 19:05:15 +0100 <monochrom> And I learned German Bridge from a computer magazine that had "here is BASIC code for German Bridge". :)
2024-01-27 19:05:33 +0100 <ski> i imagine that's a version of the game of Bridge ?
2024-01-27 19:05:55 +0100 <haskellbridge> 14<m​auke> Full-contact bridge tournament
2024-01-27 19:06:10 +0100 <monochrom> OK, Contract Bridge is normal standard Bridge.
2024-01-27 19:06:47 +0100 <monochrom> I imagine that eventually someone had to prefix it with Contract to emphasize that it's not German Bridge. :)
2024-01-27 19:07:18 +0100 <monochrom> Like how after someone invented CPS, now you need to also think up a name for not-CPS.
2024-01-27 19:11:24 +0100 <monochrom> Contactless Bridge = tap your credit card to pay/play >:)
2024-01-27 19:12:16 +0100 <monochrom> "play to pay"
2024-01-27 19:12:39 +0100 <monochrom> OK sorry for the digression! Here is my ObHaskell:
2024-01-27 19:13:42 +0100 <monochrom> I recently used https://www.vex.net/~trebla/haskell/cont.xhtml#yield for a binary-search-tree rebalancing algorithm.
2024-01-27 19:14:45 +0100 <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. :)
2024-01-27 19:15:36 +0100 <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".
2024-01-27 19:17:43 +0100 <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).
2024-01-27 19:21:14 +0100Lycurgus(~georg@user/Lycurgus)
2024-01-27 19:23:05 +0100 <EvanR> wait, what is the word for not-CPS
2024-01-27 19:23:13 +0100 <monochrom> direct style :)
2024-01-27 19:23:51 +0100 <ncf> i prefer not-not-CPS, (CPS → ⊥) → ⊥
2024-01-27 19:24:36 +0100 <monochrom> haha
2024-01-27 19:24:57 +0100ski. o O ( "(The Fibonacci sequence is everywhere in nature, for example Haskell tutorials and Python tutorials.)" )
2024-01-27 19:25:19 +0100 <enikar> :D
2024-01-27 19:25:22 +0100 <EvanR> python, really
2024-01-27 19:25:36 +0100 <enikar> yes
2024-01-27 19:25:42 +0100 <EvanR> how do you do it in python
2024-01-27 19:25:54 +0100 <enikar> for multiple assignements
2024-01-27 19:26:00 +0100 <EvanR> or is it not a one liner
2024-01-27 19:26:01 +0100 <ski> ah, i've thought up `data Iterator i o r = Result r | Susp o (i -> Iterator i o r)' before :)
2024-01-27 19:26:13 +0100 <EvanR> (and don't tell me there's more than one way to do it!)
2024-01-27 19:26:38 +0100 <haskellbridge> 14<m​auke> Haha
2024-01-27 19:26:39 +0100 <ski> (defunctionalizing the double-CPS implementation of backtracking (for logic programming))
2024-01-27 19:26:40 +0100 <monochrom> I am considering adding a 2nd remark "If you're also wondering if it is an algebraic effect too, YES!" >:)
2024-01-27 19:28:02 +0100 <monochrom> https://docs.python.org/3/tutorial/introduction.html#first-steps-towards-programming is where the official python tutorial uses Fibonacci.
2024-01-27 19:28:14 +0100 <monochrom> Bloody official tutorial.
2024-01-27 19:28:48 +0100 <monochrom> Any pythonista who mocks Haskell for using Fibonacci examples is a bloody goddamnned hypocrite.
2024-01-27 19:29:18 +0100 <haskellbridge> 14<m​auke> print(", ".join(100.fibn()))
2024-01-27 19:31:19 +0100euleritian(~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) (Read error: Connection reset by peer)
2024-01-27 19:31:53 +0100euleritian(~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de)
2024-01-27 19:33:52 +0100 <ski> data Ω (ο,π) α = Failure ο | Success α (π → Ω (ο,π) α) -- in my case
2024-01-27 19:34:40 +0100alexherbo2(~alexherbo@2a02-8440-3140-de35-0855-5240-2ad6-cd9a.rev.sfr.net) (Ping timeout: 250 seconds)
2024-01-27 19:34:48 +0100harveypwca(~harveypwc@2601:246:c201:d680:59a0:7761:1557:ead5) (Quit: Leaving)
2024-01-27 19:34:58 +0100 <EvanR> that's greek to me
2024-01-27 19:35:16 +0100 <ski> naturally, my dear Watson
2024-01-27 19:36:17 +0100 <monochrom> Is that, like, addiction? data Addiction meh p a = NotHigh meh | HighSoYesAgainPlease a (p -> ...)
2024-01-27 19:36:52 +0100Goodbye_Vincent(~Goodbye_V@freakshells.net)
2024-01-27 19:37:00 +0100 <ski> (btw, note how the last parameter is the `Result'/⌜Failure⌝ one for `Iterator', while for ⌜Ω⌝ it was the first component of `Susp'/⌜Success⌝)
2024-01-27 19:37:43 +0100 <monochrom> Drug abuse is not the answer! :(
2024-01-27 19:37:45 +0100 <monochrom> :D
2024-01-27 19:37:49 +0100 <ncf> Susp, Ω, is this homotopy theory?
2024-01-27 19:37:57 +0100 <monochrom> haha
2024-01-27 19:38:09 +0100 <EvanR> :among_us:
2024-01-27 19:38:22 +0100 <ski> "How to replace sobriety by a sequence of highs" by Wilip Phadler ?
2024-01-27 19:38:31 +0100 <monochrom> hahaha
2024-01-27 19:38:35 +0100 <ski> ncf : nah :p
2024-01-27 19:38:48 +0100tzh(~tzh@c-71-193-181-0.hsd1.or.comcast.net)
2024-01-27 19:39:38 +0100 <monochrom> That probably also describes the premise of the movie Another Round >:)
2024-01-27 19:39:41 +0100Lycurgus(~georg@user/Lycurgus) (Quit: leaving)
2024-01-27 19:43:19 +0100 <EvanR> if this wasn't the post apocalyptic IRC afterscape I'd say all these substance references were inappropriate!
2024-01-27 19:46:26 +0100 <kaol> Non-intuitive logic programming: Instead of providing a function definition, show that the negation of the type always leads to bottom.
2024-01-27 19:47:18 +0100 <ncf> it's called call/cc
2024-01-27 19:47:22 +0100 <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
2024-01-27 19:47:27 +0100 <tri> https://hackage.haskell.org/package/timers-0.2.0.4/docs/Control-Concurrent-Timer.html#t:Timer
2024-01-27 19:47:28 +0100Square2(~Square@user/square)
2024-01-27 19:47:35 +0100Goodbye_Vincent(~Goodbye_V@freakshells.net) (Ping timeout: 260 seconds)
2024-01-27 19:47:44 +0100 <tri> but i dont know what to feed in the first arg of repeatedStart
2024-01-27 19:48:04 +0100 <tri> it's asking for a TimerIO
2024-01-27 19:48:26 +0100 <tri> but idk how to instantiate a TimerIO
2024-01-27 19:48:36 +0100 <tri> could someone help me please
2024-01-27 19:48:53 +0100 <mauke> repeatedStart reconfigures an existing timer
2024-01-27 19:49:01 +0100 <mauke> you can create a new timer with newTimer
2024-01-27 19:49:16 +0100ski. 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> )
2024-01-27 19:49:16 +0100 <tri> ah i see
2024-01-27 19:49:19 +0100 <geekosaur> or repeatedTimer, which is just above repeatedStart
2024-01-27 19:49:21 +0100 <tri> it's all the way at the bottom
2024-01-27 19:49:36 +0100 <tri> thank you
2024-01-27 19:49:48 +0100 <mauke> yeah, repeatedTimer = newTimer + repeatedStart
2024-01-27 19:50:03 +0100 <ski> kaol : that's how LP is traditionally explained (sortof)
2024-01-27 19:50:26 +0100 <kaol> Do note that repeatedTimer returns a Timer as well, not only newTimer.
2024-01-27 19:50:56 +0100 <ski> monochrom : hm, interesting application
2024-01-27 19:51:17 +0100Goodbye_Vincent(cyvahl@freakshells.net)
2024-01-27 19:53:08 +0100 <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
2024-01-27 19:53:14 +0100 <ski> find alternative ways to derive contradiction gives the remaining solutions)
2024-01-27 19:55:02 +0100 <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)
2024-01-27 19:55:06 +0100Sgeo(~Sgeo@user/sgeo)
2024-01-27 19:57:50 +0100 <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.
2024-01-27 19:59:02 +0100bitdex(~bitdex@gateway/tor-sasl/bitdex)
2024-01-27 19:59:08 +0100 <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>))
2024-01-27 19:59:48 +0100 <kaol> I consider myself a decent programmer but I know CS is full of rabbit holes I'd lose myself into if I tried.
2024-01-27 20:01:03 +0100krei-se(~krei-se@p508747fd.dip0.t-ipconnect.de)
2024-01-27 20:01:09 +0100 <monochrom> Ah yeah, resolution proofs are very much thinking in terms of proof-by-contradiction (the double-negation kind).
2024-01-27 20:01:46 +0100 <monochrom> (And then Prolog etc extend the resolution proof algorithm.)
2024-01-27 20:02:33 +0100 <monochrom> Oh there are way more rabbit holes in physics, so don't you worry.
2024-01-27 20:02:37 +0100 <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
2024-01-27 20:02:38 +0100 <ski> yea .. as are Semantic Tableaux
2024-01-27 20:02:48 +0100 <ski> @type callCC
2024-01-27 20:02:49 +0100 <lambdabot> MonadCont m => ((a -> m b) -> m a) -> m a
2024-01-27 20:02:52 +0100 <ski> .. there we go
2024-01-27 20:02:53 +0100 <monochrom> And in the case of general relativity and/or cosmology, you have literally black holes. >:)
2024-01-27 20:03:22 +0100xacktm(xacktm@user/xacktm) (Quit: fBNC - https://bnc4free.com)
2024-01-27 20:03:28 +0100kuruczgy(55b66dd3ae@2a03:6000:1812:100::127f) (Ping timeout: 255 seconds)
2024-01-27 20:03:29 +0100adanwan(~adanwan@gateway/tor-sasl/adanwan) (Ping timeout: 255 seconds)
2024-01-27 20:03:48 +0100xacktm(xacktm@user/xacktm)
2024-01-27 20:04:22 +0100akspecs(00cc8321af@sourcehut/user/akspecs) (Ping timeout: 255 seconds)
2024-01-27 20:04:36 +0100adanwan(~adanwan@gateway/tor-sasl/adanwan)
2024-01-27 20:06:20 +0100kuruczgy(55b66dd3ae@2a03:6000:1812:100::127f)
2024-01-27 20:06:23 +0100 <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
2024-01-27 20:06:29 +0100 <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
2024-01-27 20:07:04 +0100akspecs(00cc8321af@sourcehut/user/akspecs)
2024-01-27 20:08:02 +0100 <monochrom> https://www.umsu.de/trees/ is a semantic tableau algorithm writtne in javascript(!). (I don't envy the author. >:) )
2024-01-27 20:08:07 +0100caconym(~caconym@user/caconym) (Quit: bye)
2024-01-27 20:09:29 +0100 <ski> hm, nice
2024-01-27 20:09:32 +0100 <ski> reminds me of
2024-01-27 20:09:33 +0100 <ski> @where logitext
2024-01-27 20:09:34 +0100 <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
2024-01-27 20:09:34 +0100 <lambdabot> -tutorial-of-the-sequent-calculus/>
2024-01-27 20:11:27 +0100 <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>
2024-01-27 20:11:55 +0100 <leah2> ah yes, i was unable to find that recently. thx!
2024-01-27 20:13:31 +0100caconym(~caconym@user/caconym)
2024-01-27 20:24:31 +0100 <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
2024-01-27 20:24:36 +0100 <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>
2024-01-27 20:32:07 +0100dsrt^(~cd@c-98-242-74-66.hsd1.ga.comcast.net)
2024-01-27 20:42:58 +0100 <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! :)
2024-01-27 20:45:13 +0100alexherbo2(~alexherbo@2a02-8440-3141-1388-ed74-c0ff-9a4e-09db.rev.sfr.net)
2024-01-27 20:55:01 +0100 <ski> what's that idea ?
2024-01-27 20:55:43 +0100 <c_wraith> Cursors? probably involved automating your cursing at the computer.
2024-01-27 20:58:38 +0100 <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!
2024-01-27 20:58:50 +0100adanwan(~adanwan@gateway/tor-sasl/adanwan) (Ping timeout: 255 seconds)
2024-01-27 20:58:58 +0100 <mauke> recursing is when you curse at the computer again
2024-01-27 21:00:26 +0100 <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! >:)
2024-01-27 21:01:13 +0100adanwan(~adanwan@gateway/tor-sasl/adanwan)
2024-01-27 21:06:30 +0100EvanR(~EvanR@user/evanr) (Ping timeout: 268 seconds)
2024-01-27 21:09:38 +0100ec(~ec@gateway/tor-sasl/ec) (Ping timeout: 255 seconds)
2024-01-27 21:10:13 +0100adanwan(~adanwan@gateway/tor-sasl/adanwan) (Remote host closed the connection)
2024-01-27 21:10:36 +0100adanwan(~adanwan@gateway/tor-sasl/adanwan)
2024-01-27 21:11:42 +0100ec(~ec@gateway/tor-sasl/ec)
2024-01-27 21:15:10 +0100CiaoSen(~Jura@2a05:5800:287:6f00:ca4b:d6ff:fec1:99da)
2024-01-27 21:19:20 +0100 <tri> is it legal to use typeclass in a data declaration? I have data PostitionCollection = PostitionCollection {positions :: [Position]}
2024-01-27 21:19:32 +0100 <tri> can i make it a traversable, instead of a list of Position?
2024-01-27 21:22:30 +0100 <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
2024-01-27 21:24:35 +0100 <ncf> don't listen to chatgpt it's dumb and stupid
2024-01-27 21:25:09 +0100 <ncf> data PositionCollection = forall t. Traversable t => PositionCollection {positions :: t Position}
2024-01-27 21:26:44 +0100 <tri> oh thank yoy
2024-01-27 21:26:50 +0100 <tri> i was thinking about this
2024-01-27 21:27:07 +0100 <tri> data PositionCollection a = PositionCollection {position :: a Posistion}
2024-01-27 21:27:12 +0100 <ski> data PositionCollection t = MkPositionCollection {positions :: t Position}
2024-01-27 21:27:19 +0100 <ski> yes
2024-01-27 21:27:49 +0100 <tri> between ncf solution and ski's. Which one is more common?
2024-01-27 21:27:49 +0100 <ski> with ncf's version, you have `t' existential, which may not be what you want ..
2024-01-27 21:28:00 +0100inedia(~irc@2602:2da:0:80:5054:ff:fe3c:8d93) (Quit: WeeChat 4.1.2)
2024-01-27 21:28:38 +0100 <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
2024-01-27 21:28:45 +0100 <tri> in other words, i shouldn't touch it
2024-01-27 21:29:15 +0100 <ski> it's not that advanced, really
2024-01-27 21:29:51 +0100 <tri> i will get there, i will get there, slowly
2024-01-27 21:30:09 +0100 <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
2024-01-27 21:30:24 +0100 <ski> you can do "OO-like" programming, with this
2024-01-27 21:31:20 +0100inedia(~irc@2602:2da:0:80:5054:ff:fe3c:8d93)
2024-01-27 21:31:23 +0100 <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)
2024-01-27 21:31:44 +0100 <ski> @where existential-antipattern
2024-01-27 21:31:44 +0100 <lambdabot> "Haskell Antipattern: Existential Typeclass" by Luke Palmer at <http://lukepalmer.wordpress.com/2010/01/24/haskell-antipattern-existential-typeclass/>
2024-01-27 21:32:27 +0100 <tri> wow thank you
2024-01-27 21:32:33 +0100mobivme(~mobivme@130.105.162.16)
2024-01-27 21:34:00 +0100 <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 ?)
2024-01-27 21:35:12 +0100 <tri> holy cow well hold on
2024-01-27 21:35:13 +0100 <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.
2024-01-27 21:35:32 +0100 <tri> ski: i need to read up on that to get the basic first
2024-01-27 21:35:55 +0100 <tri> ski: otherwise it's a big hurdle for you to explain from scratch
2024-01-27 21:36:29 +0100 <tri> kaol: huh?
2024-01-27 21:36:55 +0100 <tri> kaol: sorry i dont get it
2024-01-27 21:36:57 +0100 <mauke> "don't put typeclass constraints in data declarations. put them on your functions instead"
2024-01-27 21:36:57 +0100 <kaol> I'd think of functions first when considering type class constraints, not data definitions.
2024-01-27 21:37:23 +0100 <tri> mauke: you translated kaol's?
2024-01-27 21:37:32 +0100 <kaol> Existentials exists and have their uses but I'd recommend getting comfortable with that first.
2024-01-27 21:37:34 +0100 <mauke> yes :-)
2024-01-27 21:37:44 +0100sudden(~cat@user/sudden) (Ping timeout: 256 seconds)
2024-01-27 21:38:44 +0100 <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?
2024-01-27 21:39:41 +0100 <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?
2024-01-27 21:40:15 +0100 <mauke> data
2024-01-27 21:40:17 +0100 <tri> (i could totally when with list, but i was experimenting how to over-abstract it)
2024-01-27 21:40:18 +0100 <mauke> er
2024-01-27 21:40:28 +0100 <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)
2024-01-27 21:40:37 +0100 <mauke> data PositionCollection t = PositionCollection (t Position)
2024-01-27 21:40:56 +0100 <mauke> someOperation :: (Traversable t) => PositionCollection t -> ...
2024-01-27 21:41:40 +0100 <kaol> You could even derive Traversable for it.
2024-01-27 21:41:44 +0100 <tri> mauke: that's exactly what i did: data PositionCollection t = PositionCollection (t Position). Just like ski suggetsion
2024-01-27 21:42:15 +0100 <tri> kaol: you mean make instance of Traversable from my data PositionCollection?
2024-01-27 21:43:10 +0100 <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-ant…
2024-01-27 21:43:26 +0100 <kaol> I'd question whether you even need a PositionCollection if your functions could just use any traversable.
2024-01-27 21:43:55 +0100 <tri> dmj`: thanks
2024-01-27 21:44:03 +0100sudden(~cat@user/sudden)
2024-01-27 21:44:32 +0100 <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
2024-01-27 21:44:53 +0100 <kaol> Ok, that's fair.
2024-01-27 21:44:57 +0100 <tri> data PositionCOllection = PositionCollection {filename :: String, positions :: [Position]}
2024-01-27 21:45:25 +0100 <tri> kaol: then i think can i make the [Position] be any kind of collection? just for fun
2024-01-27 21:45:49 +0100 <tri> and then here i am
2024-01-27 21:45:54 +0100 <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
2024-01-27 21:46:06 +0100 <geekosaur> this is one of the risks of over-abstraction 🙂
2024-01-27 21:46:13 +0100 <tomsmeding> absent further information, this sounds to me like the most idiomatic way to do it
2024-01-27 21:46:23 +0100 <geekosaur> another is that it comes at a price, usually in performance
2024-01-27 21:46:45 +0100 <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.
2024-01-27 21:47:07 +0100 <tri> tomsmeding: you mean it's data PositionCollection t = PositionCollection {position :: t Position} right
2024-01-27 21:47:11 +0100 <tomsmeding> yes
2024-01-27 21:47:25 +0100 <tri> yea that's what me and ski settled on
2024-01-27 21:47:54 +0100 <tri> the other ncf suggestion :data PositionCollection = forall t. Traversable t => PositionCollection {positions :: t Position}
2024-01-27 21:48:36 +0100 <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
2024-01-27 21:48:37 +0100 <tri> which involves Existential, which i haven't learned about
2024-01-27 21:48:44 +0100 <tomsmeding> which is typically not what you need
2024-01-27 21:48:51 +0100 <dmj`> probably better to avoid existentials if you can help it
2024-01-27 21:49:41 +0100 <tri> ok no existential for now. Thank you guys
2024-01-27 21:50:14 +0100 <tomsmeding> sometimes you need them, but typically quality of life goes up as the number of existentials in your haskell program goes down
2024-01-27 21:50:38 +0100mcfilib(uid302703@user/mcfilib)
2024-01-27 21:51:12 +0100 <tri> btw how do you guys i have the IRC format your text to simulate an action
2024-01-27 21:51:17 +0100 <tomsmeding> (and what ski also said: they're not very difficult to understand, they're just a bit... clumsy, I guess?)
2024-01-27 21:51:28 +0100 <tomsmeding> /me
2024-01-27 21:51:37 +0100tritry something
2024-01-27 21:51:40 +0100 <tri> ah ok thanks
2024-01-27 21:51:46 +0100 <dmj`> tri: it breaks deriving, and makes type inference difficult
2024-01-27 21:52:40 +0100 <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
2024-01-27 21:54:07 +0100coot(~coot@89-69-206-216.dynamic.chello.pl)
2024-01-27 21:54:08 +0100 <dmj`> the forall keyword has as really overloaded meaning
2024-01-27 21:57:44 +0100 <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
2024-01-27 21:57:57 +0100 <tomsmeding> don't give in to that temptation
2024-01-27 21:58:10 +0100 <tri> whereas data PositionCollection t = PositionCollection {position :: t Position} t could be *anything*
2024-01-27 21:58:11 +0100 <tomsmeding> it tends to work much better in haskell if you put the constraints on the functions, not on the data
2024-01-27 21:58:28 +0100 <tomsmeding> if the functions all require it, then you can't do anything with a "bad" t anyway
2024-01-27 21:58:42 +0100 <tri> tomsmeding: ah i see what you mean
2024-01-27 21:58:58 +0100 <tomsmeding> and maybe it turns out that there are some functions (getFilename?) that don't actually need the constraint!
2024-01-27 21:59:11 +0100 <dmj`> tri: try deriving Eq with that
2024-01-27 21:59:44 +0100 <tomsmeding> I mean, there's StandaloneDeriving you could use instead
2024-01-27 22:00:09 +0100 <tomsmeding> but don't do it unless you must
2024-01-27 22:00:19 +0100 <tomsmeding> in which case come back here :p
2024-01-27 22:00:47 +0100 <tri> dmj`: it doesn't work and require something standalonederiving like tomsmeding said
2024-01-27 22:00:56 +0100 <tri> but yea, i don't want to venture into that area yet
2024-01-27 22:01:05 +0100 <tomsmeding> tri: that was the point they're making, it makes stuff more clunky
2024-01-27 22:01:13 +0100 <tri> ah ok
2024-01-27 22:01:36 +0100 <tri> and haskell had me turn on QualifiedExistential or GDAT or something
2024-01-27 22:01:44 +0100 <tri> which is gatekeeping people from using it
2024-01-27 22:01:45 +0100 <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
2024-01-27 22:01:50 +0100 <tomsmeding> lol
2024-01-27 22:01:54 +0100 <tomsmeding> have you seen my haskell files
2024-01-27 22:02:26 +0100 <tri> haha i can imagine it's decorated with lots of metadata stuff
2024-01-27 22:03:50 +0100 <tomsmeding> my latest thing has 2 files with 15 extensions (though that's on top of Haskell2010, some of those are in GHC2021)
2024-01-27 22:03:51 +0100 <monochrom> Huh why does the new generation accuse everyone of gatekeeping? I'm not impressed.
2024-01-27 22:04:11 +0100 <tomsmeding> yeah it's more like "discouraging"
2024-01-27 22:04:17 +0100 <tomsmeding> which is accurate
2024-01-27 22:05:30 +0100shapr(~user@c-24-218-186-89.hsd1.ma.comcast.net)
2024-01-27 22:05:55 +0100 <mauke> help, rust doesn't let me access this reference after I've passed ownership elsewhere. this is gatekeeping!1
2024-01-27 22:06:30 +0100 <int-e> trust me I know what I'm doSegmentation fault. Core dumped.
2024-01-27 22:07:31 +0100 <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
2024-01-27 22:08:14 +0100 <tomsmeding> (I mean, it's not deceiving you.)
2024-01-27 22:09:10 +0100geekosaurhas flashbacks to programming on Altos 586/986
2024-01-27 22:10:12 +0100 <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?
2024-01-27 22:10:37 +0100 <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"
2024-01-27 22:10:55 +0100 <mauke> haha
2024-01-27 22:11:51 +0100 <monochrom> Oh let me tell you the story behind the Chinese idiom "engrave on the boat to find the sword"!
2024-01-27 22:11:51 +0100 <mauke> https://www.gaslicht.de/ also exists
2024-01-27 22:12:12 +0100 <tomsmeding> ... which is something completely different
2024-01-27 22:12:16 +0100 <tomsmeding> beautiful
2024-01-27 22:12:26 +0100 <monochrom> Supposedly it was a true story too! Someone was on a boat trip and accidentally dropped his sword into the water.
2024-01-27 22:12:50 +0100 <mauke> oh, I know that story
2024-01-27 22:13:02 +0100 <monochrom> He then engraved a mark on the side of the boat. His friend asks "what is the mark for?"
2024-01-27 22:13:23 +0100 <monochrom> "So that when we get to the shore, I know where to find the sword."
2024-01-27 22:13:30 +0100 <mauke> that's a chinese idiom? I know it from a joke :-)
2024-01-27 22:15:46 +0100 <tomsmeding> monochrom: what made you think of the idiom?
2024-01-27 22:16:00 +0100_ht(~Thunderbi@28-52-174-82.ftth.glasoperator.nl) (Remote host closed the connection)
2024-01-27 22:16:12 +0100 <monochrom> "I put a value in RAM at 0x2f42 in one program and then I inspect 0x2f42 in another program" :)
2024-01-27 22:16:25 +0100 <tomsmeding> ah :p
2024-01-27 22:35:02 +0100 <tri> i have a [ (FileName, FileData) ] and a function FileData -> CleanedData. How can i ignore the FileName please? the output type is [ ( FileName, CleanedData )]
2024-01-27 22:35:19 +0100 <tomsmeding> map (second f)
2024-01-27 22:35:28 +0100 <tomsmeding> Data.Bifunctor.second
2024-01-27 22:35:33 +0100 <tomsmeding> :t second
2024-01-27 22:35:34 +0100 <lambdabot> Arrow a => a b c -> a (d, b) (d, c)
2024-01-27 22:35:38 +0100 <tomsmeding> meh
2024-01-27 22:35:41 +0100 <tomsmeding> :t Data.Bifunctor.second
2024-01-27 22:35:43 +0100 <lambdabot> Bifunctor p => (b -> c) -> p a b -> p a c
2024-01-27 22:35:49 +0100 <tomsmeding> % :t Data.Bifunctor.second @(,)
2024-01-27 22:35:49 +0100 <yahb2> Data.Bifunctor.second @(,) ; :: forall b c a. (b -> c) -> (a, b) -> (a, c)
2024-01-27 22:35:53 +0100 <tomsmeding> there we go
2024-01-27 22:36:09 +0100 <tri> hmm ok thank you, let me try it out
2024-01-27 22:36:15 +0100 <mauke> fmap . fmap
2024-01-27 22:36:15 +0100 <tomsmeding> (no need for the '@(,)', type inference figures that out for you)
2024-01-27 22:36:20 +0100 <tomsmeding> second > fmap
2024-01-27 22:36:34 +0100 <mauke> there are two seconds, but only one fmap
2024-01-27 22:36:56 +0100 <tomsmeding> we ignore that Arrow exists
2024-01-27 22:37:02 +0100 <mauke> fmap fmap fmap
2024-01-27 22:37:02 +0100 <tomsmeding> then there is only one second :)
2024-01-27 22:37:18 +0100 <tomsmeding> that's a good type inference exercise
2024-01-27 22:38:04 +0100 <tri> can you ELI5 what's bifunctor?
2024-01-27 22:38:17 +0100 <tomsmeding> a thing with two values, both of which you can "map over"
2024-01-27 22:38:25 +0100 <tomsmeding> a functor is a thing with one "position" you can map over
2024-01-27 22:38:32 +0100 <tri> ah
2024-01-27 22:38:33 +0100 <tomsmeding> a bifunctor has two of them
2024-01-27 22:38:40 +0100 <tri> ah first and second then
2024-01-27 22:38:40 +0100 <mauke> > fmap fmap fmap length [('a', "hold"), ('b', "my"), ('c', "beer!")]
2024-01-27 22:38:42 +0100 <lambdabot> [('a',4),('b',2),('c',5)]
2024-01-27 22:38:44 +0100 <tomsmeding> (a, b) is the canonical example, but Either a b is also one
2024-01-27 22:39:00 +0100 <tri> i see, Functor can only map on Right
2024-01-27 22:39:07 +0100 <tri> but Bifunctor can also map on Left
2024-01-27 22:39:10 +0100 <tomsmeding> yep
2024-01-27 22:39:10 +0100 <tri> given the first function
2024-01-27 22:39:15 +0100 <tri> oh ok that's neat
2024-01-27 22:39:16 +0100 <tri> thank you
2024-01-27 22:39:19 +0100 <mauke> and Profunctor gets paid to do it
2024-01-27 22:39:30 +0100 <tomsmeding> but it's a professional so they can deal with it
2024-01-27 22:40:52 +0100fansly(~fansly@2001:448a:2010:476e:c9c:17f1:874c:ee93) (Ping timeout: 276 seconds)
2024-01-27 22:42:45 +0100 <tri> tomsmeding: i just realized that i can also do (fmap . fmap) fn myListOfTuples
2024-01-27 22:42:58 +0100 <tomsmeding> that's what mauke was saying
2024-01-27 22:43:05 +0100 <tomsmeding> I'm saying, if you're fmapping a pair, use second instead
2024-01-27 22:43:08 +0100remmie(ianremsen@tilde.team)
2024-01-27 22:43:26 +0100 <tri> how so?
2024-01-27 22:43:29 +0100 <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
2024-01-27 22:43:51 +0100 <tomsmeding> instead of silently still "working"
2024-01-27 22:43:54 +0100fansly(~fansly@2404:c0:2020::d01:bcec)
2024-01-27 22:44:20 +0100 <tomsmeding> this is the same discussion as "why is (a,) Foldable"
2024-01-27 22:44:24 +0100 <tomsmeding> > length (3, 4)
2024-01-27 22:44:26 +0100 <lambdabot> 1
2024-01-27 22:44:26 +0100 <tri> because... list is not a bifunctor right
2024-01-27 22:44:40 +0100 <tri> im just logically guessing
2024-01-27 22:44:48 +0100 <tri> since list is [a]
2024-01-27 22:45:01 +0100 <tri> it only has type inside, so it's a "single" functor
2024-01-27 22:45:05 +0100 <tomsmeding> if you consider that length thing perfectly fine, you're probably a person that should use fmap . fmap here
2024-01-27 22:45:07 +0100 <tri> cannot be a bifunctor
2024-01-27 22:45:19 +0100 <tomsmeding> yes
2024-01-27 22:45:30 +0100 <tomsmeding> > second (+1) [1,2,3]
2024-01-27 22:45:31 +0100 <lambdabot> error:
2024-01-27 22:45:32 +0100 <lambdabot> • Couldn't match type ‘(d, b)’ with ‘[a0]’
2024-01-27 22:45:32 +0100 <lambdabot> Expected type: [a0] -> (d, b)
2024-01-27 22:45:45 +0100 <tomsmeding> % Data.Bifunctor.second (+1) [1,2,3]
2024-01-27 22:45:45 +0100 <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 ; ‘[...
2024-01-27 22:45:56 +0100trihead explodes
2024-01-27 22:45:56 +0100 <tomsmeding> %% Data.Bifunctor.second (+1) [1,2,3]
2024-01-27 22:45:56 +0100 <yahb2> https://paste.tomsmeding.com/i4yx0Taf
2024-01-27 22:46:10 +0100 <tomsmeding> % :t Data.Bifunctor.second
2024-01-27 22:46:10 +0100 <yahb2> Data.Bifunctor.second ; :: forall (p :: Type -> Type -> Type) b c a. ; Data.Bifunctor.Bifunctor p => ; (b -> c) -> p a b -> p a c
2024-01-27 22:46:18 +0100 <tomsmeding> p a b -> p a c
2024-01-27 22:46:24 +0100 <tomsmeding> [a] doesn't match p a b
2024-01-27 22:46:30 +0100 <tomsmeding> because [] doesn't match 'p a'
2024-01-27 22:48:25 +0100fansly(~fansly@2404:c0:2020::d01:bcec) (Ping timeout: 264 seconds)
2024-01-27 22:48:45 +0100dtman34(~dtman34@c-76-156-89-180.hsd1.mn.comcast.net)
2024-01-27 22:50:55 +0100 <exarkun> sometimes `[] a` (which is the same thing as `[a]`) makes this clearer
2024-01-27 22:52:34 +0100destituion(~destituio@2001:4644:c37:0:57f:87b2:efe8:e836) (Ping timeout: 276 seconds)
2024-01-27 22:53:14 +0100destituion(~destituio@2a02:2121:304:cc78:d9dc:8709:4c3b:d0d2)
2024-01-27 22:53:55 +0100fansly(~fansly@2404:c0:2020::d01:bcec)
2024-01-27 22:54:14 +0100peterbecich(~Thunderbi@047-229-123-186.res.spectrum.com)
2024-01-27 22:58:37 +0100fansly(~fansly@2404:c0:2020::d01:bcec) (Ping timeout: 264 seconds)
2024-01-27 22:59:10 +0100 <mauke> p = [
2024-01-27 22:59:12 +0100 <mauke> a = ]
2024-01-27 23:02:42 +0100fansly(~fansly@2404:c0:2020::d01:bcec)
2024-01-27 23:05:45 +0100fansly(~fansly@2404:c0:2020::d01:bcec) (Remote host closed the connection)
2024-01-27 23:06:32 +0100fendor(~fendor@2a02:8388:1605:d100:267b:1353:13d7:4f0c) (Remote host closed the connection)
2024-01-27 23:08:10 +0100igemnace(~ian@user/igemnace) (Read error: Connection reset by peer)
2024-01-27 23:09:23 +0100 <monochrom> haha now I get the joke
2024-01-27 23:13:29 +0100wootehfoot(~wootehfoo@user/wootehfoot)
2024-01-27 23:17:46 +0100EvanR(~EvanR@user/evanr)
2024-01-27 23:17:56 +0100samhh(7569f027cf@2a03:6000:1812:100::e4) (Remote host closed the connection)
2024-01-27 23:17:56 +0100fn_lumi(3d621153a5@2a03:6000:1812:100::df7) (Remote host closed the connection)
2024-01-27 23:17:56 +0100samhh_(7569f027cf@2a03:6000:1812:100::e4) (Remote host closed the connection)
2024-01-27 23:17:56 +0100ggb(a62ffbaf4f@2a03:6000:1812:100::3ac) (Read error: Connection reset by peer)
2024-01-27 23:17:56 +0100sm2n(ae95cb1267@user/sm2n) (Read error: Connection reset by peer)
2024-01-27 23:17:56 +0100lukec(9dfd4d094e@2a03:6000:1812:100::10e) (Remote host closed the connection)
2024-01-27 23:17:56 +0100cpli(77fc530071@2a03:6000:1812:100::252) (Write error: Connection reset by peer)
2024-01-27 23:17:56 +0100JoelMcCracken(5ea8252fbb@2a03:6000:1812:100::10e3) (Remote host closed the connection)
2024-01-27 23:17:56 +0100raghavgururajan(ea769b8000@user/raghavgururajan) (Read error: Connection reset by peer)
2024-01-27 23:17:56 +0100b0o(0e4a0bf4c9@2a03:6000:1812:100::1bf) (Read error: Connection reset by peer)
2024-01-27 23:17:56 +0100jleightcap(7bc4014b62@user/jleightcap) (Remote host closed the connection)
2024-01-27 23:17:56 +0100brettgilio(a35ba67324@2a03:6000:1812:100::260) (Read error: Connection reset by peer)
2024-01-27 23:17:56 +0100jkoshy(99b9359beb@user/jkoshy) (Remote host closed the connection)
2024-01-27 23:17:57 +0100ymherklotz(cb2c9cfbdd@2a03:6000:1812:100::29a) (Remote host closed the connection)
2024-01-27 23:17:57 +0100shreyasminocha(51fdc93eda@user/shreyasminocha) (Read error: Connection reset by peer)
2024-01-27 23:17:57 +0100rselim(ce261f06ff@user/milesrout) (Read error: Connection reset by peer)
2024-01-27 23:17:57 +0100akspecs(00cc8321af@sourcehut/user/akspecs) (Write error: Connection reset by peer)
2024-01-27 23:17:57 +0100henrytill(e0180937c3@2a03:6000:1812:100::e8c) (Remote host closed the connection)
2024-01-27 23:17:57 +0100Ankhers(e99e97ef8e@2a03:6000:1812:100::2a2) (Remote host closed the connection)
2024-01-27 23:17:57 +0100fvr(ef3e56ca8b@2a03:6000:1812:100::3c4) (Remote host closed the connection)
2024-01-27 23:17:57 +0100eso(a0662dfd5e@2a03:6000:1812:100::1266) (Remote host closed the connection)
2024-01-27 23:17:58 +0100fgaz_(1ff9197ed6@2a03:6000:1812:100::11ea) (Remote host closed the connection)
2024-01-27 23:17:58 +0100fluffyballoon(45ce440a48@2a03:6000:1812:100::e2) (Read error: Connection reset by peer)
2024-01-27 23:17:58 +0100whereiseveryone(206ba86c98@2a03:6000:1812:100::2e4) (Read error: Connection reset by peer)
2024-01-27 23:17:58 +0100chaitlatte0(ea29c0bb16@user/chaitlatte0) (Remote host closed the connection)
2024-01-27 23:17:58 +0100filwisher(2e6936c793@2a03:6000:1812:100::170) (Remote host closed the connection)
2024-01-27 23:17:58 +0100jmcantrell(644f1bed9a@user/jmcantrell) (Read error: Connection reset by peer)
2024-01-27 23:17:58 +0100probie(cc0b34050a@user/probie) (Remote host closed the connection)
2024-01-27 23:17:58 +0100kuruczgy(55b66dd3ae@2a03:6000:1812:100::127f) (Remote host closed the connection)
2024-01-27 23:17:58 +0100evanrelf(3addc196af@2a03:6000:1812:100::f0) (Remote host closed the connection)
2024-01-27 23:17:58 +0100jakzale(6291399afa@user/jakzale) (Remote host closed the connection)
2024-01-27 23:17:58 +0100aniketd(32aa4844cd@2a03:6000:1812:100::dcb) (Remote host closed the connection)
2024-01-27 23:17:58 +0100arcadewise(52968ed80d@2a03:6000:1812:100::3df) (Remote host closed the connection)
2024-01-27 23:17:58 +0100sus(1b7af6299f@user/zeromomentum) (Remote host closed the connection)
2024-01-27 23:17:58 +0100bsima1(9d7e39c8ad@2a03:6000:1812:100::dd) (Remote host closed the connection)
2024-01-27 23:18:00 +0100tri(~tri@ool-18bc2e74.dyn.optonline.net) (Read error: Connection reset by peer)
2024-01-27 23:18:05 +0100ggb(a62ffbaf4f@2a03:6000:1812:100::3ac)
2024-01-27 23:18:06 +0100bsima1(9d7e39c8ad@2a03:6000:1812:100::dd)
2024-01-27 23:18:06 +0100lukec(9dfd4d094e@2a03:6000:1812:100::10e)
2024-01-27 23:18:06 +0100filwisher(2e6936c793@2a03:6000:1812:100::170)
2024-01-27 23:18:07 +0100kuruczgy(55b66dd3ae@2a03:6000:1812:100::127f)
2024-01-27 23:18:07 +0100fgaz_(1ff9197ed6@2a03:6000:1812:100::11ea)
2024-01-27 23:18:07 +0100raghavgururajan(ea769b8000@user/raghavgururajan)
2024-01-27 23:18:08 +0100jkoshy(99b9359beb@user/jkoshy)
2024-01-27 23:18:08 +0100b0o(0e4a0bf4c9@2a03:6000:1812:100::1bf)
2024-01-27 23:18:08 +0100probie(cc0b34050a@user/probie)
2024-01-27 23:18:08 +0100jmcantrell(644f1bed9a@user/jmcantrell)
2024-01-27 23:18:10 +0100samhh(7569f027cf@2a03:6000:1812:100::e4)
2024-01-27 23:18:10 +0100fluffyballoon(45ce440a48@2a03:6000:1812:100::e2)
2024-01-27 23:18:10 +0100chaitlatte0(ea29c0bb16@user/chaitlatte0)
2024-01-27 23:18:12 +0100sus(1b7af6299f@user/zeromomentum)
2024-01-27 23:18:12 +0100aniketd(32aa4844cd@2a03:6000:1812:100::dcb)
2024-01-27 23:18:13 +0100evanrelf(3addc196af@2a03:6000:1812:100::f0)
2024-01-27 23:18:13 +0100jakzale(6291399afa@user/jakzale)
2024-01-27 23:18:13 +0100whereiseveryone(206ba86c98@2a03:6000:1812:100::2e4)
2024-01-27 23:18:14 +0100JoelMcCracken(5ea8252fbb@2a03:6000:1812:100::10e3)
2024-01-27 23:18:14 +0100akspecs(00cc8321af@sourcehut/user/akspecs)
2024-01-27 23:18:16 +0100fn_lumi(3d621153a5@2a03:6000:1812:100::df7)
2024-01-27 23:18:16 +0100shreyasminocha(51fdc93eda@user/shreyasminocha)
2024-01-27 23:18:18 +0100arcadewise(52968ed80d@2a03:6000:1812:100::3df)
2024-01-27 23:18:18 +0100ymherklotz(cb2c9cfbdd@2a03:6000:1812:100::29a)
2024-01-27 23:18:18 +0100rselim(ce261f06ff@user/milesrout)
2024-01-27 23:18:18 +0100henrytill(e0180937c3@2a03:6000:1812:100::e8c)
2024-01-27 23:18:19 +0100eso(a0662dfd5e@2a03:6000:1812:100::1266)
2024-01-27 23:18:20 +0100sm2n(ae95cb1267@user/sm2n)
2024-01-27 23:18:20 +0100fvr(ef3e56ca8b@2a03:6000:1812:100::3c4)
2024-01-27 23:18:20 +0100brettgilio(a35ba67324@2a03:6000:1812:100::260)
2024-01-27 23:18:20 +0100cpli(77fc530071@2a03:6000:1812:100::252)
2024-01-27 23:18:20 +0100Ankhers(e99e97ef8e@2a03:6000:1812:100::2a2)
2024-01-27 23:18:21 +0100jleightcap(7bc4014b62@user/jleightcap)
2024-01-27 23:20:34 +0100zetef(~quassel@5.2.182.98)
2024-01-27 23:20:58 +0100coot(~coot@89-69-206-216.dynamic.chello.pl) (Quit: coot)
2024-01-27 23:26:04 +0100igemnace(~ian@user/igemnace)
2024-01-27 23:29:55 +0100Katarushisu1(~Katarushi@cpc147790-finc20-2-0-cust502.4-2.cable.virginm.net) (Quit: The Lounge - https://thelounge.chat)
2024-01-27 23:29:58 +0100 <haskellbridge> 15<J​ade> is it just me, or is the fact that ghci clears all top level expressions when using `:check` very unintuitive?
2024-01-27 23:30:24 +0100 <haskellbridge> 15<J​ade> I understand for things that actually modify what modules are loaded (load, add, unadd) but why check?
2024-01-27 23:31:01 +0100Katarushisu1(~Katarushi@cpc147790-finc20-2-0-cust502.4-2.cable.virginm.net)
2024-01-27 23:32:22 +0100mobivme(~mobivme@130.105.162.16) (Remote host closed the connection)
2024-01-27 23:46:42 +0100 <geekosaur> the last line I see is "Ok, one module loaded" so I guess it's using :load behind the scenes
2024-01-27 23:46:49 +0100 <geekosaur> (also it seems to be undocumented)
2024-01-27 23:47:42 +0100 <geekosaur> yes, it's recompiling and reloading it, presumably collecting definitions as it goes
2024-01-27 23:50:21 +0100nicos(~nsm@host98.181-4-190.telecom.net.ar)