Home liberachat/#haskell: Logs Calendar

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> <s​m> 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> <I​nst> Here's something I don't get. How does `join` even work?
15:05:02 <haskellbridge> <I​nst> (>>= id)
15:05:07 <haskellbridge> <I​nst> 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> <I​nst> (>>=) :: m a -> (a -> m b) -> m b
15:06:05 <haskellbridge> <I​nst> 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> <I​nst> 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> <I​nst> 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> <I​nst> 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> <I​nst> 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> <I​nst> 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> <I​nst> 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> <I​nst> 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> <I​nst> actually, i'm checking whether id is kind polymorphic in its type variables
15:17:43 <haskellbridge> <I​nst> :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> <I​nst> @c_wraith is this correct?
15:18:30 <haskellbridge> <I​nst> 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> <I​nst> "Then the type of (>>=) is restricted to m (m b) -> (m b -> m b) -> m b"
15:19:59 <haskellbridge> <I​nst> 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> <I​nst> 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> <I​nst> 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> <I​nst> 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> <I​nst> Thanks EvanR for the response :)
15:23:24 <ncf> what's an implicit join?
15:23:48 <haskellbridge> <I​nst> 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> <I​nst> then ((u :: m (m a)) >>= foo) :: m b
15:24:53 <haskellbridge> <I​nst> i mean that's implicit, if foo is m a -> m b
15:24:55 <haskellbridge> <I​nst> then you bind into it
15:25:24 <haskellbridge> <I​nst> 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> <I​nst> 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> <I​nst> 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> <I​nst> 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> <I​nst> 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> <I​nst> 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> <I​nst> 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> <I​nst> 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> <I​nst> feels like it
16:02:13 <EvanR> then no
16:02:29 <haskellbridge> <I​nst> keywords are finite and countable
16:02:36 <EvanR> then yes
16:02:37 <haskellbridge> <I​nst> number of keywords are also finite and countable
16:03:19 <haskellbridge> <I​nst> 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> <I​nst> Elm, giggle
16:06:33 <haskellbridge> <I​nst> _ / 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> <I​nst> 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> <I​nst> 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> <I​nst> 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> <I​nst> 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> <I​nst> 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> <I​nst> yeah, undersstood
16:14:24 <haskellbridge> <I​nst> 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> <I​nst> 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> <s​m> did you mean list comprehensions vs standard function composition ? no difference I think
21:46:39 <haskellbridge> <s​m> 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.