Logs on 2023-10-07 (liberachat/#haskell)
| 00:02:54 | → | sympt joins (~sympt@user/sympt) |
| 00:04:14 | × | Tuplanolla quits (~Tuplanoll@91-159-68-236.elisa-laajakaista.fi) (Ping timeout: 255 seconds) |
| 00:05:53 | × | puke quits (~puke@user/puke) (Quit: puke) |
| 00:09:16 | → | puke joins (~puke@user/puke) |
| 00:14:58 | × | machinedgod quits (~machinedg@d198-53-218-113.abhsia.telus.net) (Ping timeout: 272 seconds) |
| 00:26:18 | × | privacy quits (~privacy@user/privacy) (Quit: Leaving) |
| 00:30:43 | → | khumba joins (~khumba@user/khumba) |
| 00:50:20 | → | Lord_of_Life_ joins (~Lord@user/lord-of-life/x-2819915) |
| 00:50:35 | × | Lord_of_Life quits (~Lord@user/lord-of-life/x-2819915) (Ping timeout: 240 seconds) |
| 00:51:40 | Lord_of_Life_ | is now known as Lord_of_Life |
| 00:57:30 | × | Pixi` quits (~Pixi@user/pixi) (Ping timeout: 258 seconds) |
| 01:05:00 | × | euleritian quits (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) (Ping timeout: 272 seconds) |
| 01:12:58 | × | billchenchina- quits (~billchenc@2a0c:b641:7a2:320:ee3e:47ca:6070:d71a) (Remote host closed the connection) |
| 01:18:45 | → | Alleria joins (~JohnGalt@user/alleria) |
| 01:20:12 | × | hyiltiz quits (~hyiltiz@2620:149:13d1::96c) (Ping timeout: 272 seconds) |
| 01:21:28 | → | nate2 joins (~nate@c-98-45-169-16.hsd1.ca.comcast.net) |
| 01:24:15 | → | bilegeek joins (~bilegeek@2600:1008:b095:5aab:10d2:439f:4d89:6d45) |
| 01:25:58 | → | Pixi joins (~Pixi@user/pixi) |
| 01:26:16 | × | nate2 quits (~nate@c-98-45-169-16.hsd1.ca.comcast.net) (Ping timeout: 255 seconds) |
| 01:27:29 | × | otto_s quits (~user@p4ff27e4d.dip0.t-ipconnect.de) (Ping timeout: 255 seconds) |
| 01:29:04 | × | wroathe quits (~wroathe@user/wroathe) (Ping timeout: 272 seconds) |
| 01:29:19 | → | otto_s joins (~user@p5b0446f7.dip0.t-ipconnect.de) |
| 01:30:42 | ← | L29Ah parts (~L29Ah@wikipedia/L29Ah) () |
| 01:32:52 | → | L29Ah joins (~L29Ah@wikipedia/L29Ah) |
| 01:37:04 | × | Alleria quits (~JohnGalt@user/alleria) (Quit: Textual IRC Client: www.textualapp.com) |
| 01:37:50 | × | waleee quits (~waleee@h-176-10-137-138.NA.cust.bahnhof.se) (Ping timeout: 255 seconds) |
| 01:38:17 | × | aforemny quits (~aforemny@i59F516E0.versanet.de) (Ping timeout: 255 seconds) |
| 01:38:23 | → | aforemny_ joins (~aforemny@2001:9e8:6cda:ec00:a6d6:8356:354e:8d01) |
| 01:45:56 | × | Maxdamantus quits (~Maxdamant@user/maxdamantus) (Ping timeout: 255 seconds) |
| 01:47:35 | → | Maxdamantus joins (~Maxdamant@user/maxdamantus) |
| 01:48:56 | × | bitdex quits (~bitdex@gateway/tor-sasl/bitdex) (Remote host closed the connection) |
| 01:51:01 | → | hyiltiz joins (~hyiltiz@2620:149:13d1::96c) |
| 01:51:13 | × | _xor quits (~xor@ip-50-5-233-250.dynamic.fuse.net) (Quit: Ping timeout (120 seconds)) |
| 01:52:06 | → | _xor joins (~xor@ip-50-5-233-250.dynamic.fuse.net) |
| 01:58:26 | × | eggplantade quits (~Eggplanta@2600:1700:38c5:d800:e0cf:d5dc:ecb2:78c3) (Remote host closed the connection) |
| 01:58:42 | → | eggplantade joins (~Eggplanta@104-55-37-220.lightspeed.sntcca.sbcglobal.net) |
| 01:59:56 | × | todi quits (~todi@p5dca54c6.dip0.t-ipconnect.de) (Quit: ZNC - https://znc.in) |
| 02:00:14 | → | todi joins (~todi@p5dca54c6.dip0.t-ipconnect.de) |
| 02:06:54 | → | wroathe joins (~wroathe@207-153-38-140.fttp.usinternet.com) |
| 02:06:54 | × | wroathe quits (~wroathe@207-153-38-140.fttp.usinternet.com) (Changing host) |
| 02:06:54 | → | wroathe joins (~wroathe@user/wroathe) |
| 02:13:21 | × | FinnElija quits (~finn_elij@user/finn-elija/x-0085643) (Killed (NickServ (Forcing logout FinnElija -> finn_elija))) |
| 02:13:21 | → | finn_elija joins (~finn_elij@user/finn-elija/x-0085643) |
| 02:13:21 | finn_elija | is now known as FinnElija |
| 02:13:35 | × | thegeekinside quits (~thegeekin@189.217.90.224) (Read error: Connection reset by peer) |
| 02:26:34 | × | Square quits (~Square@user/square) (Ping timeout: 255 seconds) |
| 02:28:52 | × | phma quits (~phma@host-67-44-208-149.hnremote.net) (Read error: Connection reset by peer) |
| 02:29:17 | → | phma joins (~phma@host-67-44-208-149.hnremote.net) |
| 02:35:33 | → | thegeekinside joins (~thegeekin@189.217.90.224) |
| 02:47:44 | → | abrantesasf joins (~abrantesa@179.217.48.72) |
| 02:49:39 | × | [itchyjunk] quits (~itchyjunk@user/itchyjunk/x-7353470) (Remote host closed the connection) |
| 02:50:25 | × | ddellacosta quits (~ddellacos@ool-44c738de.dyn.optonline.net) (Ping timeout: 255 seconds) |
| 02:52:11 | → | ddellacosta joins (~ddellacos@ool-44c738de.dyn.optonline.net) |
| 02:52:12 | ← | L29Ah parts (~L29Ah@wikipedia/L29Ah) () |
| 02:53:02 | → | L29Ah joins (~L29Ah@wikipedia/L29Ah) |
| 02:56:45 | → | bitdex joins (~bitdex@gateway/tor-sasl/bitdex) |
| 02:58:06 | × | td_ quits (~td@i5387091A.versanet.de) (Ping timeout: 260 seconds) |
| 02:59:33 | → | sm joins (~sm@plaintextaccounting/sm) |
| 02:59:51 | → | td_ joins (~td@i53870937.versanet.de) |
| 03:00:02 | × | haasn- quits (~nand@haasn.dev) (Quit: ZNC 1.7.5+deb4 - https://znc.in) |
| 03:02:05 | → | azimut_ joins (~azimut@gateway/tor-sasl/azimut) |
| 03:02:39 | × | azimut quits (~azimut@gateway/tor-sasl/azimut) (Ping timeout: 252 seconds) |
| 03:04:14 | × | sm quits (~sm@plaintextaccounting/sm) (Ping timeout: 255 seconds) |
| 03:14:25 | → | aforemny joins (~aforemny@2001:9e8:6ce5:2900:3ebe:1c43:4cc8:272d) |
| 03:16:06 | × | aforemny_ quits (~aforemny@2001:9e8:6cda:ec00:a6d6:8356:354e:8d01) (Ping timeout: 272 seconds) |
| 03:16:50 | × | wroathe quits (~wroathe@user/wroathe) (Ping timeout: 255 seconds) |
| 03:20:12 | → | euleritian joins (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) |
| 03:24:35 | × | todi quits (~todi@p5dca54c6.dip0.t-ipconnect.de) (Quit: ZNC - https://znc.in) |
| 03:25:09 | → | todi joins (~todi@p5dca54c6.dip0.t-ipconnect.de) |
| 03:37:06 | × | thegeekinside quits (~thegeekin@189.217.90.224) (Read error: Connection reset by peer) |
| 03:39:28 | × | L29Ah quits (~L29Ah@wikipedia/L29Ah) (Ping timeout: 255 seconds) |
| 03:39:54 | → | sm joins (~sm@plaintextaccounting/sm) |
| 03:44:25 | × | sm quits (~sm@plaintextaccounting/sm) (Ping timeout: 255 seconds) |
| 03:51:05 | × | hexology quits (~hexology@user/hexology) (Quit: hex on you ...) |
| 03:52:22 | → | hexology joins (~hexology@user/hexology) |
| 03:53:31 | → | L29Ah joins (~L29Ah@wikipedia/L29Ah) |
| 04:14:09 | × | hsw_ quits (~hsw@2001-b030-2303-0104-0172-0025-0012-0132.hinet-ip6.hinet.net) (Quit: Leaving) |
| 04:14:23 | → | hsw joins (~hsw@2001-b030-2303-0104-0172-0025-0012-0132.hinet-ip6.hinet.net) |
| 04:30:46 | → | sm joins (~sm@plaintextaccounting/sm) |
| 04:32:46 | × | abrantesasf quits (~abrantesa@179.217.48.72) (Remote host closed the connection) |
| 04:35:05 | × | sm quits (~sm@plaintextaccounting/sm) (Ping timeout: 240 seconds) |
| 04:44:02 | × | paddymahoney quits (~paddymaho@cpe883d24bcf597-cmbc4dfb741f80.cpe.net.cable.rogers.com) (Remote host closed the connection) |
| 04:49:03 | → | blackfield joins (~aenima@85.255.4.218) |
| 04:49:05 | × | hyiltiz quits (~hyiltiz@2620:149:13d1::96c) (Ping timeout: 240 seconds) |
| 04:50:04 | → | machinedgod joins (~machinedg@d198-53-218-113.abhsia.telus.net) |
| 04:52:07 | × | sabino quits (~sabino@user/sabino) (Quit: Lambda _ -> x) |
| 04:57:45 | × | bliminse quits (~bliminse@user/bliminse) (Remote host closed the connection) |
| 05:02:55 | → | elbear joins (~lucian@109.101.137.234) |
| 05:07:24 | × | elbear quits (~lucian@109.101.137.234) (Ping timeout: 248 seconds) |
| 05:19:21 | × | bilegeek quits (~bilegeek@2600:1008:b095:5aab:10d2:439f:4d89:6d45) (Quit: Leaving) |
| 05:20:09 | → | sm joins (~sm@plaintextaccounting/sm) |
| 05:22:58 | → | nate2 joins (~nate@c-98-45-169-16.hsd1.ca.comcast.net) |
| 05:24:28 | × | sm quits (~sm@plaintextaccounting/sm) (Ping timeout: 248 seconds) |
| 05:25:47 | → | lg188 joins (~lg188@82.18.98.230) |
| 05:28:28 | × | nate2 quits (~nate@c-98-45-169-16.hsd1.ca.comcast.net) (Ping timeout: 272 seconds) |
| 05:31:48 | → | bliminse joins (~bliminse@user/bliminse) |
| 05:45:06 | × | whodevil quits (~whodevil@user/whodevil) (Remote host closed the connection) |
| 05:46:21 | → | qqq joins (~qqq@92.43.167.61) |
| 05:48:20 | → | akegalj joins (~akegalj@78-3-38-175.adsl.net.t-com.hr) |
| 05:53:46 | → | sm joins (~sm@plaintextaccounting/sm) |
| 05:55:58 | × | machinedgod quits (~machinedg@d198-53-218-113.abhsia.telus.net) (Ping timeout: 255 seconds) |
| 05:56:01 | × | todi quits (~todi@p5dca54c6.dip0.t-ipconnect.de) (Ping timeout: 260 seconds) |
| 05:56:33 | → | todi joins (~todi@p5dca54c6.dip0.t-ipconnect.de) |
| 05:58:25 | × | sm quits (~sm@plaintextaccounting/sm) (Ping timeout: 258 seconds) |
| 06:02:26 | <remexre> | with WAI / warp, is there a standard way for middlewares to pass data to the rest of the Application without needing to manually plumb it around? |
| 06:02:56 | <remexre> | I was expecting to find a TypeMap or something on Request |
| 06:03:06 | × | Unicorn_Princess quits (~Unicorn_P@user/Unicorn-Princess/x-3540542) (Quit: Leaving) |
| 06:05:01 | → | takuan joins (~takuan@178-116-218-225.access.telenet.be) |
| 06:07:40 | × | qqq quits (~qqq@92.43.167.61) (Ping timeout: 248 seconds) |
| 06:08:02 | → | qqq joins (~qqq@92.43.167.61) |
| 06:19:55 | → | hyiltiz joins (~hyiltiz@2603-8080-1f00-082f-8cdd-ec73-edb7-293e.res6.spectrum.com) |
| 06:24:05 | × | hyiltiz quits (~hyiltiz@2603-8080-1f00-082f-8cdd-ec73-edb7-293e.res6.spectrum.com) (Ping timeout: 240 seconds) |
| 06:26:34 | × | akegalj quits (~akegalj@78-3-38-175.adsl.net.t-com.hr) (Quit: leaving) |
| 06:29:20 | → | hyiltiz joins (~hyiltiz@2603-8080-1f00-082f-8cdd-ec73-edb7-293e.res6.spectrum.com) |
| 06:31:33 | → | acidjnk joins (~acidjnk@p200300d6e7072f72f8dec80e9aca23dc.dip0.t-ipconnect.de) |
| 06:37:54 | × | chexum quits (~quassel@gateway/tor-sasl/chexum) (Remote host closed the connection) |
| 06:38:07 | → | chexum joins (~quassel@gateway/tor-sasl/chexum) |
| 06:39:16 | × | hyiltiz quits (~hyiltiz@2603-8080-1f00-082f-8cdd-ec73-edb7-293e.res6.spectrum.com) (Ping timeout: 260 seconds) |
| 06:46:46 | → | idgaen joins (~idgaen@2a01:e0a:498:fd50:fcc6:bb5d:489a:ce8c) |
| 06:54:45 | → | aliosablack joins (~chomwitt@2a02:587:7a24:b000:1ac0:4dff:fedb:a3f1) |
| 06:55:08 | × | khumba quits (~khumba@user/khumba) () |
| 07:05:16 | → | _ht joins (~Thunderbi@28-52-174-82.ftth.glasoperator.nl) |
| 07:06:10 | → | hyiltiz joins (~hyiltiz@2603-8080-1f00-082f-8cdd-ec73-edb7-293e.res6.spectrum.com) |
| 07:09:05 | → | vglfr joins (~vglfr@88.155.180.78) |
| 07:10:36 | × | hyiltiz quits (~hyiltiz@2603-8080-1f00-082f-8cdd-ec73-edb7-293e.res6.spectrum.com) (Ping timeout: 240 seconds) |
| 07:11:17 | × | hugo quits (znc@verdigris.lysator.liu.se) (Ping timeout: 255 seconds) |
| 07:12:38 | → | hyiltiz joins (~hyiltiz@2603-8080-1f00-082f-8cdd-ec73-edb7-293e.res6.spectrum.com) |
| 07:16:44 | × | hyiltiz quits (~hyiltiz@2603-8080-1f00-082f-8cdd-ec73-edb7-293e.res6.spectrum.com) (Ping timeout: 245 seconds) |
| 07:21:35 | → | gmg joins (~user@user/gehmehgeh) |
| 07:21:53 | × | stiell quits (~stiell@gateway/tor-sasl/stiell) (Ping timeout: 252 seconds) |
| 07:22:15 | × | FinnElija quits (~finn_elij@user/finn-elija/x-0085643) (Ping timeout: 252 seconds) |
| 07:22:15 | × | chiselfuse quits (~chiselfus@user/chiselfuse) (Ping timeout: 252 seconds) |
| 07:22:59 | × | ChaiTRex quits (~ChaiTRex@user/chaitrex) (Ping timeout: 252 seconds) |
| 07:24:25 | → | FinnElija joins (~finn_elij@user/finn-elija/x-0085643) |
| 07:24:29 | → | chiselfuse joins (~chiselfus@user/chiselfuse) |
| 07:24:55 | → | ChaiTRex joins (~ChaiTRex@user/chaitrex) |
| 07:26:26 | × | vglfr quits (~vglfr@88.155.180.78) (Read error: Connection reset by peer) |
| 07:26:46 | → | vglfr joins (vglfr@gateway/vpn/protonvpn/vglfr) |
| 07:32:41 | → | stiell joins (~stiell@gateway/tor-sasl/stiell) |
| 07:42:16 | × | rgw quits (~R@2605:a601:a0df:5600:fd37:73ed:1518:5c4b) (Read error: Connection reset by peer) |
| 07:48:11 | → | fendor joins (~fendor@2a02:8388:1640:be00:aab:1226:f274:5021) |
| 07:49:44 | → | coot joins (~coot@89-69-206-216.dynamic.chello.pl) |
| 07:51:56 | → | sm joins (~sm@plaintextaccounting/sm) |
| 07:52:49 | × | Maeda quits (~Maeda@91-161-10-149.subs.proxad.net) (Quit: leaving) |
| 07:54:32 | → | hugo joins (znc@verdigris.lysator.liu.se) |
| 07:54:59 | → | Jackneill joins (~Jackneill@20014C4E1E1DF200085D5E2535870783.dsl.pool.telekom.hu) |
| 07:56:03 | × | eggplantade quits (~Eggplanta@104-55-37-220.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection) |
| 07:56:15 | × | sm quits (~sm@plaintextaccounting/sm) (Ping timeout: 240 seconds) |
| 07:57:35 | → | cpressey joins (~cpressey@host-92-10-151-176.as13285.net) |
| 08:01:36 | → | danza joins (~francesco@151.47.20.60) |
| 08:10:20 | × | vglfr quits (vglfr@gateway/vpn/protonvpn/vglfr) (Ping timeout: 248 seconds) |
| 08:10:43 | → | Maeda joins (~Maeda@91-161-10-149.subs.proxad.net) |
| 08:11:11 | → | vglfr joins (~vglfr@88.155.180.78) |
| 08:15:01 | → | Simikando joins (~Simikando@adsl-dyn-244.95-102-83.t-com.sk) |
| 08:15:29 | <danza> | hello to all saturday's workaholics... |
| 08:22:00 | × | hugo quits (znc@verdigris.lysator.liu.se) (Ping timeout: 272 seconds) |
| 08:24:32 | <haskellbridge> | <sm> or chatoholics.. |
| 08:28:00 | × | _ht quits (~Thunderbi@28-52-174-82.ftth.glasoperator.nl) (Remote host closed the connection) |
| 08:32:37 | → | eggplantade joins (~Eggplanta@104-55-37-220.lightspeed.sntcca.sbcglobal.net) |
| 08:33:30 | <int-e> | sm h |
| 08:33:54 | <mauke> | I'm a chataholic, but like with alcohol |
| 08:37:12 | × | Sgeo quits (~Sgeo@user/sgeo) (Read error: Connection reset by peer) |
| 08:37:25 | × | azimut_ quits (~azimut@gateway/tor-sasl/azimut) (Ping timeout: 252 seconds) |
| 08:37:32 | → | Sgeo joins (~Sgeo@user/sgeo) |
| 08:40:44 | <int-e> | too close to "catholic", can't unsee |
| 08:46:35 | → | sm joins (~sm@plaintextaccounting/sm) |
| 08:47:17 | <haskellbridge> | <sm> hi I'm sm and I might have a little chat problem |
| 08:47:38 | <haskellbridge> | <sm> it's anonymous in here right ? |
| 08:47:47 | <int-e> | Yes, Simon. |
| 08:48:38 | <haskellbridge> | <sm> 😅 |
| 08:49:05 | × | Simikando quits (~Simikando@adsl-dyn-244.95-102-83.t-com.sk) (Ping timeout: 240 seconds) |
| 08:50:36 | → | hugo joins (znc@verdigris.lysator.liu.se) |
| 08:51:19 | × | sm quits (~sm@plaintextaccounting/sm) (Ping timeout: 264 seconds) |
| 08:51:47 | <danza> | is sm Simon Marlow? wow |
| 08:52:43 | <[exa]> | sshhh, play along the anonymous game! |
| 08:53:02 | <danza> | ^^; |
| 08:53:17 | danza | is glad not to be famous, for once |
| 08:53:19 | × | tzh quits (~tzh@c-71-193-181-0.hsd1.or.comcast.net) (Quit: zzz) |
| 08:53:43 | → | Pickchea joins (~private@user/pickchea) |
| 08:53:48 | <haskellbridge> | <sm> no, danza |
| 08:53:58 | <mauke> | no, Michael |
| 08:54:27 | <nullie> | that was so not right |
| 08:55:31 | danza | searchs the web for an haskeller called Simon Michael |
| 08:58:42 | → | Tuplanolla joins (~Tuplanoll@91-159-68-236.elisa-laajakaista.fi) |
| 08:58:44 | <danza> | now i would be happy to chat about what i found... but something is not right so i will cut it here |
| 08:59:30 | <danza> | i don't know, anyways, communication is so tied to my work these days, i would put chataholism under the workaholism umbrella |
| 09:00:31 | <[exa]> | danza: pls elaborate on #-offtopic :] |
| 09:01:37 | × | hugo quits (znc@verdigris.lysator.liu.se) (Ping timeout: 260 seconds) |
| 09:04:21 | <danza> | i think the conversation pretty much finished there. If people reply means they are not annoyed, also because this channel is a bit too boring most of the times. And you just started talking about other stuff on #-offtopic, it would be rude to overlap with that |
| 09:06:10 | → | Simikando joins (~Simikando@adsl-dyn-244.95-102-83.t-com.sk) |
| 09:12:04 | × | aliosablack quits (~chomwitt@2a02:587:7a24:b000:1ac0:4dff:fedb:a3f1) (Ping timeout: 252 seconds) |
| 09:12:43 | <[exa]> | danza: don't ask to overlap, just overlap |
| 09:13:58 | <haskellbridge> | <sm> it's fine danza (and mauke) though of course in general it's safer to let folks share their own name |
| 09:14:12 | <haskellbridge> | <sm> if that's what you're talking about |
| 09:14:13 | × | econo_ quits (uid147250@id-147250.tinside.irccloud.com) (Quit: Connection closed for inactivity) |
| 09:14:41 | <haskellbridge> | <sm> hello ! 👋🏻 😎 |
| 09:17:39 | → | Unicorn_Princess joins (~Unicorn_P@user/Unicorn-Princess/x-3540542) |
| 09:17:54 | × | coot quits (~coot@89-69-206-216.dynamic.chello.pl) (Quit: coot) |
| 09:18:02 | × | phma quits (~phma@host-67-44-208-149.hnremote.net) (Read error: Connection reset by peer) |
| 09:18:32 | → | remexre_ joins (~remexre@user/remexre) |
| 09:18:58 | → | phma joins (~phma@2001:5b0:2143:cec8:c3c:3fa4:1ab9:dd90) |
| 09:19:01 | × | remexre quits (~remexre@user/remexre) (Ping timeout: 260 seconds) |
| 09:19:31 | <danza> | i am not sure what we are talking about, it was nullie warning about things not being right. Anyway moving to #-offtopic |
| 09:19:46 | remexre_ | is now known as remexre |
| 09:23:09 | <haskellbridge> | <sm> so... what're we all doing/thinking in Haskell today |
| 09:24:15 | <nullie> | Sorry, that was an F1 joke |
| 09:24:43 | → | nate2 joins (~nate@c-98-45-169-16.hsd1.ca.comcast.net) |
| 09:25:29 | → | mmhat joins (~mmh@p200300f1c74e6ffcee086bfffe095315.dip0.t-ipconnect.de) |
| 09:25:39 | × | mmhat quits (~mmh@p200300f1c74e6ffcee086bfffe095315.dip0.t-ipconnect.de) (Client Quit) |
| 09:27:10 | → | sm joins (~sm@plaintextaccounting/sm) |
| 09:28:35 | <danza> | should we move to offtopic or not? I am confused. Anyways i think the job market is depressing in haskell today ... that prevents much of the doing :P |
| 09:28:39 | × | Pickchea quits (~private@user/pickchea) (Quit: Leaving) |
| 09:29:51 | × | nate2 quits (~nate@c-98-45-169-16.hsd1.ca.comcast.net) (Ping timeout: 240 seconds) |
| 09:30:13 | <haskellbridge> | <sm> I got a job from having haskell on my resume once |
| 09:30:23 | <tomsmeding> | was it a Haskell job? |
| 09:30:34 | <haskellbridge> | <sm> nope |
| 09:30:35 | × | Simikando quits (~Simikando@adsl-dyn-244.95-102-83.t-com.sk) (Ping timeout: 240 seconds) |
| 09:30:43 | <danza> | XD |
| 09:30:57 | <haskellbridge> | <sm> though Indid get to give a (underprepared, very bad) lunchtime talk on it |
| 09:31:20 | <tomsmeding> | lunchtime talks are best if they are underprepared |
| 09:31:38 | <haskellbridge> | <sm> (it was a great job nevertheless, though |
| 09:31:39 | <haskellbridge> | <sm> short lived) |
| 09:33:05 | → | elbear joins (~lucian@86.120.11.223) |
| 09:35:41 | <haskellbridge> | <sm> if you want to be employed doing haskell, I think there's employers that want you, but you have to seek them out |
| 09:36:58 | <danza> | the disproportion with other technologies is such to give "wearing the hard shirt" a new meaning |
| 09:37:32 | <haskellbridge> | <sm> sure it's not everywhere like mainstream techs, so what |
| 09:37:46 | × | elbear quits (~lucian@86.120.11.223) (Ping timeout: 260 seconds) |
| 09:42:06 | <danza> | i guess the biggest problem i have with this situation is it mines my confidence about the value i see in the language. Possibly the second problem, i worry about its longevity |
| 09:42:21 | <tomsmeding> | haskell has been around for 30+ years |
| 09:43:39 | × | Unicorn_Princess quits (~Unicorn_P@user/Unicorn-Princess/x-3540542) (Remote host closed the connection) |
| 09:45:09 | × | danza quits (~francesco@151.47.20.60) (Read error: Connection reset by peer) |
| 09:45:17 | → | danza joins (~francesco@151.47.12.170) |
| 09:45:36 | × | sm quits (~sm@plaintextaccounting/sm) (Ping timeout: 272 seconds) |
| 09:47:16 | <danza> | i know, i might worry too much about changes. Considering technological evolution in the past 20 years, i became a bit pessimistic about what stays and what goes, and my first point does not help for more optimism |
| 09:47:21 | × | vglfr quits (~vglfr@88.155.180.78) (Read error: Connection reset by peer) |
| 09:47:40 | → | hugo joins (znc@verdigris.lysator.liu.se) |
| 09:47:41 | → | vglfr joins (~vglfr@149.102.244.101) |
| 09:47:52 | <tomsmeding> | is it bad if technology evolves, replacing old stuff with newer, better stuff? |
| 09:47:53 | <haskellbridge> | <sm> it'll continue in another form even if called something else. It's also a super power to have in your toolbox |
| 09:48:02 | <tomsmeding> | also that |
| 09:48:10 | <tomsmeding> | but there's various rates of change here |
| 09:48:26 | <tomsmeding> | famously, JS frameworks change every year to every month, if you're unlucky |
| 09:48:32 | <tomsmeding> | programming languages take decades |
| 09:48:41 | <haskellbridge> | <sm> but sure, prioritize what you learn if needed to get employment in the short term |
| 09:50:06 | <tomsmeding> | programming in the way we know it today hasn't been a thing for more than 75 years |
| 09:50:31 | <tomsmeding> | and at 75 years ago we're talking about moving from pushing buttons to storing a program in _memory_ |
| 09:50:40 | <tomsmeding> | compilers were not yet in sight |
| 09:50:54 | <tomsmeding> | allow some time to settle :p |
| 09:51:08 | → | Simikando joins (~Simikando@adsl-dyn-244.95-102-83.t-com.sk) |
| 09:51:44 | <int-e> | going down memory l[ai]ne: https://en.wikipedia.org/wiki/Delay_line_memory |
| 09:53:36 | <danza> | in my opinion as haskellers we work on concepts that are on the scale of thousands of years, basically the age of math, so 75 years do not mean much to me |
| 09:53:50 | <tomsmeding> | then what's the problem :p |
| 09:55:15 | <danza> | but even in my very limited life span i have seen projects dying as corporations found better ways to control their technologies, and contingency sometimes matters |
| 09:58:01 | → | michalz joins (~michalz@185.246.204.107) |
| 09:58:06 | → | sm joins (~sm@plaintextaccounting/sm) |
| 10:02:34 | × | sm quits (~sm@plaintextaccounting/sm) (Ping timeout: 245 seconds) |
| 10:11:36 | × | vglfr quits (~vglfr@149.102.244.101) (Remote host closed the connection) |
| 10:12:19 | <cpressey> | I can't imagine myself getting a Haskell job because I'm sure they'd want me to use all the features of Haskell that I have no love for |
| 10:12:21 | → | vglfr joins (~vglfr@88.155.180.78) |
| 10:12:49 | <Rembane> | cpressey: And no other. |
| 10:13:05 | × | vglfr quits (~vglfr@88.155.180.78) (Read error: Connection reset by peer) |
| 10:13:20 | → | vglfr joins (~vglfr@149.102.244.101) |
| 10:14:51 | × | vglfr quits (~vglfr@149.102.244.101) (Remote host closed the connection) |
| 10:15:04 | → | vglfr joins (~vglfr@149.102.244.101) |
| 10:18:34 | <danza> | see, with other languages, people choose the job on the features they do like |
| 10:20:32 | × | oo_miguel quits (~Thunderbi@78-11-179-96.static.ip.netia.com.pl) (Quit: oo_miguel) |
| 10:21:04 | × | hugo quits (znc@verdigris.lysator.liu.se) (Ping timeout: 272 seconds) |
| 10:22:40 | × | michalz quits (~michalz@185.246.204.107) (Ping timeout: 255 seconds) |
| 10:24:23 | → | oo_miguel joins (~Thunderbi@78-11-179-96.static.ip.netia.com.pl) |
| 10:33:42 | → | hugo joins (znc@verdigris.lysator.liu.se) |
| 10:52:42 | → | sm joins (~sm@plaintextaccounting/sm) |
| 10:54:33 | → | falafel joins (~falafel@62.175.113.194.dyn.user.ono.com) |
| 10:57:48 | × | sm quits (~sm@plaintextaccounting/sm) (Ping timeout: 272 seconds) |
| 10:58:56 | → | [itchyjunk] joins (~itchyjunk@user/itchyjunk/x-7353470) |
| 11:10:13 | → | sm joins (~sm@plaintextaccounting/sm) |
| 11:15:04 | × | Simikando quits (~Simikando@adsl-dyn-244.95-102-83.t-com.sk) (Ping timeout: 245 seconds) |
| 11:15:06 | × | sm quits (~sm@plaintextaccounting/sm) (Ping timeout: 260 seconds) |
| 11:21:58 | → | aliosablack joins (~chomwitt@2a02:587:7a24:b000:1ac0:4dff:fedb:a3f1) |
| 11:23:28 | × | Sgeo quits (~Sgeo@user/sgeo) (Read error: Connection reset by peer) |
| 11:23:53 | → | Simikando joins (~Simikando@adsl-dyn-244.95-102-83.t-com.sk) |
| 11:25:20 | × | Simikando quits (~Simikando@adsl-dyn-244.95-102-83.t-com.sk) (Client Quit) |
| 11:26:18 | × | falafel quits (~falafel@62.175.113.194.dyn.user.ono.com) (Ping timeout: 272 seconds) |
| 11:26:50 | → | sm joins (~sm@plaintextaccounting/sm) |
| 11:28:15 | → | billchenchina joins (~billchenc@2a0c:b641:7a2:320:ee3e:47ca:6070:d71a) |
| 11:31:31 | × | sm quits (~sm@plaintextaccounting/sm) (Ping timeout: 255 seconds) |
| 11:32:23 | → | privacy joins (~privacy@user/privacy) |
| 11:35:45 | × | xff0x quits (~xff0x@2405:6580:b080:900:4efc:9689:a16f:b515) (Ping timeout: 258 seconds) |
| 11:37:48 | → | xff0x joins (~xff0x@178.255.149.135) |
| 11:38:58 | → | sm joins (~sm@plaintextaccounting/sm) |
| 11:43:01 | × | puke quits (~puke@user/puke) (Remote host closed the connection) |
| 11:43:46 | × | sm quits (~sm@plaintextaccounting/sm) (Ping timeout: 260 seconds) |
| 11:48:21 | × | danza quits (~francesco@151.47.12.170) (Read error: Connection reset by peer) |
| 11:49:53 | → | puke joins (~puke@user/puke) |
| 11:51:57 | × | hugo quits (znc@verdigris.lysator.liu.se) (Ping timeout: 260 seconds) |
| 11:59:08 | × | vglfr quits (~vglfr@149.102.244.101) (Ping timeout: 258 seconds) |
| 12:03:41 | → | hugo joins (znc@verdigris.lysator.liu.se) |
| 12:14:19 | × | [itchyjunk] quits (~itchyjunk@user/itchyjunk/x-7353470) (Remote host closed the connection) |
| 12:14:37 | → | [itchyjunk] joins (~itchyjunk@user/itchyjunk/x-7353470) |
| 12:16:00 | × | hugo quits (znc@verdigris.lysator.liu.se) (Ping timeout: 258 seconds) |
| 12:24:37 | → | sm joins (~sm@plaintextaccounting/sm) |
| 12:26:02 | × | acidjnk quits (~acidjnk@p200300d6e7072f72f8dec80e9aca23dc.dip0.t-ipconnect.de) (Read error: Connection reset by peer) |
| 12:28:22 | × | ec quits (~ec@gateway/tor-sasl/ec) (Remote host closed the connection) |
| 12:28:49 | × | sm quits (~sm@plaintextaccounting/sm) (Ping timeout: 245 seconds) |
| 12:28:58 | → | ec joins (~ec@gateway/tor-sasl/ec) |
| 12:30:11 | → | hugo joins (znc@verdigris.lysator.liu.se) |
| 12:31:57 | × | xff0x quits (~xff0x@178.255.149.135) (Ping timeout: 255 seconds) |
| 12:33:39 | → | xff0x joins (~xff0x@2405:6580:b080:900:54b9:b3f0:7086:8bcc) |
| 12:34:19 | → | vglfr joins (~vglfr@88.155.180.78) |
| 12:35:42 | → | acidjnk joins (~acidjnk@p200300d6e7072f72f8dec80e9aca23dc.dip0.t-ipconnect.de) |
| 12:35:53 | → | Square joins (~Square@user/square) |
| 12:36:54 | → | sm joins (~sm@plaintextaccounting/sm) |
| 12:41:03 | × | sm quits (~sm@plaintextaccounting/sm) (Ping timeout: 240 seconds) |
| 12:44:48 | → | falafel joins (~falafel@62.175.113.194.dyn.user.ono.com) |
| 12:48:00 | × | hugo quits (znc@verdigris.lysator.liu.se) (Ping timeout: 272 seconds) |
| 12:48:20 | → | Nixkernal joins (~Nixkernal@119.4.193.178.dynamic.wline.res.cust.swisscom.ch) |
| 12:54:58 | → | sm joins (~sm@plaintextaccounting/sm) |
| 12:57:47 | → | sm_ joins (~sm@plaintextaccounting/sm) |
| 12:59:00 | × | sm quits (~sm@plaintextaccounting/sm) (Ping timeout: 240 seconds) |
| 13:02:48 | → | hugo joins (znc@verdigris.lysator.liu.se) |
| 13:15:52 | × | wootehfoot quits (~wootehfoo@user/wootehfoot) (Ping timeout: 272 seconds) |
| 13:23:17 | × | sm_ quits (~sm@plaintextaccounting/sm) (Quit: sm_) |
| 13:23:18 | → | wootehfoot joins (~wootehfoo@user/wootehfoot) |
| 13:24:12 | × | notzmv quits (~zmv@user/notzmv) (Ping timeout: 240 seconds) |
| 13:26:31 | → | nate2 joins (~nate@c-98-45-169-16.hsd1.ca.comcast.net) |
| 13:31:09 | → | wroathe joins (~wroathe@207-153-38-140.fttp.usinternet.com) |
| 13:31:09 | × | wroathe quits (~wroathe@207-153-38-140.fttp.usinternet.com) (Changing host) |
| 13:31:09 | → | wroathe joins (~wroathe@user/wroathe) |
| 13:31:49 | × | nate2 quits (~nate@c-98-45-169-16.hsd1.ca.comcast.net) (Ping timeout: 255 seconds) |
| 13:32:29 | → | coot joins (~coot@89-69-206-216.dynamic.chello.pl) |
| 13:41:05 | × | falafel quits (~falafel@62.175.113.194.dyn.user.ono.com) (Ping timeout: 240 seconds) |
| 13:47:18 | × | euleritian quits (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) (Read error: Connection reset by peer) |
| 13:48:24 | → | euleritian joins (~euleritia@77.22.252.56) |
| 13:51:13 | → | sm joins (~sm@plaintextaccounting/sm) |
| 13:53:48 | × | dolio quits (~dolio@130.44.134.54) (Quit: ZNC 1.8.2 - https://znc.in) |
| 13:55:13 | → | dolio joins (~dolio@130.44.134.54) |
| 13:55:19 | × | dolio quits (~dolio@130.44.134.54) (Remote host closed the connection) |
| 13:57:23 | → | harveypwca joins (~harveypwc@2601:246:c180:a570:41a8:a837:a4a7:bda1) |
| 13:59:37 | × | bliminse quits (~bliminse@user/bliminse) (Quit: leaving) |
| 14:04:53 | → | dolio joins (~dolio@130.44.134.54) |
| 14:08:11 | × | jespada quits (~jespada@cpc121308-nmal25-2-0-cust15.19-2.cable.virginm.net) (Quit: Textual IRC Client: www.textualapp.com) |
| 14:08:26 | × | hugo quits (znc@verdigris.lysator.liu.se) (Ping timeout: 272 seconds) |
| 14:10:31 | × | wroathe quits (~wroathe@user/wroathe) (Ping timeout: 255 seconds) |
| 14:10:35 | → | killerstorm joins (~killersto@224.225.60.94.rev.vodafone.pt) |
| 14:12:56 | × | euleritian quits (~euleritia@77.22.252.56) (Ping timeout: 255 seconds) |
| 14:13:57 | × | johnw quits (~johnw@69.62.242.138) (Read error: Connection reset by peer) |
| 14:14:16 | → | johnw joins (~johnw@69.62.242.138) |
| 14:17:05 | × | sm quits (~sm@plaintextaccounting/sm) (Quit: sm) |
| 14:17:59 | × | qqq quits (~qqq@92.43.167.61) (Read error: Connection reset by peer) |
| 14:19:17 | → | hugo joins (znc@verdigris.lysator.liu.se) |
| 14:33:35 | → | Simikando joins (~Simikando@adsl-dyn-244.95-102-83.t-com.sk) |
| 14:34:06 | ← | elevenkb parts (elevenkb@thunix.net) (ERC 5.5.0.29.1 (IRC client for GNU Emacs 29.1)) |
| 14:34:24 | × | privacy quits (~privacy@user/privacy) (Quit: Leaving) |
| 14:37:41 | × | stites quits (~stites@130.44.147.204) (Ping timeout: 255 seconds) |
| 14:38:54 | → | stites joins (~stites@2607:fb91:dc9:51d1:1285:280d:59e4:7da2) |
| 14:43:12 | → | wroathe joins (~wroathe@50.205.197.50) |
| 14:43:12 | × | wroathe quits (~wroathe@50.205.197.50) (Changing host) |
| 14:43:12 | → | wroathe joins (~wroathe@user/wroathe) |
| 14:45:35 | → | bliminse joins (~bliminse@user/bliminse) |
| 14:46:44 | → | qqq joins (~qqq@92.43.167.61) |
| 14:48:04 | → | ph88 joins (~ph88@ip5b406c07.dynamic.kabel-deutschland.de) |
| 14:52:15 | <ph88> | Hi all, i want to construct a type like Foo a b | Bar a b. At the place where i get my `a` i know whether i need a Foo or a Bar (`a` itself does not carry this information). Only much later (higher up in the calltree) i get my b. Would it be better to pass around partial functions as data. Or make a new data type just for signaling if it should be a Foo or Bar later? |
| 14:58:55 | × | Simikando quits (~Simikando@adsl-dyn-244.95-102-83.t-com.sk) (Ping timeout: 258 seconds) |
| 15:00:14 | <geekosaur> | % data Foo a b = Foo a b | Bar a b deriving (Show,Read) |
| 15:00:14 | <yahb2> | <no output> |
| 15:00:23 | <geekosaur> | % :t Foo 5 |
| 15:00:23 | <yahb2> | Foo 5 :: Num a => b -> Foo a b |
| 15:04:49 | <ph88> | geekosaur, yes that's one alternative. The other would be that i do like data FooBar = MkFoo a | MkFoo b. case x of; MkFoo a -> Foo a b; MkBar a -> Bar a b |
| 15:05:34 | <ph88> | data FooBar a = MkFoo a | MkFoo a ** |
| 15:05:41 | <ph88> | data FooBar a = MkFoo a | MkBar a ** |
| 15:06:32 | <geekosaur> | you alos have: data FooBar = Foo | Bar; data Foo a b = F FooBar a b |
| 15:06:38 | <ph88> | maybe it's just me and i considered outputting partial functions more as a trick to be used very locally. not to carry it up the callstack 10 function levels high |
| 15:07:21 | → | Simikando joins (~Simikando@adsl-dyn-244.95-102-83.t-com.sk) |
| 15:07:22 | <int-e> | Other ideas... if `b` is a type argument you could use (); if it's not you might still use a bottom. |
| 15:07:58 | <ph88> | aah as functor .. interesting that might work too |
| 15:08:08 | → | todi1 joins (~todi@p4fd1ae09.dip0.t-ipconnect.de) |
| 15:08:22 | <int-e> | (Both of these handle similarly to making an explicit "partially applied" type) |
| 15:09:00 | <int-e> | Nothing wrong with partial functions. You can wrap them inside a newtype if the function types in the signature confuse you :) |
| 15:09:19 | × | todi quits (~todi@p5dca54c6.dip0.t-ipconnect.de) (Ping timeout: 255 seconds) |
| 15:10:12 | <ph88> | thanks for the perspectives geekosaur int-e :) |
| 15:12:15 | → | sm joins (~sm@plaintextaccounting/sm) |
| 15:12:31 | × | sm quits (~sm@plaintextaccounting/sm) (Client Quit) |
| 15:17:24 | → | sm joins (~sm@plaintextaccounting/sm) |
| 15:17:47 | → | _ht joins (~Thunderbi@28-52-174-82.ftth.glasoperator.nl) |
| 15:23:17 | → | sm_ joins (~sm@plaintextaccounting/sm) |
| 15:24:10 | × | sm quits (~sm@plaintextaccounting/sm) (Ping timeout: 255 seconds) |
| 15:24:14 | → | khumba joins (~khumba@user/khumba) |
| 15:27:31 | × | Simikando quits (~Simikando@adsl-dyn-244.95-102-83.t-com.sk) (Quit: Leaving) |
| 15:27:33 | → | machinedgod joins (~machinedg@d198-53-218-113.abhsia.telus.net) |
| 15:27:55 | → | elbear joins (~lucian@86.120.11.223) |
| 15:29:06 | × | elbear quits (~lucian@86.120.11.223) (Client Quit) |
| 15:31:51 | × | billchenchina quits (~billchenc@2a0c:b641:7a2:320:ee3e:47ca:6070:d71a) (Read error: Connection reset by peer) |
| 15:32:35 | → | billchenchina joins (~billchenc@103.152.35.21) |
| 15:34:41 | <EvanR> | is the most straightforwardest way to write a program in haskell that appears as a win32 desktop GUI app |
| 15:35:17 | <EvanR> | to write the program against the C API using FFI and have a WinMain wrapper file that calls haskell main |
| 15:35:29 | → | notzmv joins (~zmv@user/notzmv) |
| 15:35:50 | <geekosaur> | probably. or backend/frontend like a web app, with the frontend in whatever language is convenient |
| 15:40:31 | <EvanR> | there was a wrong sounding rust rant posted recently about how we're stuck with C at the lowest level and we can't truly be liberated until we can interface with the OS in rust or whatever language without C |
| 15:41:05 | <EvanR> | it sounded wrong in linux because you can just call into linux using the known mechanisms and C is not required |
| 15:41:14 | <geekosaur> | it's half right, because at the moment FFIs are based on C |
| 15:41:14 | <EvanR> | but windows... |
| 15:42:26 | <geekosaur> | and in particular linux is problematic and arbitrarily changes unless you stick to the C-based entrypoints exported by glibc (yes, musl exists, but it has hardcoded mappings for known kernel versions and breaks if you use it with an unknown kernel version) |
| 15:42:39 | <geekosaur> | windows is actually more stable in that sense |
| 15:44:24 | <ddellacosta> | how hard is it to compile gtk apps to Windows? I've heard that API wrapper was straightforward to use in Haskell, but haven't done it myself |
| 15:45:08 | <ddellacosta> | I guess that's not really what you're going for though, sounds more like proof of concept |
| 15:46:48 | <EvanR> | I'm guessing a GTK app for linux written in haskell is a solved problem |
| 15:46:51 | <[exa]> | EvanR: luckily for the rust people, microsoft kinda decided to replace the stuff with .NET which solves the problem :D |
| 15:47:01 | <EvanR> | lol |
| 15:47:18 | <EvanR> | isn't that all still built on top of the C api |
| 15:48:02 | <[exa]> | anyway yeah I'd bet that a linux GTK+haskell app will (with some random effort inherent to win32) also compile to win32 |
| 15:49:22 | <[exa]> | there's plenty of gtk apps that work on windows and the people care about maintaining it, so I'd assume the task would not be a total one-nerd show |
| 15:49:43 | <EvanR> | hahaha |
| 15:50:02 | <[exa]> | but yeah as always, it's windows and YMWV |
| 15:51:40 | <EvanR> | I was thinking that a long winded article on programming in haskell would need to have a realistic program to go with it. And the most realistic thing I can think of is a graphical windows app that uses windows. Which I know isn't that popular to try in haskell. But should be possible and a good place to demonstrate methods to build in abstractions to allow porting to other desktop tech |
| 15:52:32 | <[exa]> | tbh I'd love to start one such thing too, wanted a RDF editor for people |
| 15:52:58 | <[exa]> | and anything that avoids javascript and electron in the process is A GODSEND |
| 15:53:03 | <EvanR> | right |
| 15:53:17 | × | wroathe quits (~wroathe@user/wroathe) (Ping timeout: 255 seconds) |
| 15:53:48 | <ddellacosta> | what about with something like https://haskell-miso.org/ or https://reflex-frp.org/, or even https://hackage.haskell.org/package/brick |
| 15:53:52 | <[exa]> | anyway pandoc ain't good enough? :D |
| 15:54:35 | <EvanR> | pandoc is a rather large program for demonstration purposes |
| 15:54:36 | <[exa]> | ddellacosta: I didn't see a very scaled-out FRP app so far (unfortunately!) |
| 15:54:53 | × | raym quits (~ray@user/raym) (Quit: update to FreeBSD 14.0-BETA5) |
| 15:55:08 | <ddellacosta> | oh yeah, that's reasonable, but if it's just about sharing something useful in Haskell for the purposes of an article. But I dunno, just spitballing here |
| 15:55:23 | <[exa]> | anyway yeah brick apps are lovely |
| 15:55:46 | → | Unicorn_Princess joins (~Unicorn_P@user/Unicorn-Princess/x-3540542) |
| 15:56:12 | <[exa]> | EvanR: btw you already stumbled upon the gi-gtk-examples, right? |
| 15:56:31 | <EvanR> | miso reflex brick wxwidgets fltk or other thing would detract from an argument that haskell can stand on its own as a general purpose language that could replace C++ for some purpose on windows, an argument which could be doomed to fail but hey |
| 15:56:52 | <EvanR> | yeah I've seen gtk stuff in haskell so that's good for linux |
| 15:56:59 | <EvanR> | and pretty bad for OSX |
| 15:57:25 | × | coot quits (~coot@89-69-206-216.dynamic.chello.pl) (Quit: coot) |
| 15:59:45 | <EvanR> | gtk might be the sanest route for a real project that must be in haskell for some reason, but then it establishes haskell as a linux language xD |
| 16:00:16 | <EvanR> | apologies to BSD people who probably have haskell working fine |
| 16:01:11 | <ddellacosta> | okay yeah, I better see the angle you're coming at it from now. I think the reality is that it's going to be a hard sell--I think it's hard to argue that C++ doesn't have more of a foothold in Windows, however you slice it. But that's not an argument against Haskell as a general purpose programming language, IMHO |
| 16:01:28 | <ddellacosta> | I may be biased lol |
| 16:01:48 | <EvanR> | general purposes minus specific things |
| 16:01:54 | <EvanR> | subtractive purposes |
| 16:02:27 | <geekosaur> | brick doesn't work under windows (yet) |
| 16:02:34 | <ddellacosta> | oh, whoops |
| 16:03:17 | <EvanR> | I think the only barrier here is visual studio doesn't have a haskell option which does this winmain thing for you |
| 16:03:18 | <ddellacosta> | for some reason I assumed it was a given with WSL or whatever it is |
| 16:03:46 | <geekosaur> | wsl works but isn't native, the end user has to fire up a wsl session and run the program inside it |
| 16:03:56 | <ddellacosta> | ah, I see. |
| 16:04:31 | <geekosaur> | it's literally ubuntu running inside hyper-v, with no integration |
| 16:05:02 | <geekosaur> | wsl1 had integration but not enough compatibility |
| 16:05:23 | <geekosaur> | (and in particular haskell programs didn't work with it iirc) |
| 16:16:48 | → | __monty__ joins (~toonn@user/toonn) |
| 16:17:41 | × | eggplantade quits (~Eggplanta@104-55-37-220.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection) |
| 16:17:57 | → | eggplantade joins (~Eggplanta@2600:1700:38c5:d800:f026:93e1:c9cc:1bf) |
| 16:18:55 | → | econo_ joins (uid147250@id-147250.tinside.irccloud.com) |
| 16:20:24 | × | stiell quits (~stiell@gateway/tor-sasl/stiell) (Remote host closed the connection) |
| 16:20:48 | × | machinedgod quits (~machinedg@d198-53-218-113.abhsia.telus.net) (Ping timeout: 272 seconds) |
| 16:20:52 | → | stiell joins (~stiell@gateway/tor-sasl/stiell) |
| 16:30:55 | → | falafel joins (~falafel@62.175.113.194.dyn.user.ono.com) |
| 16:39:22 | → | tzh joins (~tzh@c-71-193-181-0.hsd1.or.comcast.net) |
| 16:48:27 | × | Maeda quits (~Maeda@91-161-10-149.subs.proxad.net) (Quit: BRB) |
| 16:48:33 | × | lg188 quits (~lg188@82.18.98.230) (Quit: Ping timeout (120 seconds)) |
| 16:48:51 | → | lg188 joins (~lg188@82.18.98.230) |
| 16:52:22 | <ph88> | is there any typeclass that allows me to take one element of a data structure ? like one element of a list or vector? Usually i use Foldable but i realized it doesn't give me the ability to short iterating on the sequence. What can be done? |
| 16:52:49 | <ph88> | "Abortable iterator" typeclass kind of thing |
| 16:53:25 | <geekosaur> | https://hackage.haskell.org/package/witherable ? |
| 16:54:13 | <monochrom> | Foldable methods can be combined to do that. |
| 16:54:21 | × | killerstorm quits (~killersto@224.225.60.94.rev.vodafone.pt) (Quit: Client closed) |
| 16:54:40 | <monochrom> | The lowest-tech way is toList then take 1. There is probably a fancier way. |
| 16:55:08 | → | Maeda joins (~Maeda@91-161-10-149.subs.proxad.net) |
| 16:55:13 | <geekosaur> | lens offers `ix` |
| 16:55:50 | <monochrom> | Most instances' toList are lazy enough that take 1 . toList spends minimal time. |
| 16:56:55 | <ph88> | monochrom, if possible without losing the original type. So i need a polymorphic version of toList and fromList in that case |
| 16:57:20 | <monochrom> | In Haskell, at least in the pure FP fragment, you don't code up imperative control flow for early exit, you use laziness and let take does the truncation. |
| 16:57:29 | <geekosaur> | if you're taking only one element, you're losing the container anyway |
| 16:57:37 | <geekosaur> | otherwise you probably do want witherable |
| 16:58:24 | <monochrom> | Injecting an element to a singleton data structure is covered by Applicative's pure. >:) |
| 16:58:46 | × | sm_ quits (~sm@plaintextaccounting/sm) (Quit: sm_) |
| 17:01:14 | <ph88> | monochrom, i saw it being encoded as recursive function which decides to no longer call itself as "early exit" |
| 17:01:52 | <monochrom> | That's what take does. |
| 17:02:08 | <monochrom> | But the producer of the list, it just keeps producing and not care. |
| 17:02:17 | <monochrom> | Namely, toList is the list producer. |
| 17:04:00 | × | harveypwca quits (~harveypwc@2601:246:c180:a570:41a8:a837:a4a7:bda1) (Quit: Leaving) |
| 17:04:55 | × | puke quits (~puke@user/puke) (Quit: puke) |
| 17:04:57 | × | pavonia quits (~user@user/siracusa) (Quit: Bye!) |
| 17:05:05 | <ph88> | i'm confused. What i am trying to do is implement a function mapAll :: (a -> Maybe b) -> f a -> Maybe (f b). That returns Nothing when one time the predicate returns Nothing, otherwise collects the collection into Just. My question is not how to implement it for let's say a list. But whether it's possible to make it polymorphic (for at least List and Vector lets say) and short out early (stop iterating as soon as the condition is |
| 17:05:06 | <ph88> | met). How could it be done ? |
| 17:06:05 | <monochrom> | No, I am confused. How does "take one element of a data structure" become "mapAll :: (a -> Maybe b) -> f a -> Maybe (f b)"? |
| 17:06:28 | <ph88> | monochrom, because from `f a` i want to take one `a` at a time. Perhaps my wording was less than ideal here |
| 17:07:04 | <monochrom> | Take all elements but use them one at a time? toList. |
| 17:07:49 | <ph88> | monochrom, i need a polymorphic version of toList and fromList right ? |
| 17:08:26 | <ph88> | if i want my result type to be `Maybe (f b)`. f ~ f from input to output |
| 17:08:38 | <monochrom> | OK you still need to produce the same kind of data structure. I might try Traversable. |
| 17:08:53 | → | puke joins (~puke@user/puke) |
| 17:09:16 | <ph88> | ok thanks, i will look at what Traversable Maybe does |
| 17:09:31 | <monochrom> | No, Traversable is for the f. |
| 17:09:58 | <ph88> | ok but how do i know if it has the behavior i want ? |
| 17:10:21 | <tomsmeding> | :t traverse |
| 17:10:22 | <lambdabot> | (Traversable t, Applicative f) => (a -> f b) -> t a -> f (t b) |
| 17:10:41 | <monochrom> | And the Maybe there becomes the Applicative instance. |
| 17:10:56 | <tomsmeding> | if that seems confusing: 'traverse = sequence . map' is helpful intuition sometimes |
| 17:11:51 | <monochrom> | You can try to infer from the laws, or you can test examples then use free theorems to infer the general case. |
| 17:12:03 | <tomsmeding> | ('traverse = sequenceA . fmap' is actually a law, and sequence = sequenceA) |
| 17:13:08 | <monochrom> | Here is one test: |
| 17:13:36 | <monochrom> | > traverse (\x -> if x==0 then Just 0 else Nothing) (0 : repeat 1) |
| 17:13:37 | <lambdabot> | Nothing |
| 17:14:16 | <monochrom> | It termintes in finite time, despite the infinite list. Some kind of free theorems will generalize it to other data structures. |
| 17:14:17 | <ph88> | more or less, is Foldable for running the full loop and Traversable for possibly shorting earlier ? |
| 17:14:33 | <tomsmeding> | Traversable is for doing Foldable inside an Applicative |
| 17:14:48 | <tomsmeding> | er, no |
| 17:14:52 | <monochrom> | Oh in this case it's Maybe's <*> that exits early. |
| 17:15:02 | <tomsmeding> | Traversable is for doing fmap inside an Applicative, i.e. an "effectful" fmap |
| 17:15:07 | <tomsmeding> | :t fmap |
| 17:15:08 | <lambdabot> | Functor f => (a -> b) -> f a -> f b |
| 17:15:10 | <tomsmeding> | :t traverse |
| 17:15:11 | <lambdabot> | (Traversable t, Applicative f) => (a -> f b) -> t a -> f (t b) |
| 17:15:13 | <monochrom> | And here is a test for "everyone is Just": |
| 17:15:23 | <tomsmeding> | fmap's 'f' = traverse's 't' |
| 17:15:32 | <monochrom> | > traverse (\x -> Just x) [0, 1, 2, 3] |
| 17:15:34 | <lambdabot> | Just [0,1,2,3] |
| 17:16:52 | <tomsmeding> | Functor is for independent, elementwise operations; Foldable is for summarisation; Traversable is for "imperative loops" (i.e. loops with Applicative, or Monadic, effects) |
| 17:17:16 | <monochrom> | traverse just uses <*> and recursion. But Maybe's <*> has a short-circuiting clause that sidesteps traverse's recursion under the condition you required. |
| 17:18:19 | <ph88> | if Traversable + Applicative (Maybe instance) encodes "shorting out the loop early". What other Applicative behaviors are there to choose from? I know that Either also shorts out early. Isn't it so that in the combination of Traversable + Applicative you can divide all Applicatives in 2 groups: the ones that possibly short early + the ones that don't ? |
| 17:18:39 | <monochrom> | [] is also an Applicative. IO is also an Applicative. |
| 17:18:41 | <tomsmeding> | does IO short early? |
| 17:18:49 | <tomsmeding> | it can if you throwIO :p |
| 17:19:01 | <ph88> | tomsmeding, then it does i suppose ? |
| 17:19:11 | <tomsmeding> | does the continuation monad short early |
| 17:19:12 | <tomsmeding> | ? |
| 17:19:13 | <monochrom> | Reader, State, Parser, ... |
| 17:19:15 | <tomsmeding> | ¯\_(ツ)_/¯ |
| 17:19:39 | <monochrom> | Oh I even know how to make Cont do global jumps >:) |
| 17:19:42 | <tomsmeding> | this goes right down to "what is a Monad" |
| 17:19:57 | <tomsmeding> | even if we aren't even talking about the full power of Monad here |
| 17:20:01 | <monochrom> | Um it's worse. "what is an Applicative"! |
| 17:20:29 | <ph88> | hmm i see what you're saying |
| 17:20:37 | <monochrom> | The space is large than Monad's space, there are going to be even more weird things out there! |
| 17:21:23 | <monochrom> | I just haven't been able to imagine the really weird examples. |
| 17:21:41 | × | eggplantade quits (~Eggplanta@2600:1700:38c5:d800:f026:93e1:c9cc:1bf) (Remote host closed the connection) |
| 17:22:06 | <monochrom> | Currently I have only learned ZipList and non-monadic applicative parsers. |
| 17:22:06 | × | Maeda quits (~Maeda@91-161-10-149.subs.proxad.net) (Quit: BRB) |
| 17:22:39 | <monochrom> | which, since they are actually very practical things, can't be said to be weird at all. |
| 17:23:28 | × | driib quits (~driib@vmi931078.contaboserver.net) (Quit: The Lounge - https://thelounge.chat) |
| 17:23:37 | → | azimut joins (~azimut@gateway/tor-sasl/azimut) |
| 17:23:58 | <ph88> | i'd like to understand. Where can i find that traverse with Applicative Maybe shorts early? i looked before in the code and i couldn't pinpoint it like i could with imperative code that jumps out of the loop |
| 17:23:58 | ← | Heffalump parts (~ganesh@urchin.earth.li) () |
| 17:24:29 | <tomsmeding> | ph88: the Applicative instance of Maybe |
| 17:24:42 | <tomsmeding> | ph88: https://hackage.haskell.org/package/base-4.18.1.0/docs/src/GHC.Base.html#line-1120 |
| 17:24:51 | <ph88> | monochrom, i thought since you been here so long you'd taken all the space :p |
| 17:24:55 | <tomsmeding> | note that the 'Nothing <*> _' case ignores its second argument |
| 17:25:42 | tomsmeding | . o O ( monochrom is missing all the coloured examples ) |
| 17:25:54 | <monochrom> | You look at the recursion in "traverse f (x:xs) = pure (:) <*> f x <*> traverse f xs" and you look at the <*> of Maybe "Nothing <*> _ = Nothing" therefore the "... <*> traverse f xs" recursive call is dropped. |
| 17:26:27 | <ph88> | tomsmeding, ah great thanks, at least that i can understand that in the line above fmap is called another time and in the line below it doesn't call another function |
| 17:26:58 | <tomsmeding> | > Nothing <*> undefined |
| 17:26:59 | <lambdabot> | Nothing |
| 17:28:16 | → | nate2 joins (~nate@c-98-45-169-16.hsd1.ca.comcast.net) |
| 17:30:46 | <ph88> | Could i explain Applicative like this: there is a type holding some data. When you want to change it's data the type has a rule what it does with your "change request" |
| 17:31:48 | <monochrom> | How do you test that hypothesis? |
| 17:32:11 | <monochrom> | IOW does it have predictive power? |
| 17:32:21 | <monochrom> | Is it even refutable? |
| 17:32:44 | × | azimut quits (~azimut@gateway/tor-sasl/azimut) (Remote host closed the connection) |
| 17:32:50 | <monochrom> | Note that in science, irrefutable => meaningless |
| 17:33:02 | <tomsmeding> | monochrom: I think it is supposed to be intuition; intuition is not falsifiable and not scientific, but nevertheless useful |
| 17:33:03 | → | azimut joins (~azimut@gateway/tor-sasl/azimut) |
| 17:33:48 | <geekosaur> | until you get to quantum mechanics where intuition will always lead you wrong |
| 17:33:50 | <ph88> | ye i still don't have intuition for Applicative |
| 17:34:12 | <tomsmeding> | ph88: but I have a different intuition: Monad is for effectful computation (exceptions, state, IO, whatever), and Applicative is a weaker version of Monad where all subcomputations are independent |
| 17:34:16 | × | nate2 quits (~nate@c-98-45-169-16.hsd1.ca.comcast.net) (Ping timeout: 272 seconds) |
| 17:34:22 | → | eggplantade joins (~Eggplanta@2600:1700:38c5:d800:f026:93e1:c9cc:1bf) |
| 17:34:52 | <monochrom> | No, I have seen successful intuitions that are succesful because, although falsified 10% of the time, have predictive power and have made correct predictions the other 90% of the time. |
| 17:35:12 | <ph88> | tomsmeding, also useful |
| 17:35:16 | × | defanor quits (~defanor@tart.uberspace.net) (Quit: .) |
| 17:35:29 | <tomsmeding> | you get this independentness as follows: in Applicative you have 'pure' (which is clearly a computation whose effects (none) do not depend on any other computation in this program) |
| 17:35:49 | <tomsmeding> | and you have (<*>), which does function application (which is computation), but the _effects_ of the left and of the right argument are independent |
| 17:36:02 | → | defanor joins (~defanor@tart.uberspace.net) |
| 17:36:04 | <tomsmeding> | the effects of the right-hand side can not depend on the result of the left-hand side |
| 17:36:09 | → | sabino joins (~sabino@user/sabino) |
| 17:36:23 | <tomsmeding> | hence: if you see 'a <*> b', you could run the _effects_ of a and b in parallel |
| 17:36:46 | <monochrom> | For example "monads are like lists" is such an intuition. It works for Maybe. It breaks elsewhere, that's why it stays at the intuition status. |
| 17:36:54 | <dolio> | Applicatives are sequences. Monads are trees. |
| 17:37:12 | <tomsmeding> | this is not so with (>>=): the effects of the continuation (the right-hand argument of (>>=)) are allowed to depend on the _value_ of the left-hand argument, so these two cannot be run in parallel |
| 17:38:05 | <ph88> | tomsmeding, don't understand what you are saying about effects. left-hand side is f (a -> b) a wrapped function, and right-hand side is f a wrapped data (in the simple case where a is a type without arrow) |
| 17:38:33 | <tomsmeding> | a value of type 'f (a -> b)' can be seen as an effectful computation that results in a function of type 'a -> b' |
| 17:38:55 | → | driib joins (~driib@vmi931078.contaboserver.net) |
| 17:38:59 | <tomsmeding> | there is not necessarily any value of type 'a -> b' contained in an 'f (a -> b)'! |
| 17:39:18 | <tomsmeding> | if f ~ IO, it might read stuff from a file and determine what function to return based on the file's contents |
| 17:39:30 | → | roboguy_ joins (~roboguy_@cpe-69-76-235-109.kc.res.rr.com) |
| 17:39:50 | <tomsmeding> | 'wrapped' is intuition that sometimes works, sometimes doesn't work very well |
| 17:40:20 | <tomsmeding> | 'effectful' works always, but is awfully general and thus harder to wrap one's head around (especially when one considers e.g. the continuation monad) |
| 17:40:45 | <ph88> | `determine what function to return` .. whatever function it will still be a `a -> b` right ? |
| 17:40:51 | <tomsmeding> | sure |
| 17:41:21 | <tomsmeding> | consider this value of type 'IO Int': do { s <- readFile "/etc/passwd" ; return (length (lines s)) } |
| 17:41:24 | <tomsmeding> | is that a wrapped Int? |
| 17:41:42 | <tomsmeding> | I'd say it's an effectful computation that returns an Int |
| 17:42:16 | <ph88> | specifically <*> was of interest |
| 17:42:32 | <tomsmeding> | 'Just 42' is also an effectful computation that returns an Int, just with a different kind of effects (only early termination) |
| 17:42:43 | <tomsmeding> | :t (>>=) |
| 17:42:44 | <lambdabot> | Monad m => m a -> (a -> m b) -> m b |
| 17:42:45 | <tomsmeding> | :t (<*>) |
| 17:42:46 | <lambdabot> | Applicative f => f (a -> b) -> f a -> f b |
| 17:43:34 | <tomsmeding> | :t \mf mx -> mf >>= \f -> fmap f mx |
| 17:43:35 | <lambdabot> | Monad m => m (a -> b) -> m a -> m b |
| 17:43:54 | <tomsmeding> | you can make (<*>) using (>>=), but not the other way round |
| 17:44:15 | <tomsmeding> | (>>=) is generic effectful sequencing: doing this one effectful thing, then take the result and _based on that_ determine what effects to perform next |
| 17:44:29 | <tomsmeding> | :t flip (<*>) |
| 17:44:30 | <lambdabot> | Applicative f => f a -> f (a -> b) -> f b |
| 17:44:37 | <tomsmeding> | :t (>>=) |
| 17:44:38 | <lambdabot> | Monad m => m a -> (a -> m b) -> m b |
| 17:45:10 | <tomsmeding> | with (<*>), the you must run your effects for the continuation _first_, and only then are you going to receive the 'a' |
| 17:46:20 | <tomsmeding> | now I had to flip (<*>) to make its type similar to the type of (>>=); this is because for Applicatives where that matters, (<*>) runs the effects of the function before the effects of the argument |
| 17:47:07 | <roboguy_> | ph88: I always liked that one quote from shachaf: "getLine :: IO String contains a String in the same way that /bin/ls contains a list of files" |
| 17:47:23 | <tomsmeding> | but this ordering difference is just a design choice; the effects in (>>=) could not be switched around because the effects of the continuation _depend_ on the result of the first computation, but the effects in (<*>) could also be executed the other way round if you pleased |
| 17:48:17 | <dolio> | Right, because Monads allow nesting, instead of just sequencing. |
| 17:48:18 | <tomsmeding> | that freedom is precisely why 1. fewer computations can be run using the Applicative methods than using the Monad methods (Monad is more powerful), and conversely 2. an Applicative computation has more information statically available |
| 17:48:52 | <tomsmeding> | roboguy_: nice one |
| 17:49:02 | <geekosaur> | @quote /bin/ls |
| 17:49:02 | <lambdabot> | shachaf says: getLine :: IO String contains a String in the same way that /bin/ls contains a list of files |
| 17:49:20 | <geekosaur> | immortalized |
| 17:49:28 | <ph88> | tomsmeding, i was thinking in a way that "i want to apply function to mystery box" and "mystery box will figure out whether to `run your effects for the conditunation first` and then "apply function after" |
| 17:49:47 | × | eggplantade quits (~Eggplanta@2600:1700:38c5:d800:f026:93e1:c9cc:1bf) (Remote host closed the connection) |
| 17:49:55 | <tomsmeding> | ...or? |
| 17:49:58 | <monochrom> | https://www.vex.net/~trebla/photo/unorganized/IO-String.png >:) |
| 17:50:34 | <ph88> | tomsmeding, or disregard my function and return in some other shape of `f b` |
| 17:51:26 | <tomsmeding> | ph88: what do you mean with "whether to run your effects"? Do you mean that it will decide to run the effects or not? |
| 17:51:48 | <tomsmeding> | also, you're applying a function to the _contents_ of the box |
| 17:51:52 | × | defanor quits (~defanor@tart.uberspace.net) (Quit: .) |
| 17:52:01 | <tomsmeding> | which, when reinterpreted back into haskell, is fmap |
| 17:52:18 | → | Pixi` joins (~Pixi@user/pixi) |
| 17:52:21 | <tomsmeding> | (<*>) allows the function to itself be computed with an effectful computation |
| 17:52:27 | <ph88> | tomsmeding, if your `f a` type really has an `a` there on the value level and wants to give it to `f (a -> b)` |
| 17:52:37 | → | defanor joins (~defanor@tart.uberspace.net) |
| 17:52:51 | <tomsmeding> | but it might not, right? |
| 17:52:59 | <ph88> | yes might or might not |
| 17:53:36 | <tomsmeding> | when given a computation that returns an 'a', and a computation that returns an 'a -> b', if you're given no way to run those computations here and now, all you can do is return a _computation_ that returns a 'b' |
| 17:53:43 | <tomsmeding> | f a -> f (a -> b) -> f b |
| 17:54:06 | <tomsmeding> | that's flip (<*>) |
| 17:54:50 | × | defanor quits (~defanor@tart.uberspace.net) (Client Quit) |
| 17:55:05 | <dolio> | :t (<**>) |
| 17:55:06 | <lambdabot> | Applicative f => f a -> f (a -> b) -> f b |
| 17:55:06 | <tomsmeding> | in the case of (<*>), the computation returning the 'a -> b' will be run first -- for Applicatives where that makes a difference |
| 17:55:31 | <ph88> | usually i don't think in the terms of a delayed computation. But in terms of the normal case in which the Applicative keeps applying. Knowing in the back of my head that there is the exception case that it stopped earlier |
| 17:55:33 | <remexre> | if I want to install a Cabal 3 package to a DESTDIR, what's the right way to do that? The project doesn't have a Setup.hs, there's no cabal v2-copy, and cabal install doesn't seem to take a --destdir |
| 17:55:48 | × | Feuermagier quits (~Feuermagi@user/feuermagier) (Quit: Leaving) |
| 17:55:48 | → | defanor joins (~defanor@tart.uberspace.net) |
| 17:55:48 | × | Pixi quits (~Pixi@user/pixi) (Ping timeout: 272 seconds) |
| 17:56:03 | × | stites quits (~stites@2607:fb91:dc9:51d1:1285:280d:59e4:7da2) (Read error: Connection reset by peer) |
| 17:56:10 | <geekosaur> | cabal list-bin and copy it yourself, I think |
| 17:56:23 | <geekosaur> | but beware of required data files |
| 17:56:24 | → | stites joins (~stites@130.44.147.204) |
| 17:56:44 | <ph88> | tomsmeding, ye this sequencing you explained about Applicative having f (a -> b) run first where monad does it the other way around is also useful :) |
| 17:57:19 | <geekosaur> | conceivably cabal act-as-setup (which is iirc undocumented, but behaves like Setup.hs) is closer to what you want. since it'd undocumented I don't know if it does what you need though |
| 17:57:28 | <tomsmeding> | % (putStrLn "left" >> return 21) <**> (putStrLn "right" >> return (*2)) |
| 17:57:28 | <yahb2> | <interactive>:43:32: error: ; • Variable not in scope: (<**>) :: IO b0 -> IO (a0 -> a0) -> t ; • Perhaps you meant ‘<*>’ (imported from Prelude) |
| 17:57:33 | <tomsmeding> | % (putStrLn "left" >> return 21) Control.Applicative.<**> (putStrLn "right" >> return (*2)) |
| 17:57:33 | <yahb2> | left ; right ; 42 |
| 17:57:51 | <tomsmeding> | ph88: as pointed out by dolio, (<**>) does them in the (>>=) order :p |
| 17:58:53 | <remexre> | geekosaur: yeah, act-as-setup seems to be equivalent to just using the v1- commands? at least in terms of not finding my dependencies, hah |
| 17:58:58 | <remexre> | I'll use list-bin, thanks |
| 18:00:50 | <ph88> | tomsmeding, just the thing is when i go back to traverse (from earlier in the conversation). You don't pass in a `f (a -> b)` but a `a -> f b` so that the computation on the left-hand side must run first is more like an implementation detail at that point for me. With traverse the intuition is not the same when compared about Applicative standalone imo. I don't understand how you can keep those intuitions simultaniously in your head |
| 18:00:50 | <ph88> | and make sense of them. This is why i was so far not able to make a grasp on what traverse and applicative do combined |
| 18:01:18 | <tomsmeding> | I see |
| 18:01:34 | <tomsmeding> | traverse f l = sequenceA (fmap f l) |
| 18:01:47 | <tomsmeding> | if l :: [a], then fmap f l :: [f b] |
| 18:01:51 | <tomsmeding> | sorry for the f-punning |
| 18:02:23 | <tomsmeding> | that doesn't yet run any effects, it just maps over the list (in this case -- could be any Traversable, of course) |
| 18:02:32 | <tomsmeding> | 'sequenceA :: [f b] -> f [b]' is the thing that runs all the effects, and it does so using (<*>) |
| 18:03:07 | <tomsmeding> | the "left-hand side runs first" of (<*>) means that the effects in sequenceA are going to be performed left-to-right instead of in some other order |
| 18:04:26 | <tomsmeding> | of course, "left-to-right" makes perfect sense for lists, but does not necessarily make sense for other Traversable structures, but that's okay |
| 18:06:55 | <ph88> | tomsmeding, Where does sequenceA use <*> ? i don't see it in the source code |
| 18:07:04 | <ph88> | https://hackage.haskell.org/package/base-4.14.1.0/docs/src/Data.Traversable.html#sequenceA |
| 18:07:35 | <tomsmeding> | ph88: in the specific instances: https://hackage.haskell.org/package/base-4.17.0.0/docs/src/Data.Traversable.html#line-297 |
| 18:07:50 | <tomsmeding> | note that it's liftA2 here, but liftA2 itself is defined in terms of (<*>) |
| 18:08:21 | <tomsmeding> | sequenceA cannot be defined _in general_ using (<*>) in the class definition; if it could, every Applicative would be Traversable, and we wouldn't have the separate Traversable class |
| 18:08:37 | <tomsmeding> | er, that's not quite accurate |
| 18:08:38 | × | dcoutts quits (~duncan@cpc69402-oxfd27-2-0-cust903.4-3.cable.virginm.net) (Remote host closed the connection) |
| 18:08:49 | <tomsmeding> | if it could then every Foldable would be Traversable, I guess |
| 18:08:56 | → | dcoutts joins (~duncan@cpc69402-oxfd27-2-0-cust903.4-3.cable.virginm.net) |
| 18:09:01 | <tomsmeding> | not every container is Traversable :p |
| 18:09:05 | <ph88> | :D |
| 18:09:11 | <tomsmeding> | so the specific definition in terms of (<*>) must be container-specific |
| 18:09:56 | → | eggplantade joins (~Eggplanta@2600:1700:38c5:d800:f026:93e1:c9cc:1bf) |
| 18:14:40 | <ph88> | tomsmeding, `sequenceA cannot be defined _in general_ using (<*>)`. This is odd that traverse AND sequenceA demand an Applicative instance for `f`. Maybe small abstraction leak than demanding a typeclass when it it's not always needed ^^ |
| 18:15:16 | <tomsmeding> | ph88: what I meant is that the definition in terms of (<*>) depends on the container |
| 18:15:27 | <ph88> | oooh ok |
| 18:15:46 | <tomsmeding> | traverse = sequenceA . fmap; sequenceA = traverse id |
| 18:15:55 | <tomsmeding> | define one, get the other |
| 18:17:13 | <ph88> | feels like there are two intuitions to think about it, and also two functions that map to each other. Maybe i ought to draw up a matrix about it with some graphic arrows in between |
| 18:24:40 | <roboguy_> | ph88: I recommend looking at several specific Traversable instances. I usually find that to be the best way to learn about a type class |
| 18:24:47 | <ph88> | is there a function like mapAll :: (a -> Maybe b) -> f a -> Maybe (f b) where it only returns Just when all elements could be mapped ? |
| 18:25:00 | <ph88> | roboguy_, ye good advice |
| 18:26:05 | <tomsmeding> | ph88: yes, that's traverse |
| 18:26:21 | <tomsmeding> | that's the whole reason Traversable was brought up :p |
| 18:26:42 | <tomsmeding> | Maybe is the Applicative, f is the Traversable in your mapAll |
| 18:27:14 | <ph88> | tomsmeding, oh sorry i mean another question mapAny :: (a -> Maybe b) -> f a -> Maybe (f b) when it only returns when any of the elements have been mapped (if they could not be mapped then use the old element) |
| 18:27:20 | <geekosaur> | and this should be obvious from the result type because it doesn't allow for Nothing in the middle, only as the outer type, so a middle Nothing has to make the whole thing produce Nothing |
| 18:27:57 | <roboguy_> | :t traverse @_ @Maybe |
| 18:27:59 | <lambdabot> | error: |
| 18:27:59 | <lambdabot> | Pattern syntax in expression context: traverse@_ |
| 18:27:59 | <lambdabot> | Did you mean to enable TypeApplications? |
| 18:28:04 | <geekosaur> | use yahb2 |
| 18:28:05 | <tomsmeding> | ph88: it cannot return the old element if mapping failed because b is not a |
| 18:28:13 | <tomsmeding> | % :set -XTypeApplications |
| 18:28:13 | <yahb2> | <no output> |
| 18:28:23 | <tomsmeding> | % :t traverse @_ @Maybe |
| 18:28:23 | <yahb2> | traverse @_ @Maybe ; :: (Traversable w, Applicative Maybe) => ; (a -> Maybe b) -> w a -> Maybe (w b) |
| 18:28:24 | × | __monty__ quits (~toonn@user/toonn) (Quit: leaving) |
| 18:28:24 | <roboguy_> | geekosaur: ah, thanks. It's been a long time, ha! |
| 18:28:28 | <ph88> | tomsmeding, good point what about mapAny :: (a -> Maybe a) -> f a -> Maybe (f a) ? |
| 18:29:40 | <tomsmeding> | mapAny f l = traverse (\x -> f x <|> Just x) l |
| 18:30:21 | <tomsmeding> | where 'f x <|> Just x' is also just 'case f x of { Just y -> Just y ; Nothing -> Just x }' |
| 18:30:27 | <tomsmeding> | I guess one could generalise: |
| 18:30:31 | <tomsmeding> | :t traverse (\x - |
| 18:30:32 | <lambdabot> | error: parse error on input ‘-’ |
| 18:30:39 | <tomsmeding> | :t \f l -> traverse (\x -> f x <|> pure x) l |
| 18:30:41 | <lambdabot> | (Traversable t, Alternative f) => (b -> f b) -> t b -> f (t b) |
| 18:30:55 | → | euleritian joins (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) |
| 18:32:08 | × | hugo quits (znc@verdigris.lysator.liu.se) (Ping timeout: 255 seconds) |
| 18:32:17 | <[Leary]> | :t fmap . (fromMaybe <*>) |
| 18:32:17 | <lambdabot> | Functor f => (a -> Maybe a) -> f a -> f a |
| 18:32:39 | <tomsmeding> | oh fair no more need to wrap for Maybe |
| 18:33:12 | <tomsmeding> | @unpl fmap . (fromMaybe <*>) |
| 18:33:13 | <lambdabot> | (\ x -> fmap (fromMaybe <*> x)) |
| 18:33:15 | <tomsmeding> | thanks |
| 18:33:48 | <tomsmeding> | \f -> fmap (\x -> fromMaybe x (f x)) |
| 18:34:05 | <tomsmeding> | [Leary]: introducing the function applicative is not helpful here :p |
| 18:34:19 | <ph88> | how do i run code here other than :f ? |
| 18:34:27 | <ph88> | :t i mean |
| 18:34:29 | <lambdabot> | error: Variable not in scope: mean |
| 18:34:31 | <tomsmeding> | % 1 + 2 |
| 18:34:31 | <yahb2> | 3 |
| 18:34:35 | <tomsmeding> | > 1 + 2 |
| 18:34:36 | <lambdabot> | 3 |
| 18:35:02 | <ph88> | let mapAny f l = traverse (\x -> f x <|> Just x) l in mapAny (\_ -> Nothing) [1,2,3] |
| 18:35:05 | <ph88> | % let mapAny f l = traverse (\x -> f x <|> Just x) l in mapAny (\_ -> Nothing) [1,2,3] |
| 18:35:05 | <yahb2> | <interactive>:55:38: error: ; • Variable not in scope: (<|>) :: t -> Maybe a -> f1 b1 ; • Perhaps you meant one of these: ; ‘<*>’ (imported from Prelude), ‘<>’ (imported from Prelud... |
| 18:35:17 | <tomsmeding> | % import Control.Applicative |
| 18:35:17 | <yahb2> | <no output> |
| 18:35:24 | <ph88> | % let mapAny f l = traverse (\x -> f x <|> Just x) l in mapAny (\_ -> Nothing) [1,2,3] |
| 18:35:24 | <yahb2> | Just [1,2,3] |
| 18:35:42 | <tomsmeding> | % let mapAny f = fmap (\x -> f x <|> pure x) in mapAny (\_ -> Nothing) [1,2,3] |
| 18:35:42 | <yahb2> | [Just 1,Just 2,Just 3] |
| 18:35:45 | <tomsmeding> | oh |
| 18:35:56 | <tomsmeding> | % let mapAny f = fmap (\x -> fromMaybe x (f x)) in mapAny (\_ -> Nothing) [1,2,3] |
| 18:35:56 | <yahb2> | <interactive>:63:28: error: ; Variable not in scope: fromMaybe :: t -> t1 -> b1 |
| 18:35:56 | <ph88> | well nothing has been mapped so it should output Nothing right ? |
| 18:36:00 | <tomsmeding> | % import Data.Maybe |
| 18:36:00 | <yahb2> | <no output> |
| 18:36:03 | <tomsmeding> | % let mapAny f = fmap (\x -> fromMaybe x (f x)) in mapAny (\_ -> Nothing) [1,2,3] |
| 18:36:03 | <yahb2> | [1,2,3] |
| 18:36:06 | <tomsmeding> | there we go |
| 18:36:21 | <tomsmeding> | _oh_ |
| 18:36:28 | <tomsmeding> | ph88: that be a weird function you want |
| 18:36:47 | <ph88> | ok no problem, i can write it. Just wondering if there was something out of the box |
| 18:36:51 | <geekosaur> | any vs. all doesn't seem that weird |
| 18:37:03 | <ph88> | like for UI updates you want to show the user if anything has changed sometimes |
| 18:37:26 | <roboguy_> | tomsmeding: you want traverse, not fmap |
| 18:38:45 | <tomsmeding> | % let mapAny f l = if any isJust (fmap f l) then Just (fmap (\x -> fromMaybe f (f x)) l) else Nothing in (mapAny (\_ -> Nothing) [1,2,3] , mapAny (\x -> if x==2 then Just 42 else Nothing) [1,2,3]) |
| 18:38:45 | <yahb2> | <interactive>:71:79: error: ; • Couldn't match type ‘a5’ with ‘a4 -> Maybe a5’ ; Expected: Maybe (a4 -> Maybe a5) ; Actual: Maybe a5 ; ‘a5’ is a rigid type variable bound by... |
| 18:38:49 | <tomsmeding> | crap |
| 18:40:00 | <tomsmeding> | % let mapAny f l = if any isJust (fmap f l) then Just (fmap (\x -> fromMaybe x (f x)) l) else Nothing in (mapAny (\_ -> Nothing) [1,2,3] , mapAny (\x -> if x==2 then Just 42 else Nothing) [1,2,3]) |
| 18:40:00 | <yahb2> | (Nothing,Just [1,42,3]) |
| 18:40:02 | <tomsmeding> | single-char tpo |
| 18:40:03 | <tomsmeding> | *typo |
| 18:40:17 | <tomsmeding> | and yes, this maps twice |
| 18:41:52 | → | hugo joins (znc@verdigris.lysator.liu.se) |
| 18:42:16 | <ph88> | Maybe better to use fold with a helper variable to track whether something was replaced |
| 18:43:44 | <ph88> | tomsmeding, thanks for the discussion i will save it in my notes |
| 18:44:13 | <[Leary]> | ph88: It so happens I wrote something for this kind of change-handling logic a while back. It's somewhat speculative, but could be helpful: https://gist.github.com/LSLeary/eb5e52827249bac5139213ff6ef8d874 |
| 18:44:32 | <tomsmeding> | % let mapAny f l = let mapped = fmap (\x -> (x, f x)) l in if any (isJust . snd) mapped then Just (fmap (uncurry fromMaybe) mapped) else Nothing in (mapAny (\_ -> Nothing) [1,2,3] , mapAny (\x -> if x==2 then Just 42 else Nothing) [1,2,3]) |
| 18:44:32 | <yahb2> | (Nothing,Just [1,42,3]) |
| 18:45:36 | <ph88> | [Leary], where/how did you use it ? |
| 18:46:31 | × | cpressey quits (~cpressey@host-92-10-151-176.as13285.net) (Quit: Ping timeout (120 seconds)) |
| 18:46:39 | <[Leary]> | It was part of a sketch for streamlining a bunch of xmonad layout update code. That streamlining hasn't happened at this point in time, hence speculative. |
| 18:47:32 | <[Leary]> | Anyway, `changes` there is basically what you want. |
| 18:47:53 | <tomsmeding> | % let mapAny f l = let (Any changed, res) = traverse (\x -> case f x of { Just y -> (Any True, y) ; Nothing -> (Any False, x) }) l in if changed then Just res else Nothing in (mapAny (\_ -> Nothing) [1,2,3] , mapAny (\x -> if x==2 then Just 42 else Nothing) [1,2,3]) |
| 18:47:53 | <yahb2> | (Nothing,Just [1,42,3]) |
| 18:48:19 | <tomsmeding> | this is the nicest one, I think |
| 18:48:34 | → | wroathe joins (~wroathe@50.205.197.50) |
| 18:48:34 | × | wroathe quits (~wroathe@50.205.197.50) (Changing host) |
| 18:48:34 | → | wroathe joins (~wroathe@user/wroathe) |
| 18:49:37 | <tomsmeding> | the "effect" of this traverse is Writer, and the thing it's writing is a boolean that gets combined using (||), because that's the Monoid instance of Any |
| 18:51:26 | <monochrom> | I am low-tech once again and I would start with catMaybes. |
| 18:53:42 | <tomsmeding> | monochrom: they wanted the successful values replaced if any were successful; with catMaybes you forgot where they were |
| 18:55:07 | <ph88> | i guess you could compare length of input and output array with catMaybes |
| 18:55:19 | <ph88> | hmm no that doesn't work |
| 18:55:21 | <monochrom> | No please don't compare lengths. |
| 18:56:28 | <ph88> | :D |
| 18:57:02 | <roboguy_> | hmm, what should using mapAny over an empty list give back? Nothing or Just []? |
| 18:58:25 | <monochrom> | Which one gives more identity laws? :) |
| 18:59:07 | → | cpressey joins (~cpressey@host-92-10-151-176.as13285.net) |
| 18:59:51 | <monochrom> | An example of a candidate identity law: mapAny f (xs <> ys) = mapAny f xs <> mapAny f ys |
| 19:00:29 | <monochrom> | But it is just a candidate because I am not sure whether 1. it is desirable, 2. I formulated it right |
| 19:00:39 | <roboguy_> | I'm thinking this: if it never gives back Just [], then why not just give back an `[a]` instead of a `Maybe [a]`? |
| 19:00:54 | × | hugo quits (znc@verdigris.lysator.liu.se) (Ping timeout: 245 seconds) |
| 19:00:56 | <monochrom> | But in general you think in terms of "does it have nice laws?" not "does it feel good philosophically". |
| 19:02:54 | <monochrom> | (This is why "product [] = 0", "or [] = True" make many people feel good philosophically but are summarily rejected by rational people because they break, for example, product xs * product ys = product (xs ++ ys)) |
| 19:03:43 | → | hugo joins (znc@verdigris.lysator.liu.se) |
| 19:04:33 | <monochrom> | Err I guess I wrote homorphism/distributive laws, but set xs = [] to expose the connection with identity laws. |
| 19:04:50 | → | privacy joins (~privacy@user/privacy) |
| 19:07:37 | <roboguy_> | monochrom: I was mainly asking that to challenge the original question (at least, if it *is* true that it never gives back Just []). Better to express that in the types and make the result type be [a], if that is the case. After all the type "Maybe [a] but we also know it's never Just []" is really the same as [a] |
| 19:07:41 | × | falafel quits (~falafel@62.175.113.194.dyn.user.ono.com) (Ping timeout: 255 seconds) |
| 19:08:25 | <roboguy_> | if it *needs* to be Maybe [a], then we could convert it in a separate step |
| 19:08:58 | <monochrom> | Yeah, most often (Any, [a]) is more desirable for this. |
| 19:09:25 | tomsmeding | 's last version computes an (Any, [a]) and then converts that into a Maybe :p |
| 19:09:36 | <[Leary]> | My gist does the same. |
| 19:10:42 | → | CiaoSen joins (~Jura@2a05:5800:298:ba00:664b:f0ff:fe37:9ef) |
| 19:10:46 | <monochrom> | Many decades ago I wrote an expression-simplifier library. To date I am still debating with myself whether "Expr -> Maybe Expr" or "Expr -> (ChangedOrNot, Expr)" works better. |
| 19:11:11 | <monochrom> | They are both annoying but in opposite ways. |
| 19:11:33 | <monochrom> | You know what people say about "half-empty half-full glass of water" right? |
| 19:11:50 | <monochrom> | I say: half of it is empty, the other half is the wrong drink. :( :>) |
| 19:11:57 | <monochrom> | err, :( >:) |
| 19:11:59 | <darkling> | The glass is twice as large as it needs to be. :) |
| 19:12:18 | <monochrom> | Half of my emoticons are unhappy, and the other half are typos. |
| 19:12:51 | × | billchenchina quits (~billchenc@103.152.35.21) (Remote host closed the connection) |
| 19:15:23 | → | hyiltiz joins (~hyiltiz@2603-8080-1f00-082f-8cdd-ec73-edb7-293e.res6.spectrum.com) |
| 19:17:04 | <roboguy_> | Hah, I also wrote something like that for a term rewriting thing. And I also remember being annoyed |
| 19:21:07 | tomsmeding | likes :>) more |
| 19:21:39 | × | azimut quits (~azimut@gateway/tor-sasl/azimut) (Ping timeout: 252 seconds) |
| 19:24:25 | → | azimut joins (~azimut@gateway/tor-sasl/azimut) |
| 19:24:43 | × | cpressey quits (~cpressey@host-92-10-151-176.as13285.net) (Ping timeout: 245 seconds) |
| 19:25:09 | → | cpressey joins (~cpressey@host-92-10-151-176.as13285.net) |
| 19:25:23 | → | falafel joins (~falafel@62.175.113.194.dyn.user.ono.com) |
| 19:27:40 | → | waleee joins (~waleee@2001:9b0:21c:4000:5bf9:6515:c030:57b7) |
| 19:28:16 | × | cpressey quits (~cpressey@host-92-10-151-176.as13285.net) (Client Quit) |
| 19:31:47 | × | myxos quits (~myxos@cpe-65-28-251-121.cinci.res.rr.com) (Remote host closed the connection) |
| 19:32:56 | → | myxos joins (~myxos@cpe-65-28-251-121.cinci.res.rr.com) |
| 19:36:30 | → | billchenchina joins (~billchenc@2a0c:b641:7a2:320:ee3e:47ca:6070:d71a) |
| 19:38:56 | → | cpressey joins (~cpressey@host-2-102-8-121.as13285.net) |
| 19:41:03 | × | ystael quits (~ystael@user/ystael) (Ping timeout: 258 seconds) |
| 19:44:30 | × | hugo quits (znc@verdigris.lysator.liu.se) (Ping timeout: 258 seconds) |
| 19:44:45 | × | azimut quits (~azimut@gateway/tor-sasl/azimut) (Ping timeout: 252 seconds) |
| 19:44:51 | × | cpressey quits (~cpressey@host-2-102-8-121.as13285.net) (Quit: Ping timeout (120 seconds)) |
| 19:45:58 | → | azimut joins (~azimut@gateway/tor-sasl/azimut) |
| 19:47:01 | × | eggplantade quits (~Eggplanta@2600:1700:38c5:d800:f026:93e1:c9cc:1bf) (Remote host closed the connection) |
| 19:48:08 | → | cpressey joins (~cpressey@host-2-102-8-121.as13285.net) |
| 19:48:58 | × | privacy quits (~privacy@user/privacy) (Remote host closed the connection) |
| 19:49:11 | → | Sgeo joins (~Sgeo@user/sgeo) |
| 19:52:01 | → | privacy joins (~privacy@user/privacy) |
| 19:58:27 | × | Jackneill quits (~Jackneill@20014C4E1E1DF200085D5E2535870783.dsl.pool.telekom.hu) (Ping timeout: 260 seconds) |
| 19:59:15 | → | eggplantade joins (~Eggplanta@2600:1700:38c5:d800:f026:93e1:c9cc:1bf) |
| 19:59:18 | × | waleee quits (~waleee@2001:9b0:21c:4000:5bf9:6515:c030:57b7) (Ping timeout: 272 seconds) |
| 20:00:07 | × | roboguy_ quits (~roboguy_@cpe-69-76-235-109.kc.res.rr.com) (Quit: Leaving...) |
| 20:00:54 | → | Opus joins (~lossy@user/opus) |
| 20:00:59 | → | waleee joins (~waleee@h-176-10-137-138.NA.cust.bahnhof.se) |
| 20:02:51 | × | idgaen quits (~idgaen@2a01:e0a:498:fd50:fcc6:bb5d:489a:ce8c) (Quit: WeeChat 4.0.5) |
| 20:02:52 | × | vglfr quits (~vglfr@88.155.180.78) (Read error: Connection reset by peer) |
| 20:07:38 | × | cpressey quits (~cpressey@host-2-102-8-121.as13285.net) (Ping timeout: 245 seconds) |
| 20:09:02 | → | ystael joins (~ystael@user/ystael) |
| 20:14:36 | × | falafel quits (~falafel@62.175.113.194.dyn.user.ono.com) (Ping timeout: 248 seconds) |
| 20:22:37 | → | pavonia joins (~user@user/siracusa) |
| 20:28:38 | → | nate2 joins (~nate@c-98-45-169-16.hsd1.ca.comcast.net) |
| 20:30:09 | → | hugo joins (znc@verdigris.lysator.liu.se) |
| 20:33:11 | × | nate2 quits (~nate@c-98-45-169-16.hsd1.ca.comcast.net) (Ping timeout: 255 seconds) |
| 20:35:57 | × | stites quits (~stites@130.44.147.204) (Read error: Connection reset by peer) |
| 20:37:34 | → | stites joins (~stites@130.44.147.204) |
| 20:46:31 | × | stites quits (~stites@130.44.147.204) (Ping timeout: 255 seconds) |
| 20:46:42 | × | eggplantade quits (~Eggplanta@2600:1700:38c5:d800:f026:93e1:c9cc:1bf) (Remote host closed the connection) |
| 20:47:40 | → | stites joins (~stites@2607:fb90:ad63:e013:9e88:5faf:89ef:30) |
| 20:59:57 | → | roboguy_ joins (~roboguy_@cpe-69-76-235-109.kc.res.rr.com) |
| 20:59:57 | → | machinedgod joins (~machinedg@d198-53-218-113.abhsia.telus.net) |
| 21:00:15 | → | Pickchea joins (~private@user/pickchea) |
| 21:01:15 | × | ChaiTRex quits (~ChaiTRex@user/chaitrex) (Quit: ChaiTRex) |
| 21:03:49 | → | ChaiTRex joins (~ChaiTRex@user/chaitrex) |
| 21:05:02 | × | _ht quits (~Thunderbi@28-52-174-82.ftth.glasoperator.nl) (Quit: _ht) |
| 21:13:23 | × | fendor quits (~fendor@2a02:8388:1640:be00:aab:1226:f274:5021) (Remote host closed the connection) |
| 21:19:24 | × | qqq quits (~qqq@92.43.167.61) (Quit: leaving) |
| 21:19:59 | × | wroathe quits (~wroathe@user/wroathe) (Ping timeout: 255 seconds) |
| 21:22:57 | → | eggplantade joins (~Eggplanta@2600:1700:38c5:d800:f026:93e1:c9cc:1bf) |
| 21:27:36 | × | eggplantade quits (~Eggplanta@2600:1700:38c5:d800:f026:93e1:c9cc:1bf) (Ping timeout: 260 seconds) |
| 21:28:02 | × | ChaiTRex quits (~ChaiTRex@user/chaitrex) (Quit: ChaiTRex) |
| 21:29:09 | → | eggplantade joins (~Eggplanta@2600:1700:38c5:d800:f026:93e1:c9cc:1bf) |
| 21:29:24 | → | ChaiTRex joins (~ChaiTRex@user/chaitrex) |
| 21:29:31 | → | bilegeek joins (~bilegeek@2600:1008:b029:9629:c264:f679:2b5f:3f7) |
| 21:41:21 | → | duncan joins (~duncan@nat-server.ehlab.uk) |
| 21:51:00 | → | coot joins (~coot@89-69-206-216.dynamic.chello.pl) |
| 22:01:17 | × | CiaoSen quits (~Jura@2a05:5800:298:ba00:664b:f0ff:fe37:9ef) (Ping timeout: 255 seconds) |
| 22:01:25 | × | takuan quits (~takuan@178-116-218-225.access.telenet.be) (Remote host closed the connection) |
| 22:04:02 | × | L29Ah quits (~L29Ah@wikipedia/L29Ah) (Ping timeout: 258 seconds) |
| 22:10:19 | → | harveypwca joins (~harveypwc@2601:246:c180:a570:41a8:a837:a4a7:bda1) |
| 22:11:37 | → | John_Ivan joins (~John_Ivan@user/john-ivan/x-1515935) |
| 22:11:55 | <John_Ivan> | hi, has anyone encountered this error where the import statements aren't being recognized? |
| 22:12:18 | <John_Ivan> | the error is "error: parse error on input ‘module’" which refers to the import calls right before the "module" keyword. |
| 22:12:22 | → | falafel joins (~falafel@62.175.113.194.dyn.user.ono.com) |
| 22:12:31 | <geekosaur> | imports must come after module |
| 22:12:39 | <John_Ivan> | always |
| 22:12:40 | <John_Ivan> | ? |
| 22:12:58 | × | jle` quits (~jle`@cpe-23-240-75-236.socal.res.rr.com) (Quit: WeeChat 3.3) |
| 22:13:02 | <geekosaur> | well, the main module doesn't need a module declaration. but if one exists it must come first |
| 22:13:17 | <John_Ivan> | alright, i'll try that. thank you. |
| 22:15:05 | × | euleritian quits (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) (Ping timeout: 240 seconds) |
| 22:18:11 | × | Pickchea quits (~private@user/pickchea) (Quit: Leaving) |
| 22:18:58 | × | coot quits (~coot@89-69-206-216.dynamic.chello.pl) (Quit: coot) |
| 22:22:26 | × | acidjnk quits (~acidjnk@p200300d6e7072f72f8dec80e9aca23dc.dip0.t-ipconnect.de) (Ping timeout: 255 seconds) |
| 22:24:21 | × | machinedgod quits (~machinedg@d198-53-218-113.abhsia.telus.net) (Ping timeout: 258 seconds) |
| 22:27:09 | × | stites quits (~stites@2607:fb90:ad63:e013:9e88:5faf:89ef:30) (Read error: Connection reset by peer) |
| 22:27:39 | → | stites joins (~stites@130.44.147.204) |
| 22:41:05 | × | hyiltiz quits (~hyiltiz@2603-8080-1f00-082f-8cdd-ec73-edb7-293e.res6.spectrum.com) (Remote host closed the connection) |
| 22:45:53 | × | billchenchina quits (~billchenc@2a0c:b641:7a2:320:ee3e:47ca:6070:d71a) (Remote host closed the connection) |
| 22:46:31 | × | ddellacosta quits (~ddellacos@ool-44c738de.dyn.optonline.net) (Ping timeout: 255 seconds) |
| 22:47:28 | × | flukiluke quits (~m-7humut@2603:c023:c000:6c7e:8945:ad24:9113:a962) (Remote host closed the connection) |
| 22:48:45 | → | flukiluke joins (~m-7humut@2603:c023:c000:6c7e:8945:ad24:9113:a962) |
| 22:55:41 | × | [itchyjunk] quits (~itchyjunk@user/itchyjunk/x-7353470) (Ping timeout: 260 seconds) |
| 23:00:50 | × | califax quits (~califax@user/califx) (Remote host closed the connection) |
| 23:01:05 | × | hugo quits (znc@verdigris.lysator.liu.se) (Ping timeout: 240 seconds) |
| 23:01:17 | → | zer0bitz_ joins (~zer0bitz@user/zer0bitz) |
| 23:01:27 | → | [itchyjunk] joins (~itchyjunk@user/itchyjunk/x-7353470) |
| 23:01:55 | → | califax joins (~califax@user/califx) |
| 23:03:19 | × | aliosablack quits (~chomwitt@2a02:587:7a24:b000:1ac0:4dff:fedb:a3f1) (Ping timeout: 264 seconds) |
| 23:04:36 | × | zer0bitz quits (~zer0bitz@user/zer0bitz) (Ping timeout: 258 seconds) |
| 23:16:33 | → | hugo joins (znc@verdigris.lysator.liu.se) |
| 23:17:16 | × | cuiltb^ quits (~cd@76.145.193.217) (Ping timeout: 260 seconds) |
| 23:19:14 | × | waleee quits (~waleee@h-176-10-137-138.NA.cust.bahnhof.se) (Ping timeout: 255 seconds) |
| 23:19:38 | → | waleee joins (~waleee@h-176-10-137-138.NA.cust.bahnhof.se) |
| 23:28:46 | × | bilegeek quits (~bilegeek@2600:1008:b029:9629:c264:f679:2b5f:3f7) (Quit: Leaving) |
| 23:29:03 | × | khumba quits (~khumba@user/khumba) () |
| 23:29:41 | → | wroathe joins (~wroathe@207-153-38-140.fttp.usinternet.com) |
| 23:29:41 | × | wroathe quits (~wroathe@207-153-38-140.fttp.usinternet.com) (Changing host) |
| 23:29:41 | → | wroathe joins (~wroathe@user/wroathe) |
| 23:30:34 | → | juri_ joins (~juri@84-19-175-187.pool.ovpn.com) |
| 23:32:31 | × | falafel quits (~falafel@62.175.113.194.dyn.user.ono.com) (Ping timeout: 260 seconds) |
| 23:32:42 | → | L29Ah joins (~L29Ah@wikipedia/L29Ah) |
| 23:36:48 | → | falafel joins (~falafel@62.175.113.194.dyn.user.ono.com) |
| 23:37:11 | × | waleee quits (~waleee@h-176-10-137-138.NA.cust.bahnhof.se) (Ping timeout: 260 seconds) |
| 23:40:03 | × | gmg quits (~user@user/gehmehgeh) (Quit: Leaving) |
| 23:40:21 | → | zmt00 joins (~zmt00@user/zmt00) |
| 23:40:47 | <ph88> | for debugging purposes which function can i use to fully/deep evaluate a list before i pass it on ? |
| 23:41:08 | <geekosaur> | rnf from the deepseq package? |
| 23:41:45 | <monochrom> | That is a very unusual debugging method. |
| 23:43:28 | <ph88> | thanks geekosaur |
All times are in UTC on 2023-10-07.