Home liberachat/#haskell: Logs Calendar

Logs on 2023-02-10 (liberachat/#haskell)

00:00:20 nattiestnate joins (~nate@202.138.250.11)
00:01:26 × nattiestnate quits (~nate@202.138.250.11) (Client Quit)
00:05:30 × notzmv quits (~zmv@user/notzmv) (Ping timeout: 252 seconds)
00:09:26 jmorris joins (uid537181@id-537181.uxbridge.irccloud.com)
00:09:31 × Tuplanolla quits (~Tuplanoll@91-159-68-152.elisa-laajakaista.fi) (Quit: Leaving.)
00:10:27 × opticblast quits (~Thunderbi@172.58.84.5) (Ping timeout: 260 seconds)
00:15:59 coot parts (~coot@2a02:a310:e241:1b00:ec1a:e9df:79ac:66ba) ()
00:18:26 _leo___ joins (~emmanuelu@user/emmanuelux)
00:21:11 × azimut quits (~azimut@gateway/tor-sasl/azimut) (Ping timeout: 255 seconds)
00:21:40 × emmanuelux quits (~emmanuelu@user/emmanuelux) (Ping timeout: 260 seconds)
00:24:52 × FinnElija quits (~finn_elij@user/finn-elija/x-0085643) (Remote host closed the connection)
00:25:29 nattiestnate joins (~nate@202.138.250.6)
00:25:31 FinnElija joins (~finn_elij@user/finn-elija/x-0085643)
00:37:30 merijn joins (~merijn@86-86-29-250.fixed.kpn.net)
00:38:44 bitdex joins (~bitdex@gateway/tor-sasl/bitdex)
00:43:11 × merijn quits (~merijn@86-86-29-250.fixed.kpn.net) (Ping timeout: 268 seconds)
00:54:18 azimut joins (~azimut@gateway/tor-sasl/azimut)
01:05:52 wroathe joins (~wroathe@207-153-38-140.fttp.usinternet.com)
01:05:52 × wroathe quits (~wroathe@207-153-38-140.fttp.usinternet.com) (Changing host)
01:05:52 wroathe joins (~wroathe@user/wroathe)
01:05:55 dcoutts_ joins (~duncan@host86-167-90-212.range86-167.btcentralplus.com)
01:07:50 × dcoutts quits (~duncan@host86-151-9-49.range86-151.btcentralplus.com) (Ping timeout: 252 seconds)
01:10:42 × albet70 quits (~xxx@2400:8902::f03c:92ff:fe60:98d8) (Remote host closed the connection)
01:11:21 troydm joins (~troydm@user/troydm)
01:16:49 albet70 joins (~xxx@2400:8902::f03c:92ff:fe60:98d8)
01:20:37 × werneta quits (~werneta@137.79.195.231) (Remote host closed the connection)
01:26:59 × waleee quits (~waleee@2001:9b0:21c:4000:5bf9:6515:c030:57b7) (Ping timeout: 260 seconds)
01:31:32 eggplantade joins (~Eggplanta@2600:1700:38c5:d800:54db:de44:4607:1cea)
01:35:59 × eggplantade quits (~Eggplanta@2600:1700:38c5:d800:54db:de44:4607:1cea) (Ping timeout: 248 seconds)
01:36:09 × geekosaur quits (~geekosaur@xmonad/geekosaur) (Quit: Leaving)
01:40:27 × _xor quits (~xor@74.215.182.83) (Quit: brb)
01:40:28 × codaraxis___ quits (~codaraxis@user/codaraxis) (Ping timeout: 252 seconds)
01:41:41 × MQ-17J quits (~MQ-17J@104.28.216.166) (Ping timeout: 246 seconds)
01:41:58 geekosaur joins (~geekosaur@xmonad/geekosaur)
01:42:13 MQ-17J joins (~MQ-17J@104.28.216.166)
01:43:32 irrgit__ joins (~irrgit@89.47.234.74)
01:44:47 × xff0x quits (~xff0x@2405:6580:b080:900:876a:aa31:e2c4:b726) (Ping timeout: 255 seconds)
01:45:32 × irrgit_ quits (~irrgit@176.113.74.130) (Ping timeout: 265 seconds)
01:47:17 Sciencentistguy5 joins (~sciencent@hacksoc/ordinary-member)
01:47:37 thongpv87 joins (~thongpv87@2402:9d80:36f:d082:2f70:3163:c158:b60a)
01:49:17 × Sciencentistguy quits (~sciencent@hacksoc/ordinary-member) (Ping timeout: 252 seconds)
01:49:17 Sciencentistguy5 is now known as Sciencentistguy
02:06:44 rettahcay joins (~kaushikv@c-24-20-37-193.hsd1.or.comcast.net)
02:12:47 × MQ-17J quits (~MQ-17J@104.28.216.166) (Ping timeout: 248 seconds)
02:13:19 MQ-17J joins (~MQ-17J@104.28.216.165)
02:22:35 × beteigeuze quits (~Thunderbi@a79-169-109-107.cpe.netcabo.pt) (Ping timeout: 248 seconds)
02:24:07 gehmehgeh joins (~user@user/gehmehgeh)
02:24:31 × Lord_of_Life quits (~Lord@user/lord-of-life/x-2819915) (Ping timeout: 252 seconds)
02:25:05 Lord_of_Life joins (~Lord@user/lord-of-life/x-2819915)
02:25:23 × gmg quits (~user@user/gehmehgeh) (Ping timeout: 255 seconds)
02:25:47 × MQ-17J quits (~MQ-17J@104.28.216.165) (Quit: Quit)
02:26:00 MQ-17J joins (~MQ-17J@104.28.216.165)
02:38:48 × Midjak quits (~Midjak@82.66.147.146) (Quit: This computer has gone to sleep)
02:40:25 xff0x joins (~xff0x@125x103x176x34.ap125.ftth.ucom.ne.jp)
02:44:17 × azimut quits (~azimut@gateway/tor-sasl/azimut) (Ping timeout: 255 seconds)
02:44:24 azimut_ joins (~azimut@gateway/tor-sasl/azimut)
02:49:12 rekahsoft joins (~rekahsoft@bras-base-orllon1122w-grc-05-174-88-194-86.dsl.bell.ca)
02:50:53 × rekahsoft quits (~rekahsoft@bras-base-orllon1122w-grc-05-174-88-194-86.dsl.bell.ca) (Remote host closed the connection)
02:51:38 rekahsoft joins (~rekahsoft@bras-base-orllon1122w-grc-05-174-88-194-86.dsl.bell.ca)
02:57:45 × rekahsoft quits (~rekahsoft@bras-base-orllon1122w-grc-05-174-88-194-86.dsl.bell.ca) (Remote host closed the connection)
02:58:26 rekahsoft joins (~rekahsoft@bras-base-orllon1122w-grc-05-174-88-194-86.dsl.bell.ca)
03:02:52 × rekahsoft quits (~rekahsoft@bras-base-orllon1122w-grc-05-174-88-194-86.dsl.bell.ca) (Remote host closed the connection)
03:05:29 × jero98772 quits (~jero98772@2800:484:1d80:d8ce:9815:cfda:3661:17bb) (Remote host closed the connection)
03:05:52 <EvanR> this is kind of interesting. I have one VPS instance with enough memory to install ghc and compile hello world. This hello world binary runs. Then I move the binary to another VPS and it the program runs but says No such file or directory on stderr
03:06:21 <EvanR> ldd says "not a dynamic executable"
03:07:00 <EvanR> the two versions of the kernel and system software are a few years apart
03:08:42 <yushyin> EvanR: try strace -f that binary and filter/grep for 'No such file or directory'
03:09:09 × jmorris quits (uid537181@id-537181.uxbridge.irccloud.com) (Quit: Connection closed for inactivity)
03:09:28 <int-e> . o O ( maybe it's a wrapper shell script )
03:10:35 <int-e> Another thing I've seen is that it's an ELF executable but the corresponding "interpreter" (like /lib64/ld-linx-x86-64.so.2) is missing.
03:10:48 <yushyin> -f will trace child processes too
03:12:01 <EvanR> lets see if I can move strace over from the other VPS xD
03:12:32 <EvanR> /lib64/anything is definitely not there
03:12:40 <yushyin> do you have file? file shows the interpreter
03:12:49 <sm> are they both 64 bit ?
03:12:55 <EvanR> Main: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, BuildID[sha1]=0x744bc042692450008ac194110400490945cc56e9, not stripped
03:13:25 <EvanR> if this is a 32 bit linux that will be wild
03:13:32 × stiell quits (~stiell@gateway/tor-sasl/stiell) (Ping timeout: 255 seconds)
03:13:35 <sm> arch -a
03:14:08 <EvanR> uname -m says -686
03:14:12 <EvanR> i686
03:14:14 <int-e> 32 bit!
03:14:18 <int-e> <3
03:14:21 <EvanR> damn
03:14:22 <yushyin> there you go :D
03:14:23 <sm> and by the way you can have a frankenlinux like mine, that's both (32 bit vps upgraded over time to 64 bit software)
03:14:46 eggplantade joins (~Eggplanta@104-55-37-220.lightspeed.sntcca.sbcglobal.net)
03:15:00 <EvanR> I was hoping to trick these shitty VPS into doing my haskell bidding without getting dirty and just upgrading them
03:15:58 <EvanR> what's this about "dynamically linked (uses shared libs)" and ldd reports "not a dynamic executable"
03:16:03 <int-e> well, you can try to find a 32 bit ghc
03:16:51 stiell joins (~stiell@gateway/tor-sasl/stiell)
03:17:41 × stiell quits (~stiell@gateway/tor-sasl/stiell) (Remote host closed the connection)
03:18:06 <dminuoso> 04:10:35 int-e | Another thing I've seen is that it's an ELF executable but the corresponding "interpreter" (like /lib64/ld-linx-x86-64.so.2) is missing.
03:18:12 stiell joins (~stiell@gateway/tor-sasl/stiell)
03:18:19 <dminuoso> If the elf interpreter is missing, you will just get an ominous "file not found" error.
03:18:21 <int-e> EvanR: AFAIK `ldd` works by tracing the actual dynamic linker as it's loading shared objects... that would be the /lib64/ld-linx-x86-64.so.2 thing that you don't have.
03:18:25 <dminuoso> Incredibly frustrating and incredibly misleading.
03:18:48 <dminuoso> Because as far as your eyes go, the executable you're trying to execute doesnt exist. But it does.
03:19:13 <int-e> Yeah, it was quite mystifying the first time I ran into this.
03:19:33 <sm> misleading error messages are a tool of satan
03:19:36 <int-e> The error is technically accurate of course.
03:19:52 <dminuoso> int-e: well it doesnt really matter whether its accurate, its *specified* in `man 2 execve`
03:19:53 <EvanR> I knew the exe was not not found because luckily the message is printed differently
03:20:00 <dminuoso> ENOENT The file pathname or a script or ELF interpreter does not exist.
03:20:01 <int-e> The kernel tries to map that file; it fails because the file does not exist. So that's the error returned...
03:20:18 <EvanR> nevermind, it's like the file is not found
03:20:19 <dminuoso> int-e: So really, execve cant differentiate between "file pathname does not exist" and "ELF interpreter does not exist"
03:20:40 <dminuoso> And I suppose there's no err string set to explain the difference
03:20:43 <EvanR> dminuoso, thanks for pointing out the additional nonsense there I didn't even notice
03:20:56 <int-e> But it's surprising at first that `exec` reads two files.
03:21:04 <EvanR> it's the shell telling me the exe is literally not found lol
03:21:20 <dminuoso> well thats dynamically linked executables for you]
03:21:24 <int-e> dminuoso: Where would that string be? There's only errno, I think.
03:21:37 <dminuoso> int-e: strerror
03:21:43 <dminuoso> or no hold on
03:21:59 <int-e> (And/or the return value from exec.)
03:22:23 <int-e> strerror is just a table of strings corresponding to the standard error return values.
03:22:34 <dminuoso> I cant recall the specific C function, but there was one using static storage, where you could extract an additional error message from the most recently errno
03:23:16 <dminuoso> Maybe that was glibc specific though
03:23:19 <EvanR> errno plus? heh
03:23:24 <EvanR> the shadow errno
03:24:03 <int-e> Anyway, the error is what it is; it can be explained, but it comes from a detail of loading ELF executables that nobody ordinarily thinks about.
03:24:23 <dminuoso> dynamically linked elf executables, though
03:24:29 <int-e> yes
03:24:54 <int-e> And maybe we should also blame `ldd` for blindly reporting that error.
03:25:28 <dminuoso> Well `ldd` would be subject to a TOCTOU condition if it tried to disambiguate
03:25:39 <dminuoso> There really isnt any way other than to introduce an additional errno to execve
03:26:18 <int-e> Well it could at least try to be more helpful.
03:26:29 <dminuoso> (And that can easily spawn philosophical discussions whether an almost-never-wrong behavior that has much improved diagnostics in 99.99% cases isnt flat out better)
03:26:32 <EvanR> I'm a bit surprised that this binary is dynamically linked
03:26:45 <int-e> Also if you use `ldd` in a scenario where you're subject to races you deserve what you get.
03:26:46 <EvanR> did I compile it wrong or
03:27:00 × whatsupdoc quits (uid509081@id-509081.hampstead.irccloud.com) (Quit: Connection closed for inactivity)
03:27:21 <EvanR> well, the 64 bit thing is the nail in the coffin but. Didn't ghc usually statically link everything
03:27:24 <dminuoso> EvanR: its not dynamically linked, though
03:27:30 <dminuoso> EvanR | ldd says "not a dynamic executable
03:27:33 <dminuoso> Try `file`
03:27:52 <dminuoso> EvanR: yes and no.
03:28:08 <EvanR> I pasted the output of file above
03:28:08 <dminuoso> EvanR: ghc statically links Haskell modules in, but dynamically links the rest of the ELF
03:28:12 <int-e> Have you tried `ldd` on the host where the program works?
03:28:25 <dminuoso> EvanR: by default, anyway
03:29:15 <EvanR> yes it has 7 dynamically linked libraries
03:29:33 <EvanR> and lists the lib64 loader
03:30:12 <EvanR> cool
03:30:45 rekahsoft joins (~rekahsoft@bras-base-orllon1122w-grc-05-174-88-194-86.dsl.bell.ca)
03:31:11 <EvanR> so next year when I try this again and both linuxes are 64 bit, it will still be a roll of the dice if this shenanigan will work, because of those system libraries
03:31:28 <sm> at least you'll have a chance :)
03:34:23 × ft quits (~ft@p508dbcc4.dip0.t-ipconnect.de) (Ping timeout: 248 seconds)
03:35:06 <EvanR> one of those libraries is libgmp btw
03:35:12 finn_elija joins (~finn_elij@user/finn-elija/x-0085643)
03:35:12 × FinnElija quits (~finn_elij@user/finn-elija/x-0085643) (Killed (NickServ (Forcing logout FinnElija -> finn_elija)))
03:35:12 finn_elija is now known as FinnElija
03:35:17 <EvanR> isn't this extraneous
03:35:49 <EvanR> don't we have a replacement that is pure haskell
03:36:16 × bitmapper quits (uid464869@id-464869.lymington.irccloud.com) (Quit: Connection closed for inactivity)
03:40:55 ft joins (~ft@p3e9bc443.dip0.t-ipconnect.de)
03:41:55 × rekahsoft quits (~rekahsoft@bras-base-orllon1122w-grc-05-174-88-194-86.dsl.bell.ca) (Ping timeout: 252 seconds)
03:46:51 × mncheck quits (~mncheck@193.224.205.254) (Ping timeout: 265 seconds)
03:47:07 varoo joins (~varoo@117.203.246.41)
03:47:20 razetime joins (~Thunderbi@117.193.2.129)
03:47:44 <yushyin> link gmp static too, if you like?
03:48:01 <c_wraith> there is a pure haskell replacement, but it's a lot slower
03:48:36 <c_wraith> and also, switching to it requires a different build of ghc
03:48:45 <dminuoso> Note, that libgmp is GPL/LGPL licensed.
03:48:56 <dminuoso> So statically linking can have a strong impact on your licensing.
03:51:17 <dminuoso> (If you do, you must license your software under GPLv3)
03:51:22 × varoo quits (~varoo@117.203.246.41) (Ping timeout: 252 seconds)
03:51:30 <dminuoso> But integer-simple is a thing, luckily
03:51:57 varoo joins (~varoo@2401:4900:5d32:3584:d341:898a:30ee:d5df)
03:53:39 × varoo quits (~varoo@2401:4900:5d32:3584:d341:898a:30ee:d5df) (Client Quit)
03:53:47 varoo joins (~varoo@2401:4900:5d32:3584:d341:898a:30ee:d5df)
03:54:09 <int-e> Was a thing; the story has changed to ghc-bignum with the "native" backend.
03:54:39 <dminuoso> Uh, I did not get that memo
03:55:12 <dminuoso> Okay cool, so that issue is gone completely
03:55:24 <dminuoso> https://iohk.io/en/blog/posts/2020/07/28/improving-haskells-big-numbers-support/
03:55:25 <yushyin> https://www.gnu.org/licenses/gpl-faq.html#LGPLStaticVsDynamic you just need to provide the objects to relink
03:56:06 <dminuoso> Mmm
03:57:19 × machinedgod quits (~machinedg@d198-53-218-113.abhsia.telus.net) (Ping timeout: 248 seconds)
03:58:30 <dminuoso> yushyin: I guess that can complicate the build process easily.
03:58:48 <dminuoso> Unless cabal has some first class support for that use case
03:59:03 <dminuoso> But anyhow, given that ghc-bignum is a thing now apparently, I guess that particular point is moot anyway
03:59:27 × td_ quits (~td@i5387090F.versanet.de) (Ping timeout: 248 seconds)
04:00:14 <yushyin> just wanted to address a common misconception about LGPL
04:00:30 <int-e> dminuoso: The story is largely the same though; the backend is fixed when you build ghc.
04:01:02 td_ joins (~td@i53870923.versanet.de)
04:01:38 × thegeekinside quits (~thegeekin@189.180.83.186) (Ping timeout: 252 seconds)
04:02:59 <int-e> And GMP is the default. I'm a fan of that because I deal with big integers fairly often. But it is a niche.
04:04:05 <yushyin> dminuoso: one could argue that a partly dynamically linked binary is already an object format that can be relinked against gmp ... :P
04:04:26 <dminuoso> yushyin: Sure, but we were talking about fully statically linked binaries previously
04:04:44 gpncarl_ joins (~gpncarl@222.249.231.3)
04:05:25 <int-e> OTOH I doubt EvanR is running into that licensing issue at all...
04:07:18 × gpncarl quits (~gpncarl@210.12.195.6) (Ping timeout: 268 seconds)
04:07:25 _xor joins (~xor@74.215.182.83)
04:20:22 × [itchyjunk] quits (~itchyjunk@user/itchyjunk/x-7353470) (Remote host closed the connection)
04:23:12 werneta joins (~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net)
04:25:06 merijn joins (~merijn@86-86-29-250.fixed.kpn.net)
04:28:07 × jao quits (~jao@cpc103048-sgyl39-2-0-cust502.18-2.cable.virginm.net) (Ping timeout: 252 seconds)
04:28:53 thegeekinside joins (~thegeekin@189.180.83.186)
04:30:25 <dminuoso> Mmm, is there a way to provide a StreamingBody for a servant-server endpoint?
04:30:35 × merijn quits (~merijn@86-86-29-250.fixed.kpn.net) (Ping timeout: 248 seconds)
04:31:02 <dminuoso> It seems as if only `SourceT IO` is supported, and that seems a bit limiting
04:32:00 × maerwald quits (~maerwald@user/maerwald) (Ping timeout: 248 seconds)
04:33:49 × thegeekinside quits (~thegeekin@189.180.83.186) (Ping timeout: 268 seconds)
04:43:44 × freeside quits (~mengwong@103.252.202.170) (Ping timeout: 248 seconds)
04:46:18 × sammelweis quits (~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10) (Read error: Connection reset by peer)
04:46:37 sammelweis joins (~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10)
04:52:18 freeside joins (~mengwong@103.252.202.170)
04:56:05 × johnw quits (~johnw@76-234-69-149.lightspeed.frokca.sbcglobal.net) (Quit: ZNC - http://znc.in)
05:04:57 × EvanR quits (~EvanR@user/evanr) (Quit: Leaving)
05:07:52 × king_gs quits (~Thunderbi@2806:103e:29:1779:fe89:b45a:2ae8:5941) (Ping timeout: 252 seconds)
05:11:03 asscrackbandit joins (~user@eth-west-pareq2-46-193-2-167.wb.wifirst.net)
05:16:36 gpncarl joins (~gpncarl@210.12.195.6)
05:18:55 × gpncarl_ quits (~gpncarl@222.249.231.3) (Ping timeout: 248 seconds)
05:20:35 × asscrackbandit quits (~user@eth-west-pareq2-46-193-2-167.wb.wifirst.net) (Ping timeout: 264 seconds)
05:24:23 × motherfsck quits (~motherfsc@user/motherfsck) (Ping timeout: 268 seconds)
05:41:31 × wroathe quits (~wroathe@user/wroathe) (Ping timeout: 248 seconds)
05:43:28 × razetime quits (~Thunderbi@117.193.2.129) (Ping timeout: 248 seconds)
05:46:49 razetime joins (~Thunderbi@117.254.34.69)
05:48:27 × jonathanx quits (~jonathan@h-178-174-176-109.A357.priv.bahnhof.se) (Remote host closed the connection)
05:50:13 michalz joins (~michalz@185.246.204.107)
05:54:21 asscrackbandit joins (~user@eth-west-pareq2-46-193-2-167.wb.wifirst.net)
05:56:53 marek443214321 joins (~marek@46.204.100.225.nat.umts.dynamic.t-mobile.pl)
05:58:33 × thongpv87 quits (~thongpv87@2402:9d80:36f:d082:2f70:3163:c158:b60a) (Read error: Connection reset by peer)
05:58:46 Intel8086 joins (~Intel8086@user/Intel8086)
05:59:25 × varoo quits (~varoo@2401:4900:5d32:3584:d341:898a:30ee:d5df) (Ping timeout: 260 seconds)
05:59:48 × Intel8086 quits (~Intel8086@user/Intel8086) (Max SendQ exceeded)
06:00:17 Intel8086 joins (~Intel8086@user/Intel8086)
06:00:18 × sefidel quits (~sefidel@user/sefidel) (Remote host closed the connection)
06:00:34 sefidel joins (~sefidel@user/sefidel)
06:08:08 × Intel8086 quits (~Intel8086@user/Intel8086) (Quit: Quit)
06:15:12 × marek443214321 quits (~marek@46.204.100.225.nat.umts.dynamic.t-mobile.pl) (Remote host closed the connection)
06:15:31 marek443214321 joins (~marek@46.204.100.225.nat.umts.dynamic.t-mobile.pl)
06:19:12 jonathanx joins (~jonathan@h-178-174-176-109.A357.priv.bahnhof.se)
06:24:39 king_gs joins (~Thunderbi@187.201.41.239)
06:27:16 takuan joins (~takuan@178-116-218-225.access.telenet.be)
06:31:05 rettahcay parts (~kaushikv@c-24-20-37-193.hsd1.or.comcast.net) ()
06:32:51 takuan_dozo joins (~takuan@178-116-218-225.access.telenet.be)
06:32:51 × takuan quits (~takuan@178-116-218-225.access.telenet.be) (Read error: Connection reset by peer)
06:34:32 theproffesor joins (~theproffe@2601:282:8880:20::4a63)
06:34:32 × theproffesor quits (~theproffe@2601:282:8880:20::4a63) (Changing host)
06:34:32 theproffesor joins (~theproffe@user/theproffesor)
06:44:15 × razetime quits (~Thunderbi@117.254.34.69) (Ping timeout: 248 seconds)
06:51:10 × gpncarl quits (~gpncarl@210.12.195.6) (Read error: Connection reset by peer)
06:51:34 gpncarl joins (~gpncarl@210.12.195.6)
06:53:16 × echoreply quits (~echoreply@45.32.163.16) (Quit: WeeChat 2.8)
06:54:07 varoo joins (~varoo@117.203.246.41)
06:54:33 echoreply joins (~echoreply@45.32.163.16)
06:57:47 × ddellacosta quits (~ddellacos@146.70.165.139) (Ping timeout: 248 seconds)
07:01:27 × tcard quits (~tcard@2400:4051:5801:7500:cf17:befc:ff82:5303) (Quit: Leaving)
07:01:43 × troydm quits (~troydm@user/troydm) (Ping timeout: 252 seconds)
07:03:38 tcard joins (~tcard@2400:4051:5801:7500:cf17:befc:ff82:5303)
07:07:54 × kritzefitz quits (~kritzefit@debian/kritzefitz) (Ping timeout: 260 seconds)
07:08:07 kritzefitz joins (~kritzefit@debian/kritzefitz)
07:12:57 × king_gs quits (~Thunderbi@187.201.41.239) (Read error: Connection reset by peer)
07:13:16 king_gs joins (~Thunderbi@2806:103e:29:1779:b5f0:ff23:4044:f15)
07:14:20 <dminuoso> Mmm, it occured to me that I could use Raw and then just work with StreamingBody directly
07:14:51 × marek443214321 quits (~marek@46.204.100.225.nat.umts.dynamic.t-mobile.pl) (Ping timeout: 248 seconds)
07:16:36 chomwitt joins (~chomwitt@2a02:587:7a12:aa00:1ac0:4dff:fedb:a3f1)
07:20:12 johnw joins (~johnw@76-234-69-149.lightspeed.frokca.sbcglobal.net)
07:20:35 × gpncarl quits (~gpncarl@210.12.195.6) (Quit: WeeChat 3.8)
07:25:03 varoo_ joins (~varoo@2a09:bac1:36e0:5f70::ca:21)
07:25:24 × Sauvin quits (~sauvin@user/Sauvin) (Ping timeout: 260 seconds)
07:27:47 varoo__ joins (~varoo@117.203.246.41)
07:28:19 × varoo quits (~varoo@117.203.246.41) (Ping timeout: 260 seconds)
07:30:26 × varoo__ quits (~varoo@117.203.246.41) (Client Quit)
07:30:52 × varoo_ quits (~varoo@2a09:bac1:36e0:5f70::ca:21) (Ping timeout: 252 seconds)
07:31:44 × asscrackbandit quits (~user@eth-west-pareq2-46-193-2-167.wb.wifirst.net) (Ping timeout: 252 seconds)
07:35:04 marek443214321 joins (~marek@46.204.100.225.nat.umts.dynamic.t-mobile.pl)
07:40:26 × marek443214321 quits (~marek@46.204.100.225.nat.umts.dynamic.t-mobile.pl) (Ping timeout: 246 seconds)
07:41:49 Sauvin joins (~sauvin@user/Sauvin)
07:44:32 tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
07:45:15 × chomwitt quits (~chomwitt@2a02:587:7a12:aa00:1ac0:4dff:fedb:a3f1) (Ping timeout: 248 seconds)
07:47:35 razetime joins (~Thunderbi@117.254.34.69)
07:54:03 × Sgeo quits (~Sgeo@user/sgeo) (Read error: Connection reset by peer)
07:54:44 × mei quits (~mei@user/mei) (Remote host closed the connection)
07:54:56 mncheck joins (~mncheck@193.224.205.254)
07:55:19 lortabac joins (~lortabac@2a01:e0a:541:b8f0:7c13:bc21:ab83:3404)
07:59:36 × jonathanx quits (~jonathan@h-178-174-176-109.A357.priv.bahnhof.se) (Read error: Connection reset by peer)
07:59:55 jonathanx joins (~jonathan@h-178-174-176-109.A357.priv.bahnhof.se)
08:02:12 coot joins (~coot@2a02:a310:e241:1b00:ec1a:e9df:79ac:66ba)
08:03:57 thongpv87 joins (~thongpv87@2402:9d80:36d:9eb8:c69f:d737:e064:f8f1)
08:10:17 × phma quits (phma@2001:5b0:211b:c068:2b96:30a1:aa3d:6ccd) (Read error: Connection reset by peer)
08:15:28 phma joins (~phma@2001:5b0:212a:e8d8:156a:28d7:9925:258)
08:16:20 × eggplantade quits (~Eggplanta@104-55-37-220.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection)
08:20:08 codaraxis___ joins (~codaraxis@user/codaraxis)
08:21:18 chele joins (~chele@user/chele)
08:26:30 × razetime quits (~Thunderbi@117.254.34.69) (Remote host closed the connection)
08:28:12 zeenk joins (~zeenk@2a02:2f04:a214:1e00::7fe)
08:32:40 CiaoSen joins (~Jura@p200300c9570460002a3a4dfffe84dbd5.dip0.t-ipconnect.de)
08:34:21 trev joins (~trev@user/trev)
08:36:14 × lortabac quits (~lortabac@2a01:e0a:541:b8f0:7c13:bc21:ab83:3404) (Quit: WeeChat 2.8)
08:39:32 × ft quits (~ft@p3e9bc443.dip0.t-ipconnect.de) (Quit: leaving)
08:47:04 × werneta quits (~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net) (Ping timeout: 260 seconds)
08:51:16 machinedgod joins (~machinedg@d198-53-218-113.abhsia.telus.net)
08:51:39 avicenzi joins (~avicenzi@2a00:ca8:a1f:b004::c32)
08:55:50 maroloccio joins (~marolocci@90.167.55.241)
09:02:46 werneta joins (~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net)
09:05:02 merijn joins (~merijn@c-001-001-010.client.esciencecenter.eduvpn.nl)
09:06:09 vpan joins (~0@212.117.1.172)
09:08:00 × _leo___ quits (~emmanuelu@user/emmanuelux) (Read error: Connection reset by peer)
09:08:02 × Katarushisu quits (~Katarushi@cpc147790-finc20-2-0-cust502.4-2.cable.virginm.net) (Quit: The Lounge - https://thelounge.chat)
09:08:42 × tzh quits (~tzh@c-24-21-73-154.hsd1.wa.comcast.net) (Quit: zzz)
09:08:46 _leo___ joins (~emmanuelu@user/emmanuelux)
09:08:48 Katarushisu joins (~Katarushi@cpc147790-finc20-2-0-cust502.4-2.cable.virginm.net)
09:10:49 gnalzo joins (~gnalzo@2a01:e0a:498:fd50:fcc6:bb5d:489a:ce8c)
09:15:38 MajorBiscuit joins (~MajorBisc@145.94.153.3)
09:16:50 eggplantade joins (~Eggplanta@2600:1700:38c5:d800:54db:de44:4607:1cea)
09:18:40 × tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
09:21:15 × eggplantade quits (~Eggplanta@2600:1700:38c5:d800:54db:de44:4607:1cea) (Ping timeout: 248 seconds)
09:23:04 <jackdk> dminuoso: here is an example of using servant to forward a stream from S3; it might be useful for you? https://github.com/aveltras/amazonka-servant-streaming/blob/main/src/Main.hs
09:23:57 <jackdk> Note the lack of resourceT in `oneStepHandler` so that the connection is closed only after production of the response completes.
09:26:27 × king_gs quits (~Thunderbi@2806:103e:29:1779:b5f0:ff23:4044:f15) (Remote host closed the connection)
09:26:46 king_gs joins (~Thunderbi@2806:103e:29:1779:b5f0:ff23:4044:f15)
09:28:03 remexre_ joins (~remexre@mail.sift.net)
09:28:18 × remexre quits (~remexre@user/remexre) (Read error: Connection reset by peer)
09:28:55 remexre_ is now known as remexre
09:29:56 <dminuoso> jackdk: Mmm, yeah so I would like my `mason` builder to directly write into the socket, avoiding intermediate allocations.
09:31:21 <dminuoso> But its still an interesting example given the streaming S3 forwarding
09:31:55 <freeside> when I define a type with arguments, e.g. data MyType a b c = Constructor a b c, what is the technical term for those arguments? are they "free type parameters"?
09:32:37 <dminuoso> freeside: You could call them type parameters (in the defining position), and type arguments in the type application position.
09:33:00 <dminuoso> One way to think about parameterized type constructors is as injective type functions
09:33:42 <freeside> Gotcha. I'm trying to communicate that as I go up the layers of my library stack, they start out free, and by the time we get close to the application, they're fixed, i.e. type MyConcreteType = MyType String Int State
09:34:24 <dminuoso> Another way of phrasing "free" and "fixed" is polymorphic/monomorphic
09:35:56 <freeside> ah, yes
09:37:56 <dminuoso> freeside: An additional benefit is that using `polymorphic` and `monomorphic` avoids needing to talk about type parameters/arguments altogether here. :p
09:38:14 <freeside> yes, that makes so much sense, thank you.
09:39:24 <dminuoso> jackdk: Im almost tempted to just use SourceIO after all, the main thing with Raw is that I dont know how to use my custom handler monad inside
09:39:45 <dminuoso> (because instead of the endpoint running as `MyMonad Application`, its `Tagged MyMonad Application` instead
09:41:29 × thongpv87 quits (~thongpv87@2402:9d80:36d:9eb8:c69f:d737:e064:f8f1) (Read error: Connection reset by peer)
09:45:05 <freeside> So, ok, conceptually I have a tree -- the root is polymorphic, and as the paramters get fixed, the tree proceeds toward leaves which are entirely monomorphic. Is there some term for this tree? In OOP land one talks about class hierarchies ... here do we talk about type hierarchies?
09:45:47 × CiaoSen quits (~Jura@p200300c9570460002a3a4dfffe84dbd5.dip0.t-ipconnect.de) (Ping timeout: 248 seconds)
09:47:23 <turlando> Is that just for the sake of taxonomic pleasure or do you need to impose type constraints?
09:47:54 cfricke joins (~cfricke@user/cfricke)
09:48:11 × king_gs quits (~Thunderbi@2806:103e:29:1779:b5f0:ff23:4044:f15) (Ping timeout: 264 seconds)
09:49:00 CiaoSen joins (~Jura@p200300c9570460002a3a4dfffe84dbd5.dip0.t-ipconnect.de)
09:49:24 ubert joins (~Thunderbi@p200300ecdf13012ec893c5f497fd9467.dip0.t-ipconnect.de)
09:50:50 <freeside> i'm not thinking about constraints here, just narrowing of `type MyNum a` to `MyNum Float` vs `MyNum Int`
09:55:13 <dminuoso> freeside: In previous discussions about related topics in #haskell we just said that "the leaves of the program are kept polymorphic"
09:56:50 <[exa]> freeside: you want to use the tree to actually model the class hierarchy?
09:56:55 <dminuoso> Usually such discussions involved final tagless encoding
09:57:25 <dminuoso> an example of which is writing leaf code as mtl polymorphic
09:57:38 <dminuoso> One of the ideas is that the more general the type, the less its implementation can do.
09:57:48 <dminuoso> So if its maximally polymorphic, its extremely constrained
09:58:22 <dminuoso> which helps reason about its behavior, in case of final tagless encoding, the idea is that keeping the code polymorphic means the only usable effects are those described in the constraints
09:58:29 × tcard quits (~tcard@2400:4051:5801:7500:cf17:befc:ff82:5303) (Ping timeout: 256 seconds)
09:59:03 codaraxis__ joins (~codaraxis@user/codaraxis)
10:00:51 mei joins (~mei@user/mei)
10:02:31 × codaraxis___ quits (~codaraxis@user/codaraxis) (Ping timeout: 252 seconds)
10:02:58 ski disagrees about referring to them in terms of "polymorphic/monomorphic"
10:03:23 tcard joins (~tcard@229.12.156.220.rev.vmobile.jp)
10:03:31 gurkenglas joins (~gurkengla@dynamic-046-114-000-101.46.114.pool.telefonica.de)
10:03:34 <ski> freeside : it's say `MyNum Int' is more specific than, is a specialization of, `MyNum a'
10:03:54 <dminuoso> ski: How is `MyNum Int` not more monomorphic than `MyNum a`?
10:04:07 <ski> (but `MyNum' (nor `MyNum a') is definitely not polymorphic)
10:04:25 <dminuoso> Mmm
10:04:38 <dminuoso> because its terms that are polymorphic, not the types themselves?
10:04:52 <dminuoso> i.e. a polymorphic type would be a higher kinded type like `Const (t :: k) a`?
10:05:09 <dminuoso> oh `Const t (a :: k)` of course
10:05:33 <ski> if you say `foo :: MyNum a -> ..a..' (by which i mean `foo :: forall a. MyNum a -> ..a..', which is how it will be interpreted, in most contexts), and `bar :: MyNum Int -> ...', then `foo' is (more) polymorphic than the (monomorphic) `bar'
10:05:44 × xff0x quits (~xff0x@125x103x176x34.ap125.ftth.ucom.ne.jp) (Ping timeout: 252 seconds)
10:05:46 <ski> yes, dminuoso
10:06:36 <ski> you can say `MyNum' is a parameterized, or parametric, type. or, `MyNum' is a type function. or, `MuNum a' is type that's parameterized over `a'
10:07:04 <dminuoso> Okay thats a fine distinction, but I think largely irrelant to the intent of the discussion.
10:07:37 irrgit_ joins (~irrgit@176.113.74.130)
10:07:38 × tcard quits (~tcard@229.12.156.220.rev.vmobile.jp) (Read error: Connection reset by peer)
10:07:43 <dminuoso> Saying that "the leaves of the program (which we could think of as the expressions/bindings) are polymorphic" seems fine even with that distinction
10:08:11 <dminuoso> Regardless, you're right I should have been more careful with my wording here.
10:08:20 <ski> (fwiw, i also dislike the term "higher kinded type". what that's about is really higher-order types. like e.g. `ReaderT', having kind `* -> (* -> *) -> * -> *', being a type function that takes another type function as argument/parameter, hence `ReaderT' being a higher-order type)
10:08:29 <dminuoso> Hjeh
10:08:36 <dminuoso> I was debating whether to correct myself and say `polykinded` here.
10:08:39 × AWizzArd quits (~code@gehrels.uberspace.de) (Remote host closed the connection)
10:08:48 <dminuoso> Did realize that higher kinded was not appropriate here
10:09:14 <ski> not sure i get the tree and leaves thing
10:09:53 <ski> freeside said "the root is polymorphic, and as the paramters get fixed, the tree proceeds toward leaves which are entirely monomorphic" .. which seems to go in the opposite direction from what you're talking about (re leaves) ?
10:10:27 <dminuoso> If we imagine a program to be a tree in which nodes represent (top-level) bindings, and edges represent uses of bindings (i.e. given `bar = 1; foo = bar` then `foo` uses `bar`, and bar would be a leaf)
10:10:52 × irrgit__ quits (~irrgit@89.47.234.74) (Ping timeout: 252 seconds)
10:10:53 <dminuoso> Think a final tagless encoding of an effect system, in which all your surrounding modules are written polymorphic
10:11:01 <dminuoso> and you instantiate them at concrete types along the spine of your program
10:11:53 <ski> my take on what freeside said was that they were thinking about writing some "core" operations, which tend to be polymorphic in type parameters like `a', re `MyNum a'. and then, when writing parts of the code that's closer to the application-specific details, those parameters would tend to get more specialized, like maybe `MyNum (Complex a)' and `MyNum Int', and we we're approaching "leaves" in that sense,
10:11:56 <dminuoso> So much of your server implementation might be written `getUser :: (HasDb m, HasLogger m) => Uid -> m User`, where almost never you refer to a specific monad
10:11:59 <ski> the operations which we write then would tend to be monomorphic
10:12:14 mmhat joins (~mmh@p200300f1c7108bb6ee086bfffe095315.dip0.t-ipconnect.de)
10:12:25 <Hecate> HELLO
10:12:34 <ski> ehlo, Hecate
10:12:41 <Hecate> I noticed we're talking about effects
10:13:08 <Hecate> I'd like to advise against polymorphic monads, they cannot be optimised whilst keeping reasonable compilation times
10:13:27 <Hecate> once you're past "toy project" size, it's a real burden at run-time
10:13:27 <ski> dminuoso : yea, i think that makes sense
10:14:04 <ski> (just not sure it's the same kind of situation that freeside had in mind .. and if it was, you two did have opposite terminologies wrt "leaf" vs. "root")
10:14:44 × bitdex quits (~bitdex@gateway/tor-sasl/bitdex) (Ping timeout: 255 seconds)
10:17:10 bitdex joins (~bitdex@gateway/tor-sasl/bitdex)
10:19:32 <ski> freeside : in `data MyType a b c = ..a..b..c..', i'd call the `a',`b',`c' (to the left of the `=') (formal) type parameters. (if in the body, to the right of `=', you say e.g. `Map a (Either b c)', then `a',`b',`c' (as well as `Either a b') are actual type parameters (to `Map' and `Either') there)
10:19:47 × mmhat quits (~mmh@p200300f1c7108bb6ee086bfffe095315.dip0.t-ipconnect.de) (Quit: WeeChat 3.8)
10:20:21 × maroloccio quits (~marolocci@90.167.55.241) (Quit: WeeChat 3.7.1)
10:21:36 <ski> freeside : i think "fixed" is okay. i might also say "specialized" or "specific". where by "specialize" i mean replace some type variables, in a type expression, by other type expressions (usually not all of the replacements being type variables)
10:21:44 <dminuoso> jackdk: but oh well, I think my best bet is to just use a lazy bytestring and OctetStream, thanks for your help.
10:23:29 Guest67 joins (~Guest67@159.153.150.4)
10:26:08 <ski> freeside : however, `Either c c' could be said to be a specialization of `Either a b'. since the former insists the two alternatives have the same type, while the latter allows them to not have the same type. however, i wouldn't exactly try to draw a type hieararchy of this, in a similar way to subtyping hierarchies in OO. e.g. because `Either a b' and `Either a c' are not the same type, although they're
10:26:14 <ski> equivalent (up to renaming type variables). but often, you're in a situation where you have some type variables in scope, that you can't just arbitrarily rename (without impacting other adjacent code). the type `b -> Either a b' is not equivalent to the type `b -> Either a c'
10:27:11 <freeside> mmm. The tree I have in mind is conceptual, I'm not trying to deal with an actual Data.Tree. I just meant, a sort of hierarchy, where the levels of the hierarchy denote increasing fixedness of the type arguments
10:27:26 <freeside> until eventually all the a b c params have been nailed down to Float Int String.
10:27:45 × glguy quits (~glguy@libera/staff-emeritus/glguy) (Ping timeout: 260 seconds)
10:27:58 glguy_ joins (~glguy@libera/staff-emeritus/glguy)
10:28:46 <ski> (so, it doesn't make sense exactly, to try to put the "very non-specific" type `a' at one extreme end of a type hierarchy, and to put progressively more specific types, like `Maybe b',`Map b (Either b c)',`Map Int (Either Int c)', when going in the opposite direction. you can't just consider a type expression on its own, you also have to take into account which type variables are allowed to be used in it.
10:28:52 <ski> you can't directly compare two type expressions that allow different type variables)
10:29:07 <freeside> the "node" of that "tree" which has been fixed to Float Int String could be considered a "sibling" to a node which is fixed to Float Int Text.Text
10:29:08 <ski> yea, i get what you're thinking (i think), freeside
10:29:28 <freeside> :D
10:29:44 <ski> i'm just saying that it will not turn out quite the same way as a subtyping hierarchy with `Object'/`Any' being most non-specific
10:30:14 <ski> having type parameters (type variables) do add complications to that picture
10:30:51 × gnalzo quits (~gnalzo@2a01:e0a:498:fd50:fcc6:bb5d:489a:ce8c) (Quit: WeeChat 3.8)
10:33:49 beteigeuze joins (~Thunderbi@a79-169-109-107.cpe.netcabo.pt)
10:34:16 <ski> .. i'm probably not really explaining the issue with the hierarchy quite well (meaning that i probably don't quite understand the issue well enough, on an explicit level. i guess one could say i have a "gut feeling" for the kind of trouble you get, but can't satisfactorially put my finger on it)
10:34:19 × gurkenglas quits (~gurkengla@dynamic-046-114-000-101.46.114.pool.telefonica.de) (Ping timeout: 248 seconds)
10:35:27 Inst__ is now known as Inst
10:36:13 × Inst quits (~Inst@2601:6c4:4081:54f0:d621:5cdd:9051:c240) (Quit: Leaving)
10:38:33 Inst joins (~Inst@2601:6c4:4081:54f0:d621:5cdd:9051:c240)
10:38:33 tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
10:38:48 × Inst quits (~Inst@2601:6c4:4081:54f0:d621:5cdd:9051:c240) (Client Quit)
10:40:18 Inst joins (~Inst@2601:6c4:4081:54f0:d621:5cdd:9051:c240)
10:47:46 × glguy_ quits (~glguy@libera/staff-emeritus/glguy) (Ping timeout: 252 seconds)
10:48:18 glguy joins (~glguy@libera/staff-emeritus/glguy)
10:54:55 × codaraxis__ quits (~codaraxis@user/codaraxis) (Ping timeout: 260 seconds)
10:57:57 chomwitt joins (~chomwitt@2a02:587:7a12:aa00:1ac0:4dff:fedb:a3f1)
10:58:31 __monty__ joins (~toonn@user/toonn)
10:58:39 × CiaoSen quits (~Jura@p200300c9570460002a3a4dfffe84dbd5.dip0.t-ipconnect.de) (Ping timeout: 260 seconds)
10:59:55 pernzs joins (~pernzs@101.175.168.100)
11:04:10 × freeside quits (~mengwong@103.252.202.170) (Ping timeout: 268 seconds)
11:04:23 × chomwitt quits (~chomwitt@2a02:587:7a12:aa00:1ac0:4dff:fedb:a3f1) (Ping timeout: 264 seconds)
11:07:39 Inst_ joins (~Inst@2601:6c4:4081:54f0:d621:5cdd:9051:c240)
11:08:58 CiaoSen joins (~Jura@p200300c9570460002a3a4dfffe84dbd5.dip0.t-ipconnect.de)
11:09:48 waleee joins (~waleee@2001:9b0:21c:4000:5bf9:6515:c030:57b7)
11:10:38 × Inst quits (~Inst@2601:6c4:4081:54f0:d621:5cdd:9051:c240) (Ping timeout: 252 seconds)
11:16:13 troydm joins (~troydm@user/troydm)
11:16:18 acidjnk joins (~acidjnk@p200300d6e715c449a5c1454d82f25d58.dip0.t-ipconnect.de)
11:20:33 gurkenglas joins (~gurkengla@dynamic-046-114-000-101.46.114.pool.telefonica.de)
11:23:33 maerwald joins (~maerwald@mail.hasufell.de)
11:24:59 × gurkenglas quits (~gurkengla@dynamic-046-114-000-101.46.114.pool.telefonica.de) (Ping timeout: 248 seconds)
11:25:45 × MQ-17J quits (~MQ-17J@104.28.216.165) (Ping timeout: 268 seconds)
11:25:58 gurkenglas joins (~gurkengla@dynamic-046-114-000-101.46.114.pool.telefonica.de)
11:26:36 × trev quits (~trev@user/trev) (Remote host closed the connection)
11:27:22 trev joins (~trev@user/trev)
11:27:51 × pavonia quits (~user@user/siracusa) (Quit: Bye!)
11:30:00 × maerwald quits (~maerwald@mail.hasufell.de) (Changing host)
11:30:00 maerwald joins (~maerwald@user/maerwald)
11:31:54 × yaroot quits (~yaroot@p2790051-ipngn7801souka.saitama.ocn.ne.jp) (Ping timeout: 252 seconds)
11:32:36 yaroot joins (~yaroot@p3431218-ipngn9301souka.saitama.ocn.ne.jp)
11:38:57 × coot quits (~coot@2a02:a310:e241:1b00:ec1a:e9df:79ac:66ba) (Quit: coot)
11:43:56 npmania joins (~Thunderbi@45.8.223.213)
11:50:28 × pernzs quits (~pernzs@101.175.168.100) (Ping timeout: 260 seconds)
11:53:22 thongpv joins (~thongpv87@2402:9d80:32e:8f1:5f45:6f5f:527a:b486)
11:55:39 pernzs joins (~pernzs@101.175.168.100)
11:58:32 tcard joins (~tcard@p5309141-ipxg23901hodogaya.kanagawa.ocn.ne.jp)
12:03:24 × paulpaul1076 quits (~textual@95-29-5-53.broadband.corbina.ru) (Quit: Textual IRC Client: www.textualapp.com)
12:03:26 tcard_ joins (~tcard@2400:4051:5801:7500:cf17:befc:ff82:5303)
12:03:53 × tcard quits (~tcard@p5309141-ipxg23901hodogaya.kanagawa.ocn.ne.jp) (Ping timeout: 252 seconds)
12:09:49 shapr joins (~user@net-5-88-238-17.cust.vodafonedsl.it)
12:10:16 <shapr> Does anyone have fourmolu working as an emacs save-hook? I'm using --no-cabal right now, but I'd prefer some way to point it to the cabal file if anyone has that
12:10:23 × econo quits (uid147250@user/econo) (Quit: Connection closed for inactivity)
12:12:38 lortabac joins (~lortabac@2a01:e0a:541:b8f0:c52:e2ce:11c8:93da)
12:15:39 × jmdaemon quits (~jmdaemon@user/jmdaemon) (Ping timeout: 248 seconds)
12:17:17 × CiaoSen quits (~Jura@p200300c9570460002a3a4dfffe84dbd5.dip0.t-ipconnect.de) (Ping timeout: 246 seconds)
12:21:38 freeside joins (~mengwong@151.192.86.187)
12:22:44 xff0x joins (~xff0x@2405:6580:b080:900:161d:e8bd:9253:e61c)
12:26:39 × freeside quits (~mengwong@151.192.86.187) (Ping timeout: 248 seconds)
12:31:23 × pernzs quits (~pernzs@101.175.168.100) (Quit: Client closed)
12:42:20 × anpad quits (~pandeyan@user/anpad) (Quit: ZNC 1.8.2 - https://znc.in)
12:42:35 chomwitt joins (~chomwitt@2a02:587:7a12:aa00:1ac0:4dff:fedb:a3f1)
12:43:43 [itchyjunk] joins (~itchyjunk@user/itchyjunk/x-7353470)
12:44:45 anpad joins (~pandeyan@user/anpad)
12:46:03 pernzs joins (~pernzs@101.175.168.100)
12:46:51 freeside joins (~mengwong@151.192.86.187)
12:51:07 × freeside quits (~mengwong@151.192.86.187) (Ping timeout: 260 seconds)
12:51:20 × bitdex quits (~bitdex@gateway/tor-sasl/bitdex) (Ping timeout: 255 seconds)
12:53:05 bitdex joins (~bitdex@gateway/tor-sasl/bitdex)
12:54:47 × gurkenglas quits (~gurkengla@dynamic-046-114-000-101.46.114.pool.telefonica.de) (Ping timeout: 246 seconds)
13:00:22 bgs joins (~bgs@212-85-160-171.dynamic.telemach.net)
13:07:28 × pernzs quits (~pernzs@101.175.168.100) (Ping timeout: 260 seconds)
13:13:25 × mncheck quits (~mncheck@193.224.205.254) (Remote host closed the connection)
13:13:36 mncheck joins (~mncheck@193.224.205.254)
13:29:04 × sammelweis quits (~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10) (Ping timeout: 248 seconds)
13:33:46 emmanuelux joins (~emmanuelu@user/emmanuelux)
13:34:03 × acidjnk quits (~acidjnk@p200300d6e715c449a5c1454d82f25d58.dip0.t-ipconnect.de) (Ping timeout: 260 seconds)
13:36:59 × _leo___ quits (~emmanuelu@user/emmanuelux) (Ping timeout: 260 seconds)
13:42:19 × bitdex quits (~bitdex@gateway/tor-sasl/bitdex) (Quit: = "")
13:42:28 npmania1 joins (~Thunderbi@45.8.223.243)
13:42:33 × npmania quits (~Thunderbi@45.8.223.213) (Ping timeout: 255 seconds)
13:42:33 npmania1 is now known as npmania
13:43:31 notzmv joins (~zmv@user/notzmv)
13:44:14 AWizzArd joins (~code@user/awizzard)
13:46:42 freeside joins (~mengwong@151.192.86.187)
13:51:19 × freeside quits (~mengwong@151.192.86.187) (Ping timeout: 260 seconds)
13:52:40 × Feuermagier quits (~Feuermagi@user/feuermagier) (Remote host closed the connection)
13:54:24 lisbeths joins (uid135845@id-135845.lymington.irccloud.com)
13:55:30 jero98772 joins (~jero98772@2800:484:1d80:d8ce:9815:cfda:3661:17bb)
13:55:50 npmania1 joins (~Thunderbi@45.8.223.228)
13:57:11 × Cale quits (~cale@cpe80d04ade0a03-cm80d04ade0a01.cpe.net.cable.rogers.com) (Ping timeout: 264 seconds)
13:57:20 × yoneda quits (~mike@193.206.102.122) (Quit: leaving)
13:57:47 × npmania quits (~Thunderbi@45.8.223.243) (Ping timeout: 264 seconds)
13:57:48 npmania1 is now known as npmania
13:58:15 gnalzo joins (~gnalzo@2a01:e0a:498:fd50:fcc6:bb5d:489a:ce8c)
13:59:46 × rburkholder quits (~blurb@96.45.2.121) (Remote host closed the connection)
14:01:06 azimut joins (~azimut@gateway/tor-sasl/azimut)
14:01:15 Cale joins (~cale@cpe80d04ade0a03-cm80d04ade0a01.cpe.net.cable.rogers.com)
14:01:32 × azimut_ quits (~azimut@gateway/tor-sasl/azimut) (Ping timeout: 255 seconds)
14:03:17 Guest|81 joins (~Guest|81@208.84.107.234)
14:05:38 × Guest|81 quits (~Guest|81@208.84.107.234) (Client Quit)
14:06:40 × jinsun quits (~jinsun@user/jinsun) (Read error: Connection reset by peer)
14:06:56 ddellacosta joins (~ddellacos@146.70.166.139)
14:07:31 kurbus joins (~kurbus@user/kurbus)
14:08:20 jinsun joins (~jinsun@user/jinsun)
14:12:26 Midjak joins (~Midjak@82.66.147.146)
14:14:27 × sefidel quits (~sefidel@user/sefidel) (Remote host closed the connection)
14:14:41 sefidel joins (~sefidel@user/sefidel)
14:14:55 × npmania quits (~Thunderbi@45.8.223.228) (Ping timeout: 248 seconds)
14:15:10 npmania joins (~Thunderbi@121.128.227.178)
14:15:34 × vpan quits (~0@212.117.1.172) (Remote host closed the connection)
14:16:18 <shapr> does anyone use fourmolu with emacs?
14:16:36 <shapr> I'm using it with haskell-stylish, but I'd like to know of other options
14:17:53 freeside joins (~mengwong@151.192.86.187)
14:19:38 Feuermagier joins (~Feuermagi@user/feuermagier)
14:20:45 npmania1 joins (~Thunderbi@45.8.223.198)
14:21:13 eggplantade joins (~Eggplanta@2600:1700:38c5:d800:54db:de44:4607:1cea)
14:21:54 × npmania quits (~Thunderbi@121.128.227.178) (Ping timeout: 260 seconds)
14:21:54 npmania1 is now known as npmania
14:22:02 × freeside quits (~mengwong@151.192.86.187) (Ping timeout: 252 seconds)
14:23:37 thegeekinside joins (~thegeekin@189.180.83.186)
14:25:44 × eggplantade quits (~Eggplanta@2600:1700:38c5:d800:54db:de44:4607:1cea) (Ping timeout: 255 seconds)
14:26:17 × jpds quits (~jpds@gateway/tor-sasl/jpds) (Ping timeout: 255 seconds)
14:28:27 jpds joins (~jpds@gateway/tor-sasl/jpds)
14:28:29 rettahcay joins (~kaushikv@c-24-20-37-193.hsd1.or.comcast.net)
14:29:33 rettahcay parts (~kaushikv@c-24-20-37-193.hsd1.or.comcast.net) ()
14:34:13 npmania1 joins (~Thunderbi@45.8.223.243)
14:34:51 × FinnElija quits (~finn_elij@user/finn-elija/x-0085643) (Remote host closed the connection)
14:36:18 × npmania quits (~Thunderbi@45.8.223.198) (Ping timeout: 268 seconds)
14:36:19 npmania1 is now known as npmania
14:36:29 FinnElija joins (~finn_elij@user/finn-elija/x-0085643)
14:40:09 × tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
14:42:55 vpan joins (~0@212.117.1.172)
14:55:28 × chomwitt quits (~chomwitt@2a02:587:7a12:aa00:1ac0:4dff:fedb:a3f1) (Ping timeout: 248 seconds)
14:56:51 enoq joins (~enoq@2a05:1141:1f5:5600:b9c9:721a:599:bfe7)
14:58:03 × cheater quits (~Username@user/cheater) (Ping timeout: 252 seconds)
14:59:43 tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
15:00:59 <shapr> This channel sure is quiet in the european daytime
15:01:34 × megaTherion quits (~therion@unix.io) (Quit: ZNC 1.8.2 - https://znc.in)
15:01:55 <merijn> shapr: It varies *a lot* :p
15:02:16 <merijn> Sometimes it's super busy, but today's quiet, yeah
15:03:14 megaTherion joins (~therion@unix.io)
15:03:15 × cfricke quits (~cfricke@user/cfricke) (Quit: WeeChat 3.8)
15:03:52 × jpds quits (~jpds@gateway/tor-sasl/jpds) (Remote host closed the connection)
15:04:35 jpds joins (~jpds@gateway/tor-sasl/jpds)
15:04:36 × FinnElija quits (~finn_elij@user/finn-elija/x-0085643) (Remote host closed the connection)
15:05:25 FinnElija joins (~finn_elij@user/finn-elija/x-0085643)
15:06:45 <[exa]> depends a lot, e.g. now it's european friday and as far as I can see no one really cares here. :D
15:10:42 × enoq quits (~enoq@2a05:1141:1f5:5600:b9c9:721a:599:bfe7) (Quit: enoq)
15:12:49 × sefidel quits (~sefidel@user/sefidel) (Remote host closed the connection)
15:15:35 ft joins (~ft@p3e9bc443.dip0.t-ipconnect.de)
15:15:41 sefidel joins (~sefidel@user/sefidel)
15:17:15 coot joins (~coot@2a02:a310:e241:1b00:ec1a:e9df:79ac:66ba)
15:19:31 × waleee quits (~waleee@2001:9b0:21c:4000:5bf9:6515:c030:57b7) (Ping timeout: 260 seconds)
15:22:56 <vpan> it seems the loss in migration from freenode to libera was significant, around 40% by now I suppose, as I recall the count to be over 1k. But I would guess the majority of active people are still here, so the majority of the people who fell off the train were lurkers and it should not affect the activity much.
15:23:53 <Inst_> how pissed off do you guys get if I describe Haskell education as "teaching C by starting with pointers?"
15:24:16 <Hecate> shapr: it's because we work during european day time :p
15:24:24 <geekosaur> if you;ve a better idea, we're all ears
15:25:11 <shapr> Hecate: c'est bien
15:25:36 <Hecate> :p
15:26:10 <Inst_> geekosaur: I just got hit by a ton of toxicity from FP Discord
15:26:34 <Inst_> the point with me is more, start with IO, start with stuff like this tutorial, which I think produces something fun and interesting
15:26:44 <Inst_> https://andrew.gibiansky.com/blog/haskell/haskell-gloss/
15:26:45 <geekosaur> this is part of why I don't hang out there
15:27:20 <Inst_> start by teaching not FP, but imperative shell, functional core, and understand how to work a combination of imperative shell, functional core
15:27:54 <Inst_> and teach libs
15:34:29 × eruditass quits (uid248673@id-248673.uxbridge.irccloud.com) (Quit: Connection closed for inactivity)
15:34:54 mc47 joins (~mc47@xmonad/TheMC47)
15:35:23 <Inst_> i guess you disagree vehemently, but have resolved not to be toxic?
15:35:32 Inst_ is now known as Inst
15:35:44 <ski> how to teach functional core, without teaching FP ?
15:35:45 <Inst> sorry, just on edge
15:35:54 <ski> no worry
15:35:55 <Inst> teach FP as the way to actually process the data
15:36:42 <Inst> get data, process data, do something impure with the data
15:36:54 <ski> there is no impure, in Haskell
15:37:00 <Inst> side-effecting
15:37:06 <ski> no side-effects
15:37:14 jmdaemon joins (~jmdaemon@user/jmdaemon)
15:37:33 <Inst> a function that produces an IO action with the data, with the IO action being connected to main
15:37:40 <ski> that's effects
15:37:44 <dminuoso> Mmm, after the previous discussion, Im beginning to dislike the entire notion of `side effects`
15:38:29 <ski> i'm not too clear what you place in the terms "FP" vs. "functional core"
15:39:21 <[exa]> is this discussion the side effect of side effects?
15:39:22 ski idly wonders in which sense dminuoso means that
15:40:07 <Inst> In this context, it's more, FP is taught through, pattern matching, higher order functions, processing data immutably
15:40:38 <Inst> functional core is just FP, but the notion is that we still use an imperative shell to make the FP part useful
15:41:28 <Inst> maybe use Py or mutable references as a way to demonstrate how FP creates more concise and maintainable code by comparison
15:42:06 <ski> pattern-matching is of fundamental importance, to be able to define and use custom `data' types. higher-order functions are quite useful as well, for abstracting out more complicated code, and separating concerns
15:42:47 <ski> ("Py" ?)
15:43:21 <merijn> Inst: I mean, the entire point of IO is that it *isn't* impure
15:43:25 <Inst> w/e, sorry, FP discord is just annoyed because this is like one of my hobby courses
15:43:32 <Inst> *hobbyhorses
15:43:35 <Inst> and I beat it once in a while
15:43:47 <Inst> Python
15:44:06 <ski> no issue with contemplating things, Inst
15:44:41 <Hecate> no Inst, FP Discord is annoyed because you're an expert beginner who is permanently confused (totally acceptable) but who is also poisoning the understanding of Haskell for new beginners. As such it is extremely draining to clean up behind you because you leave most newcomers confused as hell on topics in which you're also extremely confused about
15:44:59 shapr hugs Inst
15:45:17 <shapr> Inst: be nice as you can and things will work out
15:45:19 shapr hugs Hecate
15:45:29 <Inst> I don't think I message that much in #Haskell-beginners these days
15:45:40 ski hugs shapr
15:45:59 shapr hugs ski
15:46:02 <shapr> howdy! Long time no see
15:47:06 Sgeo joins (~Sgeo@user/sgeo)
15:47:43 <Inst> Or is it annoying that I've been teaching a friend TVar or some other mutvar to start out with?
15:47:43 ski 's been obsessing a bit over definitions and patterns, lately
15:49:03 <ski> annoying, how, Inst ?
15:49:14 <Inst> offensive, rather.
15:49:20 <ski> i dunno
15:49:32 <ski> might perhaps be confusing to them, after a while
15:49:45 <Inst> ehhh, point is that it's there, not that you should use it
15:50:14 × coot quits (~coot@2a02:a310:e241:1b00:ec1a:e9df:79ac:66ba) (Quit: coot)
15:50:28 <shapr> ski: what kind of patterns?
15:51:14 <ski> i'd typically expect someone learning about `TVar's to already know about higher-order code, and about `data' types. perhaps one could do things in a different order .. but i'm not sure how useful that'd be
15:51:27 <Inst> ehhh, it's more like an experiment
15:51:48 <Inst> but, as i've mentioned, via Hecate's friend Julie Moronuki:
15:52:35 <Inst> actually, TVar comes in pretty late
15:52:39 <Inst> https://typeclasses.com/phrasebook/mutable-references
15:52:59 <ski> shapr : as in pattern-matching. i've been pondering various extensions to patterns (and how that interacts with defining equations) .. some of them, i'm not sure how practically useful they'd be .. but it's fun to ponder different variants
15:53:35 <Inst> for_ comes in after enum ranges, using the REPL, and case expressions
15:55:22 <ski> shapr : `let'-patterns, lambda-patterns, absurd-patterns, definiendum-patterns
15:58:09 <ski> shapr : part of the point is that i want a "logical" (as opposed to "algorithmic") static semantics, a set of inference rules where, if you erase the proof terms, you get reasonable-looking logical rules
15:59:47 × theproffesor quits (~theproffe@user/theproffesor) (Ping timeout: 255 seconds)
16:00:27 <ski> `f x (\(x + y) -> g y) = g' is an example of a defining equation, using some of my extended pattern ideas
16:01:34 <ski> Inst : `for_' is higher-order, so you'd better cover higher-order operations, before `for_' .. unless you intend to treat it ad hoc, without explaining how it works
16:04:29 <Inst> ski: ever considered using empty backtick as a ditto mark in a sequence of pattern matching?
16:04:32 <ski> (`f :: Num a => a -> (a -> b) -> (a -> b)' is the inferred type for that example)
16:05:00 <ski> ditto mark, how do you mean ?
16:05:20 <Inst> "same as last element above"
16:05:25 <Inst> top-level pattern matching
16:05:38 <Inst> `` -> "same as corresponding element in previous top-level pattern match"
16:05:46 <ski> you mean, same as the corresponding position in the previous defining equation ?
16:05:54 finn_elija joins (~finn_elij@user/finn-elija/x-0085643)
16:05:54 × FinnElija quits (~finn_elij@user/finn-elija/x-0085643) (Killed (NickServ (Forcing logout FinnElija -> finn_elija)))
16:05:54 finn_elija is now known as FinnElija
16:06:11 <Inst> yeah, and i eventually just wandered off to using case-based pattern matching instead of top-level pattern matching for most cases
16:06:35 <ski> if that corresponding pattern mentioned variables, then this "ditto mark" would bring variables into scope, in the current defining equation, without mentioning them explicitly (no explicit binding site) .. which i don't really like
16:08:37 <ski> (no, i don't really like `RecordWildCards', `MkFoo {..}')
16:09:00 <Inst> i guess case + tuple is just better for that in general
16:09:41 <Inst> and tbh, for me personally, hof was hard only because of the name
16:10:07 <Inst> "higher-order function", sounds fancy. reality: "it's just a function that takes another function as an argument"
16:10:39 × troydm quits (~troydm@user/troydm) (Ping timeout: 268 seconds)
16:10:48 <Inst> if you introduce . or even $ early, you're teaching hof
16:11:13 <Inst> so if you do a getline example with $, you're already teaching hof
16:11:25 coot joins (~coot@2a02:a310:e241:1b00:ec1a:e9df:79ac:66ba)
16:12:45 ski . o O ( `\cases' <https://downloads.haskell.org/ghc/latest/docs/users_guide/exts/lambda_case.html>,<https://github.com/ghc-proposals/ghc-proposals/blob/master/proposals/0302-cases.rst> )
16:12:46 <mauke> yes (except I'd do map first)
16:12:59 dcoutts joins (~duncan@host86-167-90-212.range86-167.btcentralplus.com)
16:13:55 × dcoutts_ quits (~duncan@host86-167-90-212.range86-167.btcentralplus.com) (Ping timeout: 252 seconds)
16:14:25 <Inst> map only makes sense if you teach pattern matching on lists, as well as recursion
16:14:31 <Inst> . and $ gets you an introduction to the concept
16:15:08 acidjnk joins (~acidjnk@p200300d6e715c445102af608dfe0cdc6.dip0.t-ipconnect.de)
16:16:29 <ski> strictly speaking, one would often say that a function that produces another function as output is also higher-order. however, if such a function is simply curried, doesn't do any interesting / non-trivial work, before receiving all the parameters (which is what you get with the usual curried style convention in Haskell), we tend to not count that as "serious higher-order"
16:16:30 <mauke> nah, I can just start with lists and map
16:16:52 <Inst> yeah, some kid who hates Haskell, and I'm basically thinking of him a lot, I'm trying to help him out
16:17:05 <ski> who ?
16:17:08 <Inst> I don't think he even got lists and list processing yet
16:17:14 <mauke> similarly, I can teach while loops in C without explaining condition flags or relative branching
16:17:57 <ski> for lists, one could choose to teach list comprehensions first
16:18:08 <Inst> do people actually like list comprehensions?
16:18:16 <ski> sometimes they're handy
16:18:36 cheater joins (~Username@user/cheater)
16:18:44 <ski> (there's even a `MonadComphrehensions' extension)
16:19:08 <Inst> I know, someone taught me a really cool trick with [myTerm | booleanExpression]
16:19:29 <mauke> list do > monad comprehensions
16:19:37 <ski> possibly failing patterns in generators can also be useful
16:23:43 gurkenglas joins (~gurkengla@dynamic-046-114-182-197.46.114.pool.telefonica.de)
16:24:36 <Inst> Also, I'm curious, what's your take on effect systems, or rather, the definition of such?
16:25:55 <Inst> I consider ALL languages to have an effect system; languages without an IO type have a nullary / unary effect system (every effect is allowed everywhere), Haskell in prelude has a unary / binary effect system (IO vs non-IO), then you have more complex effect systems
16:27:18 <ski> `Maybe' expresses an effect
16:27:23 <Inst> so does List, I guess
16:27:30 [exa] sees IO vs non-IO ----> [its_the_same_thing_meme.gif]
16:31:24 × merijn quits (~merijn@c-001-001-010.client.esciencecenter.eduvpn.nl) (Ping timeout: 260 seconds)
16:33:01 <[exa]> Inst: btw did you try to consider the actual computation as an effect? As in "production of more organized results in the representation within the computer". The view you're using here seems to me very biased towards distinguishing between "internal program thinking" and "externally visible stuff", yet this precise distinction is quite unrealistic
16:34:47 <Inst> Why is it unrealistic?
16:35:06 <Inst> (also, even with pure, non-effecting code, space and time are still effects)
16:35:24 <Inst> actual side effects?
16:35:28 <[exa]> yep, and many other things are effects
16:35:47 <[exa]> is the microsonics that the CPUs do a "communication" effect?
16:35:59 <[exa]> (there's a paper about breaking RSA with microphones somewhere)
16:36:14 <[exa]> are the page requests from the operating system an effect?
16:36:17 <Inst> But why is it unrealistic?
16:37:30 <[exa]> because literally everyone can argue that everyone other has the distinction line wrong
16:37:43 <[exa]> it's completely under-defined
16:38:22 <Inst> Thanks, [exa]. I got trolled for a while by some guy who went on for ages about the definition of effect systems.
16:38:55 <Inst> And got really upset when I explained my definition of effect system, and was aiming to call me always wrong.
16:39:10 <Inst> Ended up blocking him.
16:39:10 <[exa]> yeah, that's the basic outcome of the property being under-defined
16:39:41 × AWizzArd quits (~code@user/awizzard) (Quit: Lost terminal)
16:41:29 <[exa]> in haskell, the usual logical system that allows us to model stuff reliably (and without misinterpretation/handwaving) has no side effects, and the wiggly line of deciding what is a side effect and what's not is delegated to the description of the runtime which interprets the code
16:42:29 <Inst> The problem with starting with a language that's pure is that it's hard to understand what impurity means without the contrast.
16:42:34 mastarija joins (~mastarija@2a05:4f46:e03:6000:4eb2:bb7f:1ccf:de1a)
16:42:55 <[exa]> luckily there's no impurity, right? :D
16:44:41 × ubert quits (~Thunderbi@p200300ecdf13012ec893c5f497fd9467.dip0.t-ipconnect.de) (Ping timeout: 246 seconds)
16:45:21 razetime joins (~Thunderbi@117.254.34.69)
16:45:48 <[exa]> btw I'm completely opposed to the impurity view even with imperative languages; in C you're writing down a list of instructions for the machine which is being interpreted by the machine, and what the machine does is similar to what it does with haskell (except for completely logic-irrelevant differences like the way you organize subroutines)
16:46:47 × __monty__ quits (~toonn@user/toonn) (Quit: leaving)
16:47:34 <Inst> i suppose a PC becoming inoperable due to overclocking is an effect, no?
16:48:20 <[exa]> as in, it's the nice transformation of instructions into other instructions that the C language is about, not the execution and checking for whether the phenomena affect other phenomena
16:48:56 <[exa]> not really, it's how the machine works
16:49:09 eggplantade joins (~Eggplanta@2600:1700:38c5:d800:54db:de44:4607:1cea)
16:49:32 <ski> what matters is what reasoning (including refactoring) you can do, at the level of the language
16:50:15 <Inst> i'm not sure, is this impure in Haskell? One, reading from a file, which breaks pure functions to an extent because the file is not under the program's control and can have any set of data
16:50:24 <Inst> Two, a function that takes a mutable reference as an argument?
16:50:34 [exa] needs to disappear shortly but will be back
16:51:00 <ski> imho, neither
16:51:25 <Inst> it's more like concealed effects
16:51:30 <Inst> or for that matter, System.Random
16:52:54 <ski> how does `hGetLine :: Handle -> IO String' "break pure functions to an extent" ?
16:53:16 <ski> or `readIORef :: IORef a -> IO a', for that matter
16:53:26 × lisbeths quits (uid135845@id-135845.lymington.irccloud.com) (Quit: Connection closed for inactivity)
16:54:26 <Inst> the logic is more, the input is deterministic, it's always the same handle or the same IORef, but the underlying value of the IORef can vary, as can what's contained within the handle
16:54:31 <ski> .. however, if you want to talk about "pure", then perhaps you should read
16:54:36 <ski> @where purely-functional
16:54:36 <lambdabot> "What is a Purely Functional Language?" by Amr Sabry in 1993-01 at <https://www.cs.indiana.edu/~sabry/papers/purelyFunctional.ps>
16:54:44 <Inst> https://wiki.haskell.org/Pure
16:55:53 <ski> "but the underlying value of the IORef can vary, as can what's contained within the handle" -- conceptually, a value of type `IORef a' does *not* "contain" a value of type `a'. similarly, a value of type `Handle' does not contain `Char's
16:57:03 <Inst> IORef a contains a pointer and has the type of the value being referenced, iirc
16:57:35 freeside joins (~mengwong@103.252.202.170)
16:57:56 merijn joins (~merijn@c-001-001-010.client.esciencecenter.eduvpn.nl)
16:58:59 × MajorBiscuit quits (~MajorBisc@145.94.153.3) (Ping timeout: 264 seconds)
16:59:13 <ski> (note that two `IORef a's can be compared for equality, without requiring equality on `a'. it's `instance Eq (IORef a)', not `instance Eq a => Eq (IORef a)'. conceptually, you can think of an `IORef a' as a bit like an `Int' that you use to index inside a `Map Int Blah' or `IntMap Blah' .. except that `IORef a' is parameterized by the "target type" `a', and the corresponding "map" is "heterogenous" .. a bit
16:59:19 <ski> comparable to `DMap IORef Identity')
16:59:22 <ski> @hackage dependent-map
16:59:22 <lambdabot> https://hackage.haskell.org/package/dependent-map
17:00:04 × tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
17:01:04 × vpan quits (~0@212.117.1.172) (Quit: Leaving.)
17:01:08 npmania1 joins (~Thunderbi@121.128.227.178)
17:01:55 <Inst> is it wrong to think of IORef as just a pointer to a mutable?
17:02:11 × freeside quits (~mengwong@103.252.202.170) (Ping timeout: 260 seconds)
17:02:39 <ski> i'm not sure what you mean by the latter
17:02:55 × npmania quits (~Thunderbi@45.8.223.243) (Ping timeout: 256 seconds)
17:02:55 npmania1 is now known as npmania
17:03:07 × eggplantade quits (~Eggplanta@2600:1700:38c5:d800:54db:de44:4607:1cea) (Remote host closed the connection)
17:03:32 <ski> is an `Int' that you use to index inside an `IntMap Blah'/`Map Int Blah', or an `Array Int Blah', or a `Vector Blah' .. is such an `Int' a pointer ?
17:04:23 <Inst> mutable or pointer?
17:04:27 <ski> if you thread successive versions of such an `IntMap Blah'/.. through a computation .. is that a mutable structure ?
17:04:30 <ski> Inst : both
17:05:04 × merijn quits (~merijn@c-001-001-010.client.esciencecenter.eduvpn.nl) (Ping timeout: 248 seconds)
17:06:06 slack1256 joins (~slack1256@186.11.102.104)
17:06:07 <Inst> that is to say, IORef is fundamentally immutable in its own way
17:06:08 tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
17:06:48 <Inst> the IORef always points to the same thing
17:06:56 <Inst> but the thing can change
17:09:09 <ski> > let fact n = factTimes n 1 where factTimes _ 0 = 0; factTimes 0 acc = acc; factTimes n acc = factTimes (n-1) (acc * n) in fact 5 -- does this computation express something that is mutable ?
17:09:11 <lambdabot> 120
17:09:47 <Inst> it's iterative because of the accumulating parameter
17:10:09 <ski> does the accumulator express something mutable ?
17:10:51 <Inst> no, it doesn't, it doesn't mutate, but acts as though it does through passing the output of the argument around, modified
17:11:11 <ski> i would say it does. i would also answer my two previous questions with "yes"
17:11:43 <Inst> that's an interesting take, because people go "Haskell has no mutation" to newbies
17:11:45 <ski> it may or may not be *implemented* in terms of update-in-place .. but that's not the issue here
17:13:23 <Inst> why claim that acc is mutable, then?
17:13:26 <ski> the succession of versions of the accumulator expresses, de facto, a mutable concept, in my mind
17:13:29 <dminuoso> ski: So side effects usually relate to some observable state modification outside of the perspecftive you are considering. Either these side-effects are irrelevant, in which even giving it a name is relatively meaningless (i.e. do we ever care about the heat generation of a computation as a side effect?), or they are irrelevant, in which your perspective is probably ill tuned.
17:13:35 <gurkenglas> Free theorems let me encode some laws by cleverly picking my types. Can I do this for laws whose forall quantifier ranges over the values of a type instead of over all types? I'm hoping for "a:A B such that for any (f :: forall b. A b -> A b), f a == a"
17:14:13 <c_wraith> gurkenglas: you would need dependent types to express that
17:14:16 <ski> if you want to, you could say this is an encoding of something being mutable
17:14:36 <Inst> yes, it is, it's an attempt to translate a for loop
17:15:02 <ski> Inst : a single `acc' is not mutable. the succession of them (all being different variables, dynamically speaking), does express something mutable
17:15:15 <Inst> well, is shadowing mutation?
17:16:15 <Inst> > main = do {let x = 1; x <- x + 1; x <- x + 1; print x}
17:16:17 <lambdabot> <hint>:1:6: error: parse error on input ‘=’
17:16:29 <dminuoso> ski: that is, there arent really any "outside" state variables. If you care about them, they are definitely not "outside", and if you dont, its irrelevant.
17:16:32 <ski> i'm not sure how shadowing is relevant. there's no shadowing in the example, except from the `n' in `fact' being shadowed by `n' in the last defining equation for `factTimes' .. but we could rename the former to say `n0', with no change in behaviour
17:16:40 <Inst> > do {let x = 1; x <- x + 1; x <- x + 1; print x}
17:16:42 <lambdabot> <hint>:1:18: error:
17:16:42 <lambdabot> parse error on input ‘<-’
17:16:42 <lambdabot> Perhaps this statement should be within a 'do' block?
17:17:05 <Inst> > do ; let x = 1; x <- x+1; x <- x +1; print x
17:17:07 <lambdabot> <hint>:1:19: error:
17:17:07 <lambdabot> parse error on input ‘<-’
17:17:07 <lambdabot> Perhaps this statement should be within a 'do' block?
17:17:15 <Inst> !!! >:(
17:17:18 <geekosaur> you need extra braces around the let bindings
17:17:25 <geekosaur> because let uses layout as well
17:17:43 <geekosaur> > do {let {x = 1}; x <- x + 1; x <- x + 1; print x}
17:17:44 <lambdabot> error:
17:17:44 <lambdabot> • No instance for (Num (IO (IO ()))) arising from a use of ‘+’
17:17:44 <lambdabot> • In a stmt of a 'do' block: x <- x + 1
17:17:48 <Inst> > do {{let x = 1}; x <- x + 1; x <- x + 1; print x}
17:17:49 <lambdabot> <hint>:1:5: error: parse error on input ‘{’
17:17:53 <ski> dminuoso : itym s/or they are irrelevant/or they are relevant/ ?
17:18:28 × lortabac quits (~lortabac@2a01:e0a:541:b8f0:c52:e2ce:11c8:93da) (Quit: WeeChat 2.8)
17:18:32 ski would not limit "side-effects" to state, fwiw
17:18:43 <dminuoso> I meant `state` in a very general sense
17:18:45 <geekosaur> and, as I showed, you have a type error because x is pure and therefore has the wrong type for `<-`
17:18:48 <dminuoso> The state of the world, if you want.
17:18:58 <Inst> > u = do {let {x = 1}; x <- pure $ x + 1; x <- pure $ x + 1; print x}
17:18:59 <lambdabot> <hint>:1:3: error: parse error on input ‘=’
17:18:59 <Inst> whoops
17:19:42 <ski> i consider exceptions, nondeterminism, continuations, as other examples, that are not state
17:19:49 <Inst> > do {let {x = 1}; x <- pure $ x + 1; x <- pure $ x + 1; print x}
17:19:50 <lambdabot> <IO ()>
17:20:05 <Inst> > do {let {x = 1}; x <- pure $ x + 1; x <- pure $ x + 1; pure x}
17:20:06 <lambdabot> error:
17:20:06 <lambdabot> • Ambiguous type variable ‘m0’ arising from a use of ‘show_M627921637676...
17:20:06 <lambdabot> prevents the constraint ‘(Show (m0 Integer))’ from being solved.
17:20:32 <tomsmeding> % do {let {x = 1}; x <- pure $ x + 1; x <- pure $ x + 1; print x}
17:20:32 <yahb2> 3
17:20:32 × kurbus quits (~kurbus@user/kurbus) (Quit: Client closed)
17:20:33 <Inst> i'll stop spamming
17:22:06 × razetime quits (~Thunderbi@117.254.34.69) (Remote host closed the connection)
17:22:11 <ski> dminuoso : i'm not really following what you're trying to get across, sorry
17:22:18 <dminuoso> ski: never mind, then.
17:24:25 <ski> trying to grasp what you meant by "outside of the perspecftive you are considering"
17:25:16 Inst_ joins (~Inst@2601:6c4:4081:54f0:d621:5cdd:9051:c240)
17:25:27 <ski> gurkenglas : hm, are you talking about operations whose type `forall'-quantifies not a type, but a value ?
17:27:12 <gurkenglas> ski: the operation f up there quantifies over types, but the equation f a == a quantifies over the possible values of f
17:27:36 <ski> would `b' and `B' be values, rather than types, there ?
17:27:50 <gurkenglas> both are types
17:28:02 o-90 joins (~o-90@gateway/tor-sasl/o-90)
17:28:12 asscrackbandit joins (~user@eth-west-pareq2-46-193-2-167.wb.wifirst.net)
17:28:23 accord joins (uid568320@id-568320.hampstead.irccloud.com)
17:28:26 × Inst quits (~Inst@2601:6c4:4081:54f0:d621:5cdd:9051:c240) (Ping timeout: 246 seconds)
17:29:05 × o-90 quits (~o-90@gateway/tor-sasl/o-90) (Client Quit)
17:29:23 <ski> which would be the operation (whose type) the free theorem was derived from ?
17:29:31 freeside joins (~mengwong@103.252.202.170)
17:31:36 <gurkenglas> I see whence the confusion, now - I had only stated the theorem I'd want, not the clever type that would get it
17:31:51 waleee joins (~waleee@2001:9b0:21c:4000:5bf9:6515:c030:57b7)
17:31:56 × shriekingnoise quits (~shrieking@186.137.175.87) (Ping timeout: 246 seconds)
17:33:48 × freeside quits (~mengwong@103.252.202.170) (Ping timeout: 252 seconds)
17:33:57 <ski> any `f' of the appropriate type has `a' as a fixed point .. apparently
17:35:17 <Inst_> ...
17:35:46 × notzmv quits (~zmv@user/notzmv) (Ping timeout: 265 seconds)
17:35:51 <gurkenglas> yes, that's what i want to encode. i don't have the solution yet, i was hoping Haskell lets me do this and someone knows how. I'm scribbling.
17:36:59 tzh joins (~tzh@c-24-21-73-154.hsd1.wa.comcast.net)
17:39:32 <Inst_> ...
17:40:28 ski . o O ( "Internalizing Parametricity" by Guilhem Moulin in 2016 at <https://core.ac.uk/display/70616322> )
17:40:44 × zeenk quits (~zeenk@2a02:2f04:a214:1e00::7fe) (Quit: Konversation terminated!)
17:44:26 × tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
17:45:38 × asscrackbandit quits (~user@eth-west-pareq2-46-193-2-167.wb.wifirst.net) (Ping timeout: 246 seconds)
17:48:37 cheater_ joins (~Username@user/cheater)
17:51:39 × cheater quits (~Username@user/cheater) (Ping timeout: 248 seconds)
17:51:42 <shapr> I like list comprehensions.
17:51:43 cheater_ is now known as cheater
17:52:31 <geekosaur> I started out not liking them much but have warmed to them a bit
17:53:11 × pja quits (~pja@2a02:8010:6098:0:e65f:1ff:fe1f:660f) (Read error: Connection reset by peer)
17:53:24 npmania1 joins (~Thunderbi@45.8.223.243)
17:54:07 × npmania quits (~Thunderbi@121.128.227.178) (Ping timeout: 248 seconds)
17:54:08 npmania1 is now known as npmania
17:56:24 eggplantade joins (~Eggplanta@2600:1700:38c5:d800:54db:de44:4607:1cea)
17:57:16 × jmdaemon quits (~jmdaemon@user/jmdaemon) (Ping timeout: 252 seconds)
17:57:27 pja joins (~pja@2a02:8010:6098:0:e65f:1ff:fe1f:660f)
17:59:02 tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
18:00:06 kurbus joins (~kurbus@user/kurbus)
18:01:47 × shapr quits (~user@net-5-88-238-17.cust.vodafonedsl.it) (Ping timeout: 248 seconds)
18:05:37 merijn joins (~merijn@c-001-001-010.client.esciencecenter.eduvpn.nl)
18:06:53 freeside joins (~mengwong@103.252.202.170)
18:11:31 × freeside quits (~mengwong@103.252.202.170) (Ping timeout: 268 seconds)
18:22:15 jmdaemon joins (~jmdaemon@user/jmdaemon)
18:23:03 × kurbus quits (~kurbus@user/kurbus) (Ping timeout: 260 seconds)
18:23:11 king_gs joins (~Thunderbi@187.201.41.239)
18:28:31 <c_wraith> I read a paper a while back that used sequence_ with a list comprehension instead of mapM_ . I couldn't wrap my head around that particular choice
18:32:10 <glguy> c_wraith: I don't know the example, but list comprehensions can be a much clearer way to write the list transformation than a lambda, especially with guards, patterns, and multiple bindings
18:32:28 <c_wraith> glguy: there was a do block inside the list comprehension. :P
18:33:20 jao joins (~jao@cpc103048-sgyl39-2-0-cust502.18-2.cable.virginm.net)
18:33:32 × king_gs quits (~Thunderbi@187.201.41.239) (Quit: king_gs)
18:39:59 × merijn quits (~merijn@c-001-001-010.client.esciencecenter.eduvpn.nl) (Ping timeout: 248 seconds)
18:43:05 × jpds quits (~jpds@gateway/tor-sasl/jpds) (Remote host closed the connection)
18:43:56 jpds joins (~jpds@gateway/tor-sasl/jpds)
18:47:27 × npmania quits (~Thunderbi@45.8.223.243) (Quit: npmania)
18:48:27 × thongpv quits (~thongpv87@2402:9d80:32e:8f1:5f45:6f5f:527a:b486) (Read error: Connection reset by peer)
18:49:04 × werneta quits (~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net) (Ping timeout: 260 seconds)
18:50:20 Sinbad joins (~Sinbad@user/sinbad)
18:50:45 <ddellacosta> So I'm trying to write some integration tests which start up my main process in an Async, I send messages to it via TQueue, then test some state to see if it behaved as expected. However, I realized my folly when the test returned with a failure before anything in the threaded process could run. Whoops. I'm thinking now that I could pass in another TQueue and send a message _from_ the main thread
18:50:46 <ddellacosta> once it's gotten to the end of its event loop (at which point I can check assertions), but this feels like an ugly hack just to support tests. Are there better approaches?
18:51:20 Feuermagier_ joins (~Feuermagi@user/feuermagier)
18:51:45 <ski> c_wraith : obviously ought to have used `MonadComprehensions', like `sequence_ [[foo a b | _ <- putStrLn "foo",a <- getLine,b <- readLn] | x <- xs,y <- ys]' ;)
18:51:57 × Feuermagier_ quits (~Feuermagi@user/feuermagier) (Remote host closed the connection)
18:53:22 Tuplanolla joins (~Tuplanoll@91-159-68-152.elisa-laajakaista.fi)
18:53:44 × Feuermagier quits (~Feuermagi@user/feuermagier) (Ping timeout: 252 seconds)
18:56:00 × beteigeuze quits (~Thunderbi@a79-169-109-107.cpe.netcabo.pt) (Ping timeout: 265 seconds)
18:58:09 beteigeuze joins (~Thunderbi@a79-169-109-107.cpe.netcabo.pt)
18:59:08 × mjs2600 quits (~mjs2600@c-24-91-3-49.hsd1.vt.comcast.net) (Ping timeout: 246 seconds)
18:59:13 mjs2600_ joins (~mjs2600@c-24-91-3-49.hsd1.vt.comcast.net)
19:04:23 mechap joins (~mechap@user/mechap)
19:05:24 × beteigeuze quits (~Thunderbi@a79-169-109-107.cpe.netcabo.pt) (Ping timeout: 260 seconds)
19:07:08 opticblast joins (~Thunderbi@172.58.80.43)
19:11:11 eruditass joins (uid248673@id-248673.uxbridge.irccloud.com)
19:13:17 beteigeuze joins (~Thunderbi@bl14-81-220.dsl.telepac.pt)
19:19:08 Feuermagier joins (~Feuermagi@user/feuermagier)
19:19:52 × stiell quits (~stiell@gateway/tor-sasl/stiell) (Remote host closed the connection)
19:20:44 stiell joins (~stiell@gateway/tor-sasl/stiell)
19:21:57 × irrgit_ quits (~irrgit@176.113.74.130) (Read error: Connection reset by peer)
19:25:23 × beteigeuze quits (~Thunderbi@bl14-81-220.dsl.telepac.pt) (Ping timeout: 264 seconds)
19:34:30 × thegeekinside quits (~thegeekin@189.180.83.186) (Remote host closed the connection)
19:34:35 werneta joins (~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net)
19:35:53 <Inst_> i guess my issue with list comprehensions is that i've seen bad code done in list comprehensions
19:36:07 <Inst_> it seems that idiomatic list comprehensions use the Haskell whitespacing rules more efficiently
19:36:28 freeside joins (~mengwong@103.252.202.170)
19:36:58 EvanR joins (~EvanR@user/evanr)
19:37:16 econo joins (uid147250@user/econo)
19:40:36 × bgs quits (~bgs@212-85-160-171.dynamic.telemach.net) (Remote host closed the connection)
19:40:43 × ddellacosta quits (~ddellacos@146.70.166.139) (Ping timeout: 252 seconds)
19:40:51 × freeside quits (~mengwong@103.252.202.170) (Ping timeout: 260 seconds)
19:43:00 <davean> Inst_: Is there something you haven't seen bad code done with?
19:44:24 notzmv joins (~zmv@user/notzmv)
19:45:08 Inst_ is now known as Inst
19:45:28 ski sometimes wonders whether lists, list comprehensions, ought to have used `;', rather than `,'
19:45:37 <monochrom> I'm pretty sure the answer is yes, and I'm also pretty sure human are absolutely biased and selective, so there is really nothing to discuss.
19:47:26 <Inst> if you're asking about my complaints about list syntax, it's that Julia and Matlab have better ways to handle matrices than Haskell
19:47:50 <EvanR> haskell isn't good at "everything is a matrix"
19:48:15 <EvanR> in the words of B user guide, it's good at non-numeric applications xD
19:48:18 <geekosaur> if you want matrices then use APL >.>
19:48:29 <EvanR> if you want to write numeric programs use fortran
19:48:49 <Inst> had some Julian run up and talk about how pretty their recursive fib definition was, until i pointed out that doing it via matrices was both more succinct and faster
19:49:09 <Inst> problem was, the Haskell port wasn't good
19:49:20 chomwitt joins (~chomwitt@2a02:587:7a12:aa00:1ac0:4dff:fedb:a3f1)
19:49:24 <EvanR> restructuring something as a matrix is always a cool party trick
19:49:47 <monochrom> If you like Haskell and APL, then use Haskell to give semantics to APL >:) https://link.springer.com/chapter/10.1007/978-3-662-54434-1_21
19:49:59 mjs2600 joins (~mjs2600@c-24-91-3-49.hsd1.vt.comcast.net)
19:50:10 × mjs2600_ quits (~mjs2600@c-24-91-3-49.hsd1.vt.comcast.net) (Read error: Connection reset by peer)
19:51:34 <monochrom> A linear transformation of a vector can always be linearized (pun intended haha) to tuple-manipulating code instead of invoking any matrix syntax.
19:52:12 × remedan quits (~remedan@ip-94-112-0-18.bb.vodafone.cz) (Read error: Connection reset by peer)
19:53:19 <davean> Inst: What do lists have to do with matrixes?
19:53:19 <Inst> thanks, will show that to an APLer friend
19:53:31 <Inst> matrices in haskell are implemented as nested lists
19:53:41 <davean> No they aren't
19:53:45 <EvanR> among other ways
19:53:46 <monochrom> That's not what hmatrix does.
19:53:57 <davean> Thats just silly to claim
19:54:11 <EvanR> e.g. linear (package) 4x4 matrix is 4 V4s
19:54:24 <Inst> yes, i'm aware, typed matrices with a Nat for the size
19:54:25 <monochrom> See? I called it. There is really nothing to discuss. "discuss".
19:54:32 <davean> Inst: Not just that
19:54:55 <EvanR> oh, hmatrix implements matrices using a matrix? interesting
19:54:59 <davean> monochrom: yah this is pointless, this can't even be in good faith
19:55:10 remedan joins (~remedan@ip-94-112-0-18.bb.vodafone.cz)
19:55:15 <Inst> ????
19:57:32 <Inst> but to finish, the point is, Haskell doesn't have first-class syntactical support for matrices, that's all
19:58:32 <davean> Inst: sure it does, naturally by how its syntax is designed so it doesn't need to special case it. You can just do it as a library
19:58:52 <davean> You can build syntax just fine
19:58:57 beteigeuze joins (~Thunderbi@bl14-81-220.dsl.telepac.pt)
19:59:08 <davean> And you can have matrix comprehensions too and such
19:59:39 × gurkenglas quits (~gurkengla@dynamic-046-114-182-197.46.114.pool.telefonica.de) (Ping timeout: 248 seconds)
19:59:52 <Inst> i'm going through hmatrix lib right now
20:03:14 × FinnElija quits (~finn_elij@user/finn-elija/x-0085643) (Killed (NickServ (Forcing logout FinnElija -> finn_elija)))
20:03:14 FinnElija joins (~finn_elij@user/finn-elija/x-0085643)
20:06:40 foghorn joins (~foghorn@user/foghorn)
20:07:58 <Inst> the syntax here at least seems to be converting from lists
20:07:59 <Inst> https://hackage.haskell.org/package/hmatrix-0.20.2/docs/Numeric-LinearAlgebra-Data.html
20:08:10 <Inst> with an annotation that converts a list to a matrix
20:10:26 × azure_vermilion quits (~azure_ver@23.106.59.29) (Ping timeout: 255 seconds)
20:11:00 azure_vermilion joins (~azure_ver@164.39.138.83)
20:15:18 × eggplantade quits (~Eggplanta@2600:1700:38c5:d800:54db:de44:4607:1cea) (Remote host closed the connection)
20:18:40 × mechap quits (~mechap@user/mechap) (Ping timeout: 252 seconds)
20:20:26 mechap joins (~mechap@user/mechap)
20:21:49 gurkenglas joins (~gurkengla@dynamic-046-114-182-197.46.114.pool.telefonica.de)
20:27:56 merijn joins (~merijn@86-86-29-250.fixed.kpn.net)
20:29:58 × trev quits (~trev@user/trev) (Remote host closed the connection)
20:33:47 eggplantade joins (~Eggplanta@2600:1700:38c5:d800:54db:de44:4607:1cea)
20:33:53 × slack1256 quits (~slack1256@186.11.102.104) (Remote host closed the connection)
20:35:00 × merijn quits (~merijn@86-86-29-250.fixed.kpn.net) (Ping timeout: 260 seconds)
20:37:29 bilegeek joins (~bilegeek@2600:1008:b059:33a6:3874:3d26:7f6d:f6e5)
20:39:33 <monochrom> Ugh 9.2.6 is released. This recompiles everything again.
20:39:45 monochrom is on the 9.2.x stream.
20:40:55 <Hecate> monochrom: did you need the fixes?
20:41:08 <monochrom> I think no. :)
20:43:07 <monochrom> Yeah I'm a pretty light user, I hadn't run into the bugs.
20:45:25 <Hecate> ok :)
20:48:00 <geekosaur> still. so far I've found that someone will trip over them, so I try to keep up to date. but this one hasn't hit ghcup yet, from the looks of it
20:48:14 <geekosaur> speaking of, I need to try 9.6 alpha2
20:54:00 gehmehgeh is now known as gmg
20:56:17 × notzmv quits (~zmv@user/notzmv) (Ping timeout: 252 seconds)
20:59:15 × foul_owl quits (~kerry@157.97.134.60) (Ping timeout: 268 seconds)
21:04:11 × gurkenglas quits (~gurkengla@dynamic-046-114-182-197.46.114.pool.telefonica.de) (Ping timeout: 268 seconds)
21:05:17 × eggplantade quits (~Eggplanta@2600:1700:38c5:d800:54db:de44:4607:1cea) (Remote host closed the connection)
21:05:51 pavonia joins (~user@user/siracusa)
21:06:31 eggplantade joins (~Eggplanta@104-55-37-220.lightspeed.sntcca.sbcglobal.net)
21:08:00 × takuan_dozo quits (~takuan@178-116-218-225.access.telenet.be) (Remote host closed the connection)
21:12:48 foul_owl joins (~kerry@193.29.61.35)
21:14:54 × mastarija quits (~mastarija@2a05:4f46:e03:6000:4eb2:bb7f:1ccf:de1a) (Quit: WeeChat 3.7.1)
21:17:08 × azimut quits (~azimut@gateway/tor-sasl/azimut) (Ping timeout: 255 seconds)
21:18:59 × mjs2600 quits (~mjs2600@c-24-91-3-49.hsd1.vt.comcast.net) (Ping timeout: 260 seconds)
21:19:54 mjs2600 joins (~mjs2600@143.244.44.172)
21:23:11 mjs2600_ joins (~mjs2600@c-24-91-3-49.hsd1.vt.comcast.net)
21:23:20 × avicenzi quits (~avicenzi@2a00:ca8:a1f:b004::c32) (Ping timeout: 246 seconds)
21:24:15 × mjs2600 quits (~mjs2600@143.244.44.172) (Ping timeout: 248 seconds)
21:31:09 <stefan-_> when I have an list of values where I need to (often) swap two values at given indices, would be IOArray or Data.Vector better?
21:33:32 <c_wraith> if "often" is enough, both are slow and you should be using primops and the primitive types those libraries use. I've had to do that before.
21:34:02 <c_wraith> But for most use cases, either is fine.
21:34:22 <c_wraith> So long as you stick to a mutable api, anyway. pick whichever you like more
21:35:17 × eggplantade quits (~Eggplanta@104-55-37-220.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection)
21:37:14 Unicorn_Princess joins (~Unicorn_P@user/Unicorn-Princess/x-3540542)
21:38:42 telser joins (~quassel@user/telser)
21:39:17 <stefan-_> c_wraith, ok, thanks, IOArray is actually fast enough for my purposes
21:39:44 × chele quits (~chele@user/chele) (Remote host closed the connection)
21:40:33 × beteigeuze quits (~Thunderbi@bl14-81-220.dsl.telepac.pt) (Quit: beteigeuze)
21:41:36 × jonathanx quits (~jonathan@h-178-174-176-109.A357.priv.bahnhof.se) (Remote host closed the connection)
21:41:54 jonathanx joins (~jonathan@h-178-174-176-109.A357.priv.bahnhof.se)
21:42:26 beteigeuze joins (~Thunderbi@bl14-81-220.dsl.telepac.pt)
21:42:45 <c_wraith> man... when did I have to do that? Oh! It was implementing pbkdf2. The only library that had it back then was wrong, because the author misunderstood the spec.
21:43:16 <c_wraith> pbkdf2 is supposed to be slow, but your implementation is not supposed to be slower than everyone else's
21:51:54 jonathanx_ joins (~jonathan@h-178-174-176-109.A357.priv.bahnhof.se)
21:52:28 × jonathanx quits (~jonathan@h-178-174-176-109.A357.priv.bahnhof.se) (Remote host closed the connection)
21:58:06 × accord quits (uid568320@id-568320.hampstead.irccloud.com) (Quit: Connection closed for inactivity)
22:00:01 Guest51 joins (~Guest51@205.175.106.161)
22:01:06 gurkenglas joins (~gurkengla@dynamic-046-114-182-197.46.114.pool.telefonica.de)
22:14:41 × hpc quits (~juzz@ip98-169-35-163.dc.dc.cox.net) (Ping timeout: 252 seconds)
22:14:42 rburkholder joins (~blurb@96.45.2.121)
22:17:35 × mncheck quits (~mncheck@193.224.205.254) (Ping timeout: 246 seconds)
22:20:18 × beteigeuze quits (~Thunderbi@bl14-81-220.dsl.telepac.pt) (Remote host closed the connection)
22:22:12 beteigeuze joins (~Thunderbi@bl14-81-220.dsl.telepac.pt)
22:25:32 × gurkenglas quits (~gurkengla@dynamic-046-114-182-197.46.114.pool.telefonica.de) (Remote host closed the connection)
22:25:54 gurkenglas joins (~gurkengla@dynamic-046-114-182-197.46.114.pool.telefonica.de)
22:29:35 × forell_ quits (~forell@host-178-216-90-220.sta.tvknaszapraca.pl) (Quit: ZNC - https://znc.in)
22:29:53 forell joins (~forell@user/forell)
22:32:33 merijn joins (~merijn@c-001-001-010.client.esciencecenter.eduvpn.nl)
22:35:50 eggplantade joins (~Eggplanta@2600:1700:38c5:d800:54db:de44:4607:1cea)
22:37:08 freeside joins (~mengwong@103.252.202.170)
22:37:30 × merijn quits (~merijn@c-001-001-010.client.esciencecenter.eduvpn.nl) (Ping timeout: 260 seconds)
22:37:36 × son0p quits (~ff@181.136.122.143) (Remote host closed the connection)
22:38:12 × eruditass quits (uid248673@id-248673.uxbridge.irccloud.com) (Quit: Connection closed for inactivity)
22:38:49 × Tuplanolla quits (~Tuplanoll@91-159-68-152.elisa-laajakaista.fi) (Quit: Leaving.)
22:39:09 × gurkenglas quits (~gurkengla@dynamic-046-114-182-197.46.114.pool.telefonica.de) (Ping timeout: 268 seconds)
22:41:47 × freeside quits (~mengwong@103.252.202.170) (Ping timeout: 248 seconds)
22:45:24 × beteigeuze quits (~Thunderbi@bl14-81-220.dsl.telepac.pt) (Quit: beteigeuze)
22:47:13 beteigeuze joins (~Thunderbi@bl14-81-220.dsl.telepac.pt)
22:49:15 × eggplantade quits (~Eggplanta@2600:1700:38c5:d800:54db:de44:4607:1cea) (Remote host closed the connection)
22:54:37 <DigitalKiwi> lmao
22:54:45 freeside joins (~mengwong@103.252.202.170)
22:56:10 <EvanR> stefan-_, relevant to the question of optimizing this is the size of the array and the probability distribution on the indices
22:56:21 <EvanR> weighted toward 0 or uniform
22:56:58 <EvanR> (in case there's something better than a mutable array)
22:57:27 eggplantade joins (~Eggplanta@2600:1700:38c5:d800:54db:de44:4607:1cea)
22:57:59 × coot quits (~coot@2a02:a310:e241:1b00:ec1a:e9df:79ac:66ba) (Quit: coot)
22:59:02 × freeside quits (~mengwong@103.252.202.170) (Ping timeout: 252 seconds)
23:00:04 × tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
23:06:36 hpc joins (~juzz@ip98-169-35-163.dc.dc.cox.net)
23:07:18 tjakway joins (~tjakway@cpe-107-184-74-161.socal.res.rr.com)
23:11:34 × mc47 quits (~mc47@xmonad/TheMC47) (Ping timeout: 260 seconds)
23:14:21 × FinnElija quits (~finn_elij@user/finn-elija/x-0085643) (Remote host closed the connection)
23:15:21 FinnElija joins (~finn_elij@user/finn-elija/x-0085643)
23:17:14 × michalz quits (~michalz@185.246.204.107) (Remote host closed the connection)
23:19:02 × Guest51 quits (~Guest51@205.175.106.161) (Quit: Client closed)
23:19:19 bitdex joins (~bitdex@gateway/tor-sasl/bitdex)
23:23:23 × waleee quits (~waleee@2001:9b0:21c:4000:5bf9:6515:c030:57b7) (Ping timeout: 246 seconds)
23:28:58 × gnalzo quits (~gnalzo@2a01:e0a:498:fd50:fcc6:bb5d:489a:ce8c) (Quit: WeeChat 3.8)
23:29:14 × tjakway quits (~tjakway@cpe-107-184-74-161.socal.res.rr.com) (Quit: WeeChat 3.5)
23:34:03 × werneta quits (~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net) (Ping timeout: 248 seconds)
23:53:20 × sphynx quits (~xnyhps@2a02:2770:3:0:216:3eff:fe67:3288) (Ping timeout: 260 seconds)
23:58:33 sphynx joins (~xnyhps@2a02:2770:3:0:216:3eff:fe67:3288)

All times are in UTC on 2023-02-10.