Home liberachat/#haskell: Logs Calendar

Logs on 2023-06-28 (liberachat/#haskell)

00:00:30 adanwan joins (~adanwan@gateway/tor-sasl/adanwan)
00:01:04 <Logio> Oh, the proof I remembered is nearly trivial, since the set of computable numbers is obviously countable, yet the reals are not
00:01:07 <ncf> Logio: surely ℝ \ a countable subset is dense in ℝ
00:01:18 <Logio> ncf: exactly
00:01:42 <dolio> Well, that's pretty expected depending on what you mean, because the reals are uncountable, and algorithms are countable. But the point above was that someone is supposed to point out an uncomputable real, and the things you can point out are also countable.
00:02:20 <EvanR> the things you can point out are countable?
00:02:28 <dolio> Yeah.
00:02:29 <c_wraith> assuming you use language to do the pointing, yhes
00:02:32 <EvanR> alrighty
00:02:55 <c_wraith> Unless you know a language capable of embedding infinite information in a finite string...
00:02:57 <EvanR> that might just devolve into ultrafinitism
00:03:14 <EvanR> the things you can point out is actually finite for many reasons
00:03:18 <dolio> Well, I'm allowing some idealism.
00:03:30 <dolio> Just not the usual amount of BS idealism.
00:06:50 <EvanR> but yeah if you try to equate reals with possibly infinite list of Bool, and haskell can compute any computable list of Bool, and you enumerate them all in a lazy list, you can use a diagonal argument to argue we missed something. Whatever it is is uncomputable by definition
00:07:35 × cheater quits (~Username@user/cheater) (Quit: Going offline, see ya! (www.adiirc.com))
00:07:37 × driib quits (~driib@vmi931078.contaboserver.net) (Read error: Connection reset by peer)
00:07:56 driib joins (~driib@vmi931078.contaboserver.net)
00:08:39 <EvanR> that's totally wrong because the argument involves going over that diagonal
00:09:16 <EvanR> clearly something strange in the neighborhood though
00:10:58 <dolio> The diagonal argument shows you can't enumerate every computable list of bools.
00:12:11 <EvanR> so you can't enumerate all [Bool] producing haskell programs?
00:12:49 × Feuermagier quits (~Feuermagi@user/feuermagier) (Read error: Connection reset by peer)
00:12:50 <dolio> Not every [Bool] program is a computable list of booleans.
00:12:55 <dolio> Some of them diverge.
00:13:23 <dolio> In the Bool part of the list part.
00:13:34 <EvanR> so the naive version of the list contains bombs that mess up a literate attempt to show the diagonal
00:13:42 <EvanR> literal
00:14:52 <dolio> If your [[Bool]] contains entries that diverge somewhere, then it doesn't meet the specification to begin with.
00:15:08 wroathe joins (~wroathe@207-153-38-140.fttp.usinternet.com)
00:15:09 × wroathe quits (~wroathe@207-153-38-140.fttp.usinternet.com) (Changing host)
00:15:09 wroathe joins (~wroathe@user/wroathe)
00:15:25 <dolio> So it doesn't matter what the diagonal-taking program does with it.
00:16:26 cheater joins (~Username@user/cheater)
00:17:10 <EvanR> attempt to filter those out with a timeout or exception handler xD
00:20:20 <dolio> Anyhow, this all works entirely in the computable world, for boolean streams. The computable bit streams are computably uncountable.
00:20:34 Feuermagier joins (~Feuermagi@user/feuermagier)
00:21:28 <EvanR> I failed to show that there's an uncomputable stream
00:21:37 × driib quits (~driib@vmi931078.contaboserver.net) (Remote host closed the connection)
00:21:57 driib joins (~driib@vmi931078.contaboserver.net)
00:22:21 <dolio> Well, it's even easier to define Chaitin's bit stream, I think.
00:23:33 <dolio> The real number has something fancy going on to somehow be related to probability or something.
00:29:33 Nokurn joins (~jeremiah@cpe-76-86-186-227.socal.res.rr.com)
00:32:23 merijn joins (~merijn@c-001-001-003.client.esciencecenter.eduvpn.nl)
00:33:50 random-jellyfish joins (~random-je@user/random-jellyfish)
00:35:48 × driib quits (~driib@vmi931078.contaboserver.net) (Remote host closed the connection)
00:36:02 × machinedgod quits (~machinedg@d198-53-218-113.abhsia.telus.net) (Ping timeout: 245 seconds)
00:36:08 driib joins (~driib@vmi931078.contaboserver.net)
00:37:59 o-90 joins (~o-90@gateway/tor-sasl/o-90)
00:38:11 × o-90 quits (~o-90@gateway/tor-sasl/o-90) (Remote host closed the connection)
00:43:37 <[Leary]> Chaitin's constant is a bit complicated. Instead you can just directly encode a halting oracle into the digits of a real number.
00:45:32 <EvanR> is that what the specker sequence above is doing
00:46:06 × Nokurn quits (~jeremiah@cpe-76-86-186-227.socal.res.rr.com) (Ping timeout: 260 seconds)
00:51:27 × driib quits (~driib@vmi931078.contaboserver.net) (Remote host closed the connection)
00:51:49 driib joins (~driib@vmi931078.contaboserver.net)
00:52:17 hisa38 joins (~hisa38@104-181-102-238.lightspeed.wepbfl.sbcglobal.net)
00:52:28 <[Leary]> EvanR: No, that construction is also less direct---it needs to be, since it has a more specific goal.
00:53:10 smoge joins (~smoge@2603-7000-4b42-1100-a4e2-7fcb-30b3-1956.res6.spectrum.com)
01:05:22 × driib quits (~driib@vmi931078.contaboserver.net) (Remote host closed the connection)
01:05:43 driib joins (~driib@vmi931078.contaboserver.net)
01:07:11 × merijn quits (~merijn@c-001-001-003.client.esciencecenter.eduvpn.nl) (Ping timeout: 264 seconds)
01:11:33 × albet70 quits (~xxx@2400:8902::f03c:92ff:fe60:98d8) (Remote host closed the connection)
01:12:48 × myxos quits (~myxos@cpe-65-28-251-121.cinci.res.rr.com) (Quit: myxos)
01:13:01 myxos joins (~myxos@cpe-65-28-251-121.cinci.res.rr.com)
01:14:59 × jmdaemon quits (~jmdaemon@user/jmdaemon) (Ping timeout: 264 seconds)
01:15:07 chromoblob joins (~user@37.113.180.121)
01:17:39 albet70 joins (~xxx@2400:8902::f03c:92ff:fe60:98d8)
01:19:05 × driib quits (~driib@vmi931078.contaboserver.net) (Read error: Connection reset by peer)
01:19:26 driib joins (~driib@vmi931078.contaboserver.net)
01:19:32 × chromoblob quits (~user@37.113.180.121) (Ping timeout: 246 seconds)
01:23:10 nate2 joins (~nate@c-98-45-169-16.hsd1.ca.comcast.net)
01:27:56 × nate2 quits (~nate@c-98-45-169-16.hsd1.ca.comcast.net) (Ping timeout: 246 seconds)
01:32:20 × driib quits (~driib@vmi931078.contaboserver.net) (Remote host closed the connection)
01:32:40 driib joins (~driib@vmi931078.contaboserver.net)
01:34:52 × waleee quits (~waleee@2001:9b0:21c:4000:5bf9:6515:c030:57b7) (Ping timeout: 240 seconds)
01:35:05 × geranim0 quits (~geranim0@modemcable182.140-177-173.mc.videotron.ca) (Ping timeout: 240 seconds)
01:36:38 × ystael quits (~ystael@user/ystael) (Ping timeout: 252 seconds)
01:37:24 hisa381 joins (~hisa38@104-181-102-238.lightspeed.wepbfl.sbcglobal.net)
01:38:47 × hisa38 quits (~hisa38@104-181-102-238.lightspeed.wepbfl.sbcglobal.net) (Ping timeout: 246 seconds)
01:38:48 hisa381 is now known as hisa38
01:44:22 × dibblego quits (~dibblego@haskell/developer/dibblego) (Ping timeout: 245 seconds)
01:44:31 × driib quits (~driib@vmi931078.contaboserver.net) (Remote host closed the connection)
01:44:51 driib joins (~driib@vmi931078.contaboserver.net)
01:53:11 dibblego joins (~dibblego@122-199-1-30.ip4.superloop.au)
01:53:11 × dibblego quits (~dibblego@122-199-1-30.ip4.superloop.au) (Changing host)
01:53:11 dibblego joins (~dibblego@haskell/developer/dibblego)
01:56:44 × driib quits (~driib@vmi931078.contaboserver.net) (Remote host closed the connection)
01:57:04 driib joins (~driib@vmi931078.contaboserver.net)
02:08:16 × driib quits (~driib@vmi931078.contaboserver.net) (Remote host closed the connection)
02:08:35 driib joins (~driib@vmi931078.contaboserver.net)
02:08:48 × xff0x quits (~xff0x@ai098135.d.east.v6connect.net) (Ping timeout: 258 seconds)
02:11:19 × bilegeek quits (~bilegeek@2600:1008:b09c:efb7:b7bf:5045:f083:53f7) (Quit: Leaving)
02:15:07 chromoblob joins (~user@37.113.180.121)
02:15:51 dsrt^ joins (~dsrt@24.125.210.85)
02:16:36 × [itchyjunk] quits (~itchyjunk@user/itchyjunk/x-7353470) (Remote host closed the connection)
02:17:24 nate2 joins (~nate@c-98-45-169-16.hsd1.ca.comcast.net)
02:18:16 × Unicorn_Princess quits (~Unicorn_P@user/Unicorn-Princess/x-3540542) (Quit: Leaving)
02:18:24 talismanick joins (~user@2601:204:ef01:8ca0::a3e7)
02:19:22 × chromoblob quits (~user@37.113.180.121) (Ping timeout: 245 seconds)
02:20:44 <talismanick> Is servant-errors superseded by another package? It doesn't work with base >4.14
02:21:24 × driib quits (~driib@vmi931078.contaboserver.net) (Remote host closed the connection)
02:21:44 driib joins (~driib@vmi931078.contaboserver.net)
02:22:37 × FinnElija quits (~finn_elij@user/finn-elija/x-0085643) (Killed (NickServ (Forcing logout FinnElija -> finn_elija)))
02:22:37 finn_elija joins (~finn_elij@user/finn-elija/x-0085643)
02:22:37 finn_elija is now known as FinnElija
02:22:38 Katarushisu0 joins (~Katarushi@cpc147790-finc20-2-0-cust502.4-2.cable.virginm.net)
02:22:47 × Katarushisu quits (~Katarushi@cpc147790-finc20-2-0-cust502.4-2.cable.virginm.net) (Ping timeout: 264 seconds)
02:22:47 Katarushisu0 is now known as Katarushisu
02:27:29 × td_ quits (~td@i5387090F.versanet.de) (Ping timeout: 240 seconds)
02:27:43 <jackdk> I have never seen that package before in my life. I tend to use the UVerb stuff in modern servant if I need to be precise about returned codes, but I don't know if that solves your problem.
02:29:40 td_ joins (~td@i5387093D.versanet.de)
02:30:05 × driib quits (~driib@vmi931078.contaboserver.net) (Read error: Connection reset by peer)
02:30:25 driib joins (~driib@vmi931078.contaboserver.net)
02:44:33 × driib quits (~driib@vmi931078.contaboserver.net) (Remote host closed the connection)
02:44:55 driib joins (~driib@vmi931078.contaboserver.net)
02:45:43 × Feuermagier quits (~Feuermagi@user/feuermagier) (Remote host closed the connection)
02:49:40 Feuermagier joins (~Feuermagi@user/feuermagier)
02:50:56 × czy quits (~user@host-140-26.ilcub310.champaign.il.us.clients.pavlovmedia.net) (Remote host closed the connection)
02:51:22 × dibblego quits (~dibblego@haskell/developer/dibblego) (Ping timeout: 250 seconds)
02:51:55 <siraben> can people on the libera side hear me?
02:53:45 <glguy> yeah
02:54:25 czy joins (~user@host-140-26.ilcub310.champaign.il.us.clients.pavlovmedia.net)
02:56:17 dibblego joins (~dibblego@122-199-1-30.ip4.superloop.au)
02:56:17 × dibblego quits (~dibblego@122-199-1-30.ip4.superloop.au) (Changing host)
02:56:17 dibblego joins (~dibblego@haskell/developer/dibblego)
02:56:58 xff0x joins (~xff0x@125x103x176x34.ap125.ftth.ucom.ne.jp)
02:57:08 eggplantade joins (~Eggplanta@2600:1700:38c5:d800:296e:3128:9bb:592b)
02:59:35 reach joins (~reach@bras-base-toroon2643w-grc-19-74-12-129-40.dsl.bell.ca)
03:02:45 k`` joins (~user@136.56.140.2)
03:04:03 <k``> Is there any particular reason that ByteString uses a foreign pointer while Text uses a ByteArray#?
03:04:35 merijn joins (~merijn@c-001-001-003.client.esciencecenter.eduvpn.nl)
03:06:52 × myme quits (~myme@2a01:799:d60:e400:5ad3:735a:f98b:c82b) (Ping timeout: 245 seconds)
03:12:30 <EvanR> ByteStrings are in pinned memory so they can interact with FFI, there's that
03:13:59 <probie> I don't know the reason, but given that `ShortByteString` uses a `ByteArray#`, this was definitely a deliberate choice for `ByteString`
03:15:02 <k``> Oh, that's an interesting tradeoff.
03:15:48 <siraben> great the bridge is back. is anyone using aarch64 ghc and does profiling work for you?
03:15:50 <siraben> specificalyl on macos
03:16:00 × aweinstock quits (~aweinstoc@cpe-74-76-189-75.nycap.res.rr.com) (Ping timeout: 260 seconds)
03:19:11 × nate2 quits (~nate@c-98-45-169-16.hsd1.ca.comcast.net) (Ping timeout: 264 seconds)
03:19:11 × EvanR quits (~EvanR@user/evanr) (Ping timeout: 264 seconds)
03:27:19 <glguy> This might not help you at all, but Without getting that computer, I only know hpc was working
03:29:43 aforemny joins (~aforemny@2001:9e8:6cee:a800:d2af:9715:31a9:a2bb)
03:30:37 × aforemny_ quits (~aforemny@2001:9e8:6cc7:2c00:369b:8740:ed39:83be) (Ping timeout: 245 seconds)
03:31:24 <dolio> I think FFI was the original motivation.
03:31:48 <dolio> Although ByteArray# might not have been all there at the time.
03:32:45 falafel joins (~falafel@2607:fb91:86c:d890:90bb:9d24:bff:51c5)
03:37:11 × merijn quits (~merijn@c-001-001-003.client.esciencecenter.eduvpn.nl) (Ping timeout: 264 seconds)
03:41:20 × cafkafk quits (~cafkafk@fsf/member/cafkafk) (Ping timeout: 240 seconds)
03:42:15 <jackdk> k``: it might be so that `ByteString`s can share data e.g., when you slice out a substring. This is implied by e.g., the haddock for `Data.ByteString.copy`: https://hackage.haskell.org/package/bytestring-0.11.4.0/docs/Data-ByteString.html#v:copy
03:43:10 <dolio> You can do that with ByteArray#, too.
03:44:15 cafkafk joins (~cafkafk@fsf/member/cafkafk)
03:45:41 <jackdk> Ah, TIL.
03:45:45 <jackdk> Thanks.
03:46:44 <dolio> It's just a matter of sharing the underlying array. They basically just change the offset/length when slicing.
03:47:26 <probie> dolio: I'm fairly sure you're right about it not being available. `ByteArray#` first appears in base 4.11 (which is from 2018)
03:49:05 <dolio> I think there were some shenanigans early on that you might not be able to do anymore, too.
03:49:29 <dolio> Like, I think you could get an mmaped bytestring.
03:52:54 <probie> You can use `Data.ByteString.Unsafe.unsafePackAddressLen` on something which has been mmap-ed
03:55:33 × phma quits (~phma@host-67-44-208-154.hnremote.net) (Read error: Connection reset by peer)
03:55:58 phma joins (~phma@host-67-44-208-154.hnremote.net)
04:02:55 × davetapley quits (sid666@id-666.uxbridge.irccloud.com) (Server closed connection)
04:03:07 davetapley joins (sid666@id-666.uxbridge.irccloud.com)
04:05:36 _ht joins (~Thunderbi@28-52-174-82.ftth.glasoperator.nl)
04:06:04 × reach quits (~reach@bras-base-toroon2643w-grc-19-74-12-129-40.dsl.bell.ca) (Remote host closed the connection)
04:06:26 reach joins (~reach@bras-base-toroon2643w-grc-19-74-12-129-40.dsl.bell.ca)
04:18:35 × falafel quits (~falafel@2607:fb91:86c:d890:90bb:9d24:bff:51c5) (Ping timeout: 264 seconds)
04:27:27 <Axman6> siraben: you might get better responses if you actually state what problem you're having
04:29:20 <siraben> Axman6: I get errors like this
04:29:20 <siraben> Could not find module ‘Prelude’
04:29:20 <siraben> Perhaps you haven't installed the profiling libraries for package ‘base-4.17.1.0’?
04:29:20 <siraben> Use -v (or `:set -v` in ghci) to see a list of the files searched for.
04:29:32 <siraben> when I try to run cabal run project --enable-profiling
04:30:23 <Axman6> Hmm, that does seem like the profiling libraries haven't been installed, I would've assumed that GHC releases would
04:31:58 × k`` quits (~user@136.56.140.2) (Ping timeout: 260 seconds)
04:33:09 <siraben> I'm using Haskell installed via Nix on aarch64-darwin
04:35:44 <Axman6> Is there a nix... flag to also install profiling libraries? This sounds more like a nix issue than a ghc one if it's not installing all the libraries
04:36:39 <jackdk> Generally nixpkgs haskell builds profiling stuff in the same derivations as the regular versions - I usually see it compile most packages twice for this reason. siraben can you please pastebin the nix expression you are using to get GHC?
04:36:42 <jackdk> @where paste
04:36:42 <lambdabot> Help us help you: please paste full code, input and/or output at e.g. https://paste.tomsmeding.com
04:40:06 × bcoppens_ quits (~bartcopp@vpn2.bartcoppens.be) (Ping timeout: 255 seconds)
04:41:02 <Axman6> siraben: this line looks relevant in https://github.com/NixOS/nixpkgs/blob/nixos-23.05/pkgs/development/compilers/ghc/common-hadrian.nix#L61: enableProfiledLibs ? !stdenv.targetPlatform.isAarch64
04:41:31 <jackdk> that comment is likely a restriction imposed by nixpkgs hydra builder rather than anything fundamental
04:42:10 <Axman6> yeah - does that mean it could be built locally then?
04:44:19 <jackdk> possibly/probably, though you'll have to figure out what calls into that function and how to override the argumetn
04:45:39 bcoppens joins (~bartcopp@vpn2.bartcoppens.be)
04:46:28 × jargon quits (~jargon@184.101.72.124) (Remote host closed the connection)
04:46:34 <siraben> Ah I see. I'm going to just override it and recompile everything then
04:54:58 × bliminse quits (~bliminse@user/bliminse) (Server closed connection)
04:55:12 bliminse joins (~bliminse@user/bliminse)
04:55:18 × mizlan quits (~mizlan@c-73-63-223-227.hsd1.ca.comcast.net) (Ping timeout: 250 seconds)
05:07:48 coot joins (~coot@89-69-206-216.dynamic.chello.pl)
05:08:03 mizlan joins (~mizlan@c-73-63-223-227.hsd1.ca.comcast.net)
05:08:22 × reach quits (~reach@bras-base-toroon2643w-grc-19-74-12-129-40.dsl.bell.ca) (Ping timeout: 260 seconds)
05:10:37 × wroathe quits (~wroathe@user/wroathe) (Ping timeout: 245 seconds)
05:15:44 nate2 joins (~nate@c-98-45-169-16.hsd1.ca.comcast.net)
05:16:10 takuan joins (~takuan@178-116-218-225.access.telenet.be)
05:17:55 × coot quits (~coot@89-69-206-216.dynamic.chello.pl) (Quit: coot)
05:19:51 trev joins (~trev@user/trev)
05:20:30 × nate2 quits (~nate@c-98-45-169-16.hsd1.ca.comcast.net) (Ping timeout: 260 seconds)
05:21:49 dcoutts joins (~duncan@79.137.104.194)
05:21:56 coot joins (~coot@89-69-206-216.dynamic.chello.pl)
05:22:35 Guest6356 joins (~nacho@181.46.138.68)
05:24:27 falafel joins (~falafel@2607:fb91:86c:d890:8617:efee:edaf:5e3d)
05:31:10 × dcoutts quits (~duncan@79.137.104.194) (Read error: Connection reset by peer)
05:31:49 dcoutts joins (~duncan@79.137.104.194)
05:37:07 × _ht quits (~Thunderbi@28-52-174-82.ftth.glasoperator.nl) (Quit: _ht)
05:39:59 michalz joins (~michalz@185.246.207.203)
05:40:08 × cafkafk quits (~cafkafk@fsf/member/cafkafk) (Ping timeout: 240 seconds)
05:44:56 <Guest6356> :quit
05:45:00 × Guest6356 quits (~nacho@181.46.138.68) (Quit: leaving)
05:45:26 nacho_ joins (~nacho@181.46.138.68)
05:45:46 × nacho_ quits (~nacho@181.46.138.68) (Client Quit)
05:45:53 × falafel quits (~falafel@2607:fb91:86c:d890:8617:efee:edaf:5e3d) (Ping timeout: 246 seconds)
05:48:57 nut joins (~nut@176-151-21-224.abo.bbox.fr)
05:49:40 merijn joins (~merijn@86-86-29-250.fixed.kpn.net)
06:11:41 × coot quits (~coot@89-69-206-216.dynamic.chello.pl) (Quit: coot)
06:12:00 × mizlan quits (~mizlan@c-73-63-223-227.hsd1.ca.comcast.net) (Ping timeout: 250 seconds)
06:16:02 <mzg> Guest6356 had strong ghci habits
06:22:47 priesvitne_sklo joins (~priesvitn@192.216.99.34.bc.googleusercontent.com)
06:23:59 × merijn quits (~merijn@86-86-29-250.fixed.kpn.net) (Ping timeout: 240 seconds)
06:24:12 × dcoutts quits (~duncan@79.137.104.194) (Ping timeout: 240 seconds)
06:25:08 coot joins (~coot@89-69-206-216.dynamic.chello.pl)
06:25:26 × mauke quits (~mauke@user/mauke) (Ping timeout: 250 seconds)
06:29:46 × shriekingnoise quits (~shrieking@186.137.175.87) (Ping timeout: 250 seconds)
06:29:46 × coot quits (~coot@89-69-206-216.dynamic.chello.pl) (Client Quit)
06:31:10 coot joins (~coot@89-69-206-216.dynamic.chello.pl)
06:31:56 <Axman6> I feel like I should a tear, hackersdelight.org seems to have expired at some point and now has some french, probably squatting, website on it
06:34:53 <Axman6> should shed*
06:39:44 <mzg> what was that?
06:40:10 <Axman6> the website for the book Hacker's Delight, the bit twiddling bible
06:42:10 mizlan joins (~mizlan@c-73-63-223-227.hsd1.ca.comcast.net)
06:42:15 <jackdk> http://web.archive.org/web/20180609102750/http://www.hackersdelight.org/ Axman6
06:46:46 titibandit joins (~titibandi@user/titibandit)
06:46:47 × mizlan quits (~mizlan@c-73-63-223-227.hsd1.ca.comcast.net) (Ping timeout: 264 seconds)
06:46:51 acidjnk joins (~acidjnk@p200300d6e7072f43f126f466c3390846.dip0.t-ipconnect.de)
06:47:07 dcoutts joins (~duncan@212.187.244.83)
06:47:25 <Axman6> yeah I know, just a shame it's gone. I imagine the page to calculate magic numbers for division by constants no longer works (though I hasve acquired the secret knowledge elsewhere, so no longer need such tools - I'm basically a wizard now)
06:51:19 <Axman6> > 1 :: Word
06:51:21 <lambdabot> 1
06:51:58 <Axman6> :t (.&.)
06:51:59 <lambdabot> Bits a => a -> a -> a
06:52:11 <Hecate> oh my fucking god
06:52:28 <Hecate> Axman6: I unfortunately understand everything that's written on the squatted page
06:52:42 <Hecate> it's automatically-generated SEO content
06:52:51 cafkafk joins (~cafkafk@fsf/member/cafkafk)
06:52:57 jespada joins (~jespada@207.188.139.183)
06:53:24 × gaze___ quits (sid387101@id-387101.helmsley.irccloud.com) (Server closed connection)
06:53:33 gaze___ joins (sid387101@id-387101.helmsley.irccloud.com)
06:54:29 <Axman6> Yeah I figured :(
06:55:43 jespada_ joins (~jespada@207.188.139.183)
06:57:30 × jespada quits (~jespada@207.188.139.183) (Ping timeout: 250 seconds)
06:57:33 × ec quits (~ec@gateway/tor-sasl/ec) (Remote host closed the connection)
06:58:20 mizlan joins (~mizlan@c-73-63-223-227.hsd1.ca.comcast.net)
06:58:28 lortabac joins (~lortabac@2a01:e0a:541:b8f0:b445:5ef3:652d:413b)
06:59:18 ec joins (~ec@gateway/tor-sasl/ec)
06:59:50 × SanchayanMaity quits (sid478177@id-478177.hampstead.irccloud.com) (Server closed connection)
06:59:59 SanchayanMaity joins (sid478177@id-478177.hampstead.irccloud.com)
07:03:12 × random-jellyfish quits (~random-je@user/random-jellyfish) (Quit: Client closed)
07:04:11 <jade[m]> is there some nice combinator for `f x = a >>= \p -> unless p (f x)`? Essentially a monadic loop.
07:04:43 <jade[m]> I thought about repeat/takeWhile and then a sequence but that doesn't really work because the Bool comes from the bind
07:04:44 <jackdk> Axman6: http://web.archive.org/web/20180628171849/http://www.hackersdelight.org/magic.htm seems to be implemented only with client-side JS
07:04:45 × edwtjo quits (~edwtjo@fsf/member/edwtjo) (Ping timeout: 240 seconds)
07:06:45 <dsal> jade[m]: There's a bunch in here: https://hackage.haskell.org/package/monad-loops-0.4.3/docs/Control-Monad-Loops.html
07:06:48 <jade[m]> jade[m]: rather `f x = a >>= \y -> unless (p y) (f x)`
07:07:08 <jade[m]> dsal: Thanks, I'm gonna see if I can find it
07:08:09 jespada joins (~jespada@207.188.139.183)
07:09:58 <jackdk> at what point does `x` get used for anything?
07:10:04 × jespada_ quits (~jespada@207.188.139.183) (Ping timeout: 250 seconds)
07:10:27 × titibandit quits (~titibandi@user/titibandit) (Remote host closed the connection)
07:10:38 <jade[m]> oh right
07:10:41 <jade[m]> it's used in a
07:10:53 <jade[m]> `f x = a x >>= \y -> unless (p y) (f x)`
07:11:15 <c_wraith> all these free variables hurt my soul
07:11:31 <jade[m]> and now I messed up fixity ... imagine parantheses around the a x
07:11:38 <jade[m]> c_wraith: I sincerely apologize
07:12:41 <c_wraith> Like, I don't know what free variables are supposed to not be free.
07:12:52 <c_wraith> I assume p should be bound.
07:13:19 <jackdk> so... `x :: a -> m b`, `p :: b -> Bool` but because everything's parametric you could just ask for an `m Bool`?
07:13:55 <jade[m]> jackdk: I think so (?) that'd be `whileM` in the package that was suggested
07:14:41 <jade[m]> c_wraith: yeah, they should all be bound, I just basically abstracted from my concrete example where these are other functions in the module
07:14:42 <c_wraith> well. it'd be whileM_ unless you actually want all the intermediate results
07:14:54 <jade[m]> right
07:15:00 <jackdk> `foo m = fix $ \loop -> m >>= bool loop (pure ())`
07:23:24 × eggplantade quits (~Eggplanta@2600:1700:38c5:d800:296e:3128:9bb:592b) (Remote host closed the connection)
07:24:38 × dcoutts quits (~duncan@212.187.244.83) (Ping timeout: 260 seconds)
07:27:43 dcoutts joins (~duncan@212.187.244.83)
07:32:11 edwtjo joins (~edwtjo@h-155-4-52-185.A213.priv.bahnhof.se)
07:32:11 × edwtjo quits (~edwtjo@h-155-4-52-185.A213.priv.bahnhof.se) (Changing host)
07:32:11 edwtjo joins (~edwtjo@fsf/member/edwtjo)
07:32:16 merijn joins (~merijn@86-86-29-250.fixed.kpn.net)
07:35:19 chromoblob joins (~user@37.113.180.121)
07:35:50 dcoutts_ joins (~duncan@185.201.60.47)
07:37:48 × Xe quits (~cadey@tailscale/xe) (Ping timeout: 250 seconds)
07:38:38 × dcoutts quits (~duncan@212.187.244.83) (Ping timeout: 260 seconds)
07:39:02 titibandit joins (~titibandi@user/titibandit)
07:39:20 oo_miguel joins (~Thunderbi@78-11-179-96.static.ip.netia.com.pl)
07:39:41 <jade[m]> with parsec I can't find a way to say "any token but eof"
07:40:20 <jade[m]> I just want to skip tokens that aren't recognized, but that'd consume EOF and mess up the rest of the parser
07:40:35 <dminuoso> satisfy
07:41:11 <Hecate> looks like `satisfy` yes
07:41:30 × cafkafk quits (~cafkafk@fsf/member/cafkafk) (Remote host closed the connection)
07:41:51 <dminuoso> Ah actually no
07:41:52 cafkafk joins (~cafkafk@fsf/member/cafkafk)
07:41:54 <dminuoso> eof is not an actual token.
07:41:59 <dminuoso> That's the first confusion here.
07:42:11 <dminuoso> https://hackage.haskell.org/package/parsec-3.1.16.1/docs/src/Text.Parsec.Combinator.html#eof
07:42:13 <jade[m]> yeah eof is defined as notFollowedBy anyToken
07:42:16 hisa387 joins (~hisa38@104-181-102-238.lightspeed.wepbfl.sbcglobal.net)
07:42:44 <dminuoso> jade[m]: So dont worry about "eof" because it cant be consumed.
07:43:15 <dminuoso> If your parser is already at the end, there's another bug
07:43:25 <dminuoso> Likely too much backtracking
07:43:56 <c_wraith> well, it's parsec. probably the fact that it doesn't truly backtrack
07:43:57 <jade[m]> hm, but when I do `parseFoo <|> (anyToken *> parseFoo)` I get an `unexpected end of input`
07:44:23 × hisa38 quits (~hisa38@104-181-102-238.lightspeed.wepbfl.sbcglobal.net) (Ping timeout: 264 seconds)
07:44:23 hisa387 is now known as hisa38
07:44:29 <jade[m]> I suppose im not sure what "consumes" means
07:45:00 × dibblego quits (~dibblego@haskell/developer/dibblego) (Ping timeout: 240 seconds)
07:46:04 <dminuoso> jade[m]: Hard to say with just a snippet.
07:46:14 <dminuoso> Chances are your total parser is more than just that, right?
07:46:26 <c_wraith> In general, you should know that parsec is *far* less compositional than its api suggests
07:46:30 <jade[m]> let me try to cook up a minimal reproducible example
07:46:46 <chromoblob> "far less compositional than api suggests" scary
07:46:48 <dminuoso> <|> is very sneaky in that it only choses the right side, if the left side has not consumed any input.
07:47:16 <jade[m]> dminuoso: so can I just `try` the left side?
07:47:28 <dminuoso> Maybe, I dont know your grammar and the rest of your parser.
07:47:35 <c_wraith> well, it's necessary but not sufficient.
07:47:47 dibblego joins (~dibblego@122-199-1-30.ip4.superloop.au)
07:47:47 × dibblego quits (~dibblego@122-199-1-30.ip4.superloop.au) (Changing host)
07:47:47 dibblego joins (~dibblego@haskell/developer/dibblego)
07:47:48 <dminuoso> In parser combinators I found that `try foo <|> bar` or some equivalent tends to be horrid for a variety of reasons.
07:47:59 <c_wraith> "sufficient" is a factor of your entire grammar because... as I said, parsec is not compositional
07:47:59 × xff0x quits (~xff0x@125x103x176x34.ap125.ftth.ucom.ne.jp) (Ping timeout: 240 seconds)
07:48:02 <dminuoso> Manual lookahead and then making a decision tends to be better for sanity and diagnostics.
07:48:29 <jade[m]> alright, thank you
07:49:16 xff0x joins (~xff0x@125x103x176x34.ap125.ftth.ucom.ne.jp)
07:50:01 <chromoblob> you can't enumerate all computable reals due to undecidability of halting, right?
07:50:20 <dminuoso> jade[m]: You could think of <|> as alternating with a lookahead of the first token, irrespective of what your actual combinators express.
07:51:16 <jade[m]> hm
07:51:40 <dminuoso> And `try` turns it into infinite lookahead.
07:52:47 <dminuoso> chromoblob: computable numbers form an infinite set.
07:53:10 <dminuoso> Do you care to enumerate them in finite time?
07:53:26 <c_wraith> chromoblob: you can enumerate all possible programs, of which all computable reals are a subset. What you can't do is filter out duplicates or programs that do other things.
07:53:50 <c_wraith> chromoblob: that is, you can't specify the exact subset that are computable reals
07:54:13 tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
07:56:59 <c_wraith> I suppose I should say you can't compute the subset which make up computable reals. You can specify them, with vague references to a halting oracle.
07:59:51 <chromoblob> so if we disregard oracles, can this "imply" in a sense that set of CR is less than N, yet countable?
08:00:03 <chromoblob> i mean, introduce a new notion
08:00:19 <c_wraith> I have no idea what you mean by "less than N" there.
08:00:36 <chromoblob> if i don't believe in uncomputable functions
08:00:49 <chromoblob> there is an injection but not surjection into N
08:01:06 <dminuoso> chromoblob: Both are countable.
08:01:21 <dminuoso> The distinction you seem to be trying to get at is countable vs uncountable
08:01:25 <chromoblob> no no
08:01:48 machinedgod joins (~machinedg@d198-53-218-113.abhsia.telus.net)
08:02:04 fendor joins (~fendor@2a02:8388:1640:be00:7aca:a77a:4a28:631a)
08:02:08 <dminuoso> Proving that no surjection onto N (which is countable itself) can exist is pretty much a proof of countability
08:02:18 <dminuoso> s/countability/uncountability/
08:02:29 <c_wraith> it's really about computability, not countability
08:02:34 <chromoblob> sorry i mean
08:02:43 <c_wraith> Is there a surjection? yes. Is it computable? no.
08:03:18 <chromoblob> and if we postulate that no uncomputable functions exist?
08:03:25 <c_wraith> I think that's the idea you're hunting for. computable mappings only.
08:04:16 <chromoblob> sorry my mistake, i mean, there is no computable injection from N to CR
08:04:30 <chromoblob> that's what i mean by "less"
08:04:34 <chromoblob> yet CR is countable
08:04:40 <chromoblob> that is, it is less than uncounable
08:04:44 <dminuoso> chromoblob: I think thats hard to postulate, since there is at least one program that enumerates them all. I think its self evident that it exists, you just cant find it.
08:05:10 <c_wraith> dminuoso: I don't think that's true, if you require a "program" to be finite.
08:05:16 <dminuoso> c_wraith: thats fair.
08:06:12 <dminuoso> 10:04:15 chromoblob | sorry my mistake, i mean, there is no computable injection from N to CR
08:06:16 <dminuoso> s/injection/surjection
08:06:29 <chromoblob> ahhh right right
08:06:57 <dminuoso> uncomputably countable.
08:07:04 <c_wraith> chromoblob: Anyway, this is an area that's not usually considered. Set theory rarely actually interacts with computability.
08:07:15 cfricke joins (~cfricke@user/cfricke)
08:07:40 <c_wraith> I'm not sure what you'd find if you go exploring in that wilderness.
08:07:58 <dminuoso> That is, until monochrom opens up his laptop in the evening and decides this to be a great master thesis for one of his poor souls.
08:07:59 × mizlan quits (~mizlan@c-73-63-223-227.hsd1.ca.comcast.net) (Ping timeout: 246 seconds)
08:09:09 <c_wraith> it's an area that exposes the social aspect of math. Unless you find some really interesting result, you probably won't get many people interested in what you find.
08:09:43 <chromoblob> yeah i just want to restrict myself to "computable mathematics"
08:09:56 <chromoblob> i don't believe in uncomputable objects
08:10:20 <chromoblob> :D
08:10:22 <c_wraith> the computable reals themselves are difficult for that.
08:10:37 <c_wraith> Because while the numbers themselves might be computable, equality on them is not.
08:10:48 <chromoblob> i'm fiiiine with that
08:10:52 <c_wraith> What's the use of numbers you can't check for equality?
08:11:30 <dminuoso> I ask myself the same thing about PHP and strings.
08:11:51 <chromoblob> well i won't use computable reals for everything, for something i might want to use "number forms", that are just like normal numbers, except they don't exist in the same sense that CRs exist, they are only forms
08:12:07 <c_wraith> ah, PHP has found a solution. If it doesn't know what you mean by "equality", it just makes something up!
08:12:35 <chromoblob> in other words, i don't want to pretend that one single equality or something else is defined for everything
08:12:44 <dminuoso> c_wraith: Oh even when the semantics should be crystal clear it still makes something up.
08:12:57 <chromoblob> but maybe what i say is just syntactic nonsense
08:13:06 <dminuoso> In PHP the strings '9223372036854775807' and 9223372036854775808' are considered equal.
08:13:14 <dminuoso> Because why not.
08:14:05 <c_wraith> Pfft, like Haskell's any better.
08:14:06 <c_wraith> > 2**53 == 2**53 + 1
08:14:08 <lambdabot> True
08:14:48 <c_wraith> (ok, yes. it's better in practice)
08:15:06 <dminuoso> c_wraith: That very explicitly taps into Floating.
08:15:17 <dminuoso> But I guess you have a fair point.
08:15:28 <dminuoso> In PHP mostly strings are sort of polymorphic.
08:15:48 <dminuoso> That is, they arent really strings. They are "(re)monomorphized" every time you use it.
08:15:49 <c_wraith> and you are right. You have to opt in to that silliness more explicitly in Haskell. That really is better.
08:16:24 <c_wraith> Like, I had to choose ** as my operator to opt in!
08:17:11 <dminuoso> For what its worth, you had me there for a moment. Although I had not used ** before in Haskell, it felt natural since its sometimes used instead of (^) for power. I had to look up (**) first
08:17:18 <dminuoso> In other languages I meant
08:17:53 × smoge quits (~smoge@2603-7000-4b42-1100-a4e2-7fcb-30b3-1956.res6.spectrum.com) (Ping timeout: 246 seconds)
08:18:42 <dminuoso> And I guess in a world where OverloadedStrings is almost omnipresent, let a = "9223372036854775807"; b = "9223372036854775808" in ... a == b could easily lead to the same result.
08:18:50 <c_wraith> > 2^^53 == 2^^53 + 1 -- If I'd used this version, you would have known something was up immediately
08:18:52 <lambdabot> True
08:19:11 <dminuoso> Gosh, what is (^^)
08:19:24 <c_wraith> turns out Haskell has 3 exponentiation operators!
08:19:43 <dminuoso> Good thing Haskell isnt use much for numbers, like finance.
08:19:56 <dminuoso> Or maybe that's the reason why.
08:20:10 <c_wraith> That's... certainly related to the reason why!
08:20:17 × tzh quits (~tzh@c-24-21-73-154.hsd1.or.comcast.net) (Quit: zzz)
08:21:11 ccapndave joins (~ccapndave@xcpe-62-167-164-19.cgn.res.adslplus.ch)
08:21:15 <dminuoso> Next presentation at Haskell eXchange 2023: Serokell presents 2 new exponentiation operators in base
08:21:45 <c_wraith> I like that. I can't even predict what they'd do, so it would be perfect!
08:22:05 <int-e> dminuoso: they actually (finally) changed that in php 8.0.0
08:22:11 × acidjnk quits (~acidjnk@p200300d6e7072f43f126f466c3390846.dip0.t-ipconnect.de) (Ping timeout: 264 seconds)
08:22:45 <dminuoso> int-e: Im almost certain they did not.
08:22:48 <int-e> I guess "hash collisions" of the shape "1302E3748121" == "29183E38769" were too dangerous?
08:23:00 <dminuoso> What they did fix was various comparisons between numbers and non-numbers
08:23:04 <dminuoso> To make them less JavaScripty.
08:23:39 kuribas joins (~user@ip-188-118-57-242.reverse.destiny.be)
08:23:52 eggplantade joins (~Eggplanta@2600:1700:38c5:d800:296e:3128:9bb:592b)
08:24:06 <int-e> Well I tested your example and the strings are considered different when using ==.
08:24:11 <dminuoso> Mmm
08:24:36 <int-e> see also https://www.php.net/manual/en/language.operators.comparison.php
08:25:12 <dminuoso> Whats funny is that '' /= 0 being in PHP 8.0 now has the consequence that now '' is less than 0.
08:25:15 <int-e> I'm confused, because the docs agree with you for "numeric strings"
08:26:45 <int-e> (FWIW, the actual version I'm testing is 8.2.5)
08:28:47 × eggplantade quits (~Eggplanta@2600:1700:38c5:d800:296e:3128:9bb:592b) (Ping timeout: 264 seconds)
08:29:56 <dminuoso> int-e: https://onlinephp.io/c/3f6cb
08:30:29 <dminuoso> Curious.
08:30:36 <dminuoso> Maybe there is a PHP option to influence this
08:30:48 × dcoutts_ quits (~duncan@185.201.60.47) (Remote host closed the connection)
08:31:28 <dminuoso> Seems like it was altered in 5.4 a long time ago. Ah what a shame.
08:31:29 gnalzo joins (~gnalzo@2a01:e0a:498:fd50:fcc6:bb5d:489a:ce8c)
08:33:38 <int-e> so the docs have been wrong ever since?
08:33:59 <int-e> (fun)
08:35:39 <chromoblob> dminuoso: ""
08:35:51 <chromoblob> crud
08:36:47 chele joins (~chele@user/chele)
08:37:04 <dminuoso> int-e: To be absolutely blunt, Im not convinced this behavior in PHP is really that poor.
08:37:31 <chromoblob> dminuoso: "there is at least one program that enumerates them all" thing is, i assumed this yesterday, and arrived at a contradiction, and went to sleep thinking i discovered a hole in logic or proof of ultrafinitism or something. i woke up in morning, continued thinking and only then noticed that this step might be wrong :)
08:37:34 <dminuoso> In Haskell most programmers are desensitized to just add fromIntegral/realToFrac until things compile
08:37:53 <dminuoso> We're certainly not riding the moral high horse here.
08:37:58 <int-e> The current behavior? It's probably workable.
08:38:14 mizlan joins (~mizlan@c-73-63-223-227.hsd1.ca.comcast.net)
08:38:32 <dminuoso> chromoblob: It depends on whether we admit infinite programs or not.
08:38:47 <int-e> The surprise was not comparing two strings as string, and that's gone now.
08:38:48 <dminuoso> chromoblob: If we admit them, there is an infinite number of programs that enumerate them all.
08:39:42 <dminuoso> chromoblob: That program would contain all programs that itself produces a computable real.
08:39:49 <chromoblob> infinite program, as in, productive program whose source is infinite uncomputable string?
08:39:54 <dminuoso> Yeah.
08:39:57 <chromoblob> hehe
08:40:09 <int-e> (Well, to me. I'm sure that some people coming from modern Python will be surprised by the lack of built-in big integers.)
08:40:19 <dminuoso> chromoblob: but like I said, that is not computable either. So you cant find it.
08:40:21 × Feuermagier quits (~Feuermagi@user/feuermagier) (Read error: Connection reset by peer)
08:40:24 Feuermagier_ joins (~Feuermagi@user/feuermagier)
08:40:24 Feuermagier_ is now known as Feuermagier
08:40:39 <dminuoso> but even if it was computable, the fact that it would be infinite would be another issue
08:41:01 <chromoblob> if it was computable, it would be equivalent to a finite program
08:41:42 <chromoblob> just execute the output of the finite program that computes it.
08:44:16 <chromoblob> oh, you mean being able to execute infinite programs
08:44:20 Midjak joins (~Midjak@82.66.147.146)
08:44:20 Pickchea joins (~private@user/pickchea)
08:46:26 <dminuoso> There is fields that research computability on infinite data.
08:47:42 <chromoblob> does this have applications?
08:48:08 × azimut_ quits (~azimut@gateway/tor-sasl/azimut) (Ping timeout: 240 seconds)
08:48:54 <merijn> Keeps roaming gangs of mathematicians of the street?
08:51:22 <chromoblob> listen if you EVER try to divide by 0 we will beat you up so hard that you won't be able to tell false and true apart
08:53:27 <mniip> is the kmettiverse accepting new features or is it all frozen in only necessary maintenance mode?
08:54:32 <int-e> . o O ( 640k features are enough for anybody )
08:57:23 <mniip> maybe what I'm looking for already exists
08:58:16 CiaoSen joins (~Jura@2a05:5800:296:4300:664b:f0ff:fe37:9ef)
08:58:48 barcisz joins (~barcisz@79.191.69.198.ipv4.supernova.orange.pl)
08:58:54 <mniip> you can implement `accum :: (a -> b -> a) -> f a -> [(Rep f, b)] -> f a` for any representable f
08:59:16 × ezzieyguywuf quits (~Unknown@user/ezzieyguywuf) (Ping timeout: 250 seconds)
08:59:17 <mniip> but this generic implementation would be inefficient for e.g. a Vector (length-indexed)
08:59:33 × Sgeo quits (~Sgeo@user/sgeo) (Read error: Connection reset by peer)
08:59:52 ubert1 joins (~Thunderbi@2a02:8109:abc0:6434:ed16:f40d:d3f1:21f0)
09:00:14 × tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
09:01:40 × ccapndave quits (~ccapndave@xcpe-62-167-164-19.cgn.res.adslplus.ch) (Quit: My MacBook has gone to sleep. ZZZzzz…)
09:04:35 <tomsmeding> mniip: would that scatter the bs onto the f a, combining values using the function?
09:04:48 <mniip> yes
09:05:18 <tomsmeding> why would that be inefficient for a length-length vector
09:06:56 ccapndave joins (~ccapndave@xcpe-62-167-164-19.cgn.res.adslplus.ch)
09:07:50 <tomsmeding> *length-indexed
09:07:51 <tomsmeding> brain
09:08:23 acidjnk joins (~acidjnk@p200300d6e7072f4300b5bf6655a1513c.dip0.t-ipconnect.de)
09:09:00 <int-e> mniip: do you mean `Key f`?
09:09:35 danse-nr3 joins (~francesco@151.37.79.114)
09:10:20 <mniip> Data.Functor.Rep (from adjunctions, the more used package, uses Rep f)
09:10:50 <mniip> tomsmeding, because vector has an efficient "accum" method that uses a mutable vector under the hoo
09:10:51 <mniip> d
09:10:59 × m5zs7k quits (aquares@web10.mydevil.net) (Ping timeout: 246 seconds)
09:11:06 <int-e> meh that's confusing
09:11:31 <tomsmeding> mniip: ah right, your point is that you can implement accum _generically_
09:11:46 <tomsmeding> but then it will be inefficient for basically everything that's not a cons list
09:11:58 <tomsmeding> and even for those
09:12:04 <int-e> especially considering that representable-functors is *also* be ekmett
09:12:45 m5zs7k joins (aquares@web10.mydevil.net)
09:13:05 <tomsmeding> mniip: how would you implement your accum such that it can accumulate into a cons list (of fixed length, I guess) in time O(list length + number of new values)
09:13:26 <tomsmeding> that's surely the easiest case to get efficient, and even there it won't be
09:15:08 <mniip> you mean the "slow" kind of length-indexed vector?
09:15:13 <tomsmeding> yeah
09:15:42 <tomsmeding> data Vec n a where { Nil :: Vec 0 a ; Cons :: a -> Vec n a -> Vec (1 + n) a }
09:15:51 <int-e> . o O ( accum' :: Ord (Rep f) => ... )
09:15:57 gurkenglas joins (~gurkengla@dynamic-046-114-163-231.46.114.pool.telefonica.de)
09:16:41 × ccapndave quits (~ccapndave@xcpe-62-167-164-19.cgn.res.adslplus.ch) (Quit: My MacBook has gone to sleep. ZZZzzz…)
09:16:57 nate2 joins (~nate@c-98-45-169-16.hsd1.ca.comcast.net)
09:18:21 <tomsmeding> Enum (Rep f)
09:18:25 <mniip> use the ordering of Rep (Vec n a) that corresponds to the linked list structure to construct a Map (Rep (Vec n a)) (Endo a) that can be zipped with the list
09:18:47 <mniip> can't do much better I'm afraid
09:18:50 <tomsmeding> mniip: sure, but that's an implementation that's specific to Vec
09:18:58 <mniip> exactly
09:19:07 <tomsmeding> if you allow that, you can also do well for actual length-indexed Vec
09:19:10 <mniip> the specific implementation of accum is a customization point
09:19:17 <mniip> hence typeclass
09:19:20 <tomsmeding> using the mutable vector
09:19:53 <mniip> I guess I never brought that up in this conversation
09:20:00 Lord_of_Life_ joins (~Lord@user/lord-of-life/x-2819915)
09:20:04 <mniip> I want a typeclass on top of Representable whose method is accum
09:20:06 <tomsmeding> but like, if you allow it to be a typeclass, then there's no problem
09:20:20 ccapndave joins (~ccapndave@xcpe-62-167-164-19.cgn.res.adslplus.ch)
09:20:38 <mniip> another method could be (//) with a default of = accum (const id)
09:20:45 × Lord_of_Life quits (~Lord@user/lord-of-life/x-2819915) (Ping timeout: 240 seconds)
09:21:46 × nate2 quits (~nate@c-98-45-169-16.hsd1.ca.comcast.net) (Ping timeout: 260 seconds)
09:22:51 Lord_of_Life_ is now known as Lord_of_Life
09:24:32 × ccapndave quits (~ccapndave@xcpe-62-167-164-19.cgn.res.adslplus.ch) (Ping timeout: 240 seconds)
09:25:56 <mniip> even for a generic implementation there are a couple ways to do things that aren't strictly better than eachother
09:26:32 <mniip> you can tabulate-foldl: accum f r xs = tabulate \i -> foldl' f (index i r) $ map snd $ filter ((== i) . fst)
09:26:39 <mniip> or you can foldl-tabulate: accum f = foldl' \r (i, x) -> tabulate \j -> if i == j then f (index j r) x else index j r
09:27:14 × ft quits (~ft@p508db151.dip0.t-ipconnect.de) (Quit: leaving)
09:27:18 <mniip> the first one is a good consumer of the list but will produce many intermediate copies of the functor
09:27:41 <mniip> the second one will not copy the functor but will retain the list in memory
09:28:04 <mniip> oops
09:28:06 <mniip> vice versa
09:29:03 <mniip> foldl-tabulate will fold well, tabulate-foldl will tabulate well
09:36:51 <int-e> I guess a full-blown abstraction would give you a mutable representation that lives in ST, along with thaw and freeze.
09:37:55 <int-e> Rather than this minimalistic function-based interface that is basically good for memoization and nothing else.
09:38:56 × cafkafk quits (~cafkafk@fsf/member/cafkafk) (Ping timeout: 240 seconds)
09:40:25 × mizlan quits (~mizlan@c-73-63-223-227.hsd1.ca.comcast.net) (Ping timeout: 260 seconds)
09:44:05 mizlan joins (~mizlan@c-73-63-223-227.hsd1.ca.comcast.net)
09:47:07 tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
09:48:29 × mizlan quits (~mizlan@c-73-63-223-227.hsd1.ca.comcast.net) (Ping timeout: 240 seconds)
09:51:05 jstolarek joins (~jstolarek@staticline-31-183-152-161.toya.net.pl)
09:52:21 × jstolarek quits (~jstolarek@staticline-31-183-152-161.toya.net.pl) (Client Quit)
09:52:48 <ncf> why not https://hackage.haskell.org/package/array-0.5.5.0/docs/Data-Array-IArray.html ?
09:52:57 <ncf> can Vector implement that?
09:53:16 <int-e> it's not about vector... vectors are just an example
09:53:49 kupenske_oplatky joins (~priesvitn@192.216.99.34.bc.googleusercontent.com)
09:56:18 × priesvitne_sklo quits (~priesvitn@192.216.99.34.bc.googleusercontent.com) (Ping timeout: 260 seconds)
09:57:00 cafkafk joins (~cafkafk@fsf/member/cafkafk)
09:57:32 <mniip> ncf, IArray is more about using a big datatype like Int as an index and selecting a subrange of it
09:57:47 <mniip> Representable is about using an index that's exactly as large as it needs to be
09:58:03 <jade[m]> for all it's beauty and simplicity in concept ... parser combinators are really fucking annoying to work with so far
09:58:26 <jade[m]> it's probably just a biased view because I kinda suck ... but there's so many things that you expect to work that just don't
09:59:34 × barcisz quits (~barcisz@79.191.69.198.ipv4.supernova.orange.pl) (Quit: Connection closed)
10:02:35 <merijn> jade[m]: like?
10:03:26 <merijn> Also, the ease and pleasantness of parser combinators is strongly correlated with how well designed/thought out your grammar is :p
10:03:37 Unicorn_Princess joins (~Unicorn_P@user/Unicorn-Princess/x-3540542)
10:04:38 <jade[m]> I have no issues besides "ignoring" things, specifically saying "any other character besides .,<>[]+- is a comment"
10:04:55 <jade[m]> which is a fucking pain so far
10:05:36 <merijn> It shouldn't be?
10:05:39 <jade[m]> I'm currently trying to use a parser that simply ignores all characters that are not those explicitly, but then I have issues with eof again ...
10:06:34 × xff0x quits (~xff0x@125x103x176x34.ap125.ftth.ucom.ne.jp) (Ping timeout: 260 seconds)
10:07:13 <ncf> are you using parser combinators to parse brainfuck?
10:07:19 <ncf> why not like, filter
10:07:46 <jade[m]> ncf: just for fun
10:07:55 <jade[m]> and to like learn them
10:07:57 <ncf> oh ok
10:08:14 mizlan joins (~mizlan@c-73-63-223-227.hsd1.ca.comcast.net)
10:08:18 <jade[m]> yeah, I could just filter and then map
10:08:29 <jade[m]> with some minor parsing for loops
10:08:43 <jade[m]> s/minor/minor, manual/
10:08:54 barcisz joins (~barcisz@79.191.69.198.ipv4.supernova.orange.pl)
10:10:32 mikoto-chan joins (~mikoto-ch@2001:999:250:4dd:a906:9bc2:bbb9:3aff)
10:11:03 × nut quits (~nut@176-151-21-224.abo.bbox.fr) (Quit: WeeChat 3.5)
10:11:56 × econo_ quits (uid147250@id-147250.tinside.irccloud.com) (Quit: Connection closed for inactivity)
10:12:38 × mizlan quits (~mizlan@c-73-63-223-227.hsd1.ca.comcast.net) (Ping timeout: 260 seconds)
10:13:27 × talismanick quits (~user@2601:204:ef01:8ca0::a3e7) (Remote host closed the connection)
10:13:40 talismanick joins (~user@2601:204:ef01:8ca0::a3e7)
10:16:07 <merijn> jade[m]: part of the problem is that brainfuck is so simple you get almost no off the convenience/power of parser combinators
10:16:13 <merijn> So of course it's gonna feel kinda scuffed
10:16:49 geranim0 joins (~geranim0@modemcable182.140-177-173.mc.videotron.ca)
10:17:13 <jade[m]> that's fair, yeah
10:17:22 <mniip> you'd have catMaybes <$> many ((Just <$> ((Inc <$ char '+') <|> ...)) <|> (Nothing <$ anyChar))
10:17:28 <mniip> I don't see what the problem is
10:18:06 <merijn> mniip: That's because you're an expert ;)
10:18:12 ezzieyguywuf joins (~Unknown@user/ezzieyguywuf)
10:18:21 <mniip> an advanced intermediate beginner maybe
10:19:09 × talismanick quits (~user@2601:204:ef01:8ca0::a3e7) (Read error: Connection reset by peer)
10:19:22 talismanick joins (~user@2601:204:ef01:8ca0::a3e7)
10:22:47 <jade[m]> <mniip> "you'd have catMaybes <$> many..." <- I wanted to try something along those lines but was too stupid haha
10:23:05 <jade[m]> I always forget catMaybes as a way to build a list from optional values
10:23:49 <jade[m]> thanks
10:25:23 <jade[m]> <mniip> "an advanced intermediate..." <- what does that make me, heh
10:26:09 <mniip> in lieu of "how to learn haskell in less that 5 years", I've been using haskell for about a decade now and sometimes I still feel like I know nothing
10:26:13 mizlan joins (~mizlan@c-73-63-223-227.hsd1.ca.comcast.net)
10:26:35 eggplantade joins (~Eggplanta@2600:1700:38c5:d800:296e:3128:9bb:592b)
10:28:12 <jade[m]> I guess that makes sense with the depth that haskell has
10:28:29 <merijn> mniip: See, I think all the people writing the complicated type level singletons stuff know nothing instead :p
10:29:34 <jade[m]> It just gives me some kind of existential crisis to hear all of this after learning haskell for like a year or so haha
10:29:52 <mniip> using parser combinators after a year is a good milestone
10:29:57 <merijn> Haskell is as complicated as you make it
10:30:04 <merijn> And some people just make it too complicated :p
10:30:15 reach joins (~reach@bras-base-toroon2643w-grc-19-74-12-129-40.dsl.bell.ca)
10:30:30 <mniip> I hope that's not a stab at representable functors :P
10:31:11 × eggplantade quits (~Eggplanta@2600:1700:38c5:d800:296e:3128:9bb:592b) (Ping timeout: 264 seconds)
10:31:39 <jade[m]> mniip: My journey so far has been fun, but I don't think follows the usual direction of learning haskell. I learned the basics and once I learned dependent types (sort of) existed went into those head-first with the ... expected ... outcome
10:32:01 <jade[m]> took a step back and learned the more usual things
10:33:20 <jade[m]> The biggest milestone was probably finally understanding monads which happened way to late and was sort of underwhelming
10:33:29 <jade[m]> "it's *just* that?"
10:33:40 <merijn> jade[m]: If it was underwhelming that probably means you got it right now :p
10:34:40 × reach quits (~reach@bras-base-toroon2643w-grc-19-74-12-129-40.dsl.bell.ca) (Ping timeout: 260 seconds)
10:35:10 <jade[m]> but yeah, sorry for my rambling up there haha
10:35:35 <jade[m]> tl;dr I love haskell it's just really complicated
10:35:36 <ncf> one does not simply understand monads
10:38:19 × Pickchea quits (~private@user/pickchea) (Quit: Leaving)
10:38:51 <mniip> you mean they're literally just monoids in the category of endofunctors?
10:39:56 <jade[m]> that originally took a bit longer to understand than the general concept but I think I get that one too (sort of, maybe, perhaps) by now
10:41:49 <dminuoso> If it hadnt been for that shrouded mystery of monads, I wouldnt have learned Haskell.
10:42:24 <mniip> I mean that's unironically how I think of them occasionally
10:42:55 <mniip> being able to "flatten" an arbitrary number of layers (maybe 0) into 1 in an associative/unital way
10:43:04 <dminuoso> The primary reason I learned it was because I felt challenged by the Haskell Book slogan "Perhaps you were just looking for the 18 billionth* monad tutorial, certain that this time around you will understand monads once and for all." and told myself, "Okay, whats the big fuzz. Let me just jump in and learn Monads without this book direcftly"
10:43:58 __monty__ joins (~toonn@user/toonn)
10:44:12 <dminuoso> And indeed, I dived into category theory for some 2-3 weeks, understood the joke somewhat, went back to the editor, and was unable to do anything with IO.
10:44:29 <dminuoso> It was very inefficent learning.
10:45:22 bontaq joins (~user@ool-45779b84.dyn.optonline.net)
10:46:38 <mniip> an interesting nuance is that programmers and mathematicians use monads for rather different purposes
10:46:45 <mniip> almost opposite purposes you could say
10:46:53 <dminuoso> mniip: The strange part about the mathematics of monad is that the laws that look a) beautiful but unrelatable in category theory, b) ugly and unrelatable in terms of (>>=) is just stuff we take for granted.
10:47:05 <ncf> mniip: why opposite?
10:47:12 × mikoto-chan quits (~mikoto-ch@2001:999:250:4dd:a906:9bc2:bbb9:3aff) (Quit: WeeChat 3.8)
10:47:16 <dminuoso> Very roughly the associativity law is just another way of phrasing "inlining things doesnt alter the meaning"
10:47:49 <dminuoso> Or moving things into separate "routines/functions" does not alter the meaning.
10:48:09 <mniip> so there's a variety of ways to split a monad into an adjunction. Programmers mostly care about the kleisli category of a monad, which is sort of the initial splitting; mathematicians care about the category of algebras, which is the terminal splitting
10:48:35 <ncf> ah, that opposite
10:48:38 <dminuoso> mniip: Do you have a favoured view on applicatives? Do you also think of them as monoids in the category of endofunctors?
10:48:57 <mniip> no, it's weird and relates to strength of monads
10:49:22 <mniip> I almost never think about day convolutions if that's what you're asking
10:49:36 <__monty__> /wg 14
10:49:49 <__monty__> Nothing to see here, carry on.
10:50:24 <mniip> rather I think of them as lax monoidal functors
10:50:39 <mniip> you have a family of liftA{n} that associate as much as possible
10:52:38 <jade[m]> I just sit there, banging two rocks together being like "`<*>` go brr"
10:52:48 <jade[m]> very different perspectives
10:53:12 <mniip> any non-recursive applicative computation can be rewritten as a liftA{n} of some "root" effects and a combining function, where n is statically known
10:53:47 <danse-nr3> what do you mean by liftA{n} there?
10:53:58 <mniip> the recursive case isn't qualitatively different it's just that you can't always untie an infinite knot :P
10:54:04 <ncf> :t liftA2
10:54:06 <lambdabot> Applicative f => (a -> b -> c) -> f a -> f b -> f c
10:54:07 <mniip> liftA2, liftA3 etc
10:54:13 <mniip> liftA0 = pure, liftA1 = fmap
10:54:45 <danse-nr3> right was kind of obvious, thanks
10:57:48 <danse-nr3> i almost never use those liftA{n} functions
10:59:10 × barcisz quits (~barcisz@79.191.69.198.ipv4.supernova.orange.pl) (Quit: Connection closed)
10:59:14 <danse-nr3> possibly because they are equivalent to composing with <$> and <*>? That approach looks more readable to me
11:00:31 <mniip> depends on if you're doing horizontal or vertical composition
11:00:55 <mniip> :t liftA2 . liftA2 . liftA2
11:00:56 <lambdabot> (Applicative f1, Applicative f2, Applicative f3) => (a -> b -> c) -> f1 (f2 (f3 a)) -> f1 (f2 (f3 b)) -> f1 (f2 (f3 c))
11:01:34 <danse-nr3> oooh
11:04:30 × machinedgod quits (~machinedg@d198-53-218-113.abhsia.telus.net) (Ping timeout: 250 seconds)
11:05:08 × chromoblob quits (~user@37.113.180.121) (Ping timeout: 240 seconds)
11:06:05 <danse-nr3> although a type like f3 (f2 (f1 a)) ... makes me think of monad stacks, otherwise it seems uncommon to compose through that many layers. Probably i have a view still attached to object-orientation, where adding a wrapper type, albeit polymorphic, still means one tends to keep functions on "enclosed" types inside an abstraction. But then, even the concept of "type wrapper" and "enclosed" types in an object-oriented perspective on these
11:06:25 xff0x joins (~xff0x@2405:6580:b080:900:18df:4359:44d4:6329)
11:06:33 machinedgod joins (~machinedg@d198-53-218-113.abhsia.telus.net)
11:06:42 <danse-nr3> * come from an object-oriented perspective on these
11:07:29 <danse-nr3> this mindset is hard to change ^^;
11:08:11 <mniip> I've seen people implement ad-hoc combinators like <<*>> on the spot
11:08:18 <dminuoso> I tend to think of Applicative as a conceptual parallelized mappend in the sense of liftA2 (,)
11:08:24 <dminuoso> % :t liftA2 (,)
11:08:25 <yahb2> <interactive>:1:1: error: ; Variable not in scope: liftA2 :: (a0 -> b0 -> (a0, b0)) -> t
11:08:29 <dminuoso> % import Control.Applicative
11:08:29 <yahb2> <no output>
11:08:31 <dminuoso> % :t liftA2 (,)
11:08:31 <yahb2> liftA2 (,) :: Applicative f => f a -> f b -> f (a, b)
11:08:42 <dminuoso> So often I think of this being the signature method of Applicative
11:08:43 <mniip> uncurry
11:09:05 <mniip> :t uncurry (liftA2 (,))
11:09:06 <lambdabot> Applicative f => (f a, f b) -> f (a, b)
11:09:31 <dminuoso> Sure that works too.
11:09:32 <mniip> this is essentially the definition of "lax monoidal"
11:09:36 <danse-nr3> what confuses me about Applicative is that purescript has quite different definitions for these, and i tend to like those
11:09:47 <danse-nr3> * them
11:09:59 <ncf> :t pure @()
11:10:01 <lambdabot> error:
11:10:01 <lambdabot> Pattern syntax in expression context: pure@()
11:10:01 <lambdabot> Did you mean to enable TypeApplications?
11:10:03 <mniip> you have a Hom(FA (x) FB, F (A (x) B)), natural in A, B
11:10:03 <dminuoso> mniip: Im not too deeply familiar. In my mind its just that liftA2 (,) fully encapsulates the notion of parallel effects.
11:10:14 <dminuoso> Hence diamond.
11:10:31 <mniip> what does purescript use?
11:11:05 <danse-nr3> hmm have to look them up, but the diverging holds my mind from taking these abstractions too seriously
11:11:15 <mniip> dminuoso, same but in an 'n-ary' sense as opposed to a binary operation and a unit
11:11:33 <mniip> the difference between liftA2 and liftA2 (,) is just yoneda
11:12:27 <dminuoso> Right, the n-ary generalization stems from the isomorphism ((a,b),c) ~~~ (a,(b,c))
11:12:40 <dminuoso> Regarding yoneda, Ill have to ponder about that relationship
11:12:54 <danse-nr3> purescript's Applicative just defines pure https://pursuit.purescript.org/packages/purescript-prelude/3.0.0/docs/Control.Applicative, being based on an Apply with apply :: forall b a. f (a -> b) -> f a -> f b
11:13:03 <mniip> I think they're called lawvere theories?
11:13:29 <ncf> that's just splitting the typeclass into two
11:13:53 <danse-nr3> yes, probably, but everyone's brain is different, that is quite meaningful to me
11:13:59 <ncf> pointed endofunctor and... semigroup in the category of endofunctors?
11:14:23 × acidjnk quits (~acidjnk@p200300d6e7072f4300b5bf6655a1513c.dip0.t-ipconnect.de) (Ping timeout: 264 seconds)
11:14:31 <mniip> rather than talking about a limited set of fixed arity operations (e.g. nullary pure and binary liftA2), you talk about operations of all arities at once
11:16:45 <mniip> been a while since I've read the relevant literature, but I find it useful to think about e.g. "ternary concatenation" on equal grounds with binary concatenation
11:16:59 <mniip> just the kinda lawvere vibe of it
11:17:30 × CiaoSen quits (~Jura@2a05:5800:296:4300:664b:f0ff:fe37:9ef) (Ping timeout: 260 seconds)
11:18:34 <mniip> re: Applicative/Apply, there's a zoo of intermediate typeclasses you could come up with
11:18:40 <mniip> sometimes I wish haskell had more, but oh well
11:18:44 × dibblego quits (~dibblego@haskell/developer/dibblego) (Ping timeout: 240 seconds)
11:19:47 dibblego joins (~dibblego@122-199-1-30.ip4.superloop.au)
11:19:47 × dibblego quits (~dibblego@122-199-1-30.ip4.superloop.au) (Changing host)
11:19:47 dibblego joins (~dibblego@haskell/developer/dibblego)
11:20:49 <danse-nr3> i was lost many messages ago, but intuitively i think if one has more essential, split classes, then they can be composed and made up a more powerful foundation. But of course purescript came later so it was easier for them
11:22:03 <mniip> groups have a few axioms, and you can pretty much toggle them on and off at will, yielding different algebraic objects
11:22:13 <mniip> e.g. this cube https://commons.wikimedia.org/wiki/File:Magma_to_group4.svg
11:22:29 <mniip> some of these tend to come up more, but doesn't mean the others are useless
11:23:25 <ncf> https://en.wikipedia.org/wiki/Template:Group-like_structures
11:23:31 <mniip> should we have a class for each of them? Should we have free constructions for every irreducible arrow? for every arrow?
11:23:51 <mniip> I don't know the answer
11:24:13 <ncf> i was investigating "free monad on a semigroupad" the other day
11:24:38 <ncf> i.e. the endofunctor equivalent of Semigroup a => Monoid (Maybe a)
11:25:05 <ncf> turns out it's a bit annoying because you need a sort of "quasijoin" operation m (Either a (m a)) -> m a
11:25:48 <mniip> by "semigroupad" you mean join but no return?
11:25:53 <ncf> yeah
11:26:08 <mniip> so you just need to adjoin an identity?
11:26:26 <ncf> yes, that's what Either a (m a) does
11:26:30 <mniip> doesn't data Free s a = Pure a | Effectful (s a) -
11:26:33 <mniip> yeah exactly
11:26:41 <ncf> now implement join
11:27:09 <mniip> ah of course
11:27:36 <ncf> it's quite interesting that you don't run into this problem with the usual "free monad on a (pointed) endofunctor"
11:28:00 <ncf> lists turn out to be better behaved than Maybes at the endofunctor-with-composition level
11:28:11 × mizlan quits (~mizlan@c-73-63-223-227.hsd1.ca.comcast.net) (Ping timeout: 246 seconds)
11:28:57 <mniip> it's moreso that the free monad reassociates 1 + M + M.M + ... as 1 + M.(1 + M.( ... ))
11:29:12 <ncf> yeah
11:29:27 <mniip> or rather, that the first can be reassocaited into the second but not necessarily the other way around
11:30:04 <ncf> if M preserves coproducts then it works out, but that's rarely the case
11:30:21 <ncf> funnily enough i couldn't find an M that doesn't have a quasijoin : M.(1 + M) → M
11:31:15 <ncf> (obviously every monad has that, so i was looking among the `Bind`s-that-aren't-Monads, which there aren't many in haskell)
11:31:32 <ncf> notably Map k has that
11:33:41 <mniip> what about lists of even length
11:34:41 <mniip> it's a semigroupad because concatMap preserves the property, but you cannot join [pure (), [(), ()]]
11:35:14 × xff0x quits (~xff0x@2405:6580:b080:900:18df:4359:44d4:6329) (Ping timeout: 260 seconds)
11:36:56 xff0x joins (~xff0x@2405:6580:b080:900:18df:4359:44d4:6329)
11:37:29 <ncf> oh nice
11:37:42 <ncf> clearly i didn't look very hard lol
11:37:50 misterfish joins (~misterfis@84-53-85-146.bbserv.nl)
11:38:00 CiaoSen joins (~Jura@2a05:5800:296:4300:664b:f0ff:fe37:9ef)
11:41:02 <mniip> example from someone else: also Const Void
11:42:38 × ceoltb^ quits (~ceoltb@24.125.210.85) (Ping timeout: 250 seconds)
11:43:05 gemmaro joins (~user@240f:74:d1f0:1:ba1:e787:c9e:b1dc)
11:43:22 ceoltb^ joins (~ceoltb@24.125.210.85)
11:43:33 <ncf> why doesn't absurd work?
11:44:21 <mniip> hmm?
11:44:56 <mniip> oh sorry, you do have quasijoin, it's just an example of a semigroupad
11:45:02 <ncf> right
11:45:48 <ncf> i think Const s is always an example if s is a semigroup
11:46:21 <ncf> er wait i'm thinking of Apply
11:51:01 × mon_aaraj quits (~montchncs@2001:470:69fc:105::8e6b) (Server closed connection)
11:51:16 mon_aaraj joins (~montchncs@2001:470:69fc:105::8e6b)
11:51:44 × gnyeki quits (~gnyeki@user/gnyeki) (Ping timeout: 250 seconds)
11:51:52 gnyeki joins (~gnyeki@li578-216.members.linode.com)
11:51:52 × gnyeki quits (~gnyeki@li578-216.members.linode.com) (Changing host)
11:51:52 gnyeki joins (~gnyeki@user/gnyeki)
11:53:46 × mncheck-m quits (~mncheck@193.224.205.254) (Read error: Connection reset by peer)
11:53:54 × takuan quits (~takuan@178-116-218-225.access.telenet.be) (Ping timeout: 250 seconds)
11:54:06 takuan joins (~takuan@178-116-218-225.access.telenet.be)
11:59:58 mizlan joins (~mizlan@c-73-63-223-227.hsd1.ca.comcast.net)
12:00:22 waleee joins (~waleee@2001:9b0:21c:4000:5bf9:6515:c030:57b7)
12:03:47 shailangsa joins (~shailangs@host86-186-142-69.range86-186.btcentralplus.com)
12:04:38 × mizlan quits (~mizlan@c-73-63-223-227.hsd1.ca.comcast.net) (Ping timeout: 260 seconds)
12:08:21 arkeet` joins (~arkeet@moriya.ca)
12:08:38 × arkeet quits (~arkeet@moriya.ca) (Ping timeout: 250 seconds)
12:08:38 arkeet` is now known as arkeet
12:11:08 × bitdex quits (~bitdex@gateway/tor-sasl/bitdex) (Quit: = "")
12:14:54 chromoblob joins (~user@37.113.180.121)
12:14:57 mmhat joins (~mmh@p200300f1c722e40aee086bfffe095315.dip0.t-ipconnect.de)
12:14:58 [itchyjunk] joins (~itchyjunk@user/itchyjunk/x-7353470)
12:16:02 flupe15 joins (~flupe@145.94.32.126)
12:16:45 <flupe15> Hello! Could anyone help me diagnose this regression in Haskell's type families over GADTS? https://gist.github.com/flupe/08a4c945723cd42fd1f7ddf8f20a2545
12:16:52 × misterfish quits (~misterfis@84-53-85-146.bbserv.nl) (Ping timeout: 250 seconds)
12:17:21 <flupe15> This code typechecked fine with GHC 8.10 but 9 and above no longer allows this "simple" code, as unifying indices properly seem to no longer work as required
12:17:52 <flupe15> has there been a known change to type-family/GADT pattern-matching unification?
12:19:03 mizlan joins (~mizlan@c-73-63-223-227.hsd1.ca.comcast.net)
12:19:25 × danse-nr3 quits (~francesco@151.37.79.114) (Read error: Connection reset by peer)
12:20:49 × mmhat quits (~mmh@p200300f1c722e40aee086bfffe095315.dip0.t-ipconnect.de) (Quit: WeeChat 4.0.0)
12:26:44 gensyst joins (~gensyst@user/gensyst)
12:26:50 × connrs quits (~connrs@user/connrs) (Ping timeout: 250 seconds)
12:27:05 connrs_ joins (~connrs@user/connrs)
12:27:11 <gensyst> Why is memory profiling (-hc) showing me this https://litter.catbox.moe/9r7mh7.png but top showing me over 5 GB of memory usage? How could this be happening?
12:27:42 <gensyst> According to the profile, the memory goes to max around 2 gigs and then drops, repeatedly
12:27:51 <gensyst> but according to top, the memory grows steadily and never drops
12:28:04 connrs_ is now known as connrs
12:28:22 <gensyst> s/2 gigs/1.5 gigs
12:30:54 <lortabac> gensyst: have you read this? https://downloads.haskell.org/ghc/latest/docs/users_guide/hints.html#hints-os-memory
12:32:21 <merijn> gensyst: because nothing is ever it simple as it seems and top's number aren't incorrect, just wildly poinltess/misleading
12:32:48 <lortabac> gensyst: also https://downloads.haskell.org/ghc/latest/docs/users_guide/runtime_control.html?highlight=delay#rts-flag---disable-delayed-os-memory-return
12:33:51 <merijn> I mean, there is, essentially 0 value in returning memory to the OS, beyond "making top show lower numbers"
12:34:18 <merijn> Well, I guess if you had truly giant livesets for a short while, returning stuff might ease pressure on swap
12:34:29 <lortabac> in general it's a bad idea to monitor an application's memory usage with top
12:34:36 <lortabac> in general I use EKG
12:34:40 <gensyst> lortabac, merijn thanks so much - no i had not seen that crucial info!
12:34:55 <gensyst> however, shouldn't there be at least SOME drop in top memory use, based on those profile drops?
12:35:00 <gensyst> or no drops at all?
12:35:02 <gensyst> (by default)
12:36:09 <lortabac> I don't know
12:36:31 <merijn> gensyst: Depends which top column you're looking at?
12:36:44 <gensyst> merijn, MEM%
12:36:51 <gensyst> sorry %MEM
12:38:56 codolio joins (~dolio@130.44.134.54)
12:38:58 × dolio quits (~dolio@130.44.134.54) (Ping timeout: 250 seconds)
12:39:11 <gensyst> i'm literally seeing 50% memory use, just because i run it long enough, (even though profiling imagine shows no leaks, as mentioned)
12:39:30 <gensyst> is this expected? is this happening because linux memory management is smart enough?
12:39:43 <gensyst> and e.g. it would get freed if other programs wanted the ram?
12:39:57 <gensyst> but it stays at 50% and grows even more because nobody else wants the memory?
12:40:06 × xff0x quits (~xff0x@2405:6580:b080:900:18df:4359:44d4:6329) (Ping timeout: 260 seconds)
12:41:32 <merijn> I need to check what top's MEM even refers too
12:41:48 <mniip> flupe15, you need to either enable CUSKs (deprecated I think?), or write a standalone kind signature: type ConsTree :: forall a n b. Tree a n -> BRAL a n b -> BRAL a n (Bsucc b); type family ConsTree t ral where ...
12:41:49 xff0x joins (~xff0x@ai098135.d.east.v6connect.net)
12:42:44 kupi joins (uid212005@id-212005.hampstead.irccloud.com)
12:43:00 <_________> gensyst: you can have no memory leaks and unbounded memory usage at the same time. if the memory usage of your program grows over time you might have a problem ;)
12:43:15 <merijn> The profile isn't unbounded, though
12:43:21 <merijn> At any rate, this is weird
12:43:47 <merijn> According to my top manual,. %MEM is showing resident memory
12:43:56 × waleee quits (~waleee@2001:9b0:21c:4000:5bf9:6515:c030:57b7) (Ping timeout: 240 seconds)
12:44:17 <merijn> So if the profile is going up to 1.2GB then this has to be some tiny machine with 3-4 GB RAM? Is this a Pi or something?
12:44:36 <merijn> Or, alternate hypothesis
12:44:43 <merijn> You have a memory leak in non-Haskell code
12:45:02 <jade[m]> <mniip> "you'd have catMaybes <$> many..." <- I tried this btw and have the same issues with unexpected eof's when it should (?) work
12:45:09 <gensyst> it's machine with 20gb ram. only haskell code.
12:45:11 <jade[m]> im probably doing something stupidly wrong
12:45:20 <merijn> gensyst: *something* is off
12:45:21 <mniip> jade[m], what parsing combinator library are you using
12:45:33 <merijn> There's no way that profile of 1.2GB should report 50% RES o.O
12:45:46 <merijn> jade[m]: Are you terminating your parser with eof?
12:45:47 <mniip> there's a good chance you're being bitten by unintuitive semantics of <|>
12:45:54 × incertia quits (~incertia@209.122.71.127) (Ping timeout: 250 seconds)
12:46:05 incertia_ joins (~incertia@209.122.71.127)
12:46:06 <jade[m]> that's what I was pointed at before and it didn't really help
12:46:11 <jade[m]> merijn: yes
12:46:26 <merijn> Can you pastebin the entire code and test input + error?
12:46:29 incertia_ is now known as incertia
12:46:32 <jade[m]> jade[m]: I tried `try` but I was also told that wasn't gonna be enozgh
12:46:39 <jade[m]> merijn: sure, give me a second
12:46:52 <mniip> does the "comment" anyChar perchance take precedence over ']'
12:46:53 <gensyst> Apologies for mentioning 50% (that was a number from another production program). In my example program, it was lower. merijn, it should report a max of 4x right? 4.8gb max. So that's in line with the 5gb i mentioned in my first comment above. right?
12:47:00 <lortabac> flupe15: I'd open an issue on the GHC repo
12:47:14 <flupe15> mniip: thanks indeed a standalone kind signature did the trick! still, given the errors produced by ghc i wouldn't have expected this to be the problem
12:47:39 <merijn> gensyst: Can you run the test with "+RTS -sstderr" and pastebin the output?
12:48:02 <mniip> I'm not 100% sure what it's trying to do without CUSKs or StandaloneKindSignatures
12:48:25 <jade[m]> mniip: it shouldn't as I first try to parse one of `+-<>,.` and then `[` stuff `]` *and then* anything else
12:48:29 <jade[m]> but let me just paste this
12:49:05 <mniip> yes but if you have "[foo]" then it might parse ] as a comment and then be like where's the closing ]?
12:49:59 <jade[m]> https://paste.tomsmeding.com/qogYMcXD
12:50:05 <mniip> if you have stuff = `+-<>,.` <|> `[` stuff `]` <|> anything else, then the inner invocation of stuff will consider ] a comment and break the outer
12:50:48 <mniip> yes that's exactly what's going on in your code
12:51:25 <jade[m]> ok, what can I do about that=
12:51:29 <jade[m]> s/=/?
12:52:07 <ncf> exclude ] from comments, or `try` harder
12:52:30 <mniip> refactor the grammar
12:53:11 <jade[m]> I'll try, thanks for the hints
12:53:20 <jade[m]> pun not intended
12:53:54 <mniip> loop = `[` (manyTill `]` atom); atom = `+-<>,.` | loop | comment
12:54:12 Guest|65 joins (~Guest|65@130.41.120.97)
12:54:48 <mniip> your issue would be solved if you had a fully backtracking parser (as ncf alluded to), but I think in this case that would be prohibitively expensive
12:55:12 <jade[m]> yeah, at that point I would be much better off just doing it manually
12:56:54 × geranim0 quits (~geranim0@modemcable182.140-177-173.mc.videotron.ca) (Ping timeout: 260 seconds)
12:58:16 <jade[m]> mniip: this is already what my AST looks like, atleast
12:58:51 <mniip> `Z = many Y <* X` corresponds to `Z -> W X, W -> Y W | epsilon` aka `Z -> Y Z | X`
12:59:25 <mniip> you want `Z -> X | Y Z` instead, so that considering ] a closing bracket rather than a comment is the leftmost derivation
12:59:37 <mniip> that's what `Z = manyTill X Y` does
13:00:02 reach joins (~reach@bras-base-toroon2643w-grc-19-74-12-129-40.dsl.bell.ca)
13:00:14 <jade[m]> ok that actually makes a lot of sense (I think)
13:00:28 <jade[m]> we recently had grammars in class and it was explained horribly
13:02:48 <mniip> caveat: "]" is still a valid program because it will be considered a comment
13:04:40 × bontaq quits (~user@ool-45779b84.dyn.optonline.net) (Remote host closed the connection)
13:05:12 <jade[m]> and you'd solve that by saying "a comment is anything but ]"?
13:06:42 <mniip> can't think of any other good way
13:07:06 <ncf> you could separate lexing from parsing, as the former is really just filter
13:07:25 <mniip> you could use a syntactic monoid :)
13:07:33 <ncf> then you don't have to deal with comments in parsing at all, so no risk of treating ] as a comment
13:08:06 <ncf> mniip: wouldn't that only recognise regular languages
13:08:26 <mniip> it wouldn't be a finite monoid
13:08:32 <ncf> oh right
13:08:49 <mniip> this is like the bicyclic monoid but with data
13:08:57 × reach quits (~reach@bras-base-toroon2643w-grc-19-74-12-129-40.dsl.bell.ca) (Ping timeout: 245 seconds)
13:09:58 <mniip> I guess the bottom line is that you should make up your mind, what comes first: the balanced paren structure of [ ], or the fact that everything that doesn't parse is a comment?
13:10:10 <mniip> these are conflicting requirements
13:10:57 × mizlan quits (~mizlan@c-73-63-223-227.hsd1.ca.comcast.net) (Remote host closed the connection)
13:11:20 <jade[m]> mhm I understand
13:11:28 <jade[m]> this was very helpful, thanks a bunch
13:11:43 mizlan joins (~mizlan@c-73-63-223-227.hsd1.ca.comcast.net)
13:16:57 bontaq joins (~user@ool-45779b84.dyn.optonline.net)
13:18:27 nate2 joins (~nate@c-98-45-169-16.hsd1.ca.comcast.net)
13:21:52 × mizlan quits (~mizlan@c-73-63-223-227.hsd1.ca.comcast.net) (Ping timeout: 250 seconds)
13:23:08 × nate2 quits (~nate@c-98-45-169-16.hsd1.ca.comcast.net) (Ping timeout: 240 seconds)
13:23:10 × Lord_of_Life quits (~Lord@user/lord-of-life/x-2819915) (Ping timeout: 250 seconds)
13:23:59 Lord_of_Life joins (~Lord@user/lord-of-life/x-2819915)
13:24:01 shriekingnoise joins (~shrieking@186.137.175.87)
13:25:47 × mechap quits (~mechap@user/mechap) (Ping timeout: 264 seconds)
13:26:15 mechap joins (~mechap@user/mechap)
13:29:05 ystael joins (~ystael@user/ystael)
13:29:14 <mniip> jade[m], https://play.haskell.org/saved/RzdgtGxy
13:30:39 <jade[m]> Thanks for making me feel stupid 😭
13:30:47 <jade[m]> (/j)
13:31:46 × flupe15 quits (~flupe@145.94.32.126) (Quit: Client closed)
13:32:16 × dibblego quits (~dibblego@haskell/developer/dibblego) (Ping timeout: 250 seconds)
13:32:34 dibblego joins (~dibblego@122-199-1-30.ip4.superloop.au)
13:32:34 × dibblego quits (~dibblego@122-199-1-30.ip4.superloop.au) (Changing host)
13:32:35 dibblego joins (~dibblego@haskell/developer/dibblego)
13:33:38 <ncf> cute
13:34:05 × gnalzo quits (~gnalzo@2a01:e0a:498:fd50:fcc6:bb5d:489a:ce8c) (Quit: WeeChat 3.8)
13:34:05 wroathe joins (~wroathe@207-153-38-140.fttp.usinternet.com)
13:34:06 × wroathe quits (~wroathe@207-153-38-140.fttp.usinternet.com) (Changing host)
13:34:06 wroathe joins (~wroathe@user/wroathe)
13:34:06 <mniip> this is really useful if you want to have efficient updating of syntax highlighting as you edit, or intellisense
13:34:08 <mniip> for brainfuck
13:34:31 <ncf> definitely must-haves
13:36:15 <ncf> tentative explanation: a (potentially incomplete) brainfuck program has the form ...]...]...[...[... where each of the ... stands for a valid brainfuck program; Syn represents that, where the first series of ... before ] are in the first list and the last series of ... after [ are in the second list; you can then combine Syns recursively in a straightforward way, and extract a valid program from a
13:36:16 <ncf> Syn if both lists are empty (thus [] are balanced)
13:37:00 <ncf> each character embeds as a Syn, where ] has a single incomplete program to the left and nothing in the middle and vice-versa for [
13:41:21 × tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
13:43:06 × canta quits (~canta@user/canta) (Ping timeout: 250 seconds)
13:43:32 × df quits (~ben@justworks.xyz) (Ping timeout: 250 seconds)
13:44:24 × mei quits (~mei@user/mei) (Ping timeout: 250 seconds)
13:45:25 df joins (~ben@justworks.xyz)
13:46:21 Pickchea joins (~private@user/pickchea)
13:48:37 mei joins (~mei@user/mei)
13:50:28 × Guest|65 quits (~Guest|65@130.41.120.97) (Ping timeout: 250 seconds)
13:51:45 × wroathe quits (~wroathe@user/wroathe) (Ping timeout: 240 seconds)
13:53:06 captnemo joins (~captnemo@193.32.127.239)
13:54:22 × cfricke quits (~cfricke@user/cfricke) (Ping timeout: 250 seconds)
13:54:32 stallmanator2 joins (~stallmana@user/stallmanator)
13:54:40 cfricke joins (~cfricke@user/cfricke)
13:55:52 canta joins (~canta@user/canta)
13:56:06 × stallmanator quits (~stallmana@user/stallmanator) (Ping timeout: 250 seconds)
13:56:06 stallmanator2 is now known as stallmanator
13:58:32 ridcully_ joins (~ridcully@p57b52f2c.dip0.t-ipconnect.de)
13:58:35 × amir quits (sid22336@user/amir) (Server closed connection)
13:58:44 amir joins (sid22336@user/amir)
14:00:00 × ridcully quits (~ridcully@p57b52f2c.dip0.t-ipconnect.de) (Ping timeout: 250 seconds)
14:00:17 × haritz quits (~hrtz@user/haritz) (Quit: ZNC 1.8.2+deb2 - https://znc.in)
14:00:29 haritz joins (~hrtz@2a02:8010:65b5:0:6009:6384:e3cb:2220)
14:00:30 × haritz quits (~hrtz@2a02:8010:65b5:0:6009:6384:e3cb:2220) (Changing host)
14:00:30 haritz joins (~hrtz@user/haritz)
14:02:10 × jle` quits (~jle`@cpe-23-240-75-236.socal.res.rr.com) (Ping timeout: 250 seconds)
14:03:09 Xe joins (~cadey@tailscale/xe)
14:04:01 jle` joins (~jle`@cpe-23-240-75-236.socal.res.rr.com)
14:04:19 mizlan joins (~mizlan@c-73-63-223-227.hsd1.ca.comcast.net)
14:05:01 × andreas303 quits (andreas303@is.drunk.and.ready-to.party) (Server closed connection)
14:05:07 × geekosaur quits (~geekosaur@xmonad/geekosaur) (Killed (NickServ (GHOST command used by allbery_b)))
14:05:08 allbery_b joins (~geekosaur@xmonad/geekosaur)
14:05:12 allbery_b is now known as geekosaur
14:05:21 andreas303 joins (andreas303@is.drunk.and.ready-to.party)
14:07:22 barcisz joins (~barcisz@public-gprs657031.centertel.pl)
14:10:07 × gemmaro quits (~user@240f:74:d1f0:1:ba1:e787:c9e:b1dc) (Remote host closed the connection)
14:12:15 × johnw quits (~johnw@76-234-69-149.lightspeed.frokca.sbcglobal.net) (Ping timeout: 260 seconds)
14:16:46 × YoungFrog quits (~youngfrog@2a02:a03f:ca07:f900:9506:825b:e271:15c3) (Quit: ZNC 1.7.x-git-3-96481995 - https://znc.in)
14:17:06 YoungFrog joins (~youngfrog@2a02:a03f:ca07:f900:3d0c:c380:8be9:54d4)
14:22:06 × xff0x quits (~xff0x@ai098135.d.east.v6connect.net) (Ping timeout: 250 seconds)
14:24:12 xff0x joins (~xff0x@ai098135.d.east.v6connect.net)
14:24:35 × ubert quits (~Thunderbi@p200300ecdf0b5713a8f894b1f77d0827.dip0.t-ipconnect.de) (Ping timeout: 246 seconds)
14:24:36 × barcisz quits (~barcisz@public-gprs657031.centertel.pl) (Quit: Connection closed)
14:24:36 ubert1 is now known as ubert
14:25:19 ub joins (~Thunderbi@p200300ecdf0b57c57ef837ab9eeb4127.dip0.t-ipconnect.de)
14:27:05 misterfish joins (~misterfis@84-53-85-146.bbserv.nl)
14:27:26 danse-nr3 joins (~francesco@151.35.81.64)
14:29:43 tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
14:30:24 reach joins (~reach@bras-base-toroon2643w-grc-19-74-12-129-40.dsl.bell.ca)
14:33:06 acidjnk joins (~acidjnk@p200300d6e7072f43a445df600121d0b6.dip0.t-ipconnect.de)
14:34:11 × cfricke quits (~cfricke@user/cfricke) (Ping timeout: 264 seconds)
14:37:11 × CiaoSen quits (~Jura@2a05:5800:296:4300:664b:f0ff:fe37:9ef) (Ping timeout: 246 seconds)
14:37:14 × reach quits (~reach@bras-base-toroon2643w-grc-19-74-12-129-40.dsl.bell.ca) (Ping timeout: 260 seconds)
14:42:35 mithromdir joins (uid591745@user/mithromdir)
14:45:04 × anpad quits (~pandeyan@user/anpad) (Ping timeout: 250 seconds)
14:45:15 pandeyan joins (~pandeyan@135-180-53-134.fiber.dynamic.sonic.net)
14:47:32 biberu\ joins (~biberu@user/biberu)
14:49:07 <Guillaum[m]> Do you know an easy way to detect that a symbol is imported from a reexport and that it exists another import which may reduce my dependencies. For example, if I import "foo" in module C from module B, but that's actually a reexport from module A, importing it directly from A instead of B would lead to reduced dependencies, rebuild, ...
14:50:42 × ByronJohnson quits (~bairyn@50-250-232-19-static.hfc.comcastbusiness.net) (Ping timeout: 250 seconds)
14:51:08 × biberu quits (~biberu@user/biberu) (Ping timeout: 250 seconds)
14:51:08 biberu\ is now known as biberu
14:52:19 ByronJohnson joins (~bairyn@50-250-232-19-static.hfc.comcastbusiness.net)
14:54:32 × nick__ quits (~nick@2600:8807:9084:7800:700f:eda2:f145:7a7) (Ping timeout: 240 seconds)
14:54:39 ddellacosta joins (~ddellacos@146.70.168.100)
14:55:54 × simpleauthority quits (~simpleaut@user/simpleauthority) (Ping timeout: 250 seconds)
14:57:04 simpleauthority joins (~simpleaut@user/simpleauthority)
14:57:52 dminuoso_ joins (~dminuoso@user/dminuoso)
14:58:15 × dminuoso quits (~dminuoso@user/dminuoso) (Read error: Connection reset by peer)
15:02:24 × opqdonut quits (opqdonut@pseudo.fixme.fi) (Ping timeout: 250 seconds)
15:02:31 opqdonut joins (opqdonut@pseudo.fixme.fi)
15:05:59 × lortabac quits (~lortabac@2a01:e0a:541:b8f0:b445:5ef3:652d:413b) (Quit: WeeChat 2.8)
15:08:54 × lawt quits (~lawt@129.159.36.129) (Ping timeout: 250 seconds)
15:09:20 × tomku quits (~tomku@user/tomku) (Ping timeout: 250 seconds)
15:09:34 tomku joins (~tomku@user/tomku)
15:10:51 lawt joins (~lawt@129.159.36.129)
15:12:48 × Midjak quits (~Midjak@82.66.147.146) (Ping timeout: 250 seconds)
15:16:59 <mniip> Guillaum[m], this might backfire because some reexports are intentional
15:17:12 <mniip> I don't suppose you want to import Map from Data.Map.Internal, or seq from GHC.Prim
15:18:35 × captnemo quits (~captnemo@193.32.127.239) (Ping timeout: 264 seconds)
15:19:16 nate2 joins (~nate@c-98-45-169-16.hsd1.ca.comcast.net)
15:19:18 × jespada quits (~jespada@207.188.139.183) (Ping timeout: 250 seconds)
15:19:42 × mechap quits (~mechap@user/mechap) (Ping timeout: 260 seconds)
15:20:35 mechap joins (~mechap@user/mechap)
15:24:04 × nate2 quits (~nate@c-98-45-169-16.hsd1.ca.comcast.net) (Ping timeout: 250 seconds)
15:24:04 jespada joins (~jespada@207.188.139.183)
15:24:54 codolio is now known as dolio
15:24:56 × Natch quits (~natch@c-9e07225c.038-60-73746f7.bbcust.telenor.se) (Ping timeout: 250 seconds)
15:27:08 fweht joins (uid404746@id-404746.lymington.irccloud.com)
15:28:22 Natch joins (~natch@c-9e07225c.038-60-73746f7.bbcust.telenor.se)
15:28:27 szkl joins (uid110435@id-110435.uxbridge.irccloud.com)
15:28:51 × ubert quits (~Thunderbi@2a02:8109:abc0:6434:ed16:f40d:d3f1:21f0) (Remote host closed the connection)
15:28:51 ub is now known as ubert
15:29:04 ubert1 joins (~Thunderbi@2a02:8109:abc0:6434:9beb:5d8a:2bea:fc3b)
15:29:42 × gnyeki quits (~gnyeki@user/gnyeki) (Ping timeout: 250 seconds)
15:31:26 gnyeki joins (~gnyeki@li578-216.members.linode.com)
15:31:26 × gnyeki quits (~gnyeki@li578-216.members.linode.com) (Changing host)
15:31:26 gnyeki joins (~gnyeki@user/gnyeki)
15:31:43 × Pickchea quits (~private@user/pickchea) (Quit: Leaving)
15:37:37 Sgeo joins (~Sgeo@user/sgeo)
15:39:49 mauke joins (~mauke@user/mauke)
15:40:10 captnemo joins (~captnemo@193.32.127.239)
15:46:02 barcisz joins (~barcisz@pw-wifi1.wifi.pw.edu.pl)
15:49:52 <gensyst> What is the max memory usage of a Map (Data.Map.Strict) with 10,000 entries of type Map (ByteString, ByteString) Word16?
15:50:05 <gensyst> where both bytestrings are max 5 bytes long.
15:50:22 <merijn> gensyst: oh!
15:50:52 <merijn> gensyst: You never posted the "+RTS -sstderr" output, but *this* question gives me a whole new hypothesis
15:50:56 × misterfish quits (~misterfis@84-53-85-146.bbserv.nl) (Ping timeout: 250 seconds)
15:51:09 <merijn> gensyst: are you, by any chance, parsing large-ish bytestrings into short chunks?
15:51:49 <gensyst> merijn, I'm only parsing files line by line (and those two bytestrings are just a part of each line)
15:52:02 <gensyst> but yeah those files are hundreds of megs each, but i don't see the problem because i'm streaming through them
15:52:09 <gensyst> i.e. nt reading them into ram at once
15:52:12 <gensyst> not*
15:52:18 <merijn> gensyst: Except...you might be :)
15:52:23 <mauke> theoretically unbounded
15:52:38 <merijn> gensyst: Chunks of ByteString are just indices into the bytestring you are parsing them from
15:52:52 <merijn> and the original BS can't be GCed until the references are
15:53:09 <merijn> gensyst: So, depending on how you parse those short 5 byte chunks, they *might* be keeping the entire line alive
15:53:18 <merijn> gensyst: Which would explain the giant saw-tooth memory profile
15:53:36 <merijn> gensyst: See also: https://hackage.haskell.org/package/bytestring-0.11.4.0/docs/Data-ByteString.html#v:copy
15:54:00 <merijn> gensyst: Additionally, for very short chunks there is also the ShortByteString type, which should have less overhead
15:54:41 <mauke> alternatively, Word64
15:55:13 eggplantade joins (~Eggplanta@2600:1700:38c5:d800:296e:3128:9bb:592b)
15:57:19 <gensyst> thanks! this is very interesting. i'll look into this
15:57:33 econo_ joins (uid147250@id-147250.tinside.irccloud.com)
15:58:28 Sciencentistguy3 joins (~sciencent@hacksoc/ordinary-member)
16:00:02 × Sciencentistguy quits (~sciencent@hacksoc/ordinary-member) (Ping timeout: 250 seconds)
16:00:02 Sciencentistguy3 is now known as Sciencentistguy
16:00:46 solaire joins (~solaire@024-158-116-019.res.spectrum.com)
16:00:51 zmt00 joins (~zmt00@user/zmt00)
16:02:00 × zmt01 quits (~zmt00@user/zmt00) (Ping timeout: 240 seconds)
16:02:11 × pavonia quits (~user@user/siracusa) (Quit: Bye!)
16:05:47 × chele quits (~chele@user/chele) (Remote host closed the connection)
16:06:32 × eggplantade quits (~Eggplanta@2600:1700:38c5:d800:296e:3128:9bb:592b) (Remote host closed the connection)
16:07:02 _ht joins (~Thunderbi@28-52-174-82.ftth.glasoperator.nl)
16:08:15 × captnemo quits (~captnemo@193.32.127.239) (Quit: WeeChat 3.8)
16:08:30 × kuribas quits (~user@ip-188-118-57-242.reverse.destiny.be) (Quit: ERC (IRC client for Emacs 27.1))
16:08:42 × danse-nr3 quits (~francesco@151.35.81.64) (Ping timeout: 250 seconds)
16:15:29 × machinedgod quits (~machinedg@d198-53-218-113.abhsia.telus.net) (Ping timeout: 240 seconds)
16:16:45 <gensyst> merijn, This was it! Just adding copy for those two bytestrings fixed entire memory bloat. Thank you.
16:18:43 connrs_ joins (~connrs@user/connrs)
16:18:49 captnemo joins (~captnemo@193.32.127.239)
16:19:06 × connrs quits (~connrs@user/connrs) (Ping timeout: 250 seconds)
16:19:12 connrs_ is now known as connrs
16:20:55 azimut joins (~azimut@gateway/tor-sasl/azimut)
16:20:55 × captnemo quits (~captnemo@193.32.127.239) (Remote host closed the connection)
16:21:18 captnemo joins (~captnemo@193.32.127.239)
16:24:57 nick__ joins (~nick@wsip-174-78-110-18.pn.at.cox.net)
16:25:21 × tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
16:26:18 × jespada quits (~jespada@207.188.139.183) (Quit: My MacBook has gone to sleep. ZZZzzz…)
16:27:08 tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
16:29:37 <nick__> I'm trying to make type b polymorphic with type a. I can do this easily using "type B = A" but then any function definition that is say b -> b a also will fit in. I assume I need to do something like "newtype B = A B", but then it seems that B isn't polymorphic with A and I get type errors. I could implement type classes, but I want B to be a subset of A but no object A to be a B.
16:31:52 × ddellacosta quits (~ddellacos@146.70.168.100) (Ping timeout: 240 seconds)
16:34:03 ddellacosta joins (~ddellacos@146.70.166.10)
16:35:05 × nckx quits (~nckx@tobias.gr) (Changing host)
16:35:05 nckx joins (~nckx@guix/contributor/nckx)
16:36:46 × barcisz quits (~barcisz@pw-wifi1.wifi.pw.edu.pl) (Quit: Connection closed)
16:39:20 × titibandit quits (~titibandi@user/titibandit) (Remote host closed the connection)
16:40:20 × thegeekinside quits (~thegeekin@189.217.90.138) (Ping timeout: 250 seconds)
16:40:39 thegeekinside joins (~thegeekin@189.217.90.138)
16:44:05 <ncf> the key word you're looking for is "subtyping", and haskell does not have that
16:44:54 <ski> nick__ : it's unclear what you mean by "polymorphic"
16:45:06 × michalz quits (~michalz@185.246.207.203) (Ping timeout: 250 seconds)
16:45:07 <ncf> yes it took me ages to parse
16:45:09 eggplantade joins (~Eggplanta@104-55-37-220.lightspeed.sntcca.sbcglobal.net)
16:45:18 <ski> what does "B isn't polymorphic with A" even mean ?
16:45:50 michalz joins (~michalz@185.246.207.217)
16:46:04 <glguy> I feel like I'd know about it if we did, but do we have something in base for doing checked numeric conversions where you get a Nothing if the value doesn't fit into the target type?
16:46:08 × azimut quits (~azimut@gateway/tor-sasl/azimut) (Ping timeout: 240 seconds)
16:46:16 <glguy> other than me manually doing the bounds checks first
16:46:19 <ski> "I want B to be a subset of A but no object A to be a B." -- this implies that no object is of type `B', btw
16:47:47 × tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
16:48:42 <Guillaum[m]> mniip: you are right. Well, guess I'll have to write a manual tool with more smartness.
16:49:18 <glguy> Perhaps this is what we have: https://hackage.haskell.org/package/int-cast
16:49:47 × kupenske_oplatky quits (~priesvitn@192.216.99.34.bc.googleusercontent.com) (Ping timeout: 264 seconds)
16:51:58 ripspin joins (~chatzilla@1.145.136.115)
16:52:02 <nick__> ski : what I mean by polymorphic is any time a appears in a function definition b can be used as an a as well. Literally the definition of the world b has "multiple forms." But I'm not looking for an equivalence between a and b (i.e. using type B = A). I'm looking for an implication (i.e. if I have a B, then I can give you an A, but if I give you an A, then it is not necessarily a B).
16:55:30 <nick__> "I want B to be a subset of A but no object A to be a B." -- this implies that no object is of type `B', btw" -- Not following you here. If you instantiate an object B then you have an object B, but it can also be an object A. If you instantiate an object A, then you do not necessarily get an object B (though, it does not mean that it can't be converted to an object B at least logically).
16:57:07 <int-e> But you wrote that you want "no object A to be a B". Evidently that's not what you meant.
16:58:40 <nick__> Yes that's correct
16:58:43 × tomsmeding quits (~tomsmedin@static.21.109.88.23.clients.your-server.de) (Server closed connection)
16:58:58 tomsmeding joins (~tomsmedin@static.21.109.88.23.clients.your-server.de)
16:59:32 <nick__> the compiler would reject any object A with a function definition of B, but the comiler will not reject an object B when fed into a type definition of func :: A -> A
16:59:34 danse-nr3 joins (~francesco@151.35.67.174)
16:59:49 × ddrone[m] quits (~ddronemat@2001:470:69fc:105::3:70d5) (Server closed connection)
17:00:02 ddrone[m] joins (~ddronemat@2001:470:69fc:105::3:70d5)
17:00:53 <nick__> ugh pasting shit from vim is such a pain, why do all pastebin sites suck.
17:02:00 <ncf> yes that particular shape of polymorphism is called subtyping. haskell has parametric polymorphism and typeclasses
17:02:41 <nick__> since it seems like there's some confusion here's what I'm looking to avoid https://paste.tomsmeding.com/vyVC1pY3
17:02:49 <nick__> everything is equivalent
17:03:04 <nick__> I want String2 to imply String, but String to not imply String2
17:03:06 <nick__> That's all
17:03:46 <nick__> ncf: so what I'm looking for is impossible in Haskell correct?
17:04:01 <ncf> yes
17:04:06 <jade[m]> why would you want that indirection
17:04:25 <jade[m]> is there any reasonable use-case where using a newtype isn't sufficient
17:04:26 <nick__> it doesn't matter why I'd want it if its impossible
17:04:38 <nick__> yes
17:04:42 <nick__> when using type is sufficient
17:04:44 tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
17:04:59 <mniip> haskell has subtyping via specialization
17:05:03 <ncf> well you don't actually want to have a String2 type that's a subtype of String for no reason. what are you trying to accomplish?
17:05:31 <mniip> you can implicitly turn a `(forall a. F a)` into a `F ()` but not the other way around
17:11:33 <nick__> The thing is you can have mnay different kinds of strings. If you have a string of a regular form, it can be helpful keep that string separate from instances that may be malformed. For example, maybe you have an application that outputs yaml, json, or whatever. If the application encodes that string itself, then we can be sure its properly formed (assuming the code is correct), where if you're
17:11:34 <nick__> taking that string from an untrusted source (say from IO or something), then it doesn't make sense to make that a String2, but rather just a String. However, its inconvienient to create two functions for each String and String2. It makes more sense to write one function for a String, and String2 will just be recognized as a String. However, if you input a String into a function definition of
17:11:36 <nick__> String2, then I would expect the compiler to fail because if I verified that the String was properly formed, I would have made it a String2, and therefore the compiler will complain and rightfully so. I'm not really sure why asking this question is so confusing, what am I not communicating to you.
17:12:14 <mniip> In haskell you use newtypes for this purpose
17:12:16 <jade[m]> that sounds like a newtype wrapper
17:12:27 <nick__> But really, I'm not trying to examine the implementation details. I'm asking a specific question about haskell and types
17:12:41 <mniip> And yes you explicitly unwrap a VerifiedString into a String
17:12:42 × mechap quits (~mechap@user/mechap) (Ping timeout: 245 seconds)
17:12:49 <nick__> the problem with using newtype though is that it then does not complain when you have a function definition using String2
17:13:55 mechap joins (~mechap@user/mechap)
17:14:23 tzh joins (~tzh@c-24-21-73-154.hsd1.or.comcast.net)
17:14:33 <mniip> type is a transparent alias and newtype is an opaque one
17:14:46 <nick__> https://paste.tomsmeding.com/UnpSeLJH
17:14:49 <mniip> You're asking for something that is half transparent half opaque?
17:15:00 <nick__> look charIter2 does not fail for String or [Char]
17:15:05 <nick__> That is not the functionality I'm looking for
17:15:44 <nick__> I'm looking for charIter to succeed with String String2 [Char] but charIter must fail with String and [Char] and only succeed with String2
17:16:11 <nick__> however, when you use newtype, then using charIter2 with String2 gives a type error.
17:17:11 <mniip> newtype is how people normally do it
17:17:36 <nick__> https://paste.tomsmeding.com/W5h4KT61
17:17:36 <mniip> subtyping is fundamentally in conflict with bidirectional type inference
17:18:13 <nick__> Now with that newtype declaration String2 breask when trying to use charIter, resulting in having to create two different functions that do the same thing.
17:18:48 <nick__> but using newtype I think you have to use typeclasses correct?
17:18:57 <nick__> and implement each one
17:18:59 <mniip> "have to"?
17:19:06 × eggplantade quits (~Eggplanta@104-55-37-220.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection)
17:19:22 <nick__> well otherwise how would the compiler know how to apply a String function to String2?
17:19:35 <mniip> You tell it explicitly to unwrap
17:19:39 <nick__> look at my last pastebin
17:19:43 <nick__> it breaks using newtype
17:19:47 <mniip> I know
17:20:04 <ncf> yes, if you want to be able to call the same function on String and String2 you need a typeclass
17:20:38 <ncf> sadly IsString only has fromString
17:20:42 <nick__> but then you got to do something like deriving (Show) or whatever functionality you want to be applied, and change the function definitions accordingly?
17:21:02 <nick__> you can't just use charIter :: String -> IO() correct?
17:21:35 <ncf> yeah, if you want to use charIter :: String -> IO () then you have to use charIter . toString
17:22:09 <nick__> resulting in two functions which is the newtype wrapper you're talking about?
17:22:37 <nick__> Its still better than copy/pasting the entire function though
17:23:20 <mniip> Depending on the use case I would not even define a second function
17:23:27 <mniip> Just unwrap at use sites
17:24:14 × byte quits (~byte@user/byte) (Quit: Quitting...)
17:24:34 byte joins (~byte@user/byte)
17:24:39 <mniip> If that's prohibitive, make a helper function
17:25:01 <jade[m]> with a newtype you can also coerce
17:25:03 <mniip> If it's imperative that the two functions be named the same, make a typeclass method
17:25:19 <mniip> coerce kind of defeats the purpose of the newtype somewhat
17:26:22 × ubert1 quits (~Thunderbi@2a02:8109:abc0:6434:9beb:5d8a:2bea:fc3b) (Remote host closed the connection)
17:26:58 <mniip> Again, XY problem here, what do you *actually* need to do?
17:29:35 <nick__> this is what I actually need to do
17:29:41 <nick__> I'm not sure what your question is
17:29:53 <nick__> I want to understand how the typing system works
17:30:16 <nick__> Not following why you need an actual usecase, its just about not having a million type definitions everywhere
17:30:29 <jade[m]> you can just use the type itself then
17:30:32 <nick__> yo
17:30:37 <nick__> that doesn't work
17:30:41 <nick__> because its an equivalence
17:30:46 <nick__> I might as well not have String2 then
17:30:54 <nick__> because everything is just like String
17:30:57 <jade[m]> yes, type is an alias
17:31:04 <nick__> exactly I dont want an alias
17:31:08 <nick__> I've said as much
17:31:11 <mniip> Ok so, "how the typesystem works" is we have opaque and transparent aliases
17:31:17 <mniip> But not whatever you want
17:31:29 <nick__> that means nothing to me, perhaps you could explain?
17:31:38 <nick__> how that even relates to what I'm doing
17:32:12 <mauke> you're not doing anything, you're just trying to understand the type system
17:32:13 × geekosaur quits (~geekosaur@xmonad/geekosaur) (Quit: Leaving)
17:32:31 <nick__> yeah so I can properly use types and not have a million function definitions everywhere
17:32:43 <mniip> newtype is opaque: you need to explicitly wrap and unwrap, type is transparent: both happen implicitly
17:32:44 × mechap quits (~mechap@user/mechap) (Quit: WeeChat 4.0.0)
17:32:49 <jade[m]> I think they are asking for what you acttually need
17:32:54 <mauke> well, the easiest way to not have a million definitions is ... to not do that
17:33:01 <mniip> You want one side to be explicit and the other implicit, we don't have that
17:33:19 <nick__> mauke: exactly!
17:33:28 <nick__> now you're speaking my language!
17:33:37 <mauke> <nick__> ugh pasting shit from vim is such a pain <- if you're running vim locally, you should be able to use its clipboard integration (even in a terminal)
17:33:54 <mauke> also known as "+y
17:34:32 × cafkafk quits (~cafkafk@fsf/member/cafkafk) (Ping timeout: 240 seconds)
17:36:58 AlexNoo_ joins (~AlexNoo@94.233.241.5)
17:37:25 cafkafk joins (~cafkafk@fsf/member/cafkafk)
17:38:24 × AlexZenon quits (~alzenon@178.34.150.66) (Ping timeout: 250 seconds)
17:39:14 ft joins (~ft@p508db151.dip0.t-ipconnect.de)
17:39:53 geekosaur joins (~geekosaur@xmonad/geekosaur)
17:40:12 × AlexNoo quits (~AlexNoo@178.34.150.66) (Ping timeout: 240 seconds)
17:40:47 × Alex_test quits (~al_test@178.34.150.66) (Ping timeout: 264 seconds)
17:42:52 <nick__> Is this what you guys are talking about? https://paste.tomsmeding.com/mbX5n9OW
17:43:05 <nick__> I'm just trying to figure out how you handle this type of issue?
17:43:34 AlexZenon joins (~alzenon@94.233.241.5)
17:44:22 <jade[m]> don't use the show instance for that
17:44:37 <jade[m]> just unwrap the newtype via a pattern match
17:44:39 <nick__> well I've been asking how you guys would handle it
17:44:42 <nick__> so how would you do it?
17:44:50 <mauke> pattern matching
17:44:56 <nick__> example?
17:45:04 <jade[m]> charIter2 (String2 str) = ...
17:45:06 <mauke> or record syntax with implicit accessors that do the matching for you
17:45:28 <nick__> oh how would a record syntax look?
17:45:48 azimut joins (~azimut@gateway/tor-sasl/azimut)
17:45:59 <mauke> newtype String2 = String2{ fromString2 :: String }
17:46:43 <mauke> which tells the compiler to generate the equivalent of: fromString2 x = case x of String2 s -> s
17:47:28 <nick__> yeah, so you've created a type that is a String2 but has a name/value pair that is a String?
17:47:39 <nick__> is how I'm reading that?
17:47:46 <jade[m]> that's what records are, yeah
17:48:00 <nick__> yeah I guess that makes sense
17:48:08 <jade[m]> essentially just giving names to fields inside a datatype
17:48:09 <nick__> just seems unintuitive
17:48:16 <jade[m]> with no runtime overhead
17:48:21 <jade[m]> (afaik)
17:48:26 × ripspin quits (~chatzilla@1.145.136.115) (Remote host closed the connection)
17:48:43 <mauke> I wouldn't call it a name/value pair because at runtime it's just the value
17:48:57 <jade[m]> yeah that's what I was trying to express
17:49:01 × Sgeo quits (~Sgeo@user/sgeo) (Read error: Connection reset by peer)
17:49:23 <mauke> in particular, operationally fromString2 is the identity function
17:49:39 Alex_test joins (~al_test@94.233.241.5)
17:49:59 <nick__> So wait, lets say you had an int included in the record as well. Is it still just the two values? or is it a datatype that contains two values?
17:50:02 <mniip> "how you guys would handle it" is a completely different question that has also been answered earlier
17:50:19 <mauke> nick__: that's a compiler error because newtype can only wrap exactly one thing
17:50:22 <mniip> here's a more practical example: https://paste.tomsmeding.com/ZO7L4NbL
17:50:26 <nick__> ah true
17:50:27 <nick__> ok
17:50:30 <jade[m]> nick__: two fields would not allow you to use `newtype`
17:50:48 <nick__> yeah that's on the wikipage I remember
17:51:05 <mauke> so the use of a record field name with newtype is slightly cheeky
17:51:23 Sgeo joins (~Sgeo@user/sgeo)
17:51:46 <mniip> god I wish GHC would just let me define a newtype gadt where the only field is a coercion
17:53:55 waleee joins (~waleee@2001:9b0:21c:4000:5bf9:6515:c030:57b7)
17:54:14 × solaire quits (~solaire@024-158-116-019.res.spectrum.com) (Ping timeout: 246 seconds)
17:55:11 solaire joins (~solaire@024-158-116-019.res.spectrum.com)
17:56:42 × fweht quits (uid404746@id-404746.lymington.irccloud.com) (Quit: Connection closed for inactivity)
17:58:57 EvanR joins (~EvanR@user/evanr)
18:01:20 wroathe joins (~wroathe@207-153-38-140.fttp.usinternet.com)
18:01:20 × wroathe quits (~wroathe@207-153-38-140.fttp.usinternet.com) (Changing host)
18:01:20 wroathe joins (~wroathe@user/wroathe)
18:03:56 AlexNoo_ is now known as AlexNoo
18:09:23 × FinnElija quits (~finn_elij@user/finn-elija/x-0085643) (Remote host closed the connection)
18:11:50 FinnElija joins (~finn_elij@user/finn-elija/x-0085643)
18:12:22 × wroathe quits (~wroathe@user/wroathe) (Ping timeout: 260 seconds)
18:16:58 × danse-nr3 quits (~francesco@151.35.67.174) (Ping timeout: 250 seconds)
18:19:35 eggplantade joins (~Eggplanta@2600:1700:38c5:d800:296e:3128:9bb:592b)
18:22:21 × totbwf quits (sid402332@id-402332.uxbridge.irccloud.com) (Server closed connection)
18:22:35 totbwf joins (sid402332@id-402332.uxbridge.irccloud.com)
18:23:57 × eggplantade quits (~Eggplanta@2600:1700:38c5:d800:296e:3128:9bb:592b) (Ping timeout: 245 seconds)
18:24:29 × coot quits (~coot@89-69-206-216.dynamic.chello.pl) (Quit: coot)
18:25:40 misterfish joins (~misterfis@84-53-85-146.bbserv.nl)
18:28:09 mechap joins (~mechap@user/mechap)
18:30:34 × misterfish quits (~misterfis@84-53-85-146.bbserv.nl) (Ping timeout: 260 seconds)
18:32:02 × ubert quits (~Thunderbi@p200300ecdf0b57c57ef837ab9eeb4127.dip0.t-ipconnect.de) (Ping timeout: 246 seconds)
18:33:49 ubert joins (~Thunderbi@p548c89d1.dip0.t-ipconnect.de)
18:35:14 × waleee quits (~waleee@2001:9b0:21c:4000:5bf9:6515:c030:57b7) (Ping timeout: 260 seconds)
18:37:04 eggplantade joins (~Eggplanta@104-55-37-220.lightspeed.sntcca.sbcglobal.net)
18:39:28 Tuplanolla joins (~Tuplanoll@91-159-68-236.elisa-laajakaista.fi)
18:51:54 Pickchea joins (~private@user/pickchea)
19:04:14 × gensyst quits (~gensyst@user/gensyst) (Quit: Leaving)
19:07:06 geranim0 joins (~geranim0@modemcable182.140-177-173.mc.videotron.ca)
19:11:25 coot joins (~coot@89-69-206-216.dynamic.chello.pl)
19:14:20 reach joins (~reach@bras-base-toroon2643w-grc-19-74-12-129-40.dsl.bell.ca)
19:17:14 × geranim0 quits (~geranim0@modemcable182.140-177-173.mc.videotron.ca) (Ping timeout: 260 seconds)
19:17:50 × tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
19:18:25 taupiqueur joins (~taupiqueu@2a02-8440-721b-8c5d-393a-ef3b-a3c7-d0b1.rev.sfr.net)
19:18:27 × fendor quits (~fendor@2a02:8388:1640:be00:7aca:a77a:4a28:631a) (Remote host closed the connection)
19:20:45 nate2 joins (~nate@c-98-45-169-16.hsd1.ca.comcast.net)
19:21:59 × reach quits (~reach@bras-base-toroon2643w-grc-19-74-12-129-40.dsl.bell.ca) (Remote host closed the connection)
19:22:43 reach joins (~reach@74.12.129.40)
19:25:38 × nate2 quits (~nate@c-98-45-169-16.hsd1.ca.comcast.net) (Ping timeout: 260 seconds)
19:36:21 pavonia joins (~user@user/siracusa)
19:40:02 × captnemo quits (~captnemo@193.32.127.239) (Quit: WeeChat 3.8)
19:42:53 jero98772 joins (~jero98772@2800:484:1d7f:5d36::4)
19:45:52 × reach quits (~reach@74.12.129.40) (Remote host closed the connection)
19:46:11 × hisa38 quits (~hisa38@104-181-102-238.lightspeed.wepbfl.sbcglobal.net) (Ping timeout: 264 seconds)
19:46:15 reach joins (~reach@bras-base-toroon2643w-grc-19-74-12-129-40.dsl.bell.ca)
19:47:52 × Unicorn_Princess quits (~Unicorn_P@user/Unicorn-Princess/x-3540542) (Remote host closed the connection)
19:54:18 × _ht quits (~Thunderbi@28-52-174-82.ftth.glasoperator.nl) (Quit: _ht)
20:01:17 × trev quits (~trev@user/trev) (Quit: trev)
20:03:40 × merijn quits (~merijn@86-86-29-250.fixed.kpn.net) (Ping timeout: 258 seconds)
20:04:22 × jero98772 quits (~jero98772@2800:484:1d7f:5d36::4) (Ping timeout: 260 seconds)
20:07:08 × reach quits (~reach@bras-base-toroon2643w-grc-19-74-12-129-40.dsl.bell.ca) (Ping timeout: 240 seconds)
20:08:49 machinedgod joins (~machinedg@d198-53-218-113.abhsia.telus.net)
20:08:51 hisa38 joins (~hisa38@104-181-102-238.lightspeed.wepbfl.sbcglobal.net)
20:17:20 × ec quits (~ec@gateway/tor-sasl/ec) (Ping timeout: 240 seconds)
20:17:55 ec joins (~ec@gateway/tor-sasl/ec)
20:18:26 × remedan quits (~remedan@ip-94-112-0-18.bb.vodafone.cz) (Ping timeout: 246 seconds)
20:25:09 × robobub quits (uid248673@id-248673.uxbridge.irccloud.com) (Quit: Connection closed for inactivity)
20:31:05 merijn joins (~merijn@c-001-001-003.client.esciencecenter.eduvpn.nl)
20:35:52 danse-nr3 joins (~francesco@151.37.109.27)
20:36:21 remedan joins (~remedan@ip-94-112-0-18.bb.vodafone.cz)
20:37:47 × Alex_test quits (~al_test@94.233.241.5) (Ping timeout: 264 seconds)
20:39:30 × AlexZenon quits (~alzenon@94.233.241.5) (Ping timeout: 240 seconds)
20:39:50 × AlexNoo quits (~AlexNoo@94.233.241.5) (Ping timeout: 260 seconds)
20:48:30 misterfish joins (~misterfis@84-53-85-146.bbserv.nl)
21:02:30 geranim0 joins (~geranim0@modemcable182.140-177-173.mc.videotron.ca)
21:04:34 × merijn quits (~merijn@c-001-001-003.client.esciencecenter.eduvpn.nl) (Ping timeout: 260 seconds)
21:05:30 × misterfish quits (~misterfis@84-53-85-146.bbserv.nl) (Ping timeout: 260 seconds)
21:06:44 × geranim0 quits (~geranim0@modemcable182.140-177-173.mc.videotron.ca) (Remote host closed the connection)
21:07:36 × coot quits (~coot@89-69-206-216.dynamic.chello.pl) (Quit: coot)
21:08:59 × foul_owl quits (~kerry@71.212.137.212) (Ping timeout: 264 seconds)
21:10:43 × josias quits (~mottmatri@2001:470:69fc:105::b6c) (Server closed connection)
21:10:55 josias joins (~mottmatri@2001:470:69fc:105::b6c)
21:10:57 × gurkenglas quits (~gurkengla@dynamic-046-114-163-231.46.114.pool.telefonica.de) (Read error: Connection reset by peer)
21:15:28 × tinwood quits (~tinwood@canonical/tinwood) (Server closed connection)
21:15:41 tinwood joins (~tinwood@general.default.akavanagh.uk0.bigv.io)
21:15:42 × tinwood quits (~tinwood@general.default.akavanagh.uk0.bigv.io) (Changing host)
21:15:42 tinwood joins (~tinwood@canonical/tinwood)
21:16:30 × takuan quits (~takuan@178-116-218-225.access.telenet.be) (Remote host closed the connection)
21:17:44 × cafkafk quits (~cafkafk@fsf/member/cafkafk) (Ping timeout: 240 seconds)
21:19:02 × chromoblob quits (~user@37.113.180.121) (Ping timeout: 260 seconds)
21:22:16 cafkafk joins (~cafkafk@fsf/member/cafkafk)
21:23:13 foul_owl joins (~kerry@157.97.134.168)
21:25:49 titibandit joins (~titibandi@user/titibandit)
21:39:00 × mizlan quits (~mizlan@c-73-63-223-227.hsd1.ca.comcast.net) (Ping timeout: 240 seconds)
21:39:45 × ddellacosta quits (~ddellacos@146.70.166.10) (Quit: WeeChat 3.8)
21:40:09 × michalz quits (~michalz@185.246.207.217) (Remote host closed the connection)
21:40:18 mizlan joins (~mizlan@c-73-63-223-227.hsd1.ca.comcast.net)
21:41:12 × sphynx quits (~xnyhps@2a02:2770:3:0:216:3eff:fe67:3288) (Server closed connection)
21:41:25 sphynx joins (~xnyhps@2a02:2770:3:0:216:3eff:fe67:3288)
21:44:42 × mizlan quits (~mizlan@c-73-63-223-227.hsd1.ca.comcast.net) (Ping timeout: 260 seconds)
21:46:09 FinnBoat joins (~user@rul16-h01-176-151-21-224.dsl.sta.abo.bbox.fr)
21:57:28 × FinnBoat quits (~user@rul16-h01-176-151-21-224.dsl.sta.abo.bbox.fr) (Remote host closed the connection)
21:58:58 mizlan joins (~mizlan@c-73-63-223-227.hsd1.ca.comcast.net)
22:01:13 × TheCoffeMaker quits (~TheCoffeM@user/thecoffemaker) (Quit: So long and thanks for all the fish)
22:01:33 × Pickchea quits (~private@user/pickchea) (Quit: Leaving)
22:03:50 × taupiqueur quits (~taupiqueu@2a02-8440-721b-8c5d-393a-ef3b-a3c7-d0b1.rev.sfr.net) (Ping timeout: 260 seconds)
22:06:32 × mithromdir quits (uid591745@user/mithromdir) (Quit: Connection closed for inactivity)
22:13:32 × oo_miguel quits (~Thunderbi@78-11-179-96.static.ip.netia.com.pl) (Ping timeout: 240 seconds)
22:15:36 bratwurst joins (~dfadsva@2604:3d09:207f:f650::a8c)
22:19:12 × nick__ quits (~nick@wsip-174-78-110-18.pn.at.cox.net) (Ping timeout: 250 seconds)
22:20:30 × titibandit quits (~titibandi@user/titibandit) (Remote host closed the connection)
22:22:07 L29Ah joins (~L29Ah@wikipedia/L29Ah)
22:25:05 TheCoffeMaker joins (~TheCoffeM@user/thecoffemaker)
22:25:50 × acidjnk quits (~acidjnk@p200300d6e7072f43a445df600121d0b6.dip0.t-ipconnect.de) (Ping timeout: 246 seconds)
22:27:35 × remedan quits (~remedan@ip-94-112-0-18.bb.vodafone.cz) (Ping timeout: 264 seconds)
22:28:14 remedan joins (~remedan@ip-94-112-0-18.bb.vodafone.cz)
22:28:32 × TheCoffeMaker quits (~TheCoffeM@user/thecoffemaker) (Read error: Connection reset by peer)
22:28:34 × __monty__ quits (~toonn@user/toonn) (Quit: leaving)
22:29:40 wroathe joins (~wroathe@user/wroathe)
22:36:28 × Vq quits (~vq@90-227-195-9-no77.tbcn.telia.com) (Server closed connection)
22:36:37 Vq joins (~vq@90-227-195-9-no77.tbcn.telia.com)
22:37:30 bitdex joins (~bitdex@gateway/tor-sasl/bitdex)
22:38:23 × danse-nr3 quits (~francesco@151.37.109.27) (Ping timeout: 264 seconds)
22:39:41 sumpwa- is now known as sumpwa
22:43:30 × dibblego quits (~dibblego@haskell/developer/dibblego) (Ping timeout: 260 seconds)
22:47:17 dmenz joins (~dmenz@2804:14d:5cd4:85fb:176f:8705:81c:687a)
22:47:42 × ubert quits (~Thunderbi@p548c89d1.dip0.t-ipconnect.de) (Quit: ubert)
22:51:14 dibblego joins (~dibblego@122-199-1-30.ip4.superloop.au)
22:51:14 × dibblego quits (~dibblego@122-199-1-30.ip4.superloop.au) (Changing host)
22:51:14 dibblego joins (~dibblego@haskell/developer/dibblego)
22:57:07 × dolio quits (~dolio@130.44.134.54) (Quit: ZNC 1.8.2 - https://znc.in)
22:57:46 × wroathe quits (~wroathe@user/wroathe) (Ping timeout: 250 seconds)
22:58:11 × Tuplanolla quits (~Tuplanoll@91-159-68-236.elisa-laajakaista.fi) (Quit: Leaving.)
22:58:52 merijn joins (~merijn@86-86-29-250.fixed.kpn.net)
22:58:52 dolio joins (~dolio@130.44.134.54)
23:02:26 × dolio quits (~dolio@130.44.134.54) (Client Quit)
23:05:59 × merijn quits (~merijn@86-86-29-250.fixed.kpn.net) (Ping timeout: 264 seconds)
23:10:56 × cafkafk quits (~cafkafk@fsf/member/cafkafk) (Ping timeout: 240 seconds)
23:13:53 cafkafk joins (~cafkafk@fsf/member/cafkafk)
23:22:16 nate2 joins (~nate@c-98-45-169-16.hsd1.ca.comcast.net)
23:24:20 jero98772 joins (~jero98772@2800:484:1d7f:5d36::4)
23:27:00 × nate2 quits (~nate@c-98-45-169-16.hsd1.ca.comcast.net) (Ping timeout: 240 seconds)
23:31:19 × cafkafk quits (~cafkafk@fsf/member/cafkafk) (Remote host closed the connection)
23:31:41 cafkafk joins (~cafkafk@fsf/member/cafkafk)
23:44:58 mauke_ joins (~mauke@user/mauke)
23:46:03 × mechap quits (~mechap@user/mechap) (Quit: WeeChat 4.0.0)
23:46:58 × mauke quits (~mauke@user/mauke) (Ping timeout: 260 seconds)
23:46:58 mauke_ is now known as mauke
23:51:54 mechap joins (~mechap@user/mechap)

All times are in UTC on 2023-06-28.