2024-01-27 00:05:13 +0100 | peterbecich | (~Thunderbi@047-229-123-186.res.spectrum.com) (Ping timeout: 264 seconds) |
2024-01-27 00:15:01 +0100 | tcard | (~tcard@2400:4051:5801:7500:cf17:befc:ff82:5303) (Quit: Leaving) |
2024-01-27 00:16:47 +0100 | tcard | (~tcard@2400:4051:5801:7500:cf17:befc:ff82:5303) |
2024-01-27 00:19:38 +0100 | nicos | (~nsm@186.143.134.1) (Read error: Connection reset by peer) |
2024-01-27 00:22:22 +0100 | nicos | (~nsm@2800:2131:5400:883:28f6:1624:5755:79b0) |
2024-01-27 00:22:49 +0100 | average | (uid473595@user/average) |
2024-01-27 00:33:35 +0100 | remmie | (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 +0100 | tri | (~tri@ool-18bc2e74.dyn.optonline.net) (Remote host closed the connection) |
2024-01-27 00:57:26 +0100 | lovasko | (~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 +0100 | gmg | (~user@user/gehmehgeh) (Quit: Leaving) |
2024-01-27 01:14:49 +0100 | crook1389 | (uid581388@id-581388.ilkley.irccloud.com) (Quit: Connection closed for inactivity) |
2024-01-27 01:15:20 +0100 | stiell | (~stiell@gateway/tor-sasl/stiell) (Ping timeout: 255 seconds) |
2024-01-27 01:15:43 +0100 | a51 | (a51@gateway/vpn/protonvpn/a51) (Ping timeout: 268 seconds) |
2024-01-27 01:15:53 +0100 | stiell | (~stiell@gateway/tor-sasl/stiell) |
2024-01-27 01:23:03 +0100 | hackyhacker | (~user@212.71.9.113) (Quit: rcirc on GNU Emacs 29.1) |
2024-01-27 01:29:55 +0100 | peterbecich | (~Thunderbi@047-229-123-186.res.spectrum.com) |
2024-01-27 01:29:56 +0100 | hackyhacker | (~hackyhack@212.71.9.113) |
2024-01-27 01:30:44 +0100 | johnw | (~johnw@69.62.242.138) (Quit: ZNC - http://znc.in) |
2024-01-27 01:31:17 +0100 | Tuplanolla | (~Tuplanoll@91-159-68-95.elisa-laajakaista.fi) (Quit: Leaving.) |
2024-01-27 01:45:19 +0100 | foul_owl | (~kerry@174-21-148-34.tukw.qwest.net) (Ping timeout: 268 seconds) |
2024-01-27 01:58:20 +0100 | foul_owl | (~kerry@185.219.141.160) |
2024-01-27 02:12:28 +0100 | tremon | (~tremon@83.80.159.219) (Quit: getting boxed in) |
2024-01-27 02:26:01 +0100 | hackyhacker | (~hackyhack@212.71.9.113) (Ping timeout: 276 seconds) |
2024-01-27 02:33:17 +0100 | ddellacosta | (~ddellacos@ool-44c73d16.dyn.optonline.net) |
2024-01-27 02:34:13 +0100 | tabemann | (~tabemann@2600:1700:7990:24e0:d92c:5469:8cb0:8d14) |
2024-01-27 02:35:16 +0100 | tabemann_ | (~tabemann@2600:1700:7990:24e0:aad7:ae4:6df1:f3e8) (Ping timeout: 268 seconds) |
2024-01-27 02:36:30 +0100 | Lord_of_Life | (~Lord@user/lord-of-life/x-2819915) (Ping timeout: 268 seconds) |
2024-01-27 02:36:51 +0100 | Lord_of_Life | (~Lord@user/lord-of-life/x-2819915) |
2024-01-27 02:44:29 +0100 | thegeekinside | (~thegeekin@189.180.65.186) (Ping timeout: 240 seconds) |
2024-01-27 02:47:42 +0100 | tabemann | (~tabemann@2600:1700:7990:24e0:d92c:5469:8cb0:8d14) (Quit: Leaving) |
2024-01-27 02:48:50 +0100 | mima | (~mmh@aftr-62-216-211-173.dynamic.mnet-online.de) (Ping timeout: 268 seconds) |
2024-01-27 02:53:07 +0100 | igemnace | (~ian@user/igemnace) (Remote host closed the connection) |
2024-01-27 03:08:10 +0100 | tri | (~tri@ool-18bc2e74.dyn.optonline.net) |
2024-01-27 03:09:34 +0100 | shapr | (~user@c-24-218-186-89.hsd1.ma.comcast.net) (Ping timeout: 276 seconds) |
2024-01-27 03:12:38 +0100 | rosco | (~rosco@175.136.156.77) |
2024-01-27 03:14:13 +0100 | peterbecich | (~Thunderbi@047-229-123-186.res.spectrum.com) (Ping timeout: 264 seconds) |
2024-01-27 03:18:02 +0100 | fansly | (~fansly@2404:c0:2020::cf0:141d) |
2024-01-27 03:18:43 +0100 | tabemann | (~tabemann@2600:1700:7990:24e0:f3c9:7285:9b5:ded8) |
2024-01-27 03:24:29 +0100 | otto_s | (~daniel@p54993447.dip0.t-ipconnect.de) |
2024-01-27 03:24:39 +0100 | otto_s | (~daniel@p54993447.dip0.t-ipconnect.de) () |
2024-01-27 03:24:43 +0100 | otto_s | (~daniel@p54993447.dip0.t-ipconnect.de) |
2024-01-27 03:24:49 +0100 | otto_s | (~daniel@p54993447.dip0.t-ipconnect.de) () |
2024-01-27 03:25:22 +0100 | otto_s | (~daniel@p54993447.dip0.t-ipconnect.de) |
2024-01-27 03:31:44 +0100 | otto_s | (~daniel@p54993447.dip0.t-ipconnect.de) (Ping timeout: 252 seconds) |
2024-01-27 03:31:55 +0100 | gorignak | (~gorignak@user/gorignak) (Quit: quit) |
2024-01-27 03:32:12 +0100 | otto_s | (~otto_s@p5499379a.dip0.t-ipconnect.de) |
2024-01-27 03:46:23 +0100 | tri | (~tri@ool-18bc2e74.dyn.optonline.net) (Remote host closed the connection) |
2024-01-27 03:47:13 +0100 | eggplantade | (~Eggplanta@2600:1700:38c5:d800:5014:5b74:113d:d036) (Remote host closed the connection) |
2024-01-27 03:47:24 +0100 | bilegeek | (~bilegeek@2600:1008:b0a2:2201:7d6a:5c17:5067:9b92) |
2024-01-27 03:47:31 +0100 | eggplantade | (~Eggplanta@2600:1700:38c5:d800:5014:5b74:113d:d036) |
2024-01-27 03:51:24 +0100 | szkl | (uid110435@uxbridge.irccloud.com) (Quit: Connection closed for inactivity) |
2024-01-27 03:53:32 +0100 | peterbecich | (~Thunderbi@047-229-123-186.res.spectrum.com) |
2024-01-27 04:03:16 +0100 | fansly | (~fansly@2404:c0:2020::cf0:141d) (Remote host closed the connection) |
2024-01-27 04:18:34 +0100 | gorignak | (~gorignak@user/gorignak) |
2024-01-27 04:31:13 +0100 | sm | (~user@plaintextaccounting/sm) |
2024-01-27 04:35:39 +0100 | pavonia | (~user@user/siracusa) (Quit: Bye!) |
2024-01-27 04:37:42 +0100 | rosco | (~rosco@175.136.156.77) (Quit: Lost terminal) |
2024-01-27 04:48:53 +0100 | td_ | (~td@i5387091B.versanet.de) (Ping timeout: 240 seconds) |
2024-01-27 04:49:37 +0100 | TonyStone | (~TonyStone@074-076-057-186.res.spectrum.com) (Quit: Leaving) |
2024-01-27 04:51:04 +0100 | td_ | (~td@i5387092D.versanet.de) |
2024-01-27 05:00:55 +0100 | peterbecich | (~Thunderbi@047-229-123-186.res.spectrum.com) (Ping timeout: 256 seconds) |
2024-01-27 05:05:35 +0100 | czy` | (~user@114.226.59.181) (Remote host closed the connection) |
2024-01-27 05:05:35 +0100 | czy | (~user@114.226.59.181) (Remote host closed the connection) |
2024-01-27 05:12:14 +0100 | Lycurgus | (~georg@user/Lycurgus) |
2024-01-27 05:14:09 +0100 | otto_s | (~otto_s@p5499379a.dip0.t-ipconnect.de) (Ping timeout: 260 seconds) |
2024-01-27 05:18:00 +0100 | nicos | (~nsm@2800:2131:5400:883:28f6:1624:5755:79b0) (Read error: Connection reset by peer) |
2024-01-27 05:18:13 +0100 | nicos | (~nsm@2800:2131:5400:883:28f6:1624:5755:79b0) |
2024-01-27 05:50:26 +0100 | tri | (~tri@ool-18bc2e74.dyn.optonline.net) |
2024-01-27 05:56:13 +0100 | aforemny_ | (~aforemny@i59F516CF.versanet.de) |
2024-01-27 05:56:13 +0100 | aforemny | (~aforemny@2001:9e8:6cda:4600:7747:ed4:88dc:55a7) (Ping timeout: 264 seconds) |
2024-01-27 06:07:06 +0100 | whatsupdoc | (uid509081@id-509081.hampstead.irccloud.com) (Quit: Connection closed for inactivity) |
2024-01-27 06:18:36 +0100 | Lycurgus | (~georg@user/Lycurgus) (Quit: leaving) |
2024-01-27 06:28:32 +0100 | trev | (~trev@user/trev) |
2024-01-27 06:40:28 +0100 | thegeekinside | (~thegeekin@189.180.65.186) |
2024-01-27 06:45:38 +0100 | thegeekinside | (~thegeekin@189.180.65.186) (Ping timeout: 268 seconds) |
2024-01-27 07:06:00 +0100 | rosco | (~rosco@175.136.156.77) |
2024-01-27 07:06:29 +0100 | tri | (~tri@ool-18bc2e74.dyn.optonline.net) (Remote host closed the connection) |
2024-01-27 07:07:43 +0100 | tri | (~tri@ool-18bc2e74.dyn.optonline.net) |
2024-01-27 07:12:40 +0100 | tri | (~tri@ool-18bc2e74.dyn.optonline.net) (Ping timeout: 276 seconds) |
2024-01-27 07:15:24 +0100 | takuan | (~takuan@178-116-218-225.access.telenet.be) |
2024-01-27 07:20:01 +0100 | myxos | (~myxos@065-028-251-121.inf.spectrum.com) (Remote host closed the connection) |
2024-01-27 07:21:51 +0100 | echoreply | (~echoreply@45.32.163.16) (Quit: WeeChat 2.8) |
2024-01-27 07:23:12 +0100 | echoreply | (~echoreply@2001:19f0:9002:1f3b:5400:ff:fe6f:8b8d) |
2024-01-27 07:25:36 +0100 | harveypwca | (~harveypwc@2601:246:c201:d680:59a0:7761:1557:ead5) |
2024-01-27 07:33:06 +0100 | Szilva | (~Szilva@87-97-12-229.pool.digikabel.hu) (Remote host closed the connection) |
2024-01-27 07:33:17 +0100 | myxos | (~myxos@065-028-251-121.inf.spectrum.com) |
2024-01-27 07:33:29 +0100 | tri | (~tri@ool-18bc2e74.dyn.optonline.net) |
2024-01-27 07:37:40 +0100 | tri | (~tri@ool-18bc2e74.dyn.optonline.net) (Ping timeout: 246 seconds) |
2024-01-27 07:58:21 +0100 | yeahitsme | (~bob@user/yeahitsme) |
2024-01-27 08:06:50 +0100 | tri | (~tri@ool-18bc2e74.dyn.optonline.net) |
2024-01-27 08:10:53 +0100 | tri | (~tri@ool-18bc2e74.dyn.optonline.net) (Ping timeout: 240 seconds) |
2024-01-27 08:15:25 +0100 | causal | (~eric@50.35.85.7) |
2024-01-27 08:28:31 +0100 | Unicorn_Princess | (~Unicorn_P@user/Unicorn-Princess/x-3540542) |
2024-01-27 08:34:28 +0100 | peterbecich | (~Thunderbi@047-229-123-186.res.spectrum.com) |
2024-01-27 08:35:04 +0100 | Vajb | (~Vajb@n7kymlrhl8zspe1o45k-1.v6.elisa-mobile.fi) |
2024-01-27 08:37:40 +0100 | tromp | (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) |
2024-01-27 08:39:20 +0100 | tri | (~tri@ool-18bc2e74.dyn.optonline.net) |
2024-01-27 08:40:02 +0100 | rosco | (~rosco@175.136.156.77) (Read error: Connection reset by peer) |
2024-01-27 08:44:41 +0100 | tri | (~tri@ool-18bc2e74.dyn.optonline.net) (Ping timeout: 252 seconds) |
2024-01-27 08:57:46 +0100 | harveypwca | (~harveypwc@2601:246:c201:d680:59a0:7761:1557:ead5) (Quit: Leaving) |
2024-01-27 09:02:29 +0100 | rosco | (~rosco@175.136.156.77) |
2024-01-27 09:10:55 +0100 | econo_ | (uid147250@id-147250.tinside.irccloud.com) (Quit: Connection closed for inactivity) |
2024-01-27 09:26:13 +0100 | tri | (~tri@ool-18bc2e74.dyn.optonline.net) |
2024-01-27 09:28:46 +0100 | sord937 | (~sord937@gateway/tor-sasl/sord937) |
2024-01-27 09:28:48 +0100 | sord937 | (~sord937@gateway/tor-sasl/sord937) (Client Quit) |
2024-01-27 09:29:07 +0100 | sord937 | (~sord937@gateway/tor-sasl/sord937) |
2024-01-27 09:30:39 +0100 | tri | (~tri@ool-18bc2e74.dyn.optonline.net) (Ping timeout: 260 seconds) |
2024-01-27 09:37:31 +0100 | sord937 | (~sord937@gateway/tor-sasl/sord937) (Remote host closed the connection) |
2024-01-27 09:38:23 +0100 | sord937 | (~sord937@gateway/tor-sasl/sord937) |
2024-01-27 09:41:23 +0100 | shriekingnoise | (~shrieking@186.137.175.87) (Ping timeout: 268 seconds) |
2024-01-27 09:41:23 +0100 | euleritian | (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) (Read error: Connection reset by peer) |
2024-01-27 09:41:39 +0100 | euleritian | (~euleritia@77.22.252.56) |
2024-01-27 09:47:26 +0100 | sord937 | (~sord937@gateway/tor-sasl/sord937) (Quit: sord937) |
2024-01-27 09:47:42 +0100 | Unicorn_Princess | (~Unicorn_P@user/Unicorn-Princess/x-3540542) (Remote host closed the connection) |
2024-01-27 09:49:37 +0100 | tri | (~tri@ool-18bc2e74.dyn.optonline.net) |
2024-01-27 09:50:57 +0100 | danza | (~danza@151.47.71.134) |
2024-01-27 09:54:35 +0100 | tri | (~tri@ool-18bc2e74.dyn.optonline.net) (Ping timeout: 264 seconds) |
2024-01-27 09:59:23 +0100 | Square2 | (~Square@user/square) (Ping timeout: 264 seconds) |
2024-01-27 10:05:12 +0100 | Tisoxin | (~Ikosit@user/ikosit) (Quit: The Lounge - https://thelounge.chat) |
2024-01-27 10:05:33 +0100 | Tisoxin | (~Ikosit@user/ikosit) |
2024-01-27 10:07:28 +0100 | alexherbo2 | (~alexherbo@2a02-8440-3140-b89b-a08f-42e2-c7fb-39b2.rev.sfr.net) (Remote host closed the connection) |
2024-01-27 10:07:49 +0100 | alexherbo2 | (~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 +0100 | azimut | (~azimut@gateway/tor-sasl/azimut) (Ping timeout: 255 seconds) |
2024-01-27 10:14:38 +0100 | fansly | (~fansly@182.0.171.248) |
2024-01-27 10:16:04 +0100 | megaTherion | (~therion@unix.io) (Quit: ZNC 1.8.2 - https://znc.in) |
2024-01-27 10:16:34 +0100 | eggplantade | (~Eggplanta@2600:1700:38c5:d800:5014:5b74:113d:d036) (Remote host closed the connection) |
2024-01-27 10:17:11 +0100 | megaTherion | (~therion@unix.io) |
2024-01-27 10:20:08 +0100 | tri | (~tri@ool-18bc2e74.dyn.optonline.net) |
2024-01-27 10:20:35 +0100 | tromp | (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…) |
2024-01-27 10:21:28 +0100 | euleritian | (~euleritia@77.22.252.56) (Ping timeout: 246 seconds) |
2024-01-27 10:22:33 +0100 | euleritian | (~euleritia@dynamic-176-007-002-044.176.7.pool.telefonica.de) |
2024-01-27 10:22:40 +0100 | bobby | (~bob@80.158-248-1.customer.lyse.net) |
2024-01-27 10:22:45 +0100 | yeahitsme | (~bob@user/yeahitsme) (Read error: Connection reset by peer) |
2024-01-27 10:23:49 +0100 | peterbecich | (~Thunderbi@047-229-123-186.res.spectrum.com) (Ping timeout: 264 seconds) |
2024-01-27 10:25:45 +0100 | tri | (~tri@ool-18bc2e74.dyn.optonline.net) (Ping timeout: 256 seconds) |
2024-01-27 10:29:26 +0100 | euleritian | (~euleritia@dynamic-176-007-002-044.176.7.pool.telefonica.de) (Read error: Connection reset by peer) |
2024-01-27 10:29:43 +0100 | euleritian | (~euleritia@77.22.252.56) |
2024-01-27 10:34:29 +0100 | euleritian | (~euleritia@77.22.252.56) (Read error: Connection reset by peer) |
2024-01-27 10:35:13 +0100 | euleritian | (~euleritia@77.22.252.56) |
2024-01-27 10:39:26 +0100 | tri | (~tri@ool-18bc2e74.dyn.optonline.net) |
2024-01-27 10:44:59 +0100 | tri | (~tri@ool-18bc2e74.dyn.optonline.net) (Ping timeout: 264 seconds) |
2024-01-27 10:45:01 +0100 | gmg | (~user@user/gehmehgeh) |
2024-01-27 10:46:01 +0100 | mobivme | (~mobivme@130.105.162.252) |
2024-01-27 10:47:09 +0100 | alexherbo2 | (~alexherbo@2a02-8440-3140-b89b-a08f-42e2-c7fb-39b2.rev.sfr.net) (Remote host closed the connection) |
2024-01-27 10:47:28 +0100 | alexherbo2 | (~alexherbo@2a02-8440-3140-b89b-a08f-42e2-c7fb-39b2.rev.sfr.net) |
2024-01-27 10:53:45 +0100 | SAJAT | (~sajat@87-97-12-229.pool.digikabel.hu) |
2024-01-27 10:53:46 +0100 | eggplantade | (~Eggplanta@2600:1700:38c5:d800:5014:5b74:113d:d036) |
2024-01-27 10:53:49 +0100 | Erutuon | (~Erutuon@user/erutuon) (Ping timeout: 264 seconds) |
2024-01-27 10:53:53 +0100 | target_i | (~target_i@217.175.14.39) |
2024-01-27 10:58:59 +0100 | tri | (~tri@ool-18bc2e74.dyn.optonline.net) |
2024-01-27 11:03:41 +0100 | tri | (~tri@ool-18bc2e74.dyn.optonline.net) (Ping timeout: 260 seconds) |
2024-01-27 11:05:00 +0100 | Erutuon | (~Erutuon@user/erutuon) |
2024-01-27 11:07:03 +0100 | Tuplanolla | (~Tuplanoll@91-159-68-95.elisa-laajakaista.fi) |
2024-01-27 11:09:18 +0100 | bilegeek | (~bilegeek@2600:1008:b0a2:2201:7d6a:5c17:5067:9b92) (Quit: Leaving) |
2024-01-27 11:09:33 +0100 | fansly | (~fansly@182.0.171.248) (Remote host closed the connection) |
2024-01-27 11:14:09 +0100 | mobivme | (~mobivme@130.105.162.252) (Remote host closed the connection) |
2024-01-27 11:15:33 +0100 | Erutuon | (~Erutuon@user/erutuon) (Quit: WeeChat 2.8) |
2024-01-27 11:18:09 +0100 | mei | (~mei@user/mei) (Remote host closed the connection) |
2024-01-27 11:18:30 +0100 | mima | (~mmh@aftr-62-216-211-171.dynamic.mnet-online.de) |
2024-01-27 11:30:41 +0100 | tri | (~tri@ool-18bc2e74.dyn.optonline.net) |
2024-01-27 11:32:39 +0100 | rosco | (~rosco@175.136.156.77) (Quit: Lost terminal) |
2024-01-27 11:32:53 +0100 | bobby | (~bob@80.158-248-1.customer.lyse.net) (Changing host) |
2024-01-27 11:32:53 +0100 | bobby | (~bob@user/yeahitsme) |
2024-01-27 11:34:25 +0100 | alexherbo2 | (~alexherbo@2a02-8440-3140-b89b-a08f-42e2-c7fb-39b2.rev.sfr.net) (Remote host closed the connection) |
2024-01-27 11:34:45 +0100 | alexherbo2 | (~alexherbo@2a02-8440-3140-b89b-a08f-42e2-c7fb-39b2.rev.sfr.net) |
2024-01-27 11:35:11 +0100 | coot | (~coot@89-69-206-216.dynamic.chello.pl) |
2024-01-27 11:35:12 +0100 | coot | (~coot@89-69-206-216.dynamic.chello.pl) (Remote host closed the connection) |
2024-01-27 11:35:24 +0100 | coot | (~coot@89-69-206-216.dynamic.chello.pl) |
2024-01-27 11:36:24 +0100 | tri | (~tri@ool-18bc2e74.dyn.optonline.net) (Ping timeout: 268 seconds) |
2024-01-27 11:39:03 +0100 | tzh | (~tzh@c-71-193-181-0.hsd1.or.comcast.net) (Quit: zzz) |
2024-01-27 11:40:00 +0100 | lambdabot | (~lambdabot@haskell/bot/lambdabot) (Remote host closed the connection) |
2024-01-27 11:40:30 +0100 | lambdabot | (~lambdabot@silicon.int-e.eu) |
2024-01-27 11:40:30 +0100 | lambdabot | (~lambdabot@silicon.int-e.eu) (Changing host) |
2024-01-27 11:40:30 +0100 | lambdabot | (~lambdabot@haskell/bot/lambdabot) |
2024-01-27 11:40:30 +0100 | ChanServ | +v lambdabot |
2024-01-27 11:46:00 +0100 | tromp | (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) |
2024-01-27 11:50:14 +0100 | fansly | (~fansly@2001:448a:2010:476e:c9c:17f1:874c:ee93) |
2024-01-27 12:02:57 +0100 | euleritian | (~euleritia@77.22.252.56) (Read error: Connection reset by peer) |
2024-01-27 12:03:35 +0100 | euleritian | (~euleritia@77.22.252.56) |
2024-01-27 12:04:50 +0100 | tri | (~tri@ool-18bc2e74.dyn.optonline.net) |
2024-01-27 12:11:14 +0100 | tri | (~tri@ool-18bc2e74.dyn.optonline.net) (Ping timeout: 268 seconds) |
2024-01-27 12:12:03 +0100 | Sgeo | (~Sgeo@user/sgeo) (Read error: Connection reset by peer) |
2024-01-27 12:14:52 +0100 | welterde | (welterde@thinkbase.srv.welterde.de) (Quit: Moving day) |
2024-01-27 12:14:52 +0100 | euleritian | (~euleritia@77.22.252.56) (Read error: Connection reset by peer) |
2024-01-27 12:15:05 +0100 | euleritian | (~euleritia@77.22.252.56) |
2024-01-27 12:20:31 +0100 | EvanR | (~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 +0100 | AlexZenon | (~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 +0100 | otto_s | (~otto_s@p5499379a.dip0.t-ipconnect.de) |
2024-01-27 12:39:22 +0100 | AlexNoo | (~AlexNoo@94.233.241.143) (Ping timeout: 246 seconds) |
2024-01-27 12:39:52 +0100 | tri | (~tri@ool-18bc2e74.dyn.optonline.net) |
2024-01-27 12:44:58 +0100 | tri | (~tri@ool-18bc2e74.dyn.optonline.net) (Ping timeout: 246 seconds) |
2024-01-27 12:50:47 +0100 | driib | (~driib@vmi931078.contaboserver.net) (Quit: The Lounge - https://thelounge.chat) |
2024-01-27 12:55:50 +0100 | NiKaN | (sid385034@id-385034.helmsley.irccloud.com) (Ping timeout: 256 seconds) |
2024-01-27 12:58:57 +0100 | average | (uid473595@user/average) (Ping timeout: 260 seconds) |
2024-01-27 12:59:07 +0100 | alexherbo2 | (~alexherbo@2a02-8440-3140-b89b-a08f-42e2-c7fb-39b2.rev.sfr.net) (Remote host closed the connection) |
2024-01-27 12:59:27 +0100 | alexherbo2 | (~alexherbo@2a02-8440-3140-b89b-a08f-42e2-c7fb-39b2.rev.sfr.net) |
2024-01-27 12:59:38 +0100 | NiKaN | (sid385034@id-385034.helmsley.irccloud.com) |
2024-01-27 13:01:33 +0100 | average | (uid473595@user/average) |
2024-01-27 13:02:30 +0100 | tri | (~tri@ool-18bc2e74.dyn.optonline.net) |
2024-01-27 13:03:16 +0100 | igemnace | (~ian@user/igemnace) |
2024-01-27 13:08:08 +0100 | tri | (~tri@ool-18bc2e74.dyn.optonline.net) (Ping timeout: 252 seconds) |
2024-01-27 13:10:03 +0100 | driib | (~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 +0100 | causal | (~eric@50.35.85.7) (Quit: WeeChat 4.1.1) |
2024-01-27 13:21:49 +0100 | driib | (~driib@vmi931078.contaboserver.net) (Quit: The Lounge - https://thelounge.chat) |
2024-01-27 13:23:01 +0100 | tri | (~tri@ool-18bc2e74.dyn.optonline.net) |
2024-01-27 13:23:09 +0100 | driib | (~driib@vmi931078.contaboserver.net) |
2024-01-27 13:23:55 +0100 | szkl | (uid110435@id-110435.uxbridge.irccloud.com) |
2024-01-27 13:25:45 +0100 | AlexNoo | (~AlexNoo@178.34.160.228) |
2024-01-27 13:30:10 +0100 | tri | (~tri@ool-18bc2e74.dyn.optonline.net) (Ping timeout: 268 seconds) |
2024-01-27 13:36:50 +0100 | fansly | (~fansly@2001:448a:2010:476e:c9c:17f1:874c:ee93) (Remote host closed the connection) |
2024-01-27 13:37:10 +0100 | AlexZenon | (~alzenon@178.34.160.228) |
2024-01-27 13:44:29 +0100 | tri | (~tri@ool-18bc2e74.dyn.optonline.net) |
2024-01-27 13:45:35 +0100 | eggplantade | (~Eggplanta@2600:1700:38c5:d800:5014:5b74:113d:d036) (Ping timeout: 268 seconds) |
2024-01-27 13:48:35 +0100 | danza | (~danza@151.47.71.134) (Ping timeout: 264 seconds) |
2024-01-27 13:49:06 +0100 | ph88 | (~ph88@ip5b403f30.dynamic.kabel-deutschland.de) |
2024-01-27 13:58:14 +0100 | fansly | (~fansly@103.3.221.236) |
2024-01-27 14:09:41 +0100 | fansly | (~fansly@103.3.221.236) (Ping timeout: 240 seconds) |
2024-01-27 14:10:03 +0100 | pavonia | (~user@user/siracusa) |
2024-01-27 14:10:27 +0100 | fansly | (~fansly@2001:448a:2010:476e:c9c:17f1:874c:ee93) |
2024-01-27 14:15:28 +0100 | ph88 | (~ph88@ip5b403f30.dynamic.kabel-deutschland.de) (Read error: Connection reset by peer) |
2024-01-27 14:16:59 +0100 | eggplantade | (~Eggplanta@2600:1700:38c5:d800:5014:5b74:113d:d036) |
2024-01-27 14:21:54 +0100 | Lycurgus | (~georg@user/Lycurgus) |
2024-01-27 14:22:32 +0100 | jmdaemon | (~jmdaemon@user/jmdaemon) (Ping timeout: 256 seconds) |
2024-01-27 14:30:24 +0100 | fendor | (~fendor@2a02:8388:1605:d100:267b:1353:13d7:4f0c) |
2024-01-27 14:34:33 +0100 | tromp | (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…) |
2024-01-27 14:39:02 +0100 | FinnElija | (~finn_elij@user/finn-elija/x-0085643) (Ping timeout: 255 seconds) |
2024-01-27 14:39:10 +0100 | tromp | (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) |
2024-01-27 14:42:46 +0100 | FinnElija | (~finn_elij@user/finn-elija/x-0085643) |
2024-01-27 14:42:48 +0100 | fansly | (~fansly@2001:448a:2010:476e:c9c:17f1:874c:ee93) (Remote host closed the connection) |
2024-01-27 14:44:38 +0100 | FinnElija | (~finn_elij@user/finn-elija/x-0085643) (Remote host closed the connection) |
2024-01-27 14:45:15 +0100 | FinnElija | (~finn_elij@user/finn-elija/x-0085643) |
2024-01-27 14:46:45 +0100 | tri | (~tri@ool-18bc2e74.dyn.optonline.net) (Ping timeout: 260 seconds) |
2024-01-27 14:47:14 +0100 | Bylllie | (~Bylllie@37.143.55.92) |
2024-01-27 14:47:18 +0100 | tri | (~tri@ool-18bc2e74.dyn.optonline.net) |
2024-01-27 14:47:33 +0100 | adium | (adium@user/adium) (Ping timeout: 256 seconds) |
2024-01-27 14:49:34 +0100 | nicos | (~nsm@2800:2131:5400:883:28f6:1624:5755:79b0) (Ping timeout: 246 seconds) |
2024-01-27 14:49:37 +0100 | Bylllie | (~Bylllie@37.143.55.92) () |
2024-01-27 14:49:56 +0100 | nicos | (~nsm@186.143.200.157) |
2024-01-27 14:51:24 +0100 | tri | (~tri@ool-18bc2e74.dyn.optonline.net) (Remote host closed the connection) |
2024-01-27 14:51:36 +0100 | tri | (~tri@ool-18bc2e74.dyn.optonline.net) |
2024-01-27 14:54:02 +0100 | tri | (~tri@ool-18bc2e74.dyn.optonline.net) (Remote host closed the connection) |
2024-01-27 14:55:37 +0100 | tri | (~tri@ool-18bc2e74.dyn.optonline.net) |
2024-01-27 14:57:22 +0100 | tri | (~tri@ool-18bc2e74.dyn.optonline.net) (Remote host closed the connection) |
2024-01-27 15:01:04 +0100 | tri | (~tri@ool-18bc2e74.dyn.optonline.net) |
2024-01-27 15:04:44 +0100 | fansly | (~fansly@2001:448a:2010:476e:c9c:17f1:874c:ee93) |
2024-01-27 15:07:15 +0100 | tri | (~tri@ool-18bc2e74.dyn.optonline.net) (Ping timeout: 256 seconds) |
2024-01-27 15:09:52 +0100 | a51 | (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 +0100 | aljazmc | (~aljazmc@user/aljazmc) |
2024-01-27 15:16:56 +0100 | bliminse | (~bliminse@user/bliminse) (Quit: leaving) |
2024-01-27 15:22:40 +0100 | gorignak | (~gorignak@user/gorignak) (Quit: quit) |
2024-01-27 15:23:46 +0100 | nicos | (~nsm@186.143.200.157) (Read error: Connection reset by peer) |
2024-01-27 15:24:13 +0100 | nicos | (~nsm@186.141.133.46) |
2024-01-27 15:25:51 +0100 | Lycurgus | (~georg@user/Lycurgus) (Quit: leaving) |
2024-01-27 15:33:07 +0100 | sprout_ | (~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 +0100 | sprout | (~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 +0100 | szkl | (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 +0100 | nicos | (~nsm@186.141.133.46) (Read error: Connection reset by peer) |
2024-01-27 15:49:02 +0100 | nicos | (~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 +0100 | azimut | (~azimut@gateway/tor-sasl/azimut) |
2024-01-27 15:53:45 +0100 | michalz | (~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 +0100 | adium | (adium@user/adium) |
2024-01-27 15:56:16 +0100 | tri | (~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 +0100 | bliminse | (~bliminse@user/bliminse) |
2024-01-27 16:07:46 +0100 | tri_ | (~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 +0100 | tri | (~tri@ool-18bc2e74.dyn.optonline.net) (Ping timeout: 264 seconds) |
2024-01-27 16:11:51 +0100 | fansly | (~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 +0100 | welterde | (welterde@thinkbase.srv.welterde.de) |
2024-01-27 16:17:58 +0100 | fansly | (~fansly@2001:448a:2010:476e:c9c:17f1:874c:ee93) |
2024-01-27 16:18:28 +0100 | fansly | (~fansly@2001:448a:2010:476e:c9c:17f1:874c:ee93) (Remote host closed the connection) |
2024-01-27 16:20:53 +0100 | euleritian | (~euleritia@77.22.252.56) (Ping timeout: 240 seconds) |
2024-01-27 16:21:20 +0100 | euleritian | (~euleritia@dynamic-176-007-006-139.176.7.pool.telefonica.de) |
2024-01-27 16:21:38 +0100 | azimut | (~azimut@gateway/tor-sasl/azimut) (Ping timeout: 255 seconds) |
2024-01-27 16:22:00 +0100 | a51 | (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 +0100 | euleritian | (~euleritia@dynamic-176-007-006-139.176.7.pool.telefonica.de) (Read error: Connection reset by peer) |
2024-01-27 16:30:37 +0100 | euleritian | (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) |
2024-01-27 16:34:15 +0100 | alexherbo2 | (~alexherbo@2a02-8440-3140-b89b-a08f-42e2-c7fb-39b2.rev.sfr.net) (Remote host closed the connection) |
2024-01-27 16:35:45 +0100 | tri_ | (~tri@2607:fb90:5502:9b78:3c5e:bb:8ec1:2792) (Remote host closed the connection) |
2024-01-27 16:37:07 +0100 | tri | (~tri@ool-18bc2e74.dyn.optonline.net) |
2024-01-27 16:37:38 +0100 | euleritian | (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) (Ping timeout: 268 seconds) |
2024-01-27 16:38:34 +0100 | euleritian | (~euleritia@dynamic-176-007-006-139.176.7.pool.telefonica.de) |
2024-01-27 16:40:04 +0100 | zetef | (~quassel@5.2.182.98) |
2024-01-27 16:40:41 +0100 | euleritian | (~euleritia@dynamic-176-007-006-139.176.7.pool.telefonica.de) (Read error: Connection reset by peer) |
2024-01-27 16:40:46 +0100 | fansly | (~fansly@2001:448a:2010:476e:c9c:17f1:874c:ee93) |
2024-01-27 16:40:59 +0100 | euleritian | (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) |
2024-01-27 16:41:33 +0100 | tri | (~tri@ool-18bc2e74.dyn.optonline.net) (Ping timeout: 260 seconds) |
2024-01-27 16:45:25 +0100 | euleritian | (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) (Ping timeout: 264 seconds) |
2024-01-27 16:45:41 +0100 | euleritian | (~euleritia@dynamic-176-007-006-139.176.7.pool.telefonica.de) |
2024-01-27 16:47:23 +0100 | tri | (~tri@ool-18bc2e74.dyn.optonline.net) |
2024-01-27 16:53:22 +0100 | euleritian | (~euleritia@dynamic-176-007-006-139.176.7.pool.telefonica.de) (Read error: Connection reset by peer) |
2024-01-27 16:53:39 +0100 | euleritian | (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) |
2024-01-27 16:55:02 +0100 | fansly | (~fansly@2001:448a:2010:476e:c9c:17f1:874c:ee93) (Remote host closed the connection) |
2024-01-27 16:58:45 +0100 | zetef | (~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 +0100 | euleritian | (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) (Read error: Connection reset by peer) |
2024-01-27 16:59:16 +0100 | euleritian | (~euleritia@dynamic-176-007-006-139.176.7.pool.telefonica.de) |
2024-01-27 16:59:37 +0100 | euleritian | (~euleritia@dynamic-176-007-006-139.176.7.pool.telefonica.de) (Read error: Connection reset by peer) |
2024-01-27 16:59:55 +0100 | euleritian | (~euleritia@77.22.252.56) |
2024-01-27 17:02:01 +0100 | otto_s | (~otto_s@p5499379a.dip0.t-ipconnect.de) () |
2024-01-27 17:05:00 +0100 | tromp | (~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 +0100 | fansly | (~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 +0100 | euleritian | (~euleritia@77.22.252.56) (Ping timeout: 264 seconds) |
2024-01-27 17:07:54 +0100 | euleritian | (~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 +0100 | Silver_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 +0100 | Goodbye_Vincent | (cyvahl@freakshells.net) (Ping timeout: 260 seconds) |
2024-01-27 17:20:07 +0100 | shriekingnoise | (~shrieking@186.137.175.87) |
2024-01-27 17:21:58 +0100 | alexherbo2 | (~alexherbo@2a02-8440-3140-de35-0855-5240-2ad6-cd9a.rev.sfr.net) |
2024-01-27 17:25:34 +0100 | tromp | (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) |
2024-01-27 17:25:48 +0100 | Goodbye_Vincent | (cyvahl@freakshells.net) |
2024-01-27 17:30:52 +0100 | paolo | (~paolo@net-2-39-54-152.cust.vodafonedsl.it) |
2024-01-27 17:32:22 +0100 | Silver_X | (~Silver_X@182.178.244.60) (Remote host closed the connection) |
2024-01-27 17:32:36 +0100 | average | (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 +0100 | Goodbye_Vincent | (cyvahl@freakshells.net) (Ping timeout: 260 seconds) |
2024-01-27 17:44:21 +0100 | son0p | (~ff@152.203.88.4) (Quit: Bye) |
2024-01-27 17:46:01 +0100 | dsrt^ | (~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 +0100 | coot | (~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 +0100 | Goodbye_Vincent | (cyvahl@freakshells.net) |
2024-01-27 17:56:03 +0100 | son0p | (~ff@152.203.88.4) |
2024-01-27 17:58:21 +0100 | nicos | (~nsm@2800:2131:5400:883:28f6:1624:5755:79b0) (Quit: Quit) |
2024-01-27 18:01:26 +0100 | a51 | (a51@gateway/vpn/protonvpn/a51) |
2024-01-27 18:02:17 +0100 | P1RATEZ | (~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 +0100 | paolo | (~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 +0100 | econo_ | (uid147250@id-147250.tinside.irccloud.com) |
2024-01-27 18:18:05 +0100 | eggplantade | (~Eggplanta@2600:1700:38c5:d800:5014:5b74:113d:d036) (Remote host closed the connection) |
2024-01-27 18:18:26 +0100 | eggplantade | (~Eggplanta@2600:1700:38c5:d800:5014:5b74:113d:d036) |
2024-01-27 18:18:39 +0100 | tromp | (~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 +0100 | Goodbye_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 +0100 | zetef | (~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 +0100 | trev | (~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 +0100 | johnw | (~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 +0100 | zetef | (~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 +0100 | harveypwca | (~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 +0100 | Goodbye_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 +0100 | krei-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 +0100 | destituion | (~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 +0100 | krei-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<mauke> 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<mauke> Ah |
2024-01-27 18:49:57 +0100 | EvanR | (~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<mauke> 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 +0100 | krei-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 +0100 | P1RATEZ | (~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<mauke> 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 +0100 | ski | hides a troll under mauke |
2024-01-27 18:58:02 +0100 | <monochrom> | Burn all bridges! >:) |
2024-01-27 18:58:58 +0100 | <haskellbridge> | 14<mauke> 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 +0100 | Goodbye_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 +0100 | ski | realizes 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 +0100 | ski | . o O ( .. anyone fancy a game of bridge ? ) |
2024-01-27 19:02:42 +0100 | <haskellbridge> | 14<mauke> 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 +0100 | shriekingnoise | (~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 +0100 | ski | idly 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<mauke> 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 +0100 | Lycurgus | (~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 +0100 | ski | . 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<mauke> 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<mauke> print(", ".join(100.fibn())) |
2024-01-27 19:31:19 +0100 | euleritian | (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) (Read error: Connection reset by peer) |
2024-01-27 19:31:53 +0100 | euleritian | (~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 +0100 | alexherbo2 | (~alexherbo@2a02-8440-3140-de35-0855-5240-2ad6-cd9a.rev.sfr.net) (Ping timeout: 250 seconds) |
2024-01-27 19:34:48 +0100 | harveypwca | (~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 +0100 | Goodbye_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 +0100 | tzh | (~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 +0100 | Lycurgus | (~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 +0100 | Square2 | (~Square@user/square) |
2024-01-27 19:47:35 +0100 | Goodbye_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 +0100 | ski | . o O ( "How to Replace Failure by a List of Successes: A method for exception handling, backtracking, and pattern-matching in lazy functional languages" by Philip Wadler in 1985 at <https://link.springer.com/chapter/10.1007/3-540-15975-4_33#preview>,<https://www.cs.tufts.edu/comp/150FP/archive/phil-wadler/failure.djvu> ) |
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 +0100 | Goodbye_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 +0100 | Sgeo | (~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 +0100 | bitdex | (~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 +0100 | krei-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 +0100 | xacktm | (xacktm@user/xacktm) (Quit: fBNC - https://bnc4free.com) |
2024-01-27 20:03:28 +0100 | kuruczgy | (55b66dd3ae@2a03:6000:1812:100::127f) (Ping timeout: 255 seconds) |
2024-01-27 20:03:29 +0100 | adanwan | (~adanwan@gateway/tor-sasl/adanwan) (Ping timeout: 255 seconds) |
2024-01-27 20:03:48 +0100 | xacktm | (xacktm@user/xacktm) |
2024-01-27 20:04:22 +0100 | akspecs | (00cc8321af@sourcehut/user/akspecs) (Ping timeout: 255 seconds) |
2024-01-27 20:04:36 +0100 | adanwan | (~adanwan@gateway/tor-sasl/adanwan) |
2024-01-27 20:06:20 +0100 | kuruczgy | (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 +0100 | akspecs | (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 +0100 | caconym | (~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 +0100 | caconym | (~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 +0100 | dsrt^ | (~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 +0100 | alexherbo2 | (~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 +0100 | adanwan | (~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 +0100 | adanwan | (~adanwan@gateway/tor-sasl/adanwan) |
2024-01-27 21:06:30 +0100 | EvanR | (~EvanR@user/evanr) (Ping timeout: 268 seconds) |
2024-01-27 21:09:38 +0100 | ec | (~ec@gateway/tor-sasl/ec) (Ping timeout: 255 seconds) |
2024-01-27 21:10:13 +0100 | adanwan | (~adanwan@gateway/tor-sasl/adanwan) (Remote host closed the connection) |
2024-01-27 21:10:36 +0100 | adanwan | (~adanwan@gateway/tor-sasl/adanwan) |
2024-01-27 21:11:42 +0100 | ec | (~ec@gateway/tor-sasl/ec) |
2024-01-27 21:15:10 +0100 | CiaoSen | (~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 +0100 | inedia | (~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 +0100 | inedia | (~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 +0100 | mobivme | (~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 +0100 | sudden | (~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 +0100 | sudden | (~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 +0100 | mcfilib | (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 +0100 | tri | try 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 +0100 | coot | (~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 +0100 | shapr | (~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 +0100 | geekosaur | has 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 +0100 | fansly | (~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 +0100 | remmie | (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 +0100 | fansly | (~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 +0100 | tri | head 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 +0100 | fansly | (~fansly@2404:c0:2020::d01:bcec) (Ping timeout: 264 seconds) |
2024-01-27 22:48:45 +0100 | dtman34 | (~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 +0100 | destituion | (~destituio@2001:4644:c37:0:57f:87b2:efe8:e836) (Ping timeout: 276 seconds) |
2024-01-27 22:53:14 +0100 | destituion | (~destituio@2a02:2121:304:cc78:d9dc:8709:4c3b:d0d2) |
2024-01-27 22:53:55 +0100 | fansly | (~fansly@2404:c0:2020::d01:bcec) |
2024-01-27 22:54:14 +0100 | peterbecich | (~Thunderbi@047-229-123-186.res.spectrum.com) |
2024-01-27 22:58:37 +0100 | fansly | (~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 +0100 | fansly | (~fansly@2404:c0:2020::d01:bcec) |
2024-01-27 23:05:45 +0100 | fansly | (~fansly@2404:c0:2020::d01:bcec) (Remote host closed the connection) |
2024-01-27 23:06:32 +0100 | fendor | (~fendor@2a02:8388:1605:d100:267b:1353:13d7:4f0c) (Remote host closed the connection) |
2024-01-27 23:08:10 +0100 | igemnace | (~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 +0100 | wootehfoot | (~wootehfoo@user/wootehfoot) |
2024-01-27 23:17:46 +0100 | EvanR | (~EvanR@user/evanr) |
2024-01-27 23:17:56 +0100 | samhh | (7569f027cf@2a03:6000:1812:100::e4) (Remote host closed the connection) |
2024-01-27 23:17:56 +0100 | fn_lumi | (3d621153a5@2a03:6000:1812:100::df7) (Remote host closed the connection) |
2024-01-27 23:17:56 +0100 | samhh_ | (7569f027cf@2a03:6000:1812:100::e4) (Remote host closed the connection) |
2024-01-27 23:17:56 +0100 | ggb | (a62ffbaf4f@2a03:6000:1812:100::3ac) (Read error: Connection reset by peer) |
2024-01-27 23:17:56 +0100 | sm2n | (ae95cb1267@user/sm2n) (Read error: Connection reset by peer) |
2024-01-27 23:17:56 +0100 | lukec | (9dfd4d094e@2a03:6000:1812:100::10e) (Remote host closed the connection) |
2024-01-27 23:17:56 +0100 | cpli | (77fc530071@2a03:6000:1812:100::252) (Write error: Connection reset by peer) |
2024-01-27 23:17:56 +0100 | JoelMcCracken | (5ea8252fbb@2a03:6000:1812:100::10e3) (Remote host closed the connection) |
2024-01-27 23:17:56 +0100 | raghavgururajan | (ea769b8000@user/raghavgururajan) (Read error: Connection reset by peer) |
2024-01-27 23:17:56 +0100 | b0o | (0e4a0bf4c9@2a03:6000:1812:100::1bf) (Read error: Connection reset by peer) |
2024-01-27 23:17:56 +0100 | jleightcap | (7bc4014b62@user/jleightcap) (Remote host closed the connection) |
2024-01-27 23:17:56 +0100 | brettgilio | (a35ba67324@2a03:6000:1812:100::260) (Read error: Connection reset by peer) |
2024-01-27 23:17:56 +0100 | jkoshy | (99b9359beb@user/jkoshy) (Remote host closed the connection) |
2024-01-27 23:17:57 +0100 | ymherklotz | (cb2c9cfbdd@2a03:6000:1812:100::29a) (Remote host closed the connection) |
2024-01-27 23:17:57 +0100 | shreyasminocha | (51fdc93eda@user/shreyasminocha) (Read error: Connection reset by peer) |
2024-01-27 23:17:57 +0100 | rselim | (ce261f06ff@user/milesrout) (Read error: Connection reset by peer) |
2024-01-27 23:17:57 +0100 | akspecs | (00cc8321af@sourcehut/user/akspecs) (Write error: Connection reset by peer) |
2024-01-27 23:17:57 +0100 | henrytill | (e0180937c3@2a03:6000:1812:100::e8c) (Remote host closed the connection) |
2024-01-27 23:17:57 +0100 | Ankhers | (e99e97ef8e@2a03:6000:1812:100::2a2) (Remote host closed the connection) |
2024-01-27 23:17:57 +0100 | fvr | (ef3e56ca8b@2a03:6000:1812:100::3c4) (Remote host closed the connection) |
2024-01-27 23:17:57 +0100 | eso | (a0662dfd5e@2a03:6000:1812:100::1266) (Remote host closed the connection) |
2024-01-27 23:17:58 +0100 | fgaz_ | (1ff9197ed6@2a03:6000:1812:100::11ea) (Remote host closed the connection) |
2024-01-27 23:17:58 +0100 | fluffyballoon | (45ce440a48@2a03:6000:1812:100::e2) (Read error: Connection reset by peer) |
2024-01-27 23:17:58 +0100 | whereiseveryone | (206ba86c98@2a03:6000:1812:100::2e4) (Read error: Connection reset by peer) |
2024-01-27 23:17:58 +0100 | chaitlatte0 | (ea29c0bb16@user/chaitlatte0) (Remote host closed the connection) |
2024-01-27 23:17:58 +0100 | filwisher | (2e6936c793@2a03:6000:1812:100::170) (Remote host closed the connection) |
2024-01-27 23:17:58 +0100 | jmcantrell | (644f1bed9a@user/jmcantrell) (Read error: Connection reset by peer) |
2024-01-27 23:17:58 +0100 | probie | (cc0b34050a@user/probie) (Remote host closed the connection) |
2024-01-27 23:17:58 +0100 | kuruczgy | (55b66dd3ae@2a03:6000:1812:100::127f) (Remote host closed the connection) |
2024-01-27 23:17:58 +0100 | evanrelf | (3addc196af@2a03:6000:1812:100::f0) (Remote host closed the connection) |
2024-01-27 23:17:58 +0100 | jakzale | (6291399afa@user/jakzale) (Remote host closed the connection) |
2024-01-27 23:17:58 +0100 | aniketd | (32aa4844cd@2a03:6000:1812:100::dcb) (Remote host closed the connection) |
2024-01-27 23:17:58 +0100 | arcadewise | (52968ed80d@2a03:6000:1812:100::3df) (Remote host closed the connection) |
2024-01-27 23:17:58 +0100 | sus | (1b7af6299f@user/zeromomentum) (Remote host closed the connection) |
2024-01-27 23:17:58 +0100 | bsima1 | (9d7e39c8ad@2a03:6000:1812:100::dd) (Remote host closed the connection) |
2024-01-27 23:18:00 +0100 | tri | (~tri@ool-18bc2e74.dyn.optonline.net) (Read error: Connection reset by peer) |
2024-01-27 23:18:05 +0100 | ggb | (a62ffbaf4f@2a03:6000:1812:100::3ac) |
2024-01-27 23:18:06 +0100 | bsima1 | (9d7e39c8ad@2a03:6000:1812:100::dd) |
2024-01-27 23:18:06 +0100 | lukec | (9dfd4d094e@2a03:6000:1812:100::10e) |
2024-01-27 23:18:06 +0100 | filwisher | (2e6936c793@2a03:6000:1812:100::170) |
2024-01-27 23:18:07 +0100 | kuruczgy | (55b66dd3ae@2a03:6000:1812:100::127f) |
2024-01-27 23:18:07 +0100 | fgaz_ | (1ff9197ed6@2a03:6000:1812:100::11ea) |
2024-01-27 23:18:07 +0100 | raghavgururajan | (ea769b8000@user/raghavgururajan) |
2024-01-27 23:18:08 +0100 | jkoshy | (99b9359beb@user/jkoshy) |
2024-01-27 23:18:08 +0100 | b0o | (0e4a0bf4c9@2a03:6000:1812:100::1bf) |
2024-01-27 23:18:08 +0100 | probie | (cc0b34050a@user/probie) |
2024-01-27 23:18:08 +0100 | jmcantrell | (644f1bed9a@user/jmcantrell) |
2024-01-27 23:18:10 +0100 | samhh | (7569f027cf@2a03:6000:1812:100::e4) |
2024-01-27 23:18:10 +0100 | fluffyballoon | (45ce440a48@2a03:6000:1812:100::e2) |
2024-01-27 23:18:10 +0100 | chaitlatte0 | (ea29c0bb16@user/chaitlatte0) |
2024-01-27 23:18:12 +0100 | sus | (1b7af6299f@user/zeromomentum) |
2024-01-27 23:18:12 +0100 | aniketd | (32aa4844cd@2a03:6000:1812:100::dcb) |
2024-01-27 23:18:13 +0100 | evanrelf | (3addc196af@2a03:6000:1812:100::f0) |
2024-01-27 23:18:13 +0100 | jakzale | (6291399afa@user/jakzale) |
2024-01-27 23:18:13 +0100 | whereiseveryone | (206ba86c98@2a03:6000:1812:100::2e4) |
2024-01-27 23:18:14 +0100 | JoelMcCracken | (5ea8252fbb@2a03:6000:1812:100::10e3) |
2024-01-27 23:18:14 +0100 | akspecs | (00cc8321af@sourcehut/user/akspecs) |
2024-01-27 23:18:16 +0100 | fn_lumi | (3d621153a5@2a03:6000:1812:100::df7) |
2024-01-27 23:18:16 +0100 | shreyasminocha | (51fdc93eda@user/shreyasminocha) |
2024-01-27 23:18:18 +0100 | arcadewise | (52968ed80d@2a03:6000:1812:100::3df) |
2024-01-27 23:18:18 +0100 | ymherklotz | (cb2c9cfbdd@2a03:6000:1812:100::29a) |
2024-01-27 23:18:18 +0100 | rselim | (ce261f06ff@user/milesrout) |
2024-01-27 23:18:18 +0100 | henrytill | (e0180937c3@2a03:6000:1812:100::e8c) |
2024-01-27 23:18:19 +0100 | eso | (a0662dfd5e@2a03:6000:1812:100::1266) |
2024-01-27 23:18:20 +0100 | sm2n | (ae95cb1267@user/sm2n) |
2024-01-27 23:18:20 +0100 | fvr | (ef3e56ca8b@2a03:6000:1812:100::3c4) |
2024-01-27 23:18:20 +0100 | brettgilio | (a35ba67324@2a03:6000:1812:100::260) |
2024-01-27 23:18:20 +0100 | cpli | (77fc530071@2a03:6000:1812:100::252) |
2024-01-27 23:18:20 +0100 | Ankhers | (e99e97ef8e@2a03:6000:1812:100::2a2) |
2024-01-27 23:18:21 +0100 | jleightcap | (7bc4014b62@user/jleightcap) |
2024-01-27 23:20:34 +0100 | zetef | (~quassel@5.2.182.98) |
2024-01-27 23:20:58 +0100 | coot | (~coot@89-69-206-216.dynamic.chello.pl) (Quit: coot) |
2024-01-27 23:26:04 +0100 | igemnace | (~ian@user/igemnace) |
2024-01-27 23:29:55 +0100 | Katarushisu1 | (~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<Jade> 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<Jade> I understand for things that actually modify what modules are loaded (load, add, unadd) but why check? |
2024-01-27 23:31:01 +0100 | Katarushisu1 | (~Katarushi@cpc147790-finc20-2-0-cust502.4-2.cable.virginm.net) |
2024-01-27 23:32:22 +0100 | mobivme | (~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 +0100 | nicos | (~nsm@host98.181-4-190.telecom.net.ar) |