Logs on 2023-10-11 (liberachat/#haskell)
| 00:01:43 | → | bitdex joins (~bitdex@gateway/tor-sasl/bitdex) |
| 00:20:26 | × | machinedgod quits (~machinedg@d198-53-218-113.abhsia.telus.net) (Ping timeout: 255 seconds) |
| 00:31:48 | → | Sciencentistguy6 joins (~sciencent@hacksoc/ordinary-member) |
| 00:33:35 | × | Sciencentistguy quits (~sciencent@hacksoc/ordinary-member) (Ping timeout: 240 seconds) |
| 00:33:35 | Sciencentistguy6 | is now known as Sciencentistguy |
| 00:39:08 | × | TonyStone quits (~TonyStone@cpe-74-76-57-186.nycap.res.rr.com) (Remote host closed the connection) |
| 00:51:21 | → | wroathe joins (~wroathe@207-153-38-140.fttp.usinternet.com) |
| 00:51:21 | × | wroathe quits (~wroathe@207-153-38-140.fttp.usinternet.com) (Changing host) |
| 00:51:21 | → | wroathe joins (~wroathe@user/wroathe) |
| 00:51:35 | × | Lord_of_Life quits (~Lord@user/lord-of-life/x-2819915) (Ping timeout: 240 seconds) |
| 00:52:39 | → | Lord_of_Life joins (~Lord@user/lord-of-life/x-2819915) |
| 00:55:27 | × | lg188 quits (~lg188@82.18.98.230) (Ping timeout: 240 seconds) |
| 00:55:58 | → | lg188 joins (~lg188@82.18.98.230) |
| 00:56:20 | × | Tuplanolla quits (~Tuplanoll@91-159-68-236.elisa-laajakaista.fi) (Ping timeout: 255 seconds) |
| 00:57:10 | → | machinedgod joins (~machinedg@d198-53-218-113.abhsia.telus.net) |
| 01:01:08 | × | oo_miguel quits (~Thunderbi@78-11-179-96.static.ip.netia.com.pl) (Quit: oo_miguel) |
| 01:03:05 | → | Guest23 joins (~Guest23@149.19.169.127) |
| 01:03:09 | <Guest23> | Garfield's Foursome with Nermal, Edna Skilton, and Jean Pierre Manikariza |
| 01:03:09 | <Guest23> | Garfield, Nermal, Edna Skilton, and Jean Pierre Manikariza have an orgy over lasagna! https://justpaste.it/Garfield-Foursome-Nermal-Skilton |
| 01:03:46 | × | Guest23 quits (~Guest23@149.19.169.127) (K-Lined) |
| 01:19:42 | → | grnman_ joins (~michaelsc@c-66-176-3-51.hsd1.fl.comcast.net) |
| 01:22:40 | × | otto_s quits (~user@p5b044f94.dip0.t-ipconnect.de) (Ping timeout: 255 seconds) |
| 01:24:34 | → | otto_s joins (~user@p4ff272d5.dip0.t-ipconnect.de) |
| 01:27:25 | × | hiyori quits (~hiyori@user/hiyori) (Quit: Client closed) |
| 01:29:28 | → | hiyori joins (~hiyori@user/hiyori) |
| 01:29:56 | × | waleee quits (~waleee@2001:9b0:21c:e600:f2f3:f744:435d:137c) (Ping timeout: 246 seconds) |
| 01:30:05 | <EvanR> | I've heard that unsafeInterleaveIO is not actually unsafe. In what sense is it not unsafe. Should it say unhaskellyInterleaveIO instead because evaluating the results causes side effects |
| 01:30:21 | → | waleee joins (~waleee@h-176-10-137-138.NA.cust.bahnhof.se) |
| 01:31:39 | <geekosaur> | it's unsafe because I/O actions are triggered in apparently pure code. the Haskell report actually mitigates this to some extent by requiring silent failure in cases where this would be revealed (e.g. exceptions), but GHC's RTS throws them instead |
| 01:33:50 | → | j1grosuc joins (~j1grosuc@190.123.12.128) |
| 01:34:02 | <EvanR> | not throwing exceptions is safer?? |
| 01:34:07 | × | sabino quits (~sabino@user/sabino) (Quit: Lambda _ -> x) |
| 01:34:21 | <geekosaur> | from a purity standpoint, yes |
| 01:34:26 | × | j1grosuc quits (~j1grosuc@190.123.12.128) (K-Lined) |
| 01:34:43 | <geekosaur> | no unexpected bottoms |
| 01:35:57 | <geekosaur> | you lose the ability to reason about code when an invisible I/O action can inject unexpected bottoms |
| 01:35:59 | <EvanR> | ok the "as long as the program doesn't crash" anti-erlang philosophy |
| 01:37:56 | <EvanR> | well yeah this whole narrative seems paint unsafeInterleaveIO as pretty bad either way |
| 01:38:30 | <EvanR> | but somehow I recall it being considered not as bad as unsafePerformIO |
| 01:39:24 | <geekosaur> | I've seen both takes |
| 01:40:39 | <geekosaur> | I think it's still out of sequence with other I/O actions, but at least hypothetically can't interfere with or be interfered with by them (in particular the RTS is supposed to "lock" any resources that are under control of unsafeInterleaveIO) |
| 01:41:49 | <EvanR> | how does that work. getContents does the half closing of the handle, but in general? |
| 01:42:02 | <geekosaur> | getContents is unsafeInterleaveIO |
| 01:42:07 | <EvanR> | yeah |
| 01:42:51 | <geekosaur> | and that's what does the half closing. my read of the Report is that it's supposed to be impossible to reopen a file for which a half-closed handle exists |
| 01:43:04 | <geekosaur> | not merely impossible to touch that handle |
| 01:43:13 | <EvanR> | in general how does it know what resources are involved in your mad science unsafeInterleaveIO |
| 01:43:19 | <EvanR> | GC reachable? |
| 01:45:13 | <geekosaur> | actually you're expected to tell it yourself, as with hGetContents (https://downloads.haskell.org/ghc/9.2.5/docs/html/libraries/base-4.16.4.0/src/GHC.IO.Handle.Text.html#hGetContents) |
| 01:45:19 | × | FinnElija quits (~finn_elij@user/finn-elija/x-0085643) (Remote host closed the connection) |
| 01:45:27 | <geekosaur> | it can't be automatic because, as you point out, how can it know? |
| 01:45:48 | → | FinnElija joins (~finn_elij@user/finn-elija/x-0085643) |
| 01:47:23 | <geekosaur> | so in the general case you must know how to tell the RTS that some resources can no longer be touched. this is a problem with unsafeInterleaveIO because there are no documented ways to do this in the Report and the only documentation for GHC is in GHC.IO.Handle iirc |
| 01:47:50 | <EvanR> | interesting |
| 01:47:58 | <geekosaur> | and that might not be enough to deal with, say, a database connection |
| 01:49:36 | × | hiyori quits (~hiyori@user/hiyori) (Quit: Client closed) |
| 01:52:24 | → | _xor8 joins (~xor@ip-50-5-233-250.dynamic.fuse.net) |
| 01:54:19 | × | _xor quits (~xor@ip-50-5-233-250.dynamic.fuse.net) (Ping timeout: 255 seconds) |
| 01:54:19 | _xor8 | is now known as _xor |
| 02:08:26 | × | machinedgod quits (~machinedg@d198-53-218-113.abhsia.telus.net) (Ping timeout: 255 seconds) |
| 02:13:07 | × | xff0x quits (~xff0x@2405:6580:b080:900:f7aa:8fa9:8388:1900) (Ping timeout: 260 seconds) |
| 02:13:56 | × | eggplantade quits (~Eggplanta@2600:1700:38c5:d800:8c8d:37ea:f5b2:d34) (Remote host closed the connection) |
| 02:14:10 | → | eggplantade joins (~Eggplanta@2600:1700:38c5:d800:8c8d:37ea:f5b2:d34) |
| 02:17:06 | × | [itchyjunk] quits (~itchyjunk@user/itchyjunk/x-7353470) (Read error: Connection reset by peer) |
| 02:18:06 | × | jinsun quits (~jinsun@user/jinsun) (Read error: Connection reset by peer) |
| 02:21:43 | × | thegeekinside quits (~thegeekin@189.217.90.224) (Remote host closed the connection) |
| 02:28:34 | → | thegeekinside joins (~thegeekin@189.217.90.224) |
| 02:37:00 | × | Sanguine quits (~Sanguine@bcdcac82.skybroadband.com) (Ping timeout: 248 seconds) |
| 02:39:31 | × | grnman_ quits (~michaelsc@c-66-176-3-51.hsd1.fl.comcast.net) (Ping timeout: 252 seconds) |
| 02:40:31 | × | waleee quits (~waleee@h-176-10-137-138.NA.cust.bahnhof.se) (Ping timeout: 255 seconds) |
| 02:42:45 | × | FinnElija quits (~finn_elij@user/finn-elija/x-0085643) (Killed (NickServ (Forcing logout FinnElija -> finn_elija))) |
| 02:42:45 | → | finn_elija joins (~finn_elij@user/finn-elija/x-0085643) |
| 02:42:45 | finn_elija | is now known as FinnElija |
| 02:49:06 | → | arahael joins (~arahael@119-18-2-212.771202.syd.nbn.aussiebb.net) |
| 02:53:16 | × | td_ quits (~td@i53870936.versanet.de) (Ping timeout: 260 seconds) |
| 02:54:57 | → | nate2 joins (~nate@c-98-45-169-16.hsd1.ca.comcast.net) |
| 02:59:33 | → | sm joins (~sm@plaintextaccounting/sm) |
| 02:59:41 | → | td_ joins (~td@2001:9e8:19f7:c900:55c4:edef:d459:6ff7) |
| 02:59:52 | × | nate2 quits (~nate@c-98-45-169-16.hsd1.ca.comcast.net) (Ping timeout: 255 seconds) |
| 03:03:51 | × | sm quits (~sm@plaintextaccounting/sm) (Ping timeout: 240 seconds) |
| 03:04:08 | → | xff0x joins (~xff0x@125x103x176x34.ap125.ftth.ucom.ne.jp) |
| 03:07:49 | → | Sanguine joins (~Sanguine@176.254.244.83) |
| 03:11:31 | → | __monty__ joins (~toonn@user/toonn) |
| 03:15:48 | × | __monty__ quits (~toonn@user/toonn) (Ping timeout: 240 seconds) |
| 03:16:56 | → | aforemny_ joins (~aforemny@i59f516dd.versanet.de) |
| 03:18:09 | × | aforemny quits (~aforemny@i59F516D8.versanet.de) (Ping timeout: 258 seconds) |
| 03:20:57 | → | sm joins (~sm@plaintextaccounting/sm) |
| 03:25:01 | × | ss4 quits (~wootehfoo@user/wootehfoot) (Read error: Connection reset by peer) |
| 03:27:02 | × | wroathe quits (~wroathe@user/wroathe) (Ping timeout: 272 seconds) |
| 03:38:35 | × | sm quits (~sm@plaintextaccounting/sm) (Ping timeout: 240 seconds) |
| 03:40:05 | × | YuutaW quits (~YuutaW@mail.yuuta.moe) (Ping timeout: 240 seconds) |
| 03:40:07 | → | gehmehgeh joins (~user@user/gehmehgeh) |
| 03:41:29 | × | gmg quits (~user@user/gehmehgeh) (Ping timeout: 252 seconds) |
| 03:41:50 | → | YuutaW joins (~YuutaW@mail.yuuta.moe) |
| 03:42:56 | × | Unicorn_Princess quits (~Unicorn_P@user/Unicorn-Princess/x-3540542) (Remote host closed the connection) |
| 03:45:27 | × | thegeekinside quits (~thegeekin@189.217.90.224) (Read error: Connection reset by peer) |
| 03:49:12 | × | shapr quits (~user@2600:1700:c640:3100:4d15:1e8d:2f46:bef9) (Remote host closed the connection) |
| 03:49:25 | → | shapr joins (~user@2600:1700:c640:3100:5112:c2fa:e8e6:5128) |
| 04:07:53 | × | stiell quits (~stiell@gateway/tor-sasl/stiell) (Ping timeout: 252 seconds) |
| 04:09:27 | → | _ht joins (~Thunderbi@28-52-174-82.ftth.glasoperator.nl) |
| 04:13:01 | × | azimut quits (~azimut@gateway/tor-sasl/azimut) (Ping timeout: 252 seconds) |
| 04:13:23 | × | califax quits (~califax@user/califx) (Ping timeout: 252 seconds) |
| 04:13:24 | → | azimut joins (~azimut@gateway/tor-sasl/azimut) |
| 04:13:36 | → | califax_ joins (~califax@user/califx) |
| 04:14:51 | califax_ | is now known as califax |
| 04:20:05 | × | lisbeths quits (uid135845@id-135845.lymington.irccloud.com) (Quit: Connection closed for inactivity) |
| 04:20:11 | → | tzh_ joins (~tzh@c-71-193-181-0.hsd1.or.comcast.net) |
| 04:20:21 | → | vglfr joins (~vglfr@88.155.190.13) |
| 04:20:29 | → | stiell joins (~stiell@gateway/tor-sasl/stiell) |
| 04:20:48 | × | vglfr quits (~vglfr@88.155.190.13) (Remote host closed the connection) |
| 04:22:27 | → | vglfr joins (~vglfr@88.155.190.13) |
| 04:22:40 | × | tzh quits (~tzh@c-71-193-181-0.hsd1.or.comcast.net) (Ping timeout: 255 seconds) |
| 04:24:53 | × | vglfr quits (~vglfr@88.155.190.13) (Remote host closed the connection) |
| 04:25:37 | × | tzh_ quits (~tzh@c-71-193-181-0.hsd1.or.comcast.net) (Ping timeout: 258 seconds) |
| 04:25:42 | → | vglfr joins (~vglfr@88.155.190.13) |
| 04:25:51 | × | vglfr quits (~vglfr@88.155.190.13) (Remote host closed the connection) |
| 04:28:19 | → | vglfr joins (~vglfr@88.155.190.13) |
| 04:30:04 | × | vglfr quits (~vglfr@88.155.190.13) (Read error: Connection reset by peer) |
| 04:30:24 | → | vglfr joins (~vglfr@149.102.244.115) |
| 04:33:14 | × | vglfr quits (~vglfr@149.102.244.115) (Remote host closed the connection) |
| 04:34:09 | → | vglfr joins (~vglfr@88.155.190.13) |
| 04:34:17 | × | vglfr quits (~vglfr@88.155.190.13) (Read error: Connection reset by peer) |
| 04:34:37 | → | vglfr joins (vglfr@gateway/vpn/protonvpn/vglfr) |
| 04:44:18 | × | vglfr quits (vglfr@gateway/vpn/protonvpn/vglfr) (Ping timeout: 272 seconds) |
| 04:44:58 | → | vglfr joins (~vglfr@88.155.190.13) |
| 04:45:33 | → | danza joins (~francesco@151.35.192.230) |
| 04:47:34 | × | Pixi` quits (~Pixi@user/pixi) (Read error: Connection reset by peer) |
| 04:52:05 | × | danza quits (~francesco@151.35.192.230) (Ping timeout: 240 seconds) |
| 04:54:10 | × | phma quits (~phma@host-67-44-208-50.hnremote.net) (Read error: Connection reset by peer) |
| 04:58:18 | → | phma joins (~phma@2001:5b0:211c:9d28:dc53:577d:4a04:1d14) |
| 04:58:22 | → | tzh joins (~tzh@c-71-193-181-0.hsd1.or.comcast.net) |
| 04:58:35 | → | jinsun joins (~jinsun@user/jinsun) |
| 05:01:42 | → | __monty__ joins (~toonn@user/toonn) |
| 05:05:33 | → | Pixi joins (~Pixi@user/pixi) |
| 05:11:58 | → | michalz joins (~michalz@185.246.207.200) |
| 05:14:41 | × | phma quits (~phma@2001:5b0:211c:9d28:dc53:577d:4a04:1d14) (Read error: Connection reset by peer) |
| 05:14:55 | → | takuan joins (~takuan@178-116-218-225.access.telenet.be) |
| 05:16:46 | → | phma joins (~phma@host-67-44-208-58.hnremote.net) |
| 05:34:06 | → | Square3 joins (~Square4@user/square) |
| 05:34:46 | → | danse-nr3 joins (~francesco@151.35.192.230) |
| 05:35:23 | × | _ht quits (~Thunderbi@28-52-174-82.ftth.glasoperator.nl) (Quit: _ht) |
| 05:36:52 | × | Square2 quits (~Square4@user/square) (Ping timeout: 272 seconds) |
| 05:44:56 | → | idgaen joins (~idgaen@2a01:e0a:498:fd50:fcc6:bb5d:489a:ce8c) |
| 05:47:29 | → | misterfish joins (~misterfis@84-53-85-146.bbserv.nl) |
| 05:49:31 | × | vglfr quits (~vglfr@88.155.190.13) (Ping timeout: 264 seconds) |
| 05:50:48 | <danse-nr3> | good morning #haskell |
| 05:58:20 | → | acidjnk joins (~acidjnk@p200300d6e7072f8019cae40178150491.dip0.t-ipconnect.de) |
| 05:59:06 | → | vglfr joins (~vglfr@88.155.190.13) |
| 06:00:12 | → | Unicorn_Princess joins (~Unicorn_P@user/Unicorn-Princess/x-3540542) |
| 06:07:21 | <dminuoso> | Good morning. |
| 06:08:06 | × | hugo quits (znc@verdigris.lysator.liu.se) (Ping timeout: 260 seconds) |
| 06:11:36 | → | tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) |
| 06:13:03 | × | notzmv quits (~zmv@user/notzmv) (Ping timeout: 240 seconds) |
| 06:17:21 | → | sord937 joins (~sord937@gateway/tor-sasl/sord937) |
| 06:21:28 | × | bilegeek quits (~bilegeek@2600:1008:b004:d50e:d8be:4118:2b29:669c) (Quit: Leaving) |
| 06:22:53 | → | hugo joins (znc@verdigris.lysator.liu.se) |
| 06:29:16 | × | hugo quits (znc@verdigris.lysator.liu.se) (Ping timeout: 255 seconds) |
| 06:32:40 | → | Jesin joins (~Jesin@pool-72-83-12-199.washdc.fios.verizon.net) |
| 06:38:57 | → | danse-nr3_ joins (~francesco@151.35.192.230) |
| 06:41:27 | × | danse-nr3 quits (~francesco@151.35.192.230) (Ping timeout: 260 seconds) |
| 06:42:11 | → | danse-nr3 joins (~francesco@151.35.192.230) |
| 06:42:12 | → | CiaoSen joins (~Jura@2a05:5800:2c3:8c00:664b:f0ff:fe37:9ef) |
| 06:44:48 | × | Jesin quits (~Jesin@pool-72-83-12-199.washdc.fios.verizon.net) (Quit: Jesin) |
| 06:45:16 | × | danse-nr3_ quits (~francesco@151.35.192.230) (Quit: Leaving) |
| 06:50:26 | → | lortabac joins (~lortabac@2a01:e0a:541:b8f0:8b9c:51e3:d64a:72e4) |
| 06:56:28 | → | nate2 joins (~nate@c-98-45-169-16.hsd1.ca.comcast.net) |
| 07:01:03 | × | nate2 quits (~nate@c-98-45-169-16.hsd1.ca.comcast.net) (Ping timeout: 240 seconds) |
| 07:04:21 | × | danse-nr3 quits (~francesco@151.35.192.230) (Read error: Connection reset by peer) |
| 07:04:27 | → | danse-nr3_ joins (~francesco@151.35.217.158) |
| 07:09:47 | × | azimut quits (~azimut@gateway/tor-sasl/azimut) (Remote host closed the connection) |
| 07:10:09 | → | azimut joins (~azimut@gateway/tor-sasl/azimut) |
| 07:11:41 | → | cfricke joins (~cfricke@user/cfricke) |
| 07:14:55 | → | fendor joins (~fendor@2a02:8388:1640:be00:aab:1226:f274:5021) |
| 07:17:54 | → | hugo- joins (znc@verdigris.lysator.liu.se) |
| 07:20:31 | → | lisbeths joins (uid135845@id-135845.lymington.irccloud.com) |
| 07:34:09 | × | idgaen quits (~idgaen@2a01:e0a:498:fd50:fcc6:bb5d:489a:ce8c) (Quit: WeeChat 4.0.5) |
| 07:36:18 | × | zer0bitz quits (~zer0bitz@user/zer0bitz) (Read error: Connection reset by peer) |
| 07:36:20 | <Hecate> | morning morning |
| 07:37:21 | → | Pickchea joins (~private@user/pickchea) |
| 07:37:52 | <tomsmeding> | The haskell playground currently has so far carried compilers back to ghc 8.6.5. Just now I added 8.4.4 because I could. Should it go further back? Should we drop old compilers at some point? Or should the list ever keep getting longer? |
| 07:37:57 | <tomsmeding> | Opinion time! :D |
| 07:39:01 | <Hecate> | well, having these older versions are indeed nice because you get to compare the generated Core/STG/ASM outputs |
| 07:39:06 | <Hecate> | that is objectively useful |
| 07:39:41 | <Hecate> | now the "problem" (which is quite unavoidable) is that the packages that are exposed will certainly have opinions about which GHC versions they want to run on |
| 07:40:50 | × | tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…) |
| 07:41:06 | <tomsmeding> | In what sense? They can just select their preferred GHC version, right? |
| 07:41:07 | × | euleritian quits (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) (Ping timeout: 255 seconds) |
| 07:41:32 | <tomsmeding> | I have a wishlist of packages and provide, for each GHC version, all that will build |
| 07:41:35 | → | euleritian joins (~euleritia@dynamic-046-114-204-165.46.114.pool.telefonica.de) |
| 07:42:13 | <tomsmeding> | It's a bit imperfect because sometimes cabal's solver tends to select very old versions to make the plan work and I should probably avoid that with some well-chosen lower boubds |
| 07:42:42 | × | euleritian quits (~euleritia@dynamic-046-114-204-165.46.114.pool.telefonica.de) (Read error: Connection reset by peer) |
| 07:42:59 | → | euleritian joins (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) |
| 07:45:40 | aforemny_ | is now known as aforemny |
| 07:49:48 | × | shriekingnoise quits (~shrieking@186.137.175.87) (Ping timeout: 240 seconds) |
| 07:55:18 | → | tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) |
| 07:57:44 | × | euleritian quits (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) (Ping timeout: 246 seconds) |
| 07:58:37 | → | euleritian joins (~euleritia@dynamic-046-114-204-165.46.114.pool.telefonica.de) |
| 08:03:48 | × | Pickchea quits (~private@user/pickchea) (Quit: Leaving) |
| 08:10:07 | → | zer0bitz joins (~zer0bitz@user/zer0bitz) |
| 08:16:18 | <[exa]> | tomsmeding: opinion: I'm trying not to care about ghc version |
| 08:16:39 | <[exa]> | but still thanks for the great effort |
| 08:18:18 | × | euleritian quits (~euleritia@dynamic-046-114-204-165.46.114.pool.telefonica.de) (Ping timeout: 258 seconds) |
| 08:19:21 | × | dsrt^ quits (~cd@76.145.193.217) (Remote host closed the connection) |
| 08:19:39 | → | dsrt^ joins (~cd@76.145.193.217) |
| 08:20:05 | <tomsmeding> | <3 |
| 08:22:07 | → | notzmv joins (~zmv@user/notzmv) |
| 08:23:24 | → | mc47 joins (~mc47@xmonad/TheMC47) |
| 08:26:41 | × | eggplantade quits (~Eggplanta@2600:1700:38c5:d800:8c8d:37ea:f5b2:d34) (Remote host closed the connection) |
| 08:27:29 | → | tomih_ joins (tomith@85-156-187-17.elisa-laajakaista.fi) |
| 08:28:12 | × | danse-nr3_ quits (~francesco@151.35.217.158) (Ping timeout: 240 seconds) |
| 08:28:57 | × | bitdex quits (~bitdex@gateway/tor-sasl/bitdex) (Ping timeout: 252 seconds) |
| 08:30:03 | × | azimut quits (~azimut@gateway/tor-sasl/azimut) (Ping timeout: 252 seconds) |
| 08:30:07 | × | tomith quits (tomith@user/tomith) (Read error: Connection reset by peer) |
| 08:30:10 | tomih_ | is now known as tomith |
| 08:33:26 | → | cpressey joins (~cpressey@host-2-102-11-74.as13285.net) |
| 08:35:03 | → | Jackneill joins (~Jackneill@20014C4E1E021C00E4226B7959631CE0.dsl.pool.telekom.hu) |
| 08:35:24 | → | coot joins (~coot@89-69-206-216.dynamic.chello.pl) |
| 08:37:30 | → | chele joins (~chele@user/chele) |
| 08:38:42 | × | Square3 quits (~Square4@user/square) (Ping timeout: 260 seconds) |
| 08:38:43 | × | tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…) |
| 08:41:20 | <cpressey> | tomsmeding: I don't have enough context to give you an opinion, but as a data point, I regularly use a tool that only works with ghc 7.10. (I run it from a Docker container). |
| 08:43:47 | <tomsmeding> | heh |
| 08:44:19 | <tomsmeding> | cpressey: for my curiosity, in what way does it break if you run it with ghc 8.0? |
| 08:44:56 | <tomsmeding> | (ghc 7.10 doesn't install from ghcup -- something _segfaults_, of all things) |
| 08:45:20 | × | tzh quits (~tzh@c-71-193-181-0.hsd1.or.comcast.net) (Quit: zzz) |
| 08:46:44 | <cpressey> | tomsmeding: It's https://github.com/valderman/haste-compiler . As I understand it, it relies on ghc internals to do the compiling. ghc internals change (obvs), it was a thesis project of the author's and they have insufficient interest in it to update it. |
| 08:47:26 | <tomsmeding> | fair, I wasn't wondering why it wasn't updated -- these things happen. I was just wondering if it relied on GHC internals, and if it had any right to do so :p |
| 08:47:30 | <tomsmeding> | but it seems this clearly does |
| 08:48:42 | <tomsmeding> | I mean, GHCJS exists |
| 08:48:51 | <tomsmeding> | but "if it works, don't touch it" |
| 08:48:52 | <cpressey> | I could try switching to a different Haskell-to-JS compiler but all the ones I've seen seem immensely complicated to set up compared to haste. |
| 08:51:39 | × | econo_ quits (uid147250@id-147250.tinside.irccloud.com) (Quit: Connection closed for inactivity) |
| 08:57:35 | → | machinedgod joins (~machinedg@d198-53-218-113.abhsia.telus.net) |
| 08:58:17 | × | hugo- quits (znc@verdigris.lysator.liu.se) (Ping timeout: 255 seconds) |
| 08:58:55 | → | eggplantade joins (~Eggplanta@2600:1700:38c5:d800:8c8d:37ea:f5b2:d34) |
| 09:02:04 | → | danse-nr3_ joins (~francesco@151.35.217.158) |
| 09:02:41 | × | Sgeo quits (~Sgeo@user/sgeo) (Read error: Connection reset by peer) |
| 09:03:48 | <sshine> | have you considered ghc wasm backend? |
| 09:05:39 | → | tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) |
| 09:08:59 | → | simendsjo joins (~user@84.211.91.241) |
| 09:20:53 | <cpressey> | sshine: Not yet, and I wouldn't expect it to happen unless/until my perception of "messing with wasm" switches from it being a "dreadful thing" to it being a "fun thing". I don't have an ETA on that at present. |
| 09:24:14 | <ncf> | there's a js backend now |
| 09:24:31 | × | vglfr quits (~vglfr@88.155.190.13) (Read error: Connection reset by peer) |
| 09:25:24 | <arahael> | That js backend terrifies me. |
| 09:25:48 | <haskellbridge> | <sm> cpressey I like this metric, could apply to many things |
| 09:29:02 | → | hugo- joins (znc@verdigris.lysator.liu.se) |
| 09:36:52 | <sand-witch> | tomsmeding: Vlad also wants to implement T2T for both patterns and expressions at 9.10, so you would able to write "id t x = x :: t" (where "id :: forall a -> a -> a") and apply it as "id Int 5", without any "type" keywords |
| 09:40:23 | × | shapr quits (~user@2600:1700:c640:3100:5112:c2fa:e8e6:5128) (Remote host closed the connection) |
| 09:40:36 | → | shapr joins (~user@2600:1700:c640:3100:fb57:2f19:4620:f3bb) |
| 09:42:15 | × | hugo- quits (znc@verdigris.lysator.liu.se) (Ping timeout: 258 seconds) |
| 09:42:55 | × | xigua quits (~xigua@user/xigua) (Remote host closed the connection) |
| 09:43:29 | → | xigua joins (~xigua@user/xigua) |
| 09:43:54 | <albet70> | what is functor compose? |
| 09:44:34 | <albet70> | foldr (:) [] (Compose [Nothing, Just 3]) |
| 09:44:40 | <ncf> | like function composition, but for functors |
| 09:45:06 | <ncf> | :k Compose |
| 09:45:07 | <lambdabot> | error: |
| 09:45:07 | <lambdabot> | Not in scope: type constructor or class ‘Compose’ |
| 09:45:10 | → | hiyori joins (~hiyori@user/hiyori) |
| 09:46:17 | <albet70> | foldr (:) [] on this functor compose, why [3] is left? |
| 09:47:08 | <sshine> | sand-witch, is that types as values? |
| 09:48:00 | <ncf> | albet70: this appears to be using the (Foldable f, Foldable g) => Foldable (Compose f g) instance |
| 09:48:10 | <ncf> | :t foldr (:) [] |
| 09:48:11 | <lambdabot> | Foldable t => t a -> [a] |
| 09:49:00 | <ncf> | if you see [_, _] as a container with two holes, Nothing as a container with zero holes and Just _ as a container with one hole, then via the composite instance [Nothing, Just 3] contains just 3 |
| 09:52:04 | → | hugo- joins (znc@verdigris.lysator.liu.se) |
| 09:52:44 | <tomsmeding> | sand-witch: :D |
| 09:55:13 | <sand-witch> | sshine: nope, they would be erased on compile time |
| 09:57:24 | × | ft quits (~ft@p3e9bc680.dip0.t-ipconnect.de) (Quit: leaving) |
| 09:59:37 | <dminuoso> | In some sense `(Foldable f, Foldable g) => Foldable (Compose f g)` is just another way of expressing `Monad []` |
| 10:00:36 | <albet70> | this Compose reminds me 'maybe' somehow, and 'traverse' |
| 10:01:18 | <albet70> | maybe can turn Maybe monad to another monad |
| 10:01:24 | <dminuoso> | Or let me ponder about this. |
| 10:01:53 | <dminuoso> | Actually on second thought, those things are not equivalent. |
| 10:01:53 | <albet70> | but monad does not compose, this functor do compose |
| 10:02:01 | <dminuoso> | > join [[1,2], [3,4]] |
| 10:02:02 | <ncf> | (f a -> [a]) -> (g a -> [a]) -> (f (g a) -> [a]) does turn into join :: [[a]] -> [a] by yoneda, but you don't get return out of this |
| 10:02:02 | <lambdabot> | [1,2,3,4] |
| 10:02:08 | <dminuoso> | Or no, actually they are the same. |
| 10:02:14 | <dminuoso> | Nevermind, its a good statement. |
| 10:02:25 | <dminuoso> | albet70: Well monad is *about* composition. |
| 10:02:37 | <ncf> | so it's a way of expressing half of the [] monad :) |
| 10:02:45 | <dminuoso> | Its quite literally about being able to do `T :.: T ~> T` in a sensible way |
| 10:03:21 | <dminuoso> | Where :.: is just infix Compose |
| 10:05:44 | <albet70> | dminuoso , what's its name? natural transparent? |
| 10:05:58 | × | hiyori quits (~hiyori@user/hiyori) (Ping timeout: 245 seconds) |
| 10:06:59 | <dminuoso> | albet70: Its a natural transformation. But if we ignore this fancy sounding name `T :.: T ~> T` is just another way of expressing `T a :.: T a -> T a` |
| 10:07:40 | <dminuoso> | Which using Compose would just be written `(Compose T T) a -> T a`, which is isomorphic to just `T (T a) -> T a` |
| 10:07:43 | <dminuoso> | And indeed: |
| 10:07:46 | <dminuoso> | :t join |
| 10:07:47 | <lambdabot> | Monad m => m (m a) -> m a |
| 10:07:50 | <dminuoso> | :t join @[] |
| 10:07:51 | <lambdabot> | error: |
| 10:07:51 | <lambdabot> | Pattern syntax in expression context: join@[] |
| 10:07:51 | <lambdabot> | Did you mean to enable TypeApplications? |
| 10:08:01 | <dminuoso> | % set -XTypeApplications |
| 10:08:01 | <yahb2> | <interactive>:7:1: error: ; • Variable not in scope: set ; • Perhaps you meant ‘seq’ (imported from Prelude) ; ; <interactive>:7:6: error: ; Data constructor not in scope: XTypeApplica... |
| 10:08:06 | <dminuoso> | % :set -XTypeApplications |
| 10:08:06 | <yahb2> | <no output> |
| 10:08:14 | <dminuoso> | % :t join @[] |
| 10:08:14 | <yahb2> | <interactive>:1:1: error: Variable not in scope: join |
| 10:08:17 | <dminuoso> | Jeez. |
| 10:08:41 | <dminuoso> | % :t join @[] |
| 10:08:41 | <yahb2> | join @[] :: Monad [] => [[a]] -> [a] |
| 10:12:28 | × | __monty__ quits (~toonn@user/toonn) (Ping timeout: 248 seconds) |
| 10:14:53 | × | xff0x quits (~xff0x@125x103x176x34.ap125.ftth.ucom.ne.jp) (Ping timeout: 255 seconds) |
| 10:20:56 | → | __monty__ joins (~toonn@user/toonn) |
| 10:26:56 | × | __monty__ quits (~toonn@user/toonn) (Ping timeout: 272 seconds) |
| 10:40:49 | × | coot quits (~coot@89-69-206-216.dynamic.chello.pl) (Ping timeout: 255 seconds) |
| 10:41:45 | → | [itchyjunk] joins (~itchyjunk@user/itchyjunk/x-7353470) |
| 10:44:33 | × | pavonia quits (~user@user/siracusa) (Quit: Bye!) |
| 10:48:11 | × | hugo- quits (znc@verdigris.lysator.liu.se) (Ping timeout: 246 seconds) |
| 10:48:14 | × | smalltalkman quits (uid545680@id-545680.hampstead.irccloud.com) (Quit: Connection closed for inactivity) |
| 10:48:51 | → | hiyori joins (~hiyori@user/hiyori) |
| 10:48:51 | × | cpressey quits (~cpressey@host-2-102-11-74.as13285.net) (Quit: Client closed) |
| 10:54:30 | → | cpressey joins (~cpressey@host-2-102-11-74.as13285.net) |
| 10:55:32 | → | privacy joins (~privacy@user/privacy) |
| 10:57:59 | → | nate2 joins (~nate@c-98-45-169-16.hsd1.ca.comcast.net) |
| 11:03:16 | × | nate2 quits (~nate@c-98-45-169-16.hsd1.ca.comcast.net) (Ping timeout: 260 seconds) |
| 11:04:18 | → | danse-nr3__ joins (~francesco@151.37.199.183) |
| 11:04:29 | × | danse-nr3_ quits (~francesco@151.35.217.158) (Read error: Connection reset by peer) |
| 11:04:52 | × | Unicorn_Princess quits (~Unicorn_P@user/Unicorn-Princess/x-3540542) (Remote host closed the connection) |
| 11:06:19 | × | arahael quits (~arahael@119-18-2-212.771202.syd.nbn.aussiebb.net) (Ping timeout: 255 seconds) |
| 11:06:44 | → | xff0x joins (~xff0x@ai101218.d.east.v6connect.net) |
| 11:08:04 | → | euleritian joins (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) |
| 11:09:41 | × | CiaoSen quits (~Jura@2a05:5800:2c3:8c00:664b:f0ff:fe37:9ef) (Ping timeout: 260 seconds) |
| 11:11:12 | → | vglfr joins (~vglfr@88.155.190.13) |
| 11:11:57 | × | danse-nr3__ quits (~francesco@151.37.199.183) (Ping timeout: 258 seconds) |
| 11:14:15 | → | hugo- joins (znc@verdigris.lysator.liu.se) |
| 11:14:47 | × | tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…) |
| 11:15:47 | → | arahael joins (~arahael@119-18-2-212.771202.syd.nbn.aussiebb.net) |
| 11:17:08 | → | Cajun joins (~Cajun@user/cajun) |
| 11:17:17 | → | smalltalkman joins (uid545680@id-545680.hampstead.irccloud.com) |
| 11:18:35 | → | __monty__ joins (~toonn@user/toonn) |
| 11:20:23 | × | vglfr quits (~vglfr@88.155.190.13) (Ping timeout: 258 seconds) |
| 11:21:55 | × | gehmehgeh quits (~user@user/gehmehgeh) (Remote host closed the connection) |
| 11:22:42 | → | gehmehgeh joins (~user@user/gehmehgeh) |
| 11:24:34 | → | vglfr joins (~vglfr@88.155.190.13) |
| 11:25:54 | × | Luj quits (~Luj@2a01:e0a:5f9:9681:5880:c9ff:fe9f:3dfb) (Quit: The Lounge - https://thelounge.chat) |
| 11:27:48 | → | Luj joins (~Luj@2a01:e0a:5f9:9681:c367:ba44:42cf:91d7) |
| 11:29:33 | × | fendor quits (~fendor@2a02:8388:1640:be00:aab:1226:f274:5021) (Remote host closed the connection) |
| 11:30:09 | × | lisbeths quits (uid135845@id-135845.lymington.irccloud.com) (Quit: Connection closed for inactivity) |
| 11:32:41 | × | privacy quits (~privacy@user/privacy) (Quit: Leaving) |
| 11:40:42 | → | CiaoSen joins (~Jura@2a05:5800:2c3:8c00:664b:f0ff:fe37:9ef) |
| 11:47:56 | × | [itchyjunk] quits (~itchyjunk@user/itchyjunk/x-7353470) (Remote host closed the connection) |
| 11:52:11 | → | diamond joins (~user@89.223.35.3) |
| 12:05:14 | → | kuribas joins (~user@ip-188-118-57-242.reverse.destiny.be) |
| 12:07:04 | × | vglfr quits (~vglfr@88.155.190.13) (Ping timeout: 255 seconds) |
| 12:11:34 | × | Cajun quits (~Cajun@user/cajun) (Quit: Client closed) |
| 12:13:00 | × | cods quits (~fred@82-65-232-44.subs.proxad.net) (Ping timeout: 240 seconds) |
| 12:17:21 | → | vglfr joins (~vglfr@88.155.190.13) |
| 12:20:26 | → | cods joins (~fred@tuxee.net) |
| 12:34:27 | → | sm joins (~sm@plaintextaccounting/sm) |
| 12:36:26 | × | sm quits (~sm@plaintextaccounting/sm) (Client Quit) |
| 12:44:11 | hugo- | is now known as hug |
| 12:46:47 | → | wroathe joins (~wroathe@207-153-38-140.fttp.usinternet.com) |
| 12:46:47 | × | wroathe quits (~wroathe@207-153-38-140.fttp.usinternet.com) (Changing host) |
| 12:46:47 | → | wroathe joins (~wroathe@user/wroathe) |
| 12:57:48 | × | hug quits (znc@verdigris.lysator.liu.se) (Ping timeout: 248 seconds) |
| 12:58:15 | × | pounce quits (~pounce@user/cute/pounce) (Remote host closed the connection) |
| 12:58:33 | → | pounce joins (~pounce@user/cute/pounce) |
| 13:00:05 | × | lortabac quits (~lortabac@2a01:e0a:541:b8f0:8b9c:51e3:d64a:72e4) (Quit: WeeChat 2.8) |
| 13:01:49 | → | shriekingnoise joins (~shrieking@186.137.175.87) |
| 13:02:21 | × | YuutaW quits (~YuutaW@mail.yuuta.moe) (Ping timeout: 258 seconds) |
| 13:03:33 | → | YuutaW joins (~YuutaW@mail.yuuta.moe) |
| 13:03:35 | × | pounce quits (~pounce@user/cute/pounce) (Remote host closed the connection) |
| 13:03:52 | → | pounce joins (~pounce@user/cute/pounce) |
| 13:04:53 | → | billchenchina joins (~billchenc@2a0d:2580:ff0c:1:e3c9:c52b:a429:5bfe) |
| 13:05:57 | × | pounce quits (~pounce@user/cute/pounce) (Remote host closed the connection) |
| 13:12:15 | → | pounce joins (~pounce@user/cute/pounce) |
| 13:12:42 | → | hugo- joins (znc@verdigris.lysator.liu.se) |
| 13:13:05 | × | euleritian quits (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) (Ping timeout: 246 seconds) |
| 13:13:51 | → | euleritian joins (~euleritia@dynamic-046-114-206-159.46.114.pool.telefonica.de) |
| 13:17:51 | × | wroathe quits (~wroathe@user/wroathe) (Ping timeout: 240 seconds) |
| 13:19:11 | × | pounce quits (~pounce@user/cute/pounce) (Ping timeout: 260 seconds) |
| 13:20:11 | → | danse-nr3 joins (~francesco@151.37.199.183) |
| 13:21:40 | × | hiyori quits (~hiyori@user/hiyori) (Quit: Client closed) |
| 13:22:22 | → | fweht joins (uid404746@id-404746.lymington.irccloud.com) |
| 13:23:17 | × | euleritian quits (~euleritia@dynamic-046-114-206-159.46.114.pool.telefonica.de) (Read error: Connection reset by peer) |
| 13:23:36 | → | euleritian joins (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) |
| 13:27:05 | → | oo_miguel joins (~Thunderbi@78-11-179-96.static.ip.netia.com.pl) |
| 13:27:40 | × | euleritian quits (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) (Ping timeout: 248 seconds) |
| 13:28:00 | → | euleritian joins (~euleritia@dynamic-046-114-206-159.46.114.pool.telefonica.de) |
| 13:29:48 | × | YuutaW quits (~YuutaW@mail.yuuta.moe) (Ping timeout: 240 seconds) |
| 13:31:27 | × | lena64t quits (~lena64t@gateway/tor-sasl/hck) (Ping timeout: 252 seconds) |
| 13:32:04 | × | shapr quits (~user@2600:1700:c640:3100:fb57:2f19:4620:f3bb) (Remote host closed the connection) |
| 13:32:18 | → | shapr joins (~user@2600:1700:c640:3100:e8fe:9f19:d6ff:62f3) |
| 13:32:51 | → | YuutaW joins (~YuutaW@mail.yuuta.moe) |
| 13:35:06 | × | robobub quits (uid248673@id-248673.uxbridge.irccloud.com) (Quit: Connection closed for inactivity) |
| 13:35:21 | → | pounce joins (~pounce@user/cute/pounce) |
| 13:35:38 | → | lena64t joins (~lena64t@gateway/tor-sasl/hck) |
| 13:36:05 | × | pounce quits (~pounce@user/cute/pounce) (Remote host closed the connection) |
| 13:36:23 | × | euleritian quits (~euleritia@dynamic-046-114-206-159.46.114.pool.telefonica.de) (Read error: Connection reset by peer) |
| 13:36:41 | → | euleritian joins (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) |
| 13:36:54 | × | cpressey quits (~cpressey@host-2-102-11-74.as13285.net) (Quit: Client closed) |
| 13:37:10 | → | pounce joins (~pounce@user/cute/pounce) |
| 13:37:51 | × | notzmv quits (~zmv@user/notzmv) (Ping timeout: 260 seconds) |
| 13:46:57 | → | jespada joins (~jespada@cpc121308-nmal25-2-0-cust15.19-2.cable.virginm.net) |
| 13:48:28 | → | hiyori joins (~hiyori@user/hiyori) |
| 13:49:31 | × | arahael quits (~arahael@119-18-2-212.771202.syd.nbn.aussiebb.net) (Ping timeout: 264 seconds) |
| 13:49:40 | × | __monty__ quits (~toonn@user/toonn) (Ping timeout: 255 seconds) |
| 13:51:05 | → | __monty__ joins (~toonn@user/toonn) |
| 13:51:30 | → | sm joins (~sm@plaintextaccounting/sm) |
| 13:51:37 | × | ec quits (~ec@gateway/tor-sasl/ec) (Ping timeout: 252 seconds) |
| 13:53:30 | → | ec joins (~ec@gateway/tor-sasl/ec) |
| 13:54:06 | × | lg188 quits (~lg188@82.18.98.230) (Quit: Ping timeout (120 seconds)) |
| 13:54:59 | → | lg188 joins (~lg188@82.18.98.230) |
| 13:55:28 | × | lg188 quits (~lg188@82.18.98.230) (Remote host closed the connection) |
| 13:58:33 | × | euleritian quits (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) (Read error: Connection reset by peer) |
| 13:59:12 | → | euleritian joins (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) |
| 14:01:14 | → | lg188 joins (~lg188@82.18.98.230) |
| 14:02:22 | × | sm quits (~sm@plaintextaccounting/sm) (Quit: sm) |
| 14:02:46 | × | ames quits (~amelia@offtopia/offtopian/amelia) (Quit: Ping timeout (120 seconds)) |
| 14:03:19 | × | alphacentauri quits (alphacenta@gateway/vpn/protonvpn/alphacentauri) (Ping timeout: 255 seconds) |
| 14:03:50 | × | Franciman quits (~Franciman@mx1.fracta.dev) (Read error: Connection reset by peer) |
| 14:04:04 | × | pierrot quits (~pi@user/pierrot) (Quit: ZNC 1.8.2 - http://znc.in) |
| 14:05:17 | → | grnman_ joins (~michaelsc@c-66-176-3-51.hsd1.fl.comcast.net) |
| 14:05:27 | → | sm joins (~sm@plaintextaccounting/sm) |
| 14:11:46 | × | simendsjo quits (~user@84.211.91.241) (Ping timeout: 272 seconds) |
| 14:12:21 | × | CiaoSen quits (~Jura@2a05:5800:2c3:8c00:664b:f0ff:fe37:9ef) (Ping timeout: 260 seconds) |
| 14:19:35 | → | Simikando joins (~Simikando@adsl-dyn230.91-127-81.t-com.sk) |
| 14:26:26 | × | hiyori quits (~hiyori@user/hiyori) (Quit: Client closed) |
| 14:26:37 | → | hiyori joins (~hiyori@user/hiyori) |
| 14:27:06 | → | thegeekinside joins (~thegeekin@189.217.90.224) |
| 14:34:29 | × | xigua quits (~xigua@user/xigua) (Remote host closed the connection) |
| 14:35:02 | → | xigua joins (~xigua@user/xigua) |
| 14:38:56 | × | Pozyomka quits (~pyon@user/pyon) (Quit: Pozyomka, my beloved: https://i.imgur.com/BMmVfTq.png) |
| 14:39:23 | × | xigua quits (~xigua@user/xigua) (Remote host closed the connection) |
| 14:39:53 | × | YuutaW quits (~YuutaW@mail.yuuta.moe) (Ping timeout: 246 seconds) |
| 14:39:57 | → | xigua joins (~xigua@user/xigua) |
| 14:40:23 | → | YuutaW joins (~YuutaW@2404:f4c0:f9c3:502::100:17b7) |
| 14:41:02 | × | jrm quits (~jrm@user/jrm) (Quit: ciao) |
| 14:42:36 | → | jrm joins (~jrm@user/jrm) |
| 14:45:24 | × | Simikando quits (~Simikando@adsl-dyn230.91-127-81.t-com.sk) (Ping timeout: 240 seconds) |
| 14:50:41 | × | jrm quits (~jrm@user/jrm) (Quit: ciao) |
| 14:52:04 | → | jrm joins (~jrm@user/jrm) |
| 14:53:49 | → | ames joins (~amelia@offtopia/offtopian/amelia) |
| 14:55:14 | → | Franciman joins (~Franciman@mx1.fracta.dev) |
| 14:56:37 | → | alphacentauri joins (alphacenta@gateway/vpn/protonvpn/alphacentauri) |
| 14:58:20 | <kuribas> | It looks like when throwing an error, the application is not return an proper error code (1)? |
| 14:58:54 | → | cpressey joins (~cpressey@host-2-102-11-74.as13285.net) |
| 14:59:10 | → | Simikando joins (~Simikando@adsl-dyn230.91-127-81.t-com.sk) |
| 14:59:12 | → | pierrot joins (~pi@user/pierrot) |
| 14:59:16 | <geekosaur> | ? |
| 14:59:29 | → | nate2 joins (~nate@c-98-45-169-16.hsd1.ca.comcast.net) |
| 15:01:10 | × | euleritian quits (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) (Ping timeout: 272 seconds) |
| 15:03:19 | → | tzh joins (~tzh@c-71-193-181-0.hsd1.or.comcast.net) |
| 15:03:47 | × | Simikando quits (~Simikando@adsl-dyn230.91-127-81.t-com.sk) (Ping timeout: 255 seconds) |
| 15:04:00 | × | danse-nr3 quits (~francesco@151.37.199.183) (Read error: Connection reset by peer) |
| 15:04:15 | × | nate2 quits (~nate@c-98-45-169-16.hsd1.ca.comcast.net) (Ping timeout: 240 seconds) |
| 15:04:20 | <geekosaur> | https://paste.tomsmeding.com/RWqFNwGR `error` seems to produce a nonzero error code from the program. if it's not, I'd check for `catch`es that don't re-throw properly |
| 15:04:37 | → | danse-nr3 joins (~francesco@151.37.182.55) |
| 15:04:49 | <haskellbridge> | <Inst> Here's something I don't get. How does `join` even work? |
| 15:05:02 | <haskellbridge> | <Inst> (>>= id) |
| 15:05:07 | <haskellbridge> | <Inst> id doesn't have the right type signature, no? |
| 15:05:20 | <kuribas> | geekosaur: hmm right, I suppose something else is going on in my code then... |
| 15:05:25 | <c_wraith> | Inst: sure it does. But expand it. |
| 15:05:43 | <geekosaur> | `a` unifies with anything, as long as it's the same thing on both sides of the arrow |
| 15:05:52 | <kuribas> | geekosaur: indeed, I am catching and collecting the errors elsewhere. |
| 15:05:55 | <haskellbridge> | <Inst> (>>=) :: m a -> (a -> m b) -> m b |
| 15:06:05 | <haskellbridge> | <Inst> id :: a -> a |
| 15:06:28 | <c_wraith> | Inst: join x = x >>= id --- join x = x >>= \y -> y ---- join x = do {y <- x ; y} |
| 15:06:36 | <haskellbridge> | <Inst> erm, id :: a2 -> a2 |
| 15:06:46 | × | shapr quits (~user@2600:1700:c640:3100:e8fe:9f19:d6ff:62f3) (Remote host closed the connection) |
| 15:06:59 | → | shapr joins (~user@2600:1700:c640:3100:ae91:4ce3:990:5e2b) |
| 15:07:20 | → | euleritian joins (~euleritia@46.114.206.159) |
| 15:07:51 | <haskellbridge> | <Inst> it's still freaky |
| 15:07:59 | → | Simikando joins (~Simikando@adsl-dyn230.91-127-81.t-com.sk) |
| 15:08:06 | <geekosaur> | that's Hindley-Milner for you |
| 15:08:24 | <EvanR> | Inst, pretend >>= is an operation on IO actions and followup callbacks that use the result |
| 15:08:30 | <c_wraith> | Inst: now work on fix :: (IO a -> IO a) -> IO a |
| 15:08:50 | <EvanR> | then join does the obvious |
| 15:10:25 | <EvanR> | in the context of IO (IO a) |
| 15:11:15 | <c_wraith> | Inst: in any case, going back purely to types. given what you wrote, you immediately derive a2 ~ a, a2 ~ m b. From those, you derived a ~ m b. Then the type of (>>=) is restricted to m (m b) -> (m b -> m b) -> m b |
| 15:11:24 | <haskellbridge> | <Inst> I don't have the intellectual background / understanding of HM to understand how this is supposed to work, I just know it works, and is convenient in a few rare usecases |
| 15:11:40 | <geekosaur> | see what c_wraith just wrote |
| 15:11:53 | <haskellbridge> | <Inst> yeah, just saw it |
| 15:12:44 | <[exa]> | Inst: a very little bit of prolog practice usually solves all problem with unification-heavy algorithms like HM |
| 15:13:29 | <EvanR> | the identity function works for all types, that part shouldn't be confusing right |
| 15:13:43 | <EvanR> | if it couldn't specialize to the appropriate type, how would it ever work |
| 15:13:51 | <kuribas> | :t (>>=) id |
| 15:13:52 | <lambdabot> | (a -> a -> b) -> a -> b |
| 15:14:06 | <geekosaur> | but for most people prolog makes haskell look "normal" 😛 |
| 15:14:26 | <kuribas> | :t (>>= id) |
| 15:14:27 | <lambdabot> | Monad m => m (m b) -> m b |
| 15:14:41 | <[exa]> | geekosaur: true point |
| 15:14:45 | <EvanR> | id 7 = 7, but Inst you should be surprised because id doesn't have the right ype? |
| 15:15:00 | <haskellbridge> | <Inst> yeah, i know, the :t on (>>= id) makes sense and is understandable, but it's hard for me to grok the loopholes that somehow make (>>= id) work |
| 15:15:09 | <kuribas> | id here is (m b -> m b) |
| 15:15:10 | <dolio> | You don't need to understand Hindley-Milner. But you need to understand how to unify two types. |
| 15:15:35 | × | YuutaW quits (~YuutaW@2404:f4c0:f9c3:502::100:17b7) (Ping timeout: 246 seconds) |
| 15:15:56 | <haskellbridge> | <Inst> yeah, tbh, implicitly this is a big problem, when i was very early on my Haskell journey, it was the type system that weirded me out |
| 15:15:59 | <c_wraith> | yeah, I actually don't understand H-M. but I can do unification! |
| 15:16:28 | <kuribas> | I don't even think you need to understand unification. Type variables are just variables, but at type level. |
| 15:16:38 | <kuribas> | unification is only used to infer them automatically. |
| 15:17:08 | <haskellbridge> | <Inst> m1 (m2 b) -> (m2 b -> m1 b) -> m1 b ? |
| 15:17:12 | <EvanR> | id is the identity function, and it works at all argument/result types |
| 15:17:27 | <haskellbridge> | <Inst> actually, i'm checking whether id is kind polymorphic in its type variables |
| 15:17:43 | <haskellbridge> | <Inst> :t won't give me whether or not it's forall (a::k). a -> a |
| 15:17:53 | → | YuutaW joins (~YuutaW@2404:f4c0:f9c3:502::100:17b7) |
| 15:18:16 | <dolio> | Well, you could say, "you need to figure out how to instantiate variables to make the types match." That is just a description of what it means to unify two types. |
| 15:18:29 | <haskellbridge> | <Inst> @c_wraith is this correct? |
| 15:18:30 | <haskellbridge> | <Inst> m1 (m2 b) -> (m2 b -> m1 b) -> m1 b ? |
| 15:18:37 | <[exa]> | hm guys what's the easiest way now to run Haskell as javascript in a web app? say `interact :: Textarea -> Textarea` or so :D |
| 15:18:48 | <kuribas> | haskellbridge: no, id takes a value, which always must have kind Type (aka *) |
| 15:18:49 | <[exa]> | no need to manipulate DOM, just string to string |
| 15:18:53 | <c_wraith> | Inst: where did two different m types come from? |
| 15:19:31 | × | Simikando quits (~Simikando@adsl-dyn230.91-127-81.t-com.sk) (Ping timeout: 264 seconds) |
| 15:19:52 | <haskellbridge> | <Inst> "Then the type of (>>=) is restricted to m (m b) -> (m b -> m b) -> m b" |
| 15:19:59 | <haskellbridge> | <Inst> so distinguishing them as m1 and m2 |
| 15:20:20 | <c_wraith> | Inst: but they're required to be the same. distinguishing them doesn't work |
| 15:20:24 | → | fendor joins (~fendor@2a02:8388:1640:be00:aab:1226:f274:5021) |
| 15:20:57 | <EvanR> | code with one >>= introduces only one monad |
| 15:21:10 | <c_wraith> | Inst: the only uses of m came from the type of (>>=), and all three uses of m are the same in it |
| 15:21:40 | <haskellbridge> | <Inst> no, i mean, the inner m is treated as a separate m, for purposes of matching the m a -> (a -> m b) -> m b type signature |
| 15:21:59 | <haskellbridge> | <Inst> i guess it's just that i don't understand unification |
| 15:22:10 | <EvanR> | in HM everything can start out as different type variables but they will later get unified |
| 15:22:16 | <haskellbridge> | <Inst> also, implicitly, you could also have implicit join via an (m a -> m b) function, no? |
| 15:22:25 | <EvanR> | like solving a system of equations |
| 15:22:30 | <EvanR> | and m1 = m2 comes out |
| 15:22:48 | <kuribas> | haskellbridge: (>>=) :: forall a b. m a -> (a -> m b) -> m b You can assign anything to `a`, for example `m b`, which gives forall b. m (m b) -> (m b -> m b) -> m b |
| 15:22:52 | <haskellbridge> | <Inst> Thanks EvanR for the response :) |
| 15:23:24 | <ncf> | what's an implicit join? |
| 15:23:48 | <haskellbridge> | <Inst> foo :: (Monad m) => m a -> m b |
| 15:24:12 | <EvanR> | Inst that is where explicit foralls come in handy, so you don't get confused by quantified variables and singular unknowns |
| 15:24:26 | <EvanR> | so that you don't confuse the two |
| 15:24:34 | <c_wraith> | that's... not a join. the idea of join is to collapse nested type constructors into a single application |
| 15:24:37 | <haskellbridge> | <Inst> then ((u :: m (m a)) >>= foo) :: m b |
| 15:24:53 | <haskellbridge> | <Inst> i mean that's implicit, if foo is m a -> m b |
| 15:24:55 | <haskellbridge> | <Inst> then you bind into it |
| 15:25:24 | <haskellbridge> | <Inst> not sure if Haskell's type system would respect this |
| 15:25:32 | <EvanR> | if >>= is defined in terms of join may that's implicit join |
| 15:25:40 | <EvanR> | (but it's not) |
| 15:26:25 | <haskellbridge> | <Inst> i guess i'll play around with some Maybe a -> Maybe b functions to see what happens |
| 15:26:30 | <c_wraith> | ah, I think I see what you're going for. my starting analysis there wasn't a universal observation. it was for specifically the case of (>>= id) |
| 15:26:50 | <c_wraith> | when you unify the types of id and the second argument of (>>=) |
| 15:27:42 | × | lena64t quits (~lena64t@gateway/tor-sasl/hck) (Quit: WeeChat 4.0.0-dev) |
| 15:27:50 | <haskellbridge> | <Inst> http://localhost:20662/_matrix/media/v1/download/matrix.org/GPPAVIEZjhBCAGewKMAzqono |
| 15:28:00 | <EvanR> | (forall a b .) Maybe a -> Maybe b functions won't get very far. They have to return Nothing |
| 15:28:15 | × | cfricke quits (~cfricke@user/cfricke) (Quit: WeeChat 4.0.4) |
| 15:29:15 | <c_wraith> | um. wow, that link is useless. geekosaur, did the bridge convert it to localhost, or was that on Inst's matrix client? |
| 15:29:21 | <ncf> | someone forgot to configure their matrix instance's base url |
| 15:29:51 | <geekosaur> | the bridge isn';t accessible from outside so I can't expose the links created for images/media/etc. properly |
| 15:30:02 | <geekosaur> | so it just uses localhost |
| 15:30:37 | <geekosaur> | and Inst uses images instead of pastebins etc. so there's little to be done |
| 15:30:47 | × | diamond quits (~user@89.223.35.3) (Ping timeout: 255 seconds) |
| 15:31:03 | <EvanR> | Inst, maybe post your content to twitter first and link that |
| 15:31:19 | <haskellbridge> | <Inst> https://media.discordapp.net/attachments/968989726633779215/1161687327819710514/53db238e-f34c-49ec-acf5-1d3c83157a05.png?ex=653934a2&is=6526bfa2&hm=121c93caabb74f39d51fbc41be1563dc2ca3ba791a09a271bf4379cde1f19ccd&=&width=558&height=240 |
| 15:31:52 | <haskellbridge> | <Inst> I've boycotted twitter for a long time, would like to be able to boycott Discord eventually, but you have to be hooked into mainstream social media somehow |
| 15:32:04 | <geekosaur> | (I can't make a tunnel through the building's firewall) |
| 15:32:32 | <haskellbridge> | <Inst> Thanks for the answers, though. :) |
| 15:32:36 | <EvanR> | Maybe a -> Maybe a has a few more options than Maybe a -> Maybe b |
| 15:33:14 | <c_wraith> | it has one more option, if you're restricting yourself to total functions |
| 15:33:50 | <c_wraith> | well. one more denotation. I suppose you could insert CPU-wasting code that wouldn't change the return value. |
| 15:34:49 | <EvanR> | I'm embarrassed you even suggested such a thing. Extensional equality of course |
| 15:35:27 | × | remexre quits (~remexre@user/remexre) (Ping timeout: 240 seconds) |
| 15:35:53 | <dolio> | Not into game semantics? |
| 15:43:35 | <EvanR> | *reads wikipedia real fast* interesting |
| 15:44:08 | <dolio> | Games are a relatively easy to understand intensional model of type theory. |
| 15:44:38 | <c_wraith> | Conway's games? |
| 15:45:07 | <dolio> | There's a difference between the `Maybe a -> Maybe b` game that just yields Nothing and the one that first challenges the opponent to provide their Maybe before yielding Nothing. |
| 15:45:28 | <c_wraith> | nope. Conway's games are entirely different! glad to have that cleared up! |
| 15:45:41 | <haskellbridge> | <Inst> Ah, since this isn't guaranteed to be a specialized id. It can just turn everything into Nothing. |
| 15:46:26 | <danse-nr3> | [exa], wasm backend, javascript backend, purescript? There are other more exotic options |
| 15:46:59 | → | _ht joins (~Thunderbi@28-52-174-82.ftth.glasoperator.nl) |
| 15:47:21 | <geekosaur> | I think ghcjs is still the preferred ghc-based way, ghcjs is still a tech preview |
| 15:47:33 | <geekosaur> | er. js backend is still a tech preview |
| 15:47:47 | <geekosaur> | they're working on it but it'll take time |
| 15:47:56 | × | eggplantade quits (~Eggplanta@2600:1700:38c5:d800:8c8d:37ea:f5b2:d34) (Remote host closed the connection) |
| 15:48:11 | → | eggplantade joins (~Eggplanta@2600:1700:38c5:d800:8c8d:37ea:f5b2:d34) |
| 15:48:18 | <[exa]> | danse-nr3: is there some kind of howto? "I have this interact-only `main`, what to do now :D" |
| 15:48:49 | <danse-nr3> | there is a wiki page about the "javascript problem" ... not sure how up to date |
| 15:49:40 | <danse-nr3> | anyways it sounds like you want to write something relatively self-contained to be called from the javascript side. I think purescript was designed with this usecase in mind |
| 15:50:13 | <[exa]> | hm does purescript have parsec |
| 15:50:39 | <danse-nr3> | nope, it has a different ecosystem |
| 15:50:46 | <EvanR> | the javascript problem. Specifically, it exists and there's nothing anyone can do about that |
| 15:50:53 | <[exa]> | ah good it looks like there are parsecs for purescript |
| 15:51:00 | <[exa]> | well I'll try purescript and see, thanks! |
| 15:51:28 | <danse-nr3> | https://wiki.haskell.org/The_JavaScript_Problem |
| 15:51:46 | → | notzmv joins (~zmv@user/notzmv) |
| 15:51:56 | <danse-nr3> | yeah i think purescript is one of the most practical approaches |
| 15:53:11 | × | machinedgod quits (~machinedg@d198-53-218-113.abhsia.telus.net) (Ping timeout: 255 seconds) |
| 15:56:21 | × | sm quits (~sm@plaintextaccounting/sm) (Quit: sm) |
| 15:57:06 | <EvanR> | quoting that page, we might not have time to teach people a new language, but people seem to have no problem inventing new languages at a rate that is borderline outlandish |
| 15:57:30 | → | azimut joins (~azimut@gateway/tor-sasl/azimut) |
| 15:57:47 | <[exa]> | but wait purescript is eager?? |
| 15:58:15 | <yushyin> | yup |
| 16:00:03 | <EvanR> | https://blog.drewolson.org/laziness-in-purescript |
| 16:01:27 | <haskellbridge> | <Inst> wondering if it's possible to algorithmically generate all possible programming languages |
| 16:01:45 | × | justsomeguy quits (~justsomeg@user/justsomeguy) (Ping timeout: 258 seconds) |
| 16:02:02 | <EvanR> | is that like generating a list of all real numbers |
| 16:02:09 | → | sabino joins (~sabino@user/sabino) |
| 16:02:10 | <haskellbridge> | <Inst> feels like it |
| 16:02:13 | <EvanR> | then no |
| 16:02:29 | <haskellbridge> | <Inst> keywords are finite and countable |
| 16:02:36 | <EvanR> | then yes |
| 16:02:37 | <haskellbridge> | <Inst> number of keywords are also finite and countable |
| 16:03:19 | <haskellbridge> | <Inst> number of possible design concepts probably aren't, though :( |
| 16:03:46 | <EvanR> | [exa], on try.purescript.org I placed a division by zero in a tuple, then extracted the other component for one of the HTML elements output, and it didn't crash... |
| 16:04:00 | × | shryke quits (~shryke@2a00:4b00:13c:cc:b27b:25ff:fe18:efd) (Quit: WeeChat 4.0.5) |
| 16:04:14 | × | _d0t quits (~{-d0t-}@user/-d0t-/x-7915216) (Remote host closed the connection) |
| 16:04:33 | → | _d0t joins (~{-d0t-}@user/-d0t-/x-7915216) |
| 16:04:34 | <EvanR> | maybe division by zero just isn't an error |
| 16:04:58 | <[exa]> | division by zero in js is afaik Infinity |
| 16:05:18 | <EvanR> | it's zero in purescript xD |
| 16:05:28 | <EvanR> | so I learned nothing about the laziness |
| 16:05:29 | <danse-nr3> | purescript is definitely strict |
| 16:05:41 | × | eggplantade quits (~Eggplanta@2600:1700:38c5:d800:8c8d:37ea:f5b2:d34) (Remote host closed the connection) |
| 16:06:10 | <haskellbridge> | <Inst> Elm, giggle |
| 16:06:33 | <haskellbridge> | <Inst> _ / 0 = 0 in Elm |
| 16:06:54 | → | econo_ joins (uid147250@id-147250.tinside.irccloud.com) |
| 16:06:56 | → | Simikando joins (~Simikando@adsl-dyn230.91-127-81.t-com.sk) |
| 16:07:27 | <EvanR> | it's not an unreasonable definition if you want your page to load when the author is bad at math |
| 16:08:04 | × | exarkun quits (~exarkun@user/exarkun) (Excess Flood) |
| 16:08:36 | <EvanR> | so to observe strictness we need an infinite loop probably... |
| 16:08:58 | → | exarkun joins (~exarkun@user/exarkun) |
| 16:09:30 | <haskellbridge> | <Inst> Not sure if they copied that from Elm, Elm had a no exceptions promise, and they had to define _ / 0 as 0 to avoid exceptions |
| 16:09:32 | <haskellbridge> | <Inst> it's an interesting problem |
| 16:09:59 | <EvanR> | sure, did they also stop infinite loops |
| 16:11:43 | × | danse-nr3 quits (~francesco@151.37.182.55) (Ping timeout: 264 seconds) |
| 16:11:59 | × | fweht quits (uid404746@id-404746.lymington.irccloud.com) (Quit: Connection closed for inactivity) |
| 16:12:00 | <haskellbridge> | <Inst> i mean, that, if you _ / 0, you can easily do Knight Capital Mark 2: https://www.henricodolfing.com/2019/06/project-failure-case-study-knight-capital.html |
| 16:12:01 | <geekosaur> | those don't throw exceptions |
| 16:13:03 | <haskellbridge> | <Inst> i mean, that, if you div _ 0, you can easily do Knight Capital Mark 2: https://www.henricodolfing.com/2019/06/project-failure-case-study-knight-capital.html |
| 16:13:10 | <EvanR> | I managed to put in an infinite loop and observe the strictness |
| 16:13:16 | <EvanR> | no exceptions but nothing good either |
| 16:13:28 | <[exa]> | I'll do with Elm |
| 16:13:40 | <haskellbridge> | <Inst> how can you observe the strictness if the strictness is infinite? |
| 16:13:51 | <geekosaur> | Injst, please don't do edits in here (see the Matrix-side topic) |
| 16:14:01 | <geekosaur> | *Inst |
| 16:14:02 | <[exa]> | infinite things are noticeably easy to observe due to size |
| 16:14:10 | <haskellbridge> | <Inst> yeah, undersstood |
| 16:14:24 | <haskellbridge> | <Inst> it was _ / 0, edited to div _ 0 defined as 0 |
| 16:15:02 | → | remexre joins (~remexre@user/remexre) |
| 16:17:05 | <geekosaur> | yes, and the bridge repeated the whole message because IRC doesn't support edits |
| 16:17:42 | <geekosaur> | this is an IRC channel to which I have provided Matrix access, with some constraints. if those constraints are violated I can and will shut down the bridge |
| 16:18:29 | → | danse-nr3 joins (~francesco@151.37.182.55) |
| 16:18:45 | → | Guest22 joins (~Guest22@136.25.94.94) |
| 16:18:48 | <haskellbridge> | <Inst> I see, understood, sorry, it's become habitual. And yeah, I usually use the IRC side, but trying to cut down on wasteful social media use. |
| 16:18:54 | × | Guest22 quits (~Guest22@136.25.94.94) (Client Quit) |
| 16:18:56 | × | ghoulguy quits (g@libera/staff/glguy) (Quit: Quit) |
| 16:18:56 | × | g quits (g@libera/staff/glguy) (Remote host closed the connection) |
| 16:19:16 | → | EitanCh joins (~EitanCh@136.25.94.94) |
| 16:19:48 | → | g joins (g@libera/staff/glguy) |
| 16:20:18 | → | justsomeguy joins (~justsomeg@user/justsomeguy) |
| 16:20:48 | → | glguy joins (g@libera/staff/glguy) |
| 16:23:40 | <EitanCh> | Hello, I'm trying to define an analog for the `many` Alternative combinator for Profunctors but when I try to use it it infinite loops on me. The definition involves mutual recursion. Am I missing something obvious that causes it to loop forever? Here's the code: |
| 16:23:41 | <EitanCh> | several |
| 16:23:41 | <EitanCh> | :: (Cons s s a a, Cons t t b b, Monoid t) |
| 16:23:42 | <EitanCh> | => p a b -> p s t |
| 16:23:42 | <EitanCh> | several p = several_p where |
| 16:23:43 | <EitanCh> | several_p = withIso _Stream $ \f g -> |
| 16:23:43 | <EitanCh> | dimap f g (pure () >+< several1_p) |
| 16:23:43 | × | EitanCh quits (~EitanCh@136.25.94.94) (Killed (ozone (No Spam))) |
| 16:24:44 | → | DemonDerg joins (A_D@libera/staff/dragon) |
| 16:26:22 | <geekosaur> | they are, but oh well |
| 16:27:13 | <EvanR> | so the network is on spam alert high |
| 16:27:22 | <EvanR> | spam alert elevateed |
| 16:27:42 | <geekosaur> | well, yes. have you not noticed all the "just paste it" spam of late? |
| 16:27:47 | <EvanR> | yes |
| 16:27:53 | <geekosaur> | and we got spammed by supernets the other day too |
| 16:28:05 | <DemonDerg> | was that a misban? |
| 16:28:19 | <geekosaur> | yeh, just someone pasting a question into the channel |
| 16:28:24 | <geekosaur> | which ozone didn't like |
| 16:28:41 | <DemonDerg> | what was the nick? |
| 16:28:44 | <geekosaur> | (we don't either, but first timers don't know that) |
| 16:28:47 | <geekosaur> | EitanCh |
| 16:29:50 | <DemonDerg> | removed |
| 16:29:56 | <geekosaur> | thank you |
| 16:30:27 | <ncf> | dolio: do you have a recommended resource for game semantics and type theory? |
| 16:31:14 | danse-nr3 | failing to "quickly reach out to them" |
| 16:31:34 | <ncf> | i guess the nlab has two |
| 16:31:51 | <geekosaur> | not sure they'd be trying again quickly after being klined |
| 16:32:01 | <dolio> | Not really. This explains a little, though: https://www.youtube.com/watch?v=uY5LubwJ1Xo |
| 16:32:12 | <DemonDerg> | unfortunately yeah |
| 16:33:05 | <danse-nr3> | maybe we can leave a message through the bot? |
| 16:33:20 | <ncf> | ah, that's the author of one of the papers i found (now "withdrawn" from arxiv, but you can still read it, wtf?) |
| 16:34:08 | × | danse-nr3 quits (~francesco@151.37.182.55) (Remote host closed the connection) |
| 16:34:33 | → | danse-nr3 joins (~francesco@151.37.182.55) |
| 16:34:43 | × | Simikando quits (~Simikando@adsl-dyn230.91-127-81.t-com.sk) (Ping timeout: 258 seconds) |
| 16:35:12 | <DemonDerg> | also while Im looking about, you all seen any extra supernets spam or so today? |
| 16:36:54 | × | chele quits (~chele@user/chele) (Remote host closed the connection) |
| 16:38:06 | × | hugo- quits (znc@verdigris.lysator.liu.se) (Ping timeout: 260 seconds) |
| 16:38:12 | <EvanR> | types are games and terms are strategies |
| 16:38:33 | → | Square3 joins (~Square4@user/square) |
| 16:38:50 | <dolio> | Yeah, I guess I should have said "strategy" above. |
| 16:39:46 | → | eggplantade joins (~Eggplanta@2600:1700:38c5:d800:8c8d:37ea:f5b2:d34) |
| 16:39:51 | <dolio> | For the two distinct values of Maybe a -> Maybe b. |
| 16:42:16 | <danse-nr3> | hum so i guess a term is what i used to call a type's "value" |
| 16:42:45 | <dolio> | Well, terms are syntactic things. |
| 16:42:51 | <dolio> | Terms denote strategies. |
| 16:44:04 | × | cpressey quits (~cpressey@host-2-102-11-74.as13285.net) (Quit: Client closed) |
| 16:46:22 | <danse-nr3> | i see, thanks |
| 16:47:25 | <geekosaur> | DemonDerg, not today. had some jp.it last night but I didn't wake up to any this morning for a change |
| 16:48:01 | <geekosaur> | btw there used to be some protocol for chanops to follow if ozone incorrectly klined someone, does that still exist? |
| 16:48:07 | <DemonDerg> | it does |
| 16:48:17 | <DemonDerg> | be opped and message it unkline $nick, IIRC |
| 16:48:40 | <geekosaur> | thank you |
| 16:48:46 | <DemonDerg> | https://libera.chat/guides/bots#ozone |
| 16:49:09 | <DemonDerg> | should also op any bots you have in here |
| 16:49:12 | <DemonDerg> | sorry, voice |
| 16:49:13 | <DemonDerg> | not op |
| 16:49:18 | <DemonDerg> | apologies, long day |
| 16:50:39 | → | hugo joins (znc@verdigris.lysator.liu.se) |
| 16:51:04 | <geekosaur> | that one's not up to me, I'll mention it in the ops channel |
| 16:51:15 | × | hiyori quits (~hiyori@user/hiyori) (Quit: Client closed) |
| 16:52:01 | × | stites quits (~stites@130.44.147.204) (Ping timeout: 252 seconds) |
| 16:52:33 | → | stites joins (~stites@2607:fb91:dc8:e0e2:5656:70eb:8498:35ff) |
| 16:54:31 | → | cpressey joins (~cpressey@host-2-102-11-74.as13285.net) |
| 17:03:40 | × | eggplantade quits (~Eggplanta@2600:1700:38c5:d800:8c8d:37ea:f5b2:d34) (Remote host closed the connection) |
| 17:04:42 | → | AlexNoo_ joins (~AlexNoo@94.233.241.173) |
| 17:05:06 | × | euleritian quits (~euleritia@46.114.206.159) (Read error: Connection reset by peer) |
| 17:05:23 | → | euleritian joins (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) |
| 17:06:47 | × | justsomeguy quits (~justsomeg@user/justsomeguy) (Ping timeout: 260 seconds) |
| 17:07:32 | × | AlexZenon quits (~alzenon@178.34.163.10) (Ping timeout: 255 seconds) |
| 17:07:49 | × | Alex_test quits (~al_test@178.34.163.10) (Ping timeout: 255 seconds) |
| 17:07:59 | × | AlexNoo quits (~AlexNoo@178.34.163.10) (Ping timeout: 245 seconds) |
| 17:08:15 | AlexNoo_ | is now known as AlexNoo |
| 17:08:20 | → | emergence joins (emergence@2607:5300:60:5910:dcad:beff:feef:5bc) |
| 17:09:50 | × | cpressey quits (~cpressey@host-2-102-11-74.as13285.net) (Quit: Client closed) |
| 17:09:57 | → | asivitz joins (uid178348@id-178348.tinside.irccloud.com) |
| 17:10:41 | → | cpressey joins (~cpressey@host-2-102-11-74.as13285.net) |
| 17:11:12 | → | eggplantade joins (~Eggplanta@2600:1700:38c5:d800:8c8d:37ea:f5b2:d34) |
| 17:12:28 | ChanServ | sets mode +o monochrom |
| 17:12:31 | × | euleritian quits (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) (Ping timeout: 260 seconds) |
| 17:12:53 | ChanServ | sets mode +v lambdabot |
| 17:13:06 | ChanServ | sets mode +v yahb2 |
| 17:13:07 | → | Alex_test joins (~al_test@94.233.241.173) |
| 17:13:22 | ChanServ | sets mode +v haskellbridge |
| 17:13:30 | monochrom | sets mode -o monochrom |
| 17:13:47 | → | AlexZenon joins (~alzenon@94.233.241.173) |
| 17:15:21 | → | euleritian joins (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) |
| 17:15:31 | × | lg188 quits (~lg188@82.18.98.230) (Quit: Bye.) |
| 17:16:16 | × | kuribas quits (~user@ip-188-118-57-242.reverse.destiny.be) (Quit: ERC (IRC client for Emacs 27.1)) |
| 17:16:42 | × | danse-nr3 quits (~francesco@151.37.182.55) (Ping timeout: 260 seconds) |
| 17:21:10 | → | lg188 joins (~lg188@82.18.98.230) |
| 17:25:38 | × | lg188 quits (~lg188@82.18.98.230) (Read error: Connection reset by peer) |
| 17:25:46 | → | justsomeguy joins (~justsomeg@user/justsomeguy) |
| 17:27:49 | → | lg188 joins (~lg188@82.18.98.230) |
| 17:30:08 | × | lg188 quits (~lg188@82.18.98.230) (Read error: Connection reset by peer) |
| 17:32:59 | <EvanR> | Data.ByteString docs state that it is suitable for high performance, then it says it's implemented as a ForeignPtr. Does this mean ByteStrings have FFI overhead or is FFI not involved |
| 17:33:13 | × | stites quits (~stites@2607:fb91:dc8:e0e2:5656:70eb:8498:35ff) (Read error: Connection reset by peer) |
| 17:33:39 | → | stites joins (~stites@130.44.147.204) |
| 17:34:40 | × | hugo quits (znc@verdigris.lysator.liu.se) (Ping timeout: 255 seconds) |
| 17:34:49 | → | simendsjo joins (~user@84.211.91.241) |
| 17:36:52 | <EvanR> | also when looking at how BS.takeWhile is implemented I noticed accursedUnutterablePerformIO, which I thought was considered unprofessional and renamed xD |
| 17:37:42 | <EvanR> | which also answers the question because there's the FFI |
| 17:38:46 | × | eggplantade quits (~Eggplanta@2600:1700:38c5:d800:8c8d:37ea:f5b2:d34) (Remote host closed the connection) |
| 17:39:41 | → | Simikando joins (~Simikando@adsl-dyn230.91-127-81.t-com.sk) |
| 17:41:12 | <geekosaur> | ByteString is what invented it… and discovered why it's a bad idea |
| 17:41:20 | <geekosaur> | but they still use it for performance |
| 17:41:37 | <geekosaur> | and yes, it FFIs again for performance |
| 17:41:57 | → | ski joins (~ski@88.131.7.247) |
| 17:42:23 | <geekosaur> | I think they cheat there and use unsafe calls? which avoids the overhead but they have to be very careful with it |
| 17:42:55 | <geekosaur> | then again they're looking for performance so they're avoiding anything that would block and thereby be unsafe from a FFI standpoint |
| 17:48:18 | → | hugo joins (znc@verdigris.lysator.liu.se) |
| 17:48:34 | → | wootehfoot joins (~wootehfoo@user/wootehfoot) |
| 17:51:14 | → | eggplantade joins (~Eggplanta@2600:1700:38c5:d800:24c5:ca27:9366:8391) |
| 17:53:50 | × | Simikando quits (~Simikando@adsl-dyn230.91-127-81.t-com.sk) (Remote host closed the connection) |
| 17:55:58 | × | eggplantade quits (~Eggplanta@2600:1700:38c5:d800:24c5:ca27:9366:8391) (Ping timeout: 272 seconds) |
| 17:56:55 | × | cpressey quits (~cpressey@host-2-102-11-74.as13285.net) (Quit: Client closed) |
| 18:02:44 | <EvanR> | FFI has more performance than what, using a primitive array? |
| 18:04:46 | <[exa]> | ok so today I learned that Elm ain't very good for functional programming. :D |
| 18:05:10 | <EvanR> | yeeeeeaahh.... |
| 18:05:33 | <[exa]> | "error: too much recursion" when trying elm/parser to do JSON, like, where are we |
| 18:05:49 | <[exa]> | there's never enough recursion! |
| 18:06:22 | <EvanR> | what a disgrace |
| 18:07:48 | <[exa]> | somehow I tend to understand "compile to javascript" a bit more elaborately as "direct source-to-source homomorphism to javascript" |
| 18:07:58 | <[exa]> | *than |
| 18:08:13 | <[exa]> | ok nvm probably time to write my own language for this. :D |
| 18:13:14 | <EvanR> | what made you go for Elm over purescript |
| 18:13:31 | × | Square3 quits (~Square4@user/square) (Ping timeout: 264 seconds) |
| 18:15:22 | → | rgw joins (~R@2605:a601:a0df:5600:786b:f462:3e9c:5be6) |
| 18:15:26 | <[exa]> | I somehow thought it's not eager. |
| 18:15:40 | <[exa]> | ;_; |
| 18:16:12 | × | misterfish quits (~misterfis@84-53-85-146.bbserv.nl) (Ping timeout: 240 seconds) |
| 18:17:33 | <mauke> | no warnings qw(recursion); # if this were perl ... |
| 18:17:43 | → | cpressey joins (~cpressey@host-2-102-11-74.as13285.net) |
| 18:18:15 | <monochrom> | haha |
| 18:18:55 | <monochrom> | But yeah I'm disappointed. It is no longer rocket science to write a translator that does CPS and trampolining for you. |
| 18:19:03 | → | tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) |
| 18:19:17 | × | wootehfoot quits (~wootehfoo@user/wootehfoot) (Quit: Leaving) |
| 18:20:24 | <monochrom> | Then again there is a conflict between "translate to js but preserve semantics" and "translate to js but make it idiomatic js". |
| 18:20:40 | <monochrom> | s/semantics/source-language semantics/ to be precise |
| 18:20:56 | <mauke> | do you know a language that has explicit tail calls? i.e. where the programmer can say "jump to this function over there, no return" |
| 18:21:12 | <monochrom> | Does iptables count? :) |
| 18:21:22 | <mauke> | I was about to say, outside of asm |
| 18:21:45 | <mauke> | iptables looks to me like a similar idea, just chains of instructions |
| 18:22:03 | <monochrom> | I think Scheme counts, but perhaps indirectly. |
| 18:22:06 | <geekosaur> | I feel like I've seen a language that has `goto <some function>` but I'm not recalling it |
| 18:22:12 | <mauke> | that's perl |
| 18:22:18 | <geekosaur> | oh, right |
| 18:22:45 | <mauke> | I'm wondering if perl invented it or whether there's precedent elsewhere |
| 18:22:46 | <geekosaur> | been too long |
| 18:22:49 | <monochrom> | Scheme's definition makes it completely predictable which calls become tail calls and the others don't. |
| 18:22:55 | → | eggplantade joins (~Eggplanta@2600:1700:38c5:d800:acbe:e88a:3adf:3c7b) |
| 18:23:21 | <mauke> | scheme is more on the side of guaranteed optimizations, I'd say |
| 18:23:27 | <mauke> | along the lines of ApplicativeDo |
| 18:23:35 | <monochrom> | Yeah that's true. |
| 18:24:41 | <EvanR> | llvm has explicit tail calls, C--? |
| 18:25:00 | <[exa]> | monochrom: "idiomatic js" and then people claim react+jsx outputs as good :D |
| 18:26:11 | <mauke> | EvanR: ok, but those aren't meant to be written by humans |
| 18:26:26 | <mauke> | I was looking for more high-level things :-) |
| 18:26:34 | <monochrom> | llvm is too close to asm |
| 18:26:58 | <[exa]> | mauke: does 'yield' count? |
| 18:27:12 | <monochrom> | In fact, too close to ideal asm, too. You actually write single-assignments and phi nodes! |
| 18:27:46 | <mauke> | [exa]: in a way, yield is the exact opposite |
| 18:27:48 | <[exa]> | mauke: also maybe you were searching for........high level assembler, the gem of IBM! |
| 18:28:19 | <mauke> | yield returns up instead of calling deeper, and it can return instead of making everything after it unreachable |
| 18:28:46 | <ski> | "proper tail recursion" in Scheme is not an optimization (and doesn't need to be implemented via TCO), it's a language guarantee (about asymptotic space usage of a (conforming) implementation (that it can support an unbounded number of active tail calls in bounded space)) |
| 18:29:12 | → | danza joins (~francesco@151.37.182.55) |
| 18:33:32 | <EvanR> | llvm, portable assembly. Unlike C |
| 18:34:38 | <EvanR> | is proper tail recursion the technical name in scheme? |
| 18:34:56 | <ski> | yes |
| 18:35:01 | <EvanR> | nice |
| 18:35:31 | <ski> | in Prolog, the term is "Last Call" as opposed to "Tail Call" (the concept was discovered independently in LP) |
| 18:37:36 | <ski> | (there's also TCMC, Tail-Call Modulo Cons(tructor), where you (e.g.) first construct the cons cell of the list, then pass the address of the tail field in the cell to the (usually) recursive call, to fill in (initialize/instantiate) the rest .. the Logic/Functional programming language Mercury can do this, and OCaml also has some support) |
| 18:38:32 | × | sord937 quits (~sord937@gateway/tor-sasl/sord937) (Quit: sord937) |
| 18:39:22 | <ski> | (i recall reading somewhere that because Erlang doesn't have TCMC, a serialization framework for it decided to serialize the elements of lists in reverse order, so that when deserializing it can reconstruct the list with a tail recursion) |
| 18:41:05 | <mauke> | should've had first-class lvalues :-D |
| 18:41:09 | <EvanR> | to be clear, are we talking about construction an entire actual list in memory |
| 18:41:18 | <ski> | yes |
| 18:41:23 | <EvanR> | crazy |
| 18:41:35 | <mauke> | the depravity |
| 18:42:55 | <EvanR> | many languages, purescript included, seem to have a facility for doing lazy list processing in an otherwise non-lazy language. But I don't often see people in those languages enthusiastic about it |
| 18:43:09 | <monochrom> | Well this being OCaml etc., "map f (x:xs) = f x : map f xs" is a bit sad until TCMC. |
| 18:43:09 | <EvanR> | I wonder if it's just cargo culting xD |
| 18:44:10 | <monochrom> | Well yeah most people aren't thrilled about lazy evaluation. |
| 18:45:08 | <dolio> | Why use lazy evaluation when you can manually convolute your program so that things happen in the right order? |
| 18:45:29 | <monochrom> | I like lazy evaluation because I see the half-full glass that offers "map f (x:xs) = f x : map f xs is already constant-space without doing anything special" |
| 18:46:00 | <monochrom> | But other people see the half-empty glass that offers "foldl (+) 0 xs is linear space" |
| 18:46:29 | <mauke> | map f xs = x <- await xs; yield (f x); map f xs |
| 18:48:20 | × | ski quits (~ski@88.131.7.247) (Ping timeout: 255 seconds) |
| 18:49:06 | <EvanR> | foldl not prime on list is a fully empty glass, unless you're implementing last |
| 18:49:45 | <EvanR> | why isn't your map example fully full ? xD |
| 18:50:04 | <EvanR> | (also, fully empty? wtf) |
| 18:50:20 | <monochrom> | Because lazy evaluation is a superposition of both :) |
| 18:53:21 | × | alphacentauri quits (alphacenta@gateway/vpn/protonvpn/alphacentauri) (Quit: WeeChat 4.0.5) |
| 18:53:59 | × | hugo quits (znc@verdigris.lysator.liu.se) (Ping timeout: 246 seconds) |
| 18:54:10 | <EvanR> | is that why we don't want to redefine foldl to be strict, we want to be reminded of the flaws in our ways |
| 18:54:46 | → | alphacentauri joins (alphacenta@gateway/vpn/protonvpn/alphacentauri) |
| 18:55:06 | <EvanR> | better to admit it than paper over it and hide the truth |
| 18:55:43 | <mauke> | @src foldl' |
| 18:55:43 | <lambdabot> | foldl' f a [] = a |
| 18:55:43 | <lambdabot> | foldl' f a (x:xs) = let a' = f a x in a' `seq` foldl' f a' xs |
| 18:55:48 | <nullie> | isn't lazy evaluation a leaky abstraction? |
| 18:56:00 | <monochrom> | No, I think we are just too polite to change historical definitions, even those that were flawed. |
| 18:56:01 | <mauke> | is foldl' guaranteed to work any better? |
| 18:56:24 | <monochrom> | Just look at how people are too polite to actually delete things on the haskell wiki. |
| 18:56:52 | <monochrom> | Yes. |
| 18:57:28 | <EvanR> | foldl' arguably works worse when defining last |
| 18:57:35 | <mauke> | why? |
| 18:57:35 | <EvanR> | which no one ever does |
| 18:58:02 | <dolio> | mauke: Because it blows up if any non-last elements are undefined. |
| 18:58:21 | <dolio> | If I recall. |
| 18:58:52 | <mauke> | no, why is foldl' guaranteed to work better for summing? |
| 18:59:07 | → | lg188 joins (~lg188@82.18.98.230) |
| 18:59:41 | <monochrom> | You have: let a'=a+x in seq a' (foldl' (+) a' xs) |
| 19:00:20 | <mauke> | seq a b = seq b (seq a b) |
| 19:00:57 | <monochrom> | Well OK, next we have to choose one of two paths. |
| 19:01:00 | → | nate2 joins (~nate@c-98-45-169-16.hsd1.ca.comcast.net) |
| 19:01:38 | × | gehmehgeh quits (~user@user/gehmehgeh) (Remote host closed the connection) |
| 19:02:01 | <monochrom> | One path is: You say that the Haskell Report promises strictness only, but then a compiler adds optimizations based on strictness, so a+x is evaluated earlier. |
| 19:02:11 | × | danza quits (~francesco@151.37.182.55) (Ping timeout: 255 seconds) |
| 19:02:19 | → | gehmehgeh joins (~user@user/gehmehgeh) |
| 19:02:23 | <monochrom> | The other path is: I say that seq promises evaluation order in the context of lazy evaluation. |
| 19:03:05 | <monochrom> | I know, neither path is actually completely guaranteed by any signed rubber-stamped documents. |
| 19:05:11 | <monochrom> | But what else is guaranteed by the Haskell Report anyway apart from syntax? :) |
| 19:05:43 | × | nate2 quits (~nate@c-98-45-169-16.hsd1.ca.comcast.net) (Ping timeout: 255 seconds) |
| 19:05:45 | <dolio> | It would take extra work to provide the right semantics without making the sum cases better, I think. |
| 19:06:26 | × | eggplantade quits (~Eggplanta@2600:1700:38c5:d800:acbe:e88a:3adf:3c7b) (Remote host closed the connection) |
| 19:06:41 | → | eggplantade joins (~Eggplanta@2600:1700:38c5:d800:acbe:e88a:3adf:3c7b) |
| 19:07:46 | <monochrom> | I raise two points outside the signed rubber-stamped documents. |
| 19:08:51 | <monochrom> | 1. Consider why it ends up being named "seq" rather than, say, "strict". (In fact, an old textbook of Bird called it "strict". (And went on to show the confusion between strict/non-strict and eager/lazy.)) |
| 19:09:23 | → | privacy joins (~privacy@user/privacy) |
| 19:10:46 | <monochrom> | 2. John Hughes in an interview said: His contribution was adding a way to disable laziness to solve the space problem. |
| 19:10:50 | × | lg188 quits (~lg188@82.18.98.230) (Ping timeout: 255 seconds) |
| 19:11:33 | <EvanR> | also language gains meaning through use, and that's how/why it's used |
| 19:11:43 | <monochrom> | The intention of seq is very much eagerness, despite how the committee was too afraid to put in black on white. |
| 19:13:45 | <mauke> | seq (error "a") (error "b") |
| 19:14:07 | <EvanR> | > seq (error "a") (error "b") |
| 19:14:09 | <lambdabot> | *Exception: a |
| 19:14:18 | <mauke> | I don't think ghc guarantees "a" |
| 19:14:18 | <EvanR> | cromulent |
| 19:14:43 | <EvanR> | at least that test doesn't contradict the arguments made by monochrom |
| 19:14:52 | <monochrom> | You are right about that. When there are two errors to choose from, GHC optimizations can end up choosing the unexpected one. |
| 19:14:54 | <mauke> | true, but why does pseq exist? |
| 19:14:56 | <dolio> | It's not about "afraid." Imposing an exact evaluation order is less useful. |
| 19:15:08 | <EvanR> | but not I kind of see the value in rubber stamped documents "guaranteeing" something, it makes this entire discussion miraculously unnecessary |
| 19:15:20 | <EvanR> | now* |
| 19:16:07 | × | eggplantade quits (~Eggplanta@2600:1700:38c5:d800:acbe:e88a:3adf:3c7b) (Remote host closed the connection) |
| 19:16:15 | <monochrom> | But foldl' (+) 0 [1..10000] contains no errors. The same strictness analysis and optimizations will keep it constant space. |
| 19:17:08 | <dolio> | You want to enable the compiler to make good decisions about the exact evaluation order given the local context it has. For sum, the compiler knows what to do as long as it isn't required to give the non-strict semantics. |
| 19:17:32 | <dolio> | That you can be a pedantic dipshit and say, "technically it could do something really bad instead," is irrelevant. |
| 19:18:05 | × | mc47 quits (~mc47@xmonad/TheMC47) (Remote host closed the connection) |
| 19:21:39 | <monochrom> | pseq exists because, hell, even today, GHC optimizer isn't quite aware of parallelization. |
| 19:25:29 | → | Unicorn_Princess joins (~Unicorn_P@user/Unicorn-Princess/x-3540542) |
| 19:27:42 | → | phma_ joins (~phma@host-67-44-208-58.hnremote.net) |
| 19:31:11 | <monochrom> | You know what, I don't think even standard C states that "x = 0;" takes constant space or constant time. :) |
| 19:31:13 | × | phma quits (~phma@host-67-44-208-58.hnremote.net) (Ping timeout: 255 seconds) |
| 19:31:59 | × | YuutaW quits (~YuutaW@2404:f4c0:f9c3:502::100:17b7) (Read error: Connection reset by peer) |
| 19:32:07 | <mauke> | I wonder if C even has time |
| 19:32:14 | → | YuutaW joins (~YuutaW@2404:f4c0:f9c3:502::100:17b7) |
| 19:44:10 | <EvanR> | as you approach C time comes to a stop so no |
| 19:46:55 | <monochrom> | haha |
| 19:47:05 | <monochrom> | @quote monochrom einstein |
| 19:47:06 | <lambdabot> | monochrom says: einstein's theory implies that haskell cannot be faster than c |
| 19:47:30 | × | alphacentauri quits (alphacenta@gateway/vpn/protonvpn/alphacentauri) (Quit: WeeChat 4.0.5) |
| 19:48:33 | → | eggplantade joins (~Eggplanta@2600:1700:38c5:d800:5d3c:fd45:6dba:f35a) |
| 19:49:05 | × | iteratee quits (~kyle@162.218.222.207) (Ping timeout: 255 seconds) |
| 19:49:30 | → | iteratee joins (~kyle@162.218.222.207) |
| 19:49:54 | → | alphacentauri joins (alphacenta@gateway/vpn/protonvpn/alphacentauri) |
| 19:50:47 | <EvanR> | right now I'm trying to write a haskell version of a tool script in the zig codebase. Right now with optimizations I'm at .043ms while the zig version is .005ms |
| 19:52:05 | <EvanR> | 11% zig |
| 19:53:00 | <mauke> | move `zig` |
| 19:54:15 | <EvanR> | hopefully I can pick up some time by going through ByteString instead of String I/O |
| 19:55:51 | <mauke> | what does the tool do? |
| 19:56:17 | × | iteratee quits (~kyle@162.218.222.207) (Ping timeout: 255 seconds) |
| 19:56:29 | → | lg188 joins (~lg188@82.18.98.230) |
| 19:56:33 | → | iteratee joins (~kyle@162.218.222.207) |
| 19:57:49 | → | Tuplanolla joins (~Tuplanoll@91-159-68-236.elisa-laajakaista.fi) |
| 19:58:25 | <EvanR> | it extracts syscall numbers from linux source code from various files and creates a zig file |
| 19:58:39 | × | dcoutts quits (~duncan@cpc69402-oxfd27-2-0-cust903.4-3.cable.virginm.net) (Ping timeout: 240 seconds) |
| 19:59:36 | <EvanR> | well the product just goes to stdout |
| 19:59:54 | <mauke> | ah, like h2ph / syscall.ph |
| 20:03:26 | × | hrberg quits (~quassel@171.79-160-161.customer.lyse.net) (Quit: https://quassel-irc.org - Chat comfortably. Anywhere.) |
| 20:05:16 | → | hugo- joins (znc@verdigris.lysator.liu.se) |
| 20:06:01 | → | hrberg joins (~quassel@171.79-160-161.customer.lyse.net) |
| 20:09:35 | → | machinedgod joins (~machinedg@d198-53-218-113.abhsia.telus.net) |
| 20:11:48 | × | takuan quits (~takuan@178-116-218-225.access.telenet.be) (Remote host closed the connection) |
| 20:12:58 | → | ft joins (~ft@p3e9bc680.dip0.t-ipconnect.de) |
| 20:15:58 | × | _ht quits (~Thunderbi@28-52-174-82.ftth.glasoperator.nl) (Quit: _ht) |
| 20:28:01 | × | cpressey quits (~cpressey@host-2-102-11-74.as13285.net) (Quit: Client closed) |
| 20:37:12 | → | cpressey joins (~cpressey@host-2-102-11-74.as13285.net) |
| 20:39:23 | × | __monty__ quits (~toonn@user/toonn) (Ping timeout: 255 seconds) |
| 20:39:45 | → | __monty__ joins (~toonn@user/toonn) |
| 20:41:57 | → | wroathe joins (~wroathe@207-153-38-140.fttp.usinternet.com) |
| 20:41:57 | × | wroathe quits (~wroathe@207-153-38-140.fttp.usinternet.com) (Changing host) |
| 20:41:57 | → | wroathe joins (~wroathe@user/wroathe) |
| 20:47:27 | × | wroathe quits (~wroathe@user/wroathe) (Ping timeout: 240 seconds) |
| 20:53:41 | → | jmdaemon joins (~jmdaemon@user/jmdaemon) |
| 20:58:32 | × | michalz quits (~michalz@185.246.207.200) (Remote host closed the connection) |
| 21:01:13 | → | pavonia joins (~user@user/siracusa) |
| 21:05:28 | phma_ | is now known as phma |
| 21:06:03 | → | myxos joins (~myxos@cpe-65-28-251-121.cinci.res.rr.com) |
| 21:10:22 | × | simendsjo quits (~user@84.211.91.241) (Ping timeout: 255 seconds) |
| 21:13:05 | → | dcoutts joins (~duncan@cpc69402-oxfd27-2-0-cust903.4-3.cable.virginm.net) |
| 21:14:49 | × | billchenchina quits (~billchenc@2a0d:2580:ff0c:1:e3c9:c52b:a429:5bfe) (Quit: Leaving) |
| 21:18:23 | × | fendor quits (~fendor@2a02:8388:1640:be00:aab:1226:f274:5021) (Remote host closed the connection) |
| 21:22:20 | → | [itchyjunk] joins (~itchyjunk@user/itchyjunk/x-7353470) |
| 21:24:02 | × | cpressey quits (~cpressey@host-2-102-11-74.as13285.net) (Quit: Client closed) |
| 21:27:27 | → | wroathe joins (~wroathe@user/wroathe) |
| 21:30:04 | × | acidjnk quits (~acidjnk@p200300d6e7072f8019cae40178150491.dip0.t-ipconnect.de) (Ping timeout: 245 seconds) |
| 21:32:05 | × | dcoutts quits (~duncan@cpc69402-oxfd27-2-0-cust903.4-3.cable.virginm.net) (Ping timeout: 240 seconds) |
| 21:42:05 | × | Jackneill quits (~Jackneill@20014C4E1E021C00E4226B7959631CE0.dsl.pool.telekom.hu) (Ping timeout: 240 seconds) |
| 21:42:12 | → | Inst joins (~Inst@120.244.192.250) |
| 21:42:35 | <Inst> | what are the efficiency advantages of a list comprehension vs filter? |
| 21:44:01 | × | __monty__ quits (~toonn@user/toonn) (Quit: leaving) |
| 21:45:18 | <davean> | Inst: I mean list comprehensions are far more powerful than filter. |
| 21:45:57 | <davean> | You're comparing a helicopter to a ski lift. Thy can both get you up the mountain. Whats the efficiency difference? For doing what filter can do? |
| 21:46:07 | <Inst> | i guess it's more easy to extend, I'm discussing code in cabal, and I'm surprised this is being done via a list comprehension instead of a filter, but I'm called a point-free addict sometimes |
| 21:46:10 | <haskellbridge> | <sm> did you mean list comprehensions vs standard function composition ? no difference I think |
| 21:46:39 | <haskellbridge> | <sm> it's a readability choice |
| 21:46:55 | <Inst> | [ cmd | cmd@(Command cname' _ _ _) <- commands', cname' == cname] vs |
| 21:47:13 | <Inst> | filter (\(Command cname' _ _ _) -> cname' == cname) |
| 21:47:16 | <geekosaur> | @undo [ cmd | cmd@(Command cname' _ _ _) <- commands', cname' == cname] |
| 21:47:16 | <lambdabot> | concatMap (\ a -> case a of { cmd@(Command cname' _ _ _) -> if cname' == cname then [cmd] else []; _ -> []}) commands' |
| 21:47:47 | <davean> | geekosaur: that is the worst undo of that ... |
| 21:47:52 | <geekosaur> | yeh |
| 21:47:59 | <davean> | I'd be hard pressed to write a worse version of undoing it. |
| 21:47:59 | <geekosaur> | thought it used map and filter these days |
| 21:48:19 | × | jmdaemon quits (~jmdaemon@user/jmdaemon) (Ping timeout: 264 seconds) |
| 21:49:00 | <Inst> | iirc list comprehensions desugar to concatmap |
| 21:49:18 | <geekosaur> | they only do if MonadComprehensions is in effect, I think |
| 21:51:12 | ChanServ | sets mode +o litharge |
| 21:51:13 | litharge | sets mode -bo *!*@190.123.41.211 litharge |
| 21:52:17 | <monochrom> | I think there are two points. 1. List comprehension and filter go through different pathways in GHC. 2. But end up being the same asm code. |
| 21:52:19 | <geekosaur> | yeh, 0-ddump-ds shows no use of concatMap |
| 21:56:46 | → | jmdaemon joins (~jmdaemon@user/jmdaemon) |
| 21:57:19 | × | privacy quits (~privacy@user/privacy) (Quit: Leaving) |
| 22:01:50 | × | leah2 quits (~leah@vuxu.org) (Ping timeout: 255 seconds) |
| 22:10:16 | → | Sgeo joins (~Sgeo@user/sgeo) |
| 22:14:03 | × | tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…) |
| 22:14:47 | → | leah2 joins (~leah@vuxu.org) |
| 22:20:35 | × | haskellbridge quits (~haskellbr@069-135-003-034.biz.spectrum.com) (Ping timeout: 240 seconds) |
| 22:22:39 | × | AlexZenon quits (~alzenon@94.233.241.173) (Ping timeout: 240 seconds) |
| 22:23:33 | → | haskellbridge joins (~haskellbr@069-135-003-034.biz.spectrum.com) |
| 22:23:33 | ChanServ | sets mode +v haskellbridge |
| 22:23:34 | × | haskellbridge quits (~haskellbr@069-135-003-034.biz.spectrum.com) (Remote host closed the connection) |
| 22:23:55 | → | haskellbridge joins (~haskellbr@069-135-003-034.biz.spectrum.com) |
| 22:23:55 | ChanServ | sets mode +v haskellbridge |
| 22:29:06 | × | patrl quits (~patrl@user/patrl) (Remote host closed the connection) |
| 22:29:14 | → | AlexZenon joins (~alzenon@94.233.241.173) |
| 22:29:24 | → | patrl joins (~patrl@user/patrl) |
| 22:31:48 | × | wroathe quits (~wroathe@user/wroathe) (Ping timeout: 255 seconds) |
| 22:32:11 | → | hiyori joins (~hiyori@user/hiyori) |
| 22:35:11 | → | harveypwca joins (~harveypwc@2601:246:c280:6a90:837d:db39:3eea:f7db) |
| 22:37:31 | × | grnman_ quits (~michaelsc@c-66-176-3-51.hsd1.fl.comcast.net) (Ping timeout: 264 seconds) |
| 22:37:57 | × | gehmehgeh quits (~user@user/gehmehgeh) (Quit: Leaving) |
| 22:41:14 | × | tcard_ quits (~tcard@2400:4051:5801:7500:cf17:befc:ff82:5303) (Read error: Connection reset by peer) |
| 22:41:27 | → | tcard_ joins (~tcard@2400:4051:5801:7500:cf17:befc:ff82:5303) |
| 22:44:26 | → | Square joins (~Square@user/square) |
| 22:44:28 | <Inst> | ls |
| 22:44:38 | <geekosaur> | . |
| 22:44:48 | <davean> | .. |
| 22:44:51 | × | patrl quits (~patrl@user/patrl) (Remote host closed the connection) |
| 22:45:01 | <Inst> | typo, but this is now a dumb instinct i have whenever i find a text prompt |
| 22:45:05 | → | patrl joins (~patrl@user/patrl) |
| 22:45:07 | <EvanR> | after converting everything to lazy bytestring I went from 0.044ms to 0.083ms. Strict bytestring (in which case hGetContents just loads everything immediately), 0.034ms |
| 22:45:24 | <EvanR> | strictness for the win |
| 22:46:04 | <davean> | uh, you're likely missattributing that. lazy bytestrings are a different datastructure with different computational efficiencies |
| 22:46:28 | <EvanR> | yes not strictness, but strict bytestringness |
| 22:46:56 | <davean> | yah, lazy bytestring is a rather inefficient structure for what you get! |
| 22:47:19 | <EvanR> | I just realized the incongruous names of the two bytestrings |
| 22:47:30 | <EvanR> | strict vs eager, non-strict vs lazy |
| 22:48:23 | <c_wraith> | both terms *are* accurate |
| 22:48:28 | <monochrom> | We need to talk about Data.Map.Eager and Data.Map.Nonstrict. >:) |
| 22:48:37 | <c_wraith> | they're just not exactly a matched pair |
| 22:49:07 | <monochrom> | Data.Map.Do.It.Now |
| 22:49:10 | → | Guest48 joins (~Guest2@85-147-192-197.cable.dynamic.v4.ziggo.nl) |
| 22:49:12 | <c_wraith> | though I suppose Haskell as a language never guarantees laziness. that's up to GHC. |
| 22:49:25 | <c_wraith> | Haskell only guarantees non-strict properties. |
| 22:49:29 | × | Guest48 quits (~Guest2@85-147-192-197.cable.dynamic.v4.ziggo.nl) (Client Quit) |
| 22:49:52 | <EvanR> | must keep GHC well fed or it will become angry and turn all our lists strict and our bytestrings lazy |
| 22:49:55 | <monochrom> | Haha we just went through how little any standard doc guarantees anything at all a couple of hours ago. |
| 22:50:17 | <dolio> | It can't turn them strict, at least. |
| 22:50:25 | <monochrom> | I bet you no standard doc even guarantees that evaluating 1+1 even takes constant time or space. |
| 22:50:29 | <c_wraith> | the whole "unevaluated expressions are represented by thunks that memoize results after calculation" is a specific implementation choice. |
| 22:50:57 | <monochrom> | Yeah this is why I don't use the word "thunk" even when teaching lazy evaluation. |
| 22:51:12 | <monochrom> | "partly unevaluated expression" is just fine. |
| 22:51:21 | <c_wraith> | not even if you hit someone over the head for not paying attention? |
| 22:51:54 | <EvanR> | I still am kind of boggling that lazy bytestring is performing twice as slow as list of Char |
| 22:51:59 | <c_wraith> | I may be misremembering how college courses go. |
| 22:52:30 | <c_wraith> | EvanR: When you're seeing that result, there's a good chance list fusion played a part |
| 22:52:33 | <monochrom> | Oh my students don't pay attention during class. That's fine. They will after class, reviewing lecture slides and doing homework. |
| 22:52:55 | <EvanR> | list (+ fusion) for the win |
| 22:53:10 | <geekosaur> | EvanR, you're talking times that are short enough that I could imagine the extra indirection on all lazy ByteStrings being relevant |
| 22:53:13 | <monochrom> | Lazy bytestring is supposed to enjoy fusion too. |
| 22:53:24 | <monochrom> | Ah. That. |
| 22:53:30 | <c_wraith> | geekosaur: there's no way lazy bytestring has *more* indirection than String |
| 22:53:57 | <geekosaur> | no, but I expect String fuses in more cases |
| 22:53:58 | <monochrom> | Time to look at Core, even Cmm? |
| 22:54:00 | <c_wraith> | ... if the String is ever materialized |
| 22:54:10 | <c_wraith> | yeah, fusion again |
| 22:55:48 | <dolio> | bytestring doesn't actually hasn't had fusion for a long time, if it ever did. |
| 22:56:05 | geekosaur | fails to parse |
| 22:56:06 | × | jmdaemon quits (~jmdaemon@user/jmdaemon) (Ping timeout: 260 seconds) |
| 22:56:11 | <EvanR> | my brain just exploded |
| 22:56:12 | <dolio> | Yeah, I edited that poorly. |
| 22:56:20 | <dolio> | It doesn't have fusion. |
| 22:56:48 | <EvanR> | so (strict, at least) bytestring is more what you see is what you get |
| 22:56:57 | <dolio> | I don't know if it was all ripped out, or if it never got added. |
| 22:57:22 | <monochrom> | :( |
| 22:58:07 | <EvanR> | I guess I should try Text for completeness |
| 23:00:51 | <dolio> | I definitely remember talk about it when it first debuted. |
| 23:02:29 | → | nate2 joins (~nate@c-98-45-169-16.hsd1.ca.comcast.net) |
| 23:03:29 | <EvanR> | (strict) Text gets the same exact time as strict bytestring |
| 23:03:52 | <EvanR> | text-2.0 which is utf8 right |
| 23:03:57 | <geekosaur> | yes |
| 23:05:16 | × | td_ quits (~td@2001:9e8:19f7:c900:55c4:edef:d459:6ff7) (Ping timeout: 248 seconds) |
| 23:05:17 | <EvanR> | so it's probably more or less identical algorithms to my Bytestring.Char8 code |
| 23:05:24 | <EvanR> | on ascii |
| 23:07:25 | <EvanR> | except Text is apparently implemented with a ByteArray# and ByteString is a foreign pointer |
| 23:07:31 | × | nate2 quits (~nate@c-98-45-169-16.hsd1.ca.comcast.net) (Ping timeout: 264 seconds) |
| 23:08:58 | <EvanR> | it must be that my minimum time just doesn't have anything to do with the data structure anymore |
| 23:13:11 | <solrize> | https://gitlab.haskell.org/ghc/ghc/-/wikis/linear-types i just found out that this got merged into ghc a while back i hadn't been paying tattention. i'm wondering if there could be some way to have linear values with i/o actions inside, so you can consume the value inside a pure function and have the action happen, sort of how i/o in Clean worked |
| 23:14:19 | → | harveypwca_ joins (~harveypwc@2601:246:c280:6a90:837d:db39:3eea:f7db) |
| 23:15:49 | → | Square3 joins (~Square4@user/square) |
| 23:15:55 | × | ph88 quits (~ph88@ip5b406c07.dynamic.kabel-deutschland.de) (Ping timeout: 255 seconds) |
| 23:17:03 | × | harveypwca quits (~harveypwc@2601:246:c280:6a90:837d:db39:3eea:f7db) (Ping timeout: 240 seconds) |
| 23:17:31 | <solrize> | the IO monad is kind of a hack to get around the former absence of linear types in haskell, right? It's State RealWorld a |
| 23:18:06 | × | kantokuen quits (~kantokuen@user/kantokuen) (Read error: Connection reset by peer) |
| 23:18:15 | × | Square quits (~Square@user/square) (Ping timeout: 240 seconds) |
| 23:19:24 | × | EvanR quits (~EvanR@user/evanr) (Ping timeout: 240 seconds) |
| 23:20:16 | × | ddellacosta quits (~ddellacos@ool-44c738de.dyn.optonline.net) (Ping timeout: 255 seconds) |
| 23:20:17 | × | apache2 quits (apache2@anubis.0x90.dk) (Remote host closed the connection) |
| 23:20:26 | → | apache2 joins (apache2@anubis.0x90.dk) |
| 23:21:16 | → | ddellacosta joins (~ddellacos@ool-44c738de.dyn.optonline.net) |
| 23:21:22 | × | Square3 quits (~Square4@user/square) (Remote host closed the connection) |
| 23:21:33 | <solrize> | https://downloads.haskell.org/ghc/latest/docs/users_guide/exts/linear_types.html sorry meant this, it is a little different from the wiki page but i'll read the wiki page now |
| 23:22:14 | ← | L29Ah parts (~L29Ah@wikipedia/L29Ah) () |
| 23:24:21 | → | EvanR joins (~EvanR@user/evanr) |
| 23:25:31 | <geekosaur> | you can want sequencing without linearity, so I'd say no unless the linearity is specific to the "RealWorld" token. and even then I think that prevents e.g. forkIO |
| 23:25:49 | → | kantokuen joins (~kantokuen@user/kantokuen) |
| 23:26:02 | <EvanR> | how did/does Clean work? |
| 23:26:56 | → | td_ joins (~td@83.135.9.0) |
| 23:27:41 | <solrize> | geekosaur, yeah RealWorld is sort of a fiction in the face of concurrency. Clean had something called uniqueness types which were sort of like linear types |
| 23:27:49 | <solrize> | and used them for effects |
| 23:28:00 | <dolio> | It doesn't make any actual semantic sense. |
| 23:28:00 | <solrize> | https://en.wikipedia.org/wiki/Clean_(programming_language) |
| 23:28:24 | <solrize> | yeah there is a paper "tackling the awkward squad" which dishes the dirt |
| 23:28:47 | <solrize> | https://www.microsoft.com/en-us/research/publication/tackling-awkward-squad-monadic-inputoutput-concurrency-exceptions-foreign-language-calls-haskell/ |
| 23:29:07 | → | ph88 joins (~ph88@2a01:598:b034:e155:39dc:f437:99ae:bc1f) |
| 23:33:08 | <EvanR> | IO could easily be an abstract data type of primitive actions string together with a >>= operation |
| 23:33:16 | <EvanR> | strung together* |
| 23:33:40 | <EvanR> | uniqueness or linear types must be for something else |
| 23:41:23 | <Inst> | why does Snoyman use so much template Haskell? |
| 23:41:34 | × | oo_miguel quits (~Thunderbi@78-11-179-96.static.ip.netia.com.pl) (Ping timeout: 255 seconds) |
| 23:41:40 | <monochrom> | Wouldn't you ask Snoyman? :) |
| 23:41:46 | <geekosaur> | like I said, sequencing. linear types would prevent "forking" a series of I/O actions that could run concurrently with other actions; monads provide a mechanism for direct sequencing |
| 23:42:00 | <Inst> | Well, he's busy |
| 23:42:34 | <Inst> | to a large extent a lot of stuff in Haskell seems to be code archaeology |
| 23:42:36 | <geekosaur> | that doesn't mean other people know |
| 23:42:52 | → | myxokephale joins (~myxos@cpe-65-28-251-121.cinci.res.rr.com) |
| 23:43:00 | <Inst> | as in, there's code that represents ancient notions of what was good practice at the time |
| 23:43:16 | × | myxokephale quits (~myxos@cpe-65-28-251-121.cinci.res.rr.com) (Client Quit) |
| 23:43:20 | × | kantokuen quits (~kantokuen@user/kantokuen) (Quit: brb) |
| 23:43:34 | <monochrom> | I don't understand why a lot of stuff in Haskell is code archaeology. What I see is you are doing code archaeology. |
| 23:44:48 | → | Square joins (~Square4@user/square) |
| 23:45:28 | <Inst> | yeah, i guess |
| 23:45:57 | <Inst> | for the exact same niche as yesod, i should be looking at IHP for something recent |
| 23:46:17 | <Inst> | then i don't get a right to complain about 20 year old libraries |
| 23:46:40 | <geekosaur> | sometimes things are used just because they work. Servant is a good example |
| 23:46:43 | <monochrom> | At the beginning, someone suggested you to look at existing code so as to accelerate you writing your own production code. But as it turns out, you turn that into its own rabbit hole for its own sake so as to prevent you from writing any code at all. |
| 23:46:46 | <geekosaur> | or scotty or spock |
| 23:47:13 | → | kantokuen joins (~kantokuen@user/kantokuen) |
| 23:47:32 | × | hgolden_ quits (~hgolden@cpe-172-251-233-141.socal.res.rr.com) (Quit: Leaving) |
| 23:47:44 | <geekosaur> | but I'm not saying look at their code, I'm saying make use of them |
| 23:49:53 | <Inst> | you must be mistaken, I'm looking at Cabal to figure out how to write an exact parser |
| 23:49:58 | <monochrom> | Anyway, back to IO and linearity. |
| 23:50:07 | <Inst> | Yesod is more me getting bored and trying to take a break to do an easy project |
| 23:50:21 | × | EvanR quits (~EvanR@user/evanr) (Ping timeout: 260 seconds) |
| 23:51:24 | <monochrom> | If you use the World->(a,World) model for IO and/or ST, you can notice that the World is used linearly (or stronger) (if you ignore concurrency and unsafePerformIO). This is where linear types and uniqueness types can come in. |
| 23:51:54 | → | EvanR joins (~EvanR@user/evanr) |
| 23:52:09 | <monochrom> | In fact, Wadler wrote a "linear types can change the world!" paper that suggests linear types instead of monads for ST. (The rest is history.) |
| 23:52:58 | <monochrom> | Thing is, Wadler wrote both "monads for mutable states" and "linearity for mutable states" so he was successful, one of his proposals was adopted. :) |
| 23:54:56 | <solrize> | lol |
| 23:54:57 | → | myxokephale joins (~myxos@cpe-65-28-251-121.cinci.res.rr.com) |
| 23:55:02 | <monochrom> | Concurrency should be the best reason why linearity will run into a roadblock for the pupose of IO. But I am depraved, my first instinct was "but it conflicts with unsafePerformIO". Am I evil? |
| 23:55:06 | × | Square quits (~Square4@user/square) (Quit: Leaving) |
| 23:55:40 | <dolio> | It doesn't work for infinite processes, either. |
| 23:56:06 | <EvanR> | obviously linear types only works for single threaded code, it's linear. To express concurrency you need non-linear types |
| 23:56:14 | <EvanR> | multilinear |
| 23:56:28 | <dolio> | How is `forever (putStrLn "Hello")` different from `forever (return ())`? |
| 23:56:42 | <solrize> | World->(a,World) is also single threaded |
| 23:56:56 | <EvanR> | I was joking |
| 23:57:11 | <EvanR> | but World -> (a, World) explains what I was wondering |
| 23:57:20 | <EvanR> | answers my question |
| 23:57:25 | <monochrom> | :) |
| 23:58:13 | <dolio> | If you try to use State, then those both look like `const undefined`. |
| 23:59:06 | <dolio> | Which of course doesn't even look linear, but the terms you wrote do. |
| 23:59:57 | <EvanR> | ghci really doesn't like forever (return ()) |
All times are in UTC on 2023-10-11.