Home liberachat/#haskell: Logs Calendar

Logs on 2023-03-14 (liberachat/#haskell)

00:04:13 × xff0x quits (~xff0x@ai098135.d.east.v6connect.net) (Ping timeout: 276 seconds)
00:07:08 Umeaboy joins (~Umeaboy@94-255-145-133.cust.bredband2.com)
00:07:24 <Umeaboy> Hi again! I'm home now so the connection is more stable.
00:08:17 <Umeaboy> As a matter of fact there is a libncurses5 built for aarch64, but it's lib64. I understand why, but how do I solve that in the spec file?
00:08:41 <Umeaboy> ifarch aarch64
00:09:12 <hpc> probably that, yeah
00:09:21 × Tuplanolla quits (~Tuplanoll@91-159-68-152.elisa-laajakaista.fi) (Quit: Leaving.)
00:09:23 <Umeaboy> BuildRequires: lib64ncurses5-6.3 ?
00:09:30 × forell quits (~forell@user/forell) (Ping timeout: 255 seconds)
00:09:32 <hpc> maybe it's %ifarch? i haven't ever had to use it
00:09:44 <Umeaboy> Yeah.......
00:09:46 <Umeaboy> I know·
00:09:52 <Umeaboy> I'll test it.
00:11:12 <Umeaboy> Do I use Requires or BuildRequires in this case?
00:11:19 <hpc> BuildRequires
00:11:22 <Umeaboy> OK.
00:11:43 <hpc> and then... i think it static links so you should be good?
00:11:58 <hpc> oh, and that needs to be the dev package
00:12:06 <hpc> i think
00:12:38 <hpc> maybe not, hmm
00:13:59 <hpc> ugh, it 500s when i try to look at the source
00:14:04 <Umeaboy> I don't mean to seem stupid, but aren't there to many occurances of libncurses in the spec fi,le?
00:14:07 <Umeaboy> file'
00:14:38 <Umeaboy> Say whut?
00:15:09 <hpc> trying to see how it's all linked
00:15:26 <Umeaboy> I can open it just fine.
00:15:30 <geekosaur> actually I misspoke earlier, it's not ghc it's haskeline — which is unmaintained
00:15:33 <hpc> i am used to packaging dynamic linked stuff, where you buildrequire headers and require the .so
00:15:54 <Umeaboy> If you're by source refer to https://download.copr.fedorainfracloud.org/results/umeaman/ghc-bootstrap/mageia-8-i586/05633414-ghc-bootstrap/ghc-bootstrap-8.6.5-1.mga8.src.rpm
00:16:11 <geekosaur> at some point I suppose I'll have to put in a takeover req for it because nobody else will, even though I can't make many promises about keeping up (but I can do better than a decade of not keeping up…)
00:17:08 <hpc> oh, that's a better idea - i was clicking the git repo link
00:20:00 <Umeaboy> And why does it have both binutils on BuildRequires and Requires? That doesn't feel right, but then again..... I'm no expert.
00:20:25 <hpc> probably something like this: https://paste.tomsmeding.com/Bnp4dW6P
00:20:31 <geekosaur> required both for building and for running, since it's a compiler
00:20:36 <hpc> ^
00:21:33 <Umeaboy> Ok.
00:21:37 <Umeaboy> Good to know.
00:21:40 forell joins (~forell@user/forell)
00:22:11 <hpc> so like, imagine you had a bash script
00:22:24 <hpc> perhaps you would buildrequire shellcheck and require bash
00:22:42 <hpc> bash at runtime to run it, shellcheck at build time to make sure it's correct
00:22:56 <Umeaboy> Can I safely delete/remove the %{arm} from the ifarch aarch64 line as arm is no longer supported by that version?
00:22:59 <hpc> in python you'd both require and buildrequire python
00:23:50 <hpc> for binutils, it's needed at build time in order to copy files around
00:23:54 <Umeaboy> shellcheck isn't officially packaged for Mageia to my knowledge.
00:24:00 <hpc> and at runtime... probably for similar reasons?
00:24:14 <geekosaur> because it does linking via binutils
00:24:31 <hpc> doh, i was thinking coreutils
00:24:39 <geekosaur> and a build time it does linking of the new ghc using the old ghc
00:24:46 <geekosaur> *at
00:25:18 <hpc> Umeaboy: (that was just an example)
00:25:47 <geekosaur> so it needs binutils in both cases to get a linker
00:26:39 <Umeaboy> Right.
00:26:58 × mncheck quits (~mncheck@193.224.205.254) (Ping timeout: 276 seconds)
00:35:23 × acidjnk_new quits (~acidjnk@p200300d6e715c44645c006c030d63e3c.dip0.t-ipconnect.de) (Ping timeout: 248 seconds)
00:35:42 × mei quits (~mei@user/mei) (Remote host closed the connection)
00:38:08 mei joins (~mei@user/mei)
00:38:48 × zeenk quits (~zeenk@2a02:2f04:a307:2300::7fe) (Quit: Konversation terminated!)
00:54:20 <lyxia> Does this Windows error in CI using GH actions look familiar to somebody? https://github.com/Lysxia/generic-random/actions/runs/4410749511/jobs/7728952259
00:56:47 mauke_ joins (~mauke@user/mauke)
00:58:59 × mauke quits (~mauke@user/mauke) (Ping timeout: 264 seconds)
00:59:00 mauke_ is now known as mauke
01:01:43 × califax quits (~califax@user/califx) (Remote host closed the connection)
01:03:11 califax joins (~califax@user/califx)
01:03:45 × [itchyjunk] quits (~itchyjunk@user/itchyjunk/x-7353470) (Ping timeout: 256 seconds)
01:03:51 × zaquest quits (~notzaques@5.130.79.72) (Remote host closed the connection)
01:05:17 <Umeaboy> lyxia: Check line 19.
01:06:33 × thegeekinside quits (~thegeekin@189.217.80.156) (Read error: Connection reset by peer)
01:07:56 [itchyjunk] joins (~itchyjunk@user/itchyjunk/x-7353470)
01:07:57 <lyxia> Umeaboy: that's a warning. The error is line 31
01:08:29 × okiltb^ quits (~okiltb@c-24-30-76-89.hsd1.ga.comcast.net) (Remote host closed the connection)
01:08:45 <Umeaboy> Check manually if it does exist.
01:09:42 xff0x joins (~xff0x@om126167107057.29.openmobile.ne.jp)
01:10:15 × albet70 quits (~xxx@2400:8902::f03c:92ff:fe60:98d8) (Remote host closed the connection)
01:10:16 eggplantade joins (~Eggplanta@2600:1700:38c5:d800:19aa:397c:29a:40e4)
01:14:25 × eggplantade quits (~Eggplanta@2600:1700:38c5:d800:19aa:397c:29a:40e4) (Ping timeout: 246 seconds)
01:15:27 <Umeaboy> hpc and geekosaur: Does this edited spec file look correct?
01:15:28 <Umeaboy> https://ghostbin.me/640fca90c83c5
01:15:44 <lyxia> Umeaboy: It's an error on a remote machine I do not own so I cannot "check manually"
01:16:20 telser_ joins (~quassel@user/telser)
01:16:22 × telser quits (~quassel@user/telser) (Ping timeout: 276 seconds)
01:16:23 albet70 joins (~xxx@2400:8902::f03c:92ff:fe60:98d8)
01:18:40 thegeekinside joins (~thegeekin@189.217.80.156)
01:19:22 <Umeaboy> Fix it, nevermind!
01:19:24 <Umeaboy> Fixed
01:19:40 merijn joins (~merijn@86-86-29-250.fixed.kpn.net)
01:24:12 × merijn quits (~merijn@86-86-29-250.fixed.kpn.net) (Ping timeout: 255 seconds)
01:26:05 × cods quits (~fred@82-65-232-44.subs.proxad.net) (Ping timeout: 250 seconds)
01:28:45 dsrt^ joins (~dsrt@c-24-30-76-89.hsd1.ga.comcast.net)
01:33:25 × mei quits (~mei@user/mei) (Remote host closed the connection)
01:35:51 mei joins (~mei@user/mei)
01:39:04 <Umeaboy> There is one small problem left.
01:40:12 <Umeaboy> The %build macro says to do tar Jxf ghc-%{version}-%{longarch}-%{sysname}-linux.tar.xz which is OK for the vaste majority of the sources, but there is one source tarball that's named differently.
01:41:11 <Umeaboy> Source #3 is named ghc-8.8.1-x86_64-apple-darwin.tar.xz, but that leads to tar not being able to unpack it.
01:41:29 <Umeaboy> Can I use %if else for this section to?
01:42:20 <Umeaboy> I'll test it and see how it goes.
01:52:07 × forell quits (~forell@user/forell) (Ping timeout: 276 seconds)
01:53:43 cods joins (~fred@82-65-232-44.subs.proxad.net)
01:59:52 byorgey_ is now known as byorgey
02:04:43 forell joins (~forell@user/forell)
02:11:02 machinedgod joins (~machinedg@d198-53-218-113.abhsia.telus.net)
02:19:10 × machinedgod quits (~machinedg@d198-53-218-113.abhsia.telus.net) (Remote host closed the connection)
02:19:30 machinedgod joins (~machinedg@d198-53-218-113.abhsia.telus.net)
02:19:31 × L29Ah quits (~L29Ah@wikipedia/L29Ah) (Read error: Connection reset by peer)
02:23:46 × xff0x quits (~xff0x@om126167107057.29.openmobile.ne.jp) (Read error: Connection reset by peer)
02:25:01 × opticblast quits (~Thunderbi@172.58.82.223) (Ping timeout: 250 seconds)
02:27:37 Lord_of_Life_ joins (~Lord@user/lord-of-life/x-2819915)
02:27:52 × Lord_of_Life quits (~Lord@user/lord-of-life/x-2819915) (Ping timeout: 276 seconds)
02:28:31 × forell quits (~forell@user/forell) (Ping timeout: 276 seconds)
02:28:56 Lord_of_Life_ is now known as Lord_of_Life
02:36:37 slack1256 joins (~slack1256@186.11.43.166)
02:39:41 xff0x joins (~xff0x@om126167107057.29.openmobile.ne.jp)
02:40:29 roboguy_ joins (~roboguy_@cpe-69-76-235-109.kc.res.rr.com)
02:41:50 × [itchyjunk] quits (~itchyjunk@user/itchyjunk/x-7353470) (Remote host closed the connection)
02:48:41 × xff0x quits (~xff0x@om126167107057.29.openmobile.ne.jp) (Read error: Connection reset by peer)
02:53:59 gehmehgeh joins (~user@user/gehmehgeh)
02:54:33 razetime joins (~Thunderbi@43.254.111.18)
02:56:34 eggplantade joins (~Eggplanta@104-55-37-220.lightspeed.sntcca.sbcglobal.net)
02:56:53 × gmg quits (~user@user/gehmehgeh) (Ping timeout: 255 seconds)
02:59:46 × jero98772 quits (~jero98772@2800:484:1d80:d8ce:efcc:cbb3:7f2a:6dff) (Remote host closed the connection)
03:02:50 Goodbye_Vincent6 joins (cyvahl@freakshells.net)
03:03:29 × dfg quits (~dfg@user/dfg) (Remote host closed the connection)
03:03:45 dfg joins (~dfg@dfg.rocks)
03:03:46 × dfg quits (~dfg@dfg.rocks) (Changing host)
03:03:46 dfg joins (~dfg@user/dfg)
03:04:32 forell joins (~forell@user/forell)
03:04:55 × Goodbye_Vincent quits (cyvahl@freakshells.net) (Ping timeout: 276 seconds)
03:04:55 Goodbye_Vincent6 is now known as Goodbye_Vincent
03:11:18 × jespada quits (~jespada@cpc121308-nmal25-2-0-cust15.19-2.cable.virginm.net) (Ping timeout: 255 seconds)
03:11:41 gastus joins (~gastus@185.6.123.231)
03:13:25 jespada joins (~jespada@cpc121308-nmal25-2-0-cust15.19-2.cable.virginm.net)
03:15:19 × gastus_ quits (~gastus@185.6.123.215) (Ping timeout: 276 seconds)
03:18:30 × machinedgod quits (~machinedg@d198-53-218-113.abhsia.telus.net) (Ping timeout: 255 seconds)
03:20:12 merijn joins (~merijn@86-86-29-250.fixed.kpn.net)
03:22:28 × forell quits (~forell@user/forell) (Ping timeout: 276 seconds)
03:23:07 × vglfr quits (~vglfr@91.102.183.234) (Ping timeout: 276 seconds)
03:23:08 × td_ quits (~td@i53870912.versanet.de) (Ping timeout: 246 seconds)
03:23:34 Inst joins (~Inst@2601:6c4:4081:54f0:a477:258d:a836:e1e4)
03:24:36 vglfr joins (~vglfr@91.102.183.234)
03:24:57 td_ joins (~td@i53870906.versanet.de)
03:25:20 sagax joins (~sagax_nb@213.138.71.146)
03:25:20 × sagax quits (~sagax_nb@213.138.71.146) (Changing host)
03:25:20 sagax joins (~sagax_nb@user/sagax)
03:33:48 × werneta quits (~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net) (Ping timeout: 264 seconds)
03:36:53 × slack1256 quits (~slack1256@186.11.43.166) (Ping timeout: 268 seconds)
03:41:37 ub joins (~Thunderbi@p548c84ba.dip0.t-ipconnect.de)
03:41:58 × ubert quits (~Thunderbi@p548c84ba.dip0.t-ipconnect.de) (Ping timeout: 276 seconds)
03:41:58 ub is now known as ubert
03:42:58 × terrorjack quits (~terrorjac@2a01:4f8:1c1e:4e8c::) (Quit: The Lounge - https://thelounge.chat)
03:43:36 × dsrt^ quits (~dsrt@c-24-30-76-89.hsd1.ga.comcast.net) (Remote host closed the connection)
03:44:22 terrorjack joins (~terrorjac@2a01:4f8:1c1e:4e8c::)
03:51:48 × rekahsoft quits (~rekahsoft@bras-base-orllon1122w-grc-07-174-95-68-142.dsl.bell.ca) (Ping timeout: 255 seconds)
03:54:17 × roboguy_ quits (~roboguy_@cpe-69-76-235-109.kc.res.rr.com) (Quit: Leaving...)
03:54:46 × merijn quits (~merijn@86-86-29-250.fixed.kpn.net) (Ping timeout: 252 seconds)
03:58:00 × FinnElija quits (~finn_elij@user/finn-elija/x-0085643) (Killed (NickServ (Forcing logout FinnElija -> finn_elija)))
03:58:00 finn_elija joins (~finn_elij@user/finn-elija/x-0085643)
03:58:00 finn_elija is now known as FinnElija
03:59:16 × wroathe quits (~wroathe@user/wroathe) (Quit: leaving)
03:59:29 werneta joins (~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net)
04:22:16 × tessier quits (~treed@ec2-184-72-149-67.compute-1.amazonaws.com) (Ping timeout: 276 seconds)
04:23:51 tessier joins (~treed@ip72-197-145-89.sd.sd.cox.net)
04:26:27 × freeside_ quits (~mengwong@103.252.202.85) (Ping timeout: 255 seconds)
04:27:11 × tusko quits (~yeurt@user/tusko) (Remote host closed the connection)
04:27:38 tusko joins (~yeurt@user/tusko)
04:33:11 × azimut quits (~azimut@gateway/tor-sasl/azimut) (Ping timeout: 255 seconds)
04:34:08 xff0x joins (~xff0x@2405:6580:b080:900:c2ab:3233:9b06:70ff)
04:35:50 × tusko quits (~yeurt@user/tusko) (Remote host closed the connection)
04:35:50 × jpds quits (~jpds@gateway/tor-sasl/jpds) (Remote host closed the connection)
04:35:50 × chexum_ quits (~quassel@gateway/tor-sasl/chexum) (Remote host closed the connection)
04:36:02 chexum joins (~quassel@gateway/tor-sasl/chexum)
04:36:21 jpds joins (~jpds@gateway/tor-sasl/jpds)
04:36:23 tusko joins (~yeurt@user/tusko)
04:39:24 whatsupdoc joins (uid509081@id-509081.hampstead.irccloud.com)
04:43:23 harveypwca joins (~harveypwc@2601:246:c180:a570:3828:d8:e523:3f67)
04:46:32 azimut joins (~azimut@gateway/tor-sasl/azimut)
04:47:11 merijn joins (~merijn@86-86-29-250.fixed.kpn.net)
04:51:55 × merijn quits (~merijn@86-86-29-250.fixed.kpn.net) (Ping timeout: 250 seconds)
04:52:43 × markasoftware quits (~quassel@107.161.26.124) (Quit: http://quassel-irc.org - Chat comfortably. Anywhere.)
04:53:21 markasoftware joins (~quassel@107.161.26.124)
04:59:48 rettahcay joins (~kaushikv@223.178.85.99)
05:03:13 trev joins (~trev@user/trev)
05:09:15 <rettahcay> hello folks, I'm trying to learn Zippers. So far, I've been using the section in "Learn you a haskell". Could you please recommend alternate sources for learning zippers, with some examples? Thanks
05:13:01 × vglfr quits (~vglfr@91.102.183.234) (Remote host closed the connection)
05:14:16 vglfr joins (~vglfr@91.102.183.234)
05:22:34 smallville7123 joins (~Android@2001:8004:4441:8fd2:47d8:ec3c:8ede:6ae5)
05:22:58 mbuf joins (~Shakthi@49.207.178.186)
05:33:05 × tessier quits (~treed@ip72-197-145-89.sd.sd.cox.net) (Ping timeout: 250 seconds)
05:33:49 × vglfr quits (~vglfr@91.102.183.234) (Remote host closed the connection)
05:34:47 vglfr joins (~vglfr@91.102.183.234)
05:34:53 tessier joins (~treed@ec2-184-72-149-67.compute-1.amazonaws.com)
05:35:59 <davean> rettahcay: the wiki
05:35:59 × vglfr quits (~vglfr@91.102.183.234) (Read error: Connection reset by peer)
05:36:52 vglfr joins (~vglfr@91.102.183.234)
05:38:51 × vglfr quits (~vglfr@91.102.183.234) (Remote host closed the connection)
05:39:06 vglfr joins (~vglfr@91.102.183.234)
05:44:23 × vglfr quits (~vglfr@91.102.183.234) (Read error: Connection reset by peer)
05:45:17 vglfr joins (~vglfr@91.102.183.234)
05:51:11 × xff0x quits (~xff0x@2405:6580:b080:900:c2ab:3233:9b06:70ff) (Ping timeout: 246 seconds)
05:51:34 xff0x joins (~xff0x@178.255.149.135)
05:52:24 × FinnElija quits (~finn_elij@user/finn-elija/x-0085643) (Remote host closed the connection)
05:56:30 FinnElija joins (~finn_elij@user/finn-elija/x-0085643)
05:57:57 codaraxis__ joins (~codaraxis@user/codaraxis)
05:58:28 × xff0x quits (~xff0x@178.255.149.135) (Ping timeout: 276 seconds)
05:58:39 <Umeaboy> rettahcay: https://www.tutorialspoint.com/haskell/haskell_zippers.htm
05:58:40 <Umeaboy> ?
05:59:47 xff0x joins (~xff0x@2405:6580:b080:900:c2ab:3233:9b06:70ff)
06:00:49 × codaraxis quits (~codaraxis@user/codaraxis) (Ping timeout: 250 seconds)
06:06:28 Maeda joins (~Maeda@91-161-10-149.subs.proxad.net)
06:08:59 monoidal joins (~monoidal@2a01cb0801ce4b00d527b7fc1dd66747.ipv6.abo.wanadoo.fr)
06:12:55 cheater_ joins (~Username@user/cheater)
06:13:06 michalz joins (~michalz@185.246.207.215)
06:14:59 × cheater quits (~Username@user/cheater) (Ping timeout: 246 seconds)
06:15:00 cheater_ is now known as cheater
06:15:22 takuan joins (~takuan@178-116-218-225.access.telenet.be)
06:18:14 chomwitt joins (~chomwitt@2a02:587:7a18:6d00:1ac0:4dff:fedb:a3f1)
06:26:02 mncheck joins (~mncheck@193.224.205.254)
06:30:43 × cheater quits (~Username@user/cheater) (Ping timeout: 256 seconds)
06:32:55 × shriekingnoise quits (~shrieking@186.137.175.87) (Ping timeout: 276 seconds)
06:33:45 rettahcay parts (~kaushikv@223.178.85.99) ()
06:39:39 × razetime quits (~Thunderbi@43.254.111.18) (Ping timeout: 255 seconds)
06:43:26 robobub joins (uid248673@id-248673.uxbridge.irccloud.com)
06:48:13 merijn joins (~merijn@86-86-29-250.fixed.kpn.net)
07:02:40 × bgs quits (~bgs@212-85-160-171.dynamic.telemach.net) (Remote host closed the connection)
07:05:20 forell joins (~forell@user/forell)
07:12:23 × Sgeo quits (~Sgeo@user/sgeo) (Read error: Connection reset by peer)
07:14:03 tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
07:21:01 × merijn quits (~merijn@86-86-29-250.fixed.kpn.net) (Ping timeout: 276 seconds)
07:21:36 × forell quits (~forell@user/forell) (Quit: ZNC - https://znc.in)
07:24:24 <opqdonut> I'd like to pattern match on a constructor that has different numbers of arguments in different GHCs
07:24:38 <opqdonut> unfortunately the constructor isn't declared using record syntax
07:24:52 <jackdk> is it TH-related?
07:24:54 <opqdonut> yes
07:25:00 <opqdonut> I'd like to avoid using CPP
07:25:01 forell joins (~forell@user/forell)
07:25:27 <opqdonut> bndrName (KindedTV n _ _) = nameBase n -- this is what I want to do
07:25:33 <jackdk> Does `th-abstraction` or `th-compat` help you?
07:27:02 <davean> ailing that, view patterns?
07:27:08 <opqdonut> oh, th-compat looks like exactly the thing I want
07:29:12 <jackdk> or put your function-that-needs-cpp somewhere else, so your main modules don't have the cpp in the bulk of your code
07:29:35 <jackdk> write the function you wish you had, and then use CPP to fill out its body, then program against that
07:30:27 <opqdonut> yeah well if I'm going to need CPP I'll just put it in this file
07:30:38 <opqdonut> but I think th-compat might save me, I'll try it out
07:30:54 <jackdk> it may also be the sort of function worth PRing into one of these libraries
07:31:02 <opqdonut> this is a good reminder to use record syntax in public APIs even if it feels a bit unnecessary
07:31:02 <jackdk> anyway, good luck
07:33:44 × tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
07:34:41 mastarija joins (~mastarija@188.252.199.82)
07:37:00 gurkenglas joins (~gurkengla@dynamic-046-114-179-023.46.114.pool.telefonica.de)
07:37:03 gurkengl1s joins (~gurkengla@dynamic-046-114-179-023.46.114.pool.telefonica.de)
07:37:21 minol joins (~minol@58.247.98.202)
07:37:39 <opqdonut> tvName from th-abstraction is the thing I wanted
07:39:35 tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
07:50:05 × lottaquestions quits (~nick@2607:fa49:503e:7100:df4b:8386:5d62:a084) (Ping timeout: 260 seconds)
07:53:23 lottaquestions_ joins (~nick@2607:fa49:503e:7100:f10c:7d33:a2c4:22f3)
07:53:25 × jinsl quits (~jinsl@2408:8207:2557:5df0:211:32ff:fec8:6aea) (Quit: ZNC - https://znc.in)
07:54:15 jinsl joins (~jinsl@2408:8207:2557:5df0:211:32ff:fec8:6aea)
07:56:43 _ht joins (~Thunderbi@28-52-174-82.ftth.glasoperator.nl)
08:00:37 coot joins (~coot@2a02:a310:e241:1b00:ec1a:e9df:79ac:66ba)
08:02:27 <mastarija> Can't find anything on rank-N lenses, is there any research on that front?
08:05:05 lortabac joins (~lortabac@2a01:e0a:541:b8f0:f353:905c:faa4:880f)
08:08:32 razetime joins (~Thunderbi@117.254.34.249)
08:13:19 acidjnk_new joins (~acidjnk@p200300d6e715c44624b074cb2aeeb01b.dip0.t-ipconnect.de)
08:17:22 cheater joins (~Username@user/cheater)
08:18:47 × tzh quits (~tzh@c-24-21-73-154.hsd1.or.comcast.net) (Quit: zzz)
08:18:59 nschoe joins (~q@141.101.51.197)
08:21:20 × hugo- quits (znc@verdigris.lysator.liu.se) (Ping timeout: 252 seconds)
08:22:11 MajorBiscuit joins (~MajorBisc@c-001-030-022.client.tudelft.eduvpn.nl)
08:25:06 × AmyMalik quits (ellenor@callbox.trd.is) (Quit: Bye Open Projects!)
08:27:42 × gurkenglas quits (~gurkengla@dynamic-046-114-179-023.46.114.pool.telefonica.de) (Ping timeout: 265 seconds)
08:27:56 jmdaemon joins (~jmdaemon@user/jmdaemon)
08:27:58 × gurkengl1s quits (~gurkengla@dynamic-046-114-179-023.46.114.pool.telefonica.de) (Ping timeout: 276 seconds)
08:34:50 × harveypwca quits (~harveypwc@2601:246:c180:a570:3828:d8:e523:3f67) (Quit: Leaving)
08:37:13 hugo- joins (znc@verdigris.lysator.liu.se)
08:38:09 × shryke quits (~shryke@2a00:4b00:13c:cc:b27b:25ff:fe18:efd) (Read error: Connection reset by peer)
08:41:14 merijn joins (~merijn@86-86-29-250.fixed.kpn.net)
08:41:18 zeenk joins (~zeenk@2a02:2f04:a307:2300::7fe)
08:43:36 opticblast joins (~Thunderbi@172.58.84.141)
08:46:55 <[Leary]> mastarija: I don't know, and this is only an off-hand thought, but if you used `type HOLens s t a b = forall f. Functor f => (forall x. a x -> f (b x)) -> (forall x. s x -> f (t x))` and similar `HOTraversal`, etc, then most of lens could probably be written on top of that with the ~same implementations (and some eta expansion). You could then write `type Lens s t a b = HOLens (Const a) (Const b) (Const s) (Const t)` or similar and support less polym
08:46:55 <[Leary]> orphic lenses.
08:48:00 Ellenor joins (ellenor@callbox.trd.is)
08:48:01 <mastarija> [Leary]: But this won't work with existing utilities, right?
08:50:28 <mastarija> Aha, it's not `a -> f b` but `a x -> f (b x)`...
08:50:43 × opticblast quits (~Thunderbi@172.58.84.141) (Ping timeout: 276 seconds)
08:50:47 <mastarija> Hm... looks interesting.
08:51:50 fnurglewitz joins (uid263868@id-263868.lymington.irccloud.com)
08:53:41 gurkenglas joins (~gurkengla@dynamic-046-114-179-023.46.114.pool.telefonica.de)
08:54:17 × cheater quits (~Username@user/cheater) (Ping timeout: 265 seconds)
08:57:11 × xff0x quits (~xff0x@2405:6580:b080:900:c2ab:3233:9b06:70ff) (Ping timeout: 250 seconds)
08:57:35 xff0x joins (~xff0x@ai098135.d.east.v6connect.net)
08:58:42 gurkengl1s joins (~gurkengla@dynamic-046-114-179-023.46.114.pool.telefonica.de)
08:59:31 aliosablack joins (~chomwitt@ppp-94-69-24-160.home.otenet.gr)
09:00:08 × KabeloMsobomvuMo quits (~elevenkb@2001:470:69fc:105::2:cb89) (Quit: You have been kicked for being idle)
09:00:10 × steve[m] quits (~stevetrou@2001:470:69fc:105::e0b) (Quit: You have been kicked for being idle)
09:01:08 <mastarija> Any recommended polymorphic list library?
09:01:25 KabeloMsobomvuMo joins (~elevenkb@2001:470:69fc:105::2:cb89)
09:01:27 KabeloMsobomvuMo parts (~elevenkb@2001:470:69fc:105::2:cb89) ()
09:01:32 × MajorBiscuit quits (~MajorBisc@c-001-030-022.client.tudelft.eduvpn.nl) (Ping timeout: 265 seconds)
09:01:40 steve[m] joins (~stevetrou@2001:470:69fc:105::e0b)
09:02:01 × chomwitt quits (~chomwitt@2a02:587:7a18:6d00:1ac0:4dff:fedb:a3f1) (Ping timeout: 265 seconds)
09:04:30 MajorBiscuit joins (~MajorBisc@2001:1c00:2408:a400:67e:5371:52a7:9b9a)
09:06:44 × eggplantade quits (~Eggplanta@104-55-37-220.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection)
09:08:18 × jmdaemon quits (~jmdaemon@user/jmdaemon) (Quit: ZNC 1.8.2 - https://znc.in)
09:09:19 <lyxia> base
09:09:35 jmdaemon joins (~jmdaemon@user/jmdaemon)
09:10:22 × razetime quits (~Thunderbi@117.254.34.249) (Quit: See You Space Cowboy)
09:17:51 <tomsmeding> data HList l where HNil :: HList '[] ; HCons :: a -> HList l -> HList (a ': l)
09:18:35 <tomsmeding> potentially s/HNil/End/; s/HCons/(:>)/
09:20:15 × aliosablack quits (~chomwitt@ppp-94-69-24-160.home.otenet.gr) (Quit: Leaving)
09:20:23 × Umeaboy quits (~Umeaboy@94-255-145-133.cust.bredband2.com) (Quit: Leaving)
09:22:12 × gurkengl1s quits (~gurkengla@dynamic-046-114-179-023.46.114.pool.telefonica.de) (Ping timeout: 252 seconds)
09:22:19 × gurkenglas quits (~gurkengla@dynamic-046-114-179-023.46.114.pool.telefonica.de) (Ping timeout: 246 seconds)
09:26:51 machinedgod joins (~machinedg@d198-53-218-113.abhsia.telus.net)
09:27:06 freeside joins (~mengwong@122.11.248.245)
09:27:41 × econo quits (uid147250@user/econo) (Quit: Connection closed for inactivity)
09:29:37 × jmdaemon quits (~jmdaemon@user/jmdaemon) (Quit: ZNC 1.8.2 - https://znc.in)
09:30:46 jmdaemon joins (~jmdaemon@user/jmdaemon)
09:32:21 cheater joins (~Username@user/cheater)
09:37:41 × jmdaemon quits (~jmdaemon@user/jmdaemon) (Quit: ZNC 1.8.2 - https://znc.in)
09:38:50 jmdaemon joins (~jmdaemon@user/jmdaemon)
09:39:01 × jmdaemon quits (~jmdaemon@user/jmdaemon) (Remote host closed the connection)
09:40:10 jmdaemon joins (~jmdaemon@user/jmdaemon)
09:44:17 gurkenglas joins (~gurkengla@dynamic-046-114-179-023.46.114.pool.telefonica.de)
09:45:31 × tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
09:47:04 tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
09:48:53 NiceBird joins (~NiceBird@185.133.111.196)
09:49:18 gurkengl1s joins (~gurkengla@dynamic-046-114-179-023.46.114.pool.telefonica.de)
09:51:00 jonathanx joins (~jonathan@h-176-10-144-60.NA.cust.bahnhof.se)
09:51:41 × Raito_Bezarius quits (~Raito@wireguard/tunneler/raito-bezarius) (Read error: Connection reset by peer)
09:52:10 Raito_Bezarius joins (~Raito@wireguard/tunneler/raito-bezarius)
09:52:46 × whatsupdoc quits (uid509081@id-509081.hampstead.irccloud.com) (Quit: Connection closed for inactivity)
09:53:31 <jonathanx> I've run into an issue with the arbitrary instance for UUID (from quickcheck-instances). I have a rose tree with records, where one of the fields is a UUID. I do a business logic check that none of them are identical (untrusted input). This is messing up my tests, since the arbitrary-generated Tree contains duplicate UUIDs
09:54:22 <jonathanx> The Arbitrary instance for UUID gets four Word32 and combines them into a UUID, which should avoid collisions in theory
09:55:05 <jonathanx> The problem might be quickcheck being clever and trying out some edge-cases such as 0
09:55:08 × ft quits (~ft@p3e9bc443.dip0.t-ipconnect.de) (Quit: leaving)
09:55:47 <jonathanx> Is that a plausible source of the issue, and how do I make quickcheck stupider if that is the case?
09:56:25 <opqdonut> yeah that sounds plausible
09:56:35 × acidjnk_new quits (~acidjnk@p200300d6e715c44624b074cb2aeeb01b.dip0.t-ipconnect.de) (Ping timeout: 246 seconds)
09:56:38 <opqdonut> quickCheck uses a slowly-increasing "size" parameter for generating the cases
09:57:02 <opqdonut> also, it can shrink the values on an error
09:57:12 <opqdonut> either of those might cause duplicates
09:59:11 cheater_ joins (~Username@user/cheater)
09:59:18 <opqdonut> you can use `resize` and `noShrinking` to override those
10:00:07 <opqdonut> looks like the Arbitrary UUID has a shrink implementation, which might be causing the problem
10:00:07 <jonathanx> resizing solved it :)
10:00:11 × cheater quits (~Username@user/cheater) (Ping timeout: 264 seconds)
10:00:15 cheater_ is now known as cheater
10:01:03 × minol quits (~minol@58.247.98.202) (Quit: Ping timeout (120 seconds))
10:01:40 <jonathanx> Many thanks
10:06:20 <dminuoso> jonathanx: You might want a more elaborate Arbitrary instance on the outer types that has some `suchThat` guaranteesing they be different.
10:06:31 <dminuoso> Otherwise you introduce such spurious errors
10:07:12 eggplantade joins (~Eggplanta@2600:1700:38c5:d800:19aa:397c:29a:40e4)
10:09:59 × gurkenglas quits (~gurkengla@dynamic-046-114-179-023.46.114.pool.telefonica.de) (Ping timeout: 250 seconds)
10:10:40 × gurkengl1s quits (~gurkengla@dynamic-046-114-179-023.46.114.pool.telefonica.de) (Ping timeout: 276 seconds)
10:11:52 gurkenglas joins (~gurkengla@dynamic-046-114-179-023.46.114.pool.telefonica.de)
10:12:00 gurkengl1s joins (~gurkengla@dynamic-046-114-179-023.46.114.pool.telefonica.de)
10:12:35 × eggplantade quits (~Eggplanta@2600:1700:38c5:d800:19aa:397c:29a:40e4) (Ping timeout: 250 seconds)
10:15:52 × hugo- quits (znc@verdigris.lysator.liu.se) (Ping timeout: 268 seconds)
10:16:37 ubert1 joins (~Thunderbi@2a02:8109:abc0:6434:e47:2f53:4085:22b0)
10:17:14 × coot quits (~coot@2a02:a310:e241:1b00:ec1a:e9df:79ac:66ba) (Quit: coot)
10:18:56 × jespada quits (~jespada@cpc121308-nmal25-2-0-cust15.19-2.cable.virginm.net) (Quit: My MacBook has gone to sleep. ZZZzzz…)
10:19:07 hugo- joins (znc@verdigris.lysator.liu.se)
10:19:37 × phma quits (~phma@host-67-44-208-67.hnremote.net) (Read error: Connection reset by peer)
10:20:02 phma joins (phma@2001:5b0:2172:d248:f993:5086:a103:30f8)
10:20:44 acidjnk joins (~acidjnk@p200300d6e715c4465904287e9255905d.dip0.t-ipconnect.de)
10:21:55 × freeside quits (~mengwong@122.11.248.245) (Ping timeout: 256 seconds)
10:25:03 Major_Biscuit joins (~MajorBisc@c-001-030-022.client.tudelft.eduvpn.nl)
10:26:38 crazazy joins (~user@130.89.171.62)
10:28:28 × gurkengl1s quits (~gurkengla@dynamic-046-114-179-023.46.114.pool.telefonica.de) (Ping timeout: 246 seconds)
10:28:37 × gurkenglas quits (~gurkengla@dynamic-046-114-179-023.46.114.pool.telefonica.de) (Ping timeout: 250 seconds)
10:28:44 × MajorBiscuit quits (~MajorBisc@2001:1c00:2408:a400:67e:5371:52a7:9b9a) (Ping timeout: 246 seconds)
10:30:21 gurkenglas joins (~gurkengla@dynamic-046-114-179-023.46.114.pool.telefonica.de)
10:30:34 cheater_ joins (~Username@user/cheater)
10:30:41 gurkengl1s joins (~gurkengla@dynamic-046-114-179-023.46.114.pool.telefonica.de)
10:30:58 L29Ah joins (~L29Ah@wikipedia/L29Ah)
10:32:00 cheater__ joins (~Username@user/cheater)
10:33:25 × cheater quits (~Username@user/cheater) (Ping timeout: 276 seconds)
10:34:11 freeside joins (~mengwong@122.11.248.245)
10:35:10 cheater___ joins (~Username@user/cheater)
10:35:10 cheater___ is now known as cheater
10:35:36 × cheater_ quits (~Username@user/cheater) (Ping timeout: 268 seconds)
10:36:05 × cheater__ quits (~Username@user/cheater) (Ping timeout: 246 seconds)
10:36:34 cheater_ joins (~Username@user/cheater)
10:39:16 × freeside quits (~mengwong@122.11.248.245) (Ping timeout: 276 seconds)
10:39:38 × cheater quits (~Username@user/cheater) (Ping timeout: 246 seconds)
10:39:48 cheater_ is now known as cheater
10:40:54 bhall joins (~brunohall@195.147.207.136)
10:41:38 × L29Ah quits (~L29Ah@wikipedia/L29Ah) (Read error: Connection reset by peer)
10:44:48 L29Ah joins (~L29Ah@wikipedia/L29Ah)
10:48:04 × L29Ah quits (~L29Ah@wikipedia/L29Ah) (Read error: Connection reset by peer)
10:51:37 Ellenor is now known as AmyMalik
10:56:23 × cheater quits (~Username@user/cheater) (Ping timeout: 246 seconds)
10:58:23 gurkenglas is now known as Guest3950
10:58:23 × Guest3950 quits (~gurkengla@dynamic-046-114-179-023.46.114.pool.telefonica.de) (Killed (sodium.libera.chat (Nickname regained by services)))
10:58:23 gurkengl1s is now known as gurkenglas
10:58:42 gurkengl1s joins (~gurkengla@dynamic-046-114-179-023.46.114.pool.telefonica.de)
10:59:50 coot joins (~coot@2a02:a310:e241:1b00:ec1a:e9df:79ac:66ba)
11:02:26 × ec quits (~ec@gateway/tor-sasl/ec) (Ping timeout: 255 seconds)
11:03:00 slack1256 joins (~slack1256@186.11.43.166)
11:03:12 ec joins (~ec@gateway/tor-sasl/ec)
11:03:18 × jmdaemon quits (~jmdaemon@user/jmdaemon) (Quit: ZNC 1.8.2 - https://znc.in)
11:04:00 L29Ah joins (~L29Ah@wikipedia/L29Ah)
11:04:25 jmdaemon joins (~jmdaemon@user/jmdaemon)
11:05:10 cheater joins (~Username@user/cheater)
11:05:40 freeside joins (~mengwong@122.11.248.245)
11:09:08 × slack1256 quits (~slack1256@186.11.43.166) (Ping timeout: 265 seconds)
11:09:48 × cheater quits (~Username@user/cheater) (Ping timeout: 264 seconds)
11:10:06 × freeside quits (~mengwong@122.11.248.245) (Ping timeout: 265 seconds)
11:16:42 cheater joins (~Username@user/cheater)
11:18:28 cheater_ joins (~Username@user/cheater)
11:21:44 × cheater quits (~Username@user/cheater) (Ping timeout: 252 seconds)
11:21:54 cheater_ is now known as cheater
11:31:07 cheater_ joins (~Username@user/cheater)
11:33:34 × cheater quits (~Username@user/cheater) (Ping timeout: 268 seconds)
11:33:42 cheater_ is now known as cheater
11:41:12 ph88^ joins (~ph88@ip5b426553.dynamic.kabel-deutschland.de)
11:47:54 × gurkengl1s quits (~gurkengla@dynamic-046-114-179-023.46.114.pool.telefonica.de) (Ping timeout: 255 seconds)
11:48:00 × tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
11:48:10 × gurkenglas quits (~gurkengla@dynamic-046-114-179-023.46.114.pool.telefonica.de) (Ping timeout: 276 seconds)
11:49:24 × jmdaemon quits (~jmdaemon@user/jmdaemon) (Ping timeout: 264 seconds)
11:49:29 gurkenglas joins (~gurkengla@dynamic-089-204-153-207.89.204.153.pool.telefonica.de)
11:49:33 <mastarija> Is there a way to get around conflicting family instance declarations when using type classes?
11:49:45 gurkengl1s joins (~gurkengla@dynamic-089-204-153-207.89.204.153.pool.telefonica.de)
11:49:52 <mastarija> I'd like to "overlapp" two type calss instances, problem is, they define a type family
11:50:07 <mastarija> So there's a conflict with type families in case of overlapp
11:50:28 <L29Ah> -XFlexibleInstances -XIncoherentInstances?
11:50:52 <tomsmeding> mastarija: are you sure you need open type families?
11:51:03 <mastarija> I don't know :)
11:51:06 <tomsmeding> closed type families make this much easier, if they suffice for your purpose
11:51:10 <tomsmeding> type family F a where ...
11:51:18 <lyxia> generally overlap and type families don't mix well
11:51:29 <tomsmeding> there the clauses need to all be in that one block, but they will be tried in-order from top to bottom
11:51:49 <tomsmeding> so you don't have a coherence requirement
11:52:44 <mastarija> I have a class e.g. `class X s where type family T s; doSomething :: T s -> s;`
11:52:55 <tomsmeding> (presumably without the "family" there)
11:52:56 <mastarija> Can't really modify it though.
11:53:00 <tomsmeding> ah
11:53:02 <lyxia> you often end up with stuck types when defining the corresponding instance though, so you end up having to repeat the relevant equation as a constraint
11:53:40 <tomsmeding> if you can't modify the class then disregard my suggestion :)
11:53:52 <mastarija> So I'm stuck with this, right?
11:53:55 × crazazy quits (~user@130.89.171.62) (Ping timeout: 268 seconds)
11:54:18 <lyxia> what are the overlapping instances you want to write
11:54:18 <mastarija> I can only define a newtype wrapper or something. Or is there another way?
11:54:18 gnalzo joins (~gnalzo@2a01:e0a:498:fd50:fcc6:bb5d:489a:ce8c)
11:55:16 <mastarija> I have one general instance for variants that makes the `T (x:xs) = x`
11:55:34 <mastarija> So basically T is the type at the top level of a type level list.
11:55:36 <geekosaur> if your desired setup requires a type family that returns different types for the same parameter type then you can't do it except by making one of them a newtype
11:55:54 <mastarija> But I want to have one instance for a specific type level list.
11:56:42 <mastarija> e.g. existing instance would convert `[Int, Bool, Char]` to Int
11:57:17 <mastarija> But I want to have a specific instance for e.g. `[Char, Bool, Int]` that results in a `Maybe Float`
11:58:48 <geekosaur> I think that's doable but you can't do it with an associated type? you would have to split it out into a standalone type family
11:59:44 <mastarija> And put my case at the top, right?
11:59:50 <geekosaur> yes
12:02:01 <mastarija> geekosaur: But that would be a closed type family? I think I need open type family after all...
12:02:28 <geekosaur> no, it should be doable as an open type family, I think
12:03:03 <geekosaur> it just can't be done as an associated type family because too much of the type family machinery is "hidden" by the typeclass machinery
12:03:47 × coot quits (~coot@2a02:a310:e241:1b00:ec1a:e9df:79ac:66ba) (Quit: coot)
12:03:52 <geekosaur> although if it's a type level list I'm not sure it needs to be open; you're missing only one case as described ('[])
12:04:23 × machinedgod quits (~machinedg@d198-53-218-113.abhsia.telus.net) (Remote host closed the connection)
12:04:38 <mastarija> Ok. Maybe I've misunderstood what open and closed means. Closed means : all instances defined at the same place, Open means : I can define instance elsewhere in other modules?
12:04:55 <geekosaur> yes
12:05:27 <geekosaur> but it also depends on what you are defining. if it's type level lists then it only needs to be open if you have multiple such special cases defined in different places
12:05:43 jespada joins (~jespada@148.252.132.45)
12:05:49 <geekosaur> and you will be sad in that case
12:05:59 <mastarija> Ok. I'm sad then.
12:06:03 <mastarija> :)
12:06:25 <mastarija> For now, i only have one special case. But I might have a few more as I go.
12:06:43 <geekosaur> (because they all need to be defined before the general case and you can't do that if they're spread over multiple modules)
12:07:08 <mastarija> yeah.
12:07:23 <mastarija> Welp, time to rethink everything.
12:08:07 <geekosaur> also they all need to be visible before the general case or the general case will be used when you don't want it
12:10:17 <geekosaur> (I think there's still an incoherence bug open about that in ghc because you could have a definition with a different type somewhere that can't be checked)
12:10:31 machinedgod joins (~machinedg@d198-53-218-113.abhsia.telus.net)
12:12:35 notzmv joins (~zmv@user/notzmv)
12:19:07 kuribas joins (~user@ip-188-118-57-242.reverse.destiny.be)
12:29:02 × bitdex_ quits (~bitdex@gateway/tor-sasl/bitdex) (Quit: = "")
12:31:53 <dminuoso> Is there a sleek way to get a timeout on resource acquisition with resource-pool?
12:34:31 <dminuoso> The resource-pool is filled with mvars and uninterruptible masks, that its really not obvious whether there is a safe interface for this.
12:40:11 cheater_ joins (~Username@user/cheater)
12:41:49 × cheater quits (~Username@user/cheater) (Ping timeout: 246 seconds)
12:41:56 cheater_ is now known as cheater
12:44:31 <merijn> dminuoso: recent version has a "try" based API, maybe that lets you distinguish what you want?
12:45:31 <dminuoso> merijn: Not quite, I would like a kind of tryWithResourceTimeout :: Pool a -> Int -> (a -> IO r) -> IO (Maybe r)
12:45:43 × Cale quits (~cale@cpe80d04ade0a03-cm80d04ade0a01.cpe.net.cable.rogers.com) (Ping timeout: 268 seconds)
12:45:59 <dminuoso> I mean I could do a kind of spinning tryWithResource, but that feels like a waste
12:46:42 <dminuoso> An alternative I've pondered about was starting a canceallable timer that is aborted on the callback
12:53:05 × jespada quits (~jespada@148.252.132.45) (Read error: Connection reset by peer)
12:53:32 jespada joins (~jespada@148.252.132.45)
12:59:51 tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
13:03:36 × cheater quits (~Username@user/cheater) (Ping timeout: 268 seconds)
13:03:46 cheater joins (~Username@user/cheater)
13:08:19 × L29Ah quits (~L29Ah@wikipedia/L29Ah) (Read error: Connection reset by peer)
13:09:21 freeside joins (~mengwong@103.252.202.85)
13:10:21 eggplantade joins (~Eggplanta@2600:1700:38c5:d800:19aa:397c:29a:40e4)
13:14:51 × eggplantade quits (~Eggplanta@2600:1700:38c5:d800:19aa:397c:29a:40e4) (Ping timeout: 248 seconds)
13:15:11 × gurkenglas quits (~gurkengla@dynamic-089-204-153-207.89.204.153.pool.telefonica.de) (Ping timeout: 264 seconds)
13:15:46 coot joins (~coot@213.134.171.3)
13:15:53 × bhall quits (~brunohall@195.147.207.136) (Ping timeout: 250 seconds)
13:15:55 × gurkengl1s quits (~gurkengla@dynamic-089-204-153-207.89.204.153.pool.telefonica.de) (Ping timeout: 276 seconds)
13:16:33 bhall joins (~brunohall@195.147.207.136)
13:19:57 cheater_ joins (~Username@user/cheater)
13:20:51 thyriaen joins (~thyriaen@2a01:aea0:dd4:5328:6245:cbff:fe9f:48b1)
13:21:22 × cheater quits (~Username@user/cheater) (Ping timeout: 246 seconds)
13:21:22 cheater_ is now known as cheater
13:22:30 × thegeekinside quits (~thegeekin@189.217.80.156) (Read error: Connection reset by peer)
13:28:40 bgs joins (~bgs@212-85-160-171.dynamic.telemach.net)
13:31:46 cheater_ joins (~Username@user/cheater)
13:35:35 × cheater quits (~Username@user/cheater) (Ping timeout: 264 seconds)
13:35:45 cheater_ is now known as cheater
13:38:08 × notzmv quits (~zmv@user/notzmv) (Ping timeout: 246 seconds)
13:38:25 × jespada quits (~jespada@148.252.132.45) (Ping timeout: 250 seconds)
13:41:45 lomilomi joins (~Thunderbi@155.133.70.5)
13:42:29 × gnalzo quits (~gnalzo@2a01:e0a:498:fd50:fcc6:bb5d:489a:ce8c) (Quit: WeeChat 3.8)
13:43:46 × smallville7123 quits (~Android@2001:8004:4441:8fd2:47d8:ec3c:8ede:6ae5) (Read error: Connection reset by peer)
13:45:29 jespada joins (~jespada@148.252.132.45)
13:46:16 jero98772 joins (~jero98772@2800:484:1d80:d8ce:efcc:cbb3:7f2a:6dff)
13:49:46 L29Ah joins (~L29Ah@wikipedia/L29Ah)
13:49:59 × monoidal quits (~monoidal@2a01cb0801ce4b00d527b7fc1dd66747.ipv6.abo.wanadoo.fr) (Quit: Client closed)
13:50:34 monoidal joins (~monoidal@2a01cb0801ce4b00d527b7fc1dd66747.ipv6.abo.wanadoo.fr)
13:51:00 cheater_ joins (~Username@user/cheater)
13:51:19 <merijn> So...is there a Verse paper yet anywhere? I couldn't quickly find anything using google and SPJ's Haskell Exchange was a bit light on details
13:51:47 × ph88^ quits (~ph88@ip5b426553.dynamic.kabel-deutschland.de) (Quit: Leaving)
13:52:40 <monoidal> https://simon.peytonjones.org/verse-calculus/
13:52:55 <monoidal> I'm only aware of this draft
13:54:27 × cheater quits (~Username@user/cheater) (Ping timeout: 250 seconds)
13:54:30 smallville7123 joins (~Android@2001:8004:4440:2268:bfb9:bd3c:9c29:da7d)
13:54:35 cheater_ is now known as cheater
13:55:10 <monoidal> It's dated March23 so probably that's the newest thing there is
13:57:05 cheater_ joins (~Username@user/cheater)
13:57:59 × ddellacosta quits (~ddellacos@146.70.165.157) (Quit: WeeChat 3.8)
13:58:59 ddellacosta joins (~ddellacos@146.70.165.157)
13:59:33 × monoidal quits (~monoidal@2a01cb0801ce4b00d527b7fc1dd66747.ipv6.abo.wanadoo.fr) (Quit: Client closed)
14:00:23 <merijn> That is...some list of authors
14:00:39 × cheater quits (~Username@user/cheater) (Ping timeout: 256 seconds)
14:00:40 cheater_ is now known as cheater
14:01:40 <merijn> Well, let's see if I can fry my brain with this during the coming week :p
14:01:53 monoidal joins (~monoidal@2a01cb0801ce4b0038ab7da82b18adcb.ipv6.abo.wanadoo.fr)
14:06:41 cheater_ joins (~Username@user/cheater)
14:07:04 sidy joins (~sidy@user/sidy)
14:08:34 × smallville7123 quits (~Android@2001:8004:4440:2268:bfb9:bd3c:9c29:da7d) (Read error: Connection reset by peer)
14:08:58 × cheater quits (~Username@user/cheater) (Ping timeout: 268 seconds)
14:09:06 cheater_ is now known as cheater
14:10:41 × acidjnk quits (~acidjnk@p200300d6e715c4465904287e9255905d.dip0.t-ipconnect.de) (Ping timeout: 246 seconds)
14:17:57 thegeekinside joins (~thegeekin@189.217.80.156)
14:20:20 × vglfr quits (~vglfr@91.102.183.234) (Remote host closed the connection)
14:20:58 vglfr joins (~vglfr@91.102.183.234)
14:21:40 MacSlow joins (~MacSlow@p57bb2fc5.dip0.t-ipconnect.de)
14:21:47 <MacSlow> Greetings everybody!
14:22:42 <MacSlow> ups :)
14:24:14 use-value1 joins (~Thunderbi@2a00:23c6:8a03:2f01:75c2:a71f:beaa:29bf)
14:24:55 × vglfr quits (~vglfr@91.102.183.234) (Remote host closed the connection)
14:25:23 × use-value quits (~Thunderbi@2a00:23c6:8a03:2f01:e8b8:bba:4009:f9b7) (Ping timeout: 264 seconds)
14:25:24 use-value1 is now known as use-value
14:25:40 vglfr joins (~vglfr@91.102.183.234)
14:25:47 Sgeo joins (~Sgeo@user/sgeo)
14:26:11 × jespada quits (~jespada@148.252.132.45) (Read error: Connection reset by peer)
14:33:05 <tomsmeding> merijn: not only some list of authors, also some number of pages, phew
14:33:34 <merijn> tomsmeding: This is gonna be like that time I (tried to) read pigworker's thesis all over again...
14:33:36 × L29Ah quits (~L29Ah@wikipedia/L29Ah) (Read error: Connection reset by peer)
14:34:07 L29Ah joins (~L29Ah@wikipedia/L29Ah)
14:36:24 cheater_ joins (~Username@user/cheater)
14:36:35 <merijn> tomsmeding: tbf the paper ends at page 25
14:36:39 × cheater quits (~Username@user/cheater) (Ping timeout: 260 seconds)
14:36:40 cheater_ is now known as cheater
14:36:41 <tomsmeding> true
14:37:34 <merijn> But I'm intrigued. I understand what the ambitious goal is, I just don't understand quite yet how verse contributes to that goal :p
14:43:00 × phma quits (phma@2001:5b0:2172:d248:f993:5086:a103:30f8) (Read error: Connection reset by peer)
14:43:48 phma joins (~phma@host-67-44-208-67.hnremote.net)
14:51:36 cheater_ joins (~Username@user/cheater)
14:53:08 × kimjetwav quits (~user@2607:fea8:235e:b600:86cc:d332:aa2a:c88a) (Remote host closed the connection)
14:53:23 kimjetwav joins (~user@2607:fea8:235e:b600:904e:e9db:46f6:ca3a)
14:53:49 × cheater quits (~Username@user/cheater) (Ping timeout: 250 seconds)
14:53:51 cheater_ is now known as cheater
14:58:15 <kuribas> to me verse looks like a very interesting project on it's own, but not very fitting for the target audience, which is game developers.
14:59:24 gurkenglas joins (~gurkengla@dynamic-089-204-153-207.89.204.153.pool.telefonica.de)
15:01:17 shriekingnoise joins (~shrieking@186.137.175.87)
15:01:54 × L29Ah quits (~L29Ah@wikipedia/L29Ah) (Read error: Connection reset by peer)
15:04:25 gurkengl1s joins (~gurkengla@dynamic-089-204-153-207.89.204.153.pool.telefonica.de)
15:10:30 <merijn> kuribas: they're not targetting *current* game developers
15:11:29 <EvanR> unfortunately no one can be told what the Verse is. It must be experienced for yourself
15:11:33 <merijn> If you listen to their vision it's very clear what the goal is and games development in their current form is largely unrelated
15:12:04 <merijn> kuribas: So, I very distinctly recall being very into MUDs 20 years ago and playing with a bunch of them that allowed users to "create" their own objects/spells/whatever
15:12:24 <EvanR> lambdaMOO
15:12:30 × lortabac quits (~lortabac@2a01:e0a:541:b8f0:f353:905c:faa4:880f) (Quit: WeeChat 2.8)
15:12:44 <merijn> The problem is that generally you're limited to a handful of builtin operations (think DSL) OR "essentially evaling completely unsafe code in an unknown environment"
15:13:30 <merijn> kuribas: to me it is very clear that the "open metaverse" Sweeney imagines is very much "let any 3rd party extend and add their own kinda logic/things to a persistent world"
15:13:39 <merijn> kuribas: Which gives rise to several fundamental problems
15:14:06 <merijn> 1) how do you update/fix code in some persistent world where it might already be running somewhere outside your control?
15:14:53 <mauke> that's a solved problem! just look at how smart contracts work
15:14:58 <mauke> *crashes and burns*
15:15:01 <EvanR> you're limited to a "handful" of built-in operations when you use the normal OS. LambdaMOO's OS was just limited to what was relevant in a MUD context. With safeguards and security measures you'd expect
15:15:02 <[exa]> lol
15:15:05 <merijn> 2) how do you write code/logic to operate things on a world that may contain in any arbitrary object that you can't/don't know ahead of time and get sensible semantics beyond simply crashing (i.e. an open world assumption ala Haskell's typeclasses, but for everything)
15:15:21 <[exa]> merijn: you can run a small z80 in that world
15:15:27 <[exa]> I already saw it somewhere
15:15:28 <merijn> Now, I don't quite understand how Verse addresses these things
15:15:48 <merijn> but I understand the goal and the problems, so I'm intrigued how they think Verse will address these
15:16:34 <EvanR> the issue wouldn't be with needing security and safety measures and ownership regimes, but making that distributed instead of centralized
15:18:00 <kuribas> merijn: I don't see how pervasive logic variables come into that.
15:18:04 <EvanR> simply crashing got us this far, i.e. HTTP's 404
15:18:49 L29Ah joins (~L29Ah@wikipedia/L29Ah)
15:19:08 <merijn> EvanR: I mean, there's a million other problems with the whole vision of an open "metaverse", sure
15:19:30 <merijn> EvanR: But we can (hopefully?) agree that classical languages/game design are definitely *not suited*
15:19:41 <kuribas> merijn: like pervasive lazyness, it's nice conceptually, but a big headach for something practice.
15:19:56 <merijn> I don't have any strong opinions on whether Verse *is* suited, I'm just excited that someone is thinking about this *seriously*
15:20:05 <kuribas> merijn: and I don't see how logic variables give you these garantees.
15:20:35 <merijn> Like, look at that author list, that's some serious thinking about "how and what" Epic is paying for
15:21:01 <EvanR> if you consider classical game programming is be a highly flexible and barely scientific endeavour, it's hard to see how anything could be ill suited if it worked xD
15:21:10 <merijn> kuribas: I don't either, because I haven't read that paper yet. But I'm just assuming that the authors *do* see something in them that helps :p
15:21:29 <[exa]> hey guys do you know how many lines of scripting code is behind some past titles, say that Horizon thing
15:22:05 <[exa]> I mean the _scripting_ code, which is created and copypasted around by content developers (not necessarily programmers)
15:22:07 <merijn> I mean, something like Second Life, roblox, or Gary's Mod is probably a more relevant example
15:23:02 <EvanR> minecraft redstone circuitry is clearly a good compromise to base the future on imo
15:23:40 <merijn> actually something like "minecraft, but extensible in game with extensions by authors who don't know each other" seems like a good starting viewpoint
15:24:05 <EvanR> the MOO model did that
15:24:15 <EvanR> thanks xerox
15:24:23 <merijn> EvanR: Most MOOs were fairly limited still
15:24:31 <kuribas> skyrim is one of the most buggy environments, still everyone is modding it.
15:24:57 <merijn> kuribas: That does not seem directly relevant?
15:25:10 <xerox> EvanR: you're welcome
15:25:25 <jean-paul[m]> amateurs have an extremely high tolerance for bad technology
15:25:26 <jean-paul[m]> (is the relevance, maybe)
15:25:41 <EvanR> merijn, specifically lambdaMOO which is still running. What specifically is limited here?
15:25:42 <[exa]> kuribas: did you play cyberpunk? :D
15:26:37 <EvanR> someone built an entire MUD within it for some reason
15:26:52 <EvanR> seemed a bit out of place but why not
15:29:17 <merijn> EvanR: You're limited by the MOO language. At least, when I first looked into MOOs a lot them were rather limited
15:29:29 <EvanR> the lambdaMOO languages was basically C
15:29:32 <EvanR> language
15:30:02 <EvanR> not a functional language by any means, but through objects you could get the same benefits ish
15:30:11 <kuribas> [exa]: no, but I played the witcher.
15:30:29 <witcher> :)
15:30:42 <EvanR> it's turing complete, so I'm still not clear on the limitation you are getting at
15:31:06 <EvanR> inconvenient to use like a turing tarpit?
15:31:14 <EvanR> (it wasn't really)
15:32:18 <EvanR> I guess it would be possible implement a compiler within the system if you wanted to use a different language
15:32:39 × MacSlow quits (~MacSlow@p57bb2fc5.dip0.t-ipconnect.de) (Quit: leaving)
15:33:01 <kuribas> merijn: I just wonder how much more stable skyrim would be with a static functional scripting language.
15:33:20 <kuribas> merijn: But then it could be the 3D engine which is buggy as well.
15:33:21 <merijn> EvanR: I don't remember which MOO I looked at and also this was years ago, so :p
15:33:45 <merijn> kuribas: I mean, given that bethesda appears to just be kinda bad at software probably not much :p
15:34:12 <EvanR> then you should check out the lambdaMOO system so we can all better judge modern attempts to recreate it xD
15:34:21 × Major_Biscuit quits (~MajorBisc@c-001-030-022.client.tudelft.eduvpn.nl) (Ping timeout: 246 seconds)
15:34:38 <EvanR> it's possible for random people from the internet to log in right now and start programming stuff
15:34:39 <dminuoso> Is there something like TQueue that have something like `takeTSomething :: TSomething a -> Int -> STM [a]`?
15:35:55 gnalzo joins (~gnalzo@2a01:e0a:498:fd50:fcc6:bb5d:489a:ce8c)
15:36:10 <dminuoso> Or should I just maintain two TQueues, with a worker that continuously flushTQueues one, and pushes chunks onto a second TQueue?
15:36:12 <EvanR> isn't that just replicateM take from queue
15:37:08 <dminuoso> What do you mean by `queue`?
15:37:11 <dminuoso> And `take`?
15:38:51 Major_Biscuit joins (~MajorBisc@c-001-030-022.client.tudelft.eduvpn.nl)
15:39:01 <mauke> :t \n -> replicateM n . readTQueue
15:39:02 <lambdabot> error:
15:39:02 <lambdabot> Variable not in scope: readTQueue :: a -> m a1
15:39:07 <[exa]> kuribas: witchr is relatively bugfree. :]
15:41:24 <EvanR> SPJ works at epic games? wtf
15:41:36 <merijn> EvanR: Yes, since 2021
15:41:40 <merijn> Lennart too
15:41:42 <[exa]> anyway yeah the problem now is that the in-game scripty codebase is millions of lines, and whoever is able to ship out more bugfree contents wins
15:42:09 × anpad quits (~pandeyan@user/anpad) (Read error: Connection reset by peer)
15:42:29 <merijn> EvanR: Right, so if I make a wand that access a property/function of an object that doesn't have that implemented, what happens? If I release a version 2.0 of my wand with new/updated code, how is that dealt with?
15:42:47 <kuribas> [exa]: I heared it was bug ridden when first released.
15:43:01 <EvanR> the wand accesses a property on another object?
15:43:15 <EvanR> a property that doesn't exist yet?
15:43:16 <merijn> EvanR: Well, I want it to interact with the world, yes?
15:43:39 <merijn> but not the entire world might conform to what I expect
15:43:40 <EvanR> one convenient is to not access the property directly but use a verb on the target object
15:43:46 <EvanR> convention
15:43:51 <kuribas> I read about ECS (Entity Component System), which is used for performance, I wonder if you could make a nice safe combinator library on top of it.
15:43:56 <merijn> EvanR: And what happens if the verb doesn't work/exist?
15:44:10 <merijn> kuribas: There's already at least 1 ECS system in haskell
15:44:18 <merijn> with some amount of type safety
15:44:29 <kuribas> merijn: is it performant?
15:44:34 <merijn> dunno
15:44:43 <kuribas> and does it avoid type level hackery?
15:44:49 <merijn> kuribas: https://hackage.haskell.org/package/apecs
15:44:52 <EvanR> if you own that object or object's progenitor you could add it. If you don't you could talk to the person about it, if they say no you could create your own version of that object
15:45:02 <EvanR> which is compatible with the wand
15:45:44 <EvanR> like a "subclass" (they don't actually have classes as such in lambdaMOO though)
15:45:55 <EvanR> more like prototypal inheritance
15:45:57 <merijn> EvanR: well, that brings us back to the "how do you evolve code overtime when old versions may exist in a persistent system" issue
15:46:26 <c_wraith> merijn: aka, the reason smalltalk terrifies me
15:46:34 <EvanR> if the maintainer disappears you have no choice but to go the embrace extend and extinguish route
15:46:44 <EvanR> just like IRL
15:46:59 <merijn> EvanR: So the goal of Verse is to design a system with sensible semantics for versioning in a persistent setting and sensible "failure" (i.e. not crash) when interacting with components not conforming to your expectations
15:47:33 <EvanR> if it solves this specific problem that would revolutionize everything not just skyrim xD
15:47:54 <merijn> EvanR: And the fact that they're willing to pay, like, SPJ, Lennart, and a bunch of other people to think about it hard is itself intriguing
15:48:33 <EvanR> but I'm not surprised about the supposed context because skyrim probably gets a lot more funding than a lot of academic stuff xD
15:49:28 <merijn> EvanR: Well yes, clearly Sweeney has read a bunch cyberpunk novels where all kinds of 3rd party code interacts with eachother magically producing sane semantics in a single persistent metaverse-y thing. And I find willingness to invest how such an open thing could/would work infinitely more interesting than facebook's walled garden metaversa >.>
15:49:58 acidjnk joins (~acidjnk@p200300d6e715c49529b622cef8024c18.dip0.t-ipconnect.de)
15:50:48 <EvanR> to be clear replacing objects with one maintained by a new group would also be practical given lambdaMOOs model. After your new object is ready you can go through and clean up the instances of the old objects, since it's likely anyone can "move" them
15:51:00 <EvanR> if not, they was just bad design
15:51:03 <EvanR> that*
15:51:53 × NiceBird quits (~NiceBird@185.133.111.196) (Ping timeout: 250 seconds)
15:51:57 <EvanR> if it's less like a physical object and more like a library that exists in the ether, and everything depends on it, that's another story and I'm curious how you would fix THAT
15:52:16 <merijn> I'm skeptical whether they will pull it off with any amount of success. And I don't quite understand yet how exactly Verse is supposed to solve them. But at least it's more interesting than that 37th JS sugar language :p
15:52:59 <EvanR> *but my new concrete syntax for `function(){' in js can't be denied*
15:55:01 <EvanR> does all this play into a larger narrative about how programming languages (haskell notwithstancing) are mainly designed by 1 person for use by 1 person at a time, but in reality large programs are really written by a huge team who can't really coordinate
15:55:48 <merijn> EvanR: I mean, Scheme was also a committee effort :p
15:56:51 <EvanR> scheme is also pretty cool. Three cheers for committees!!!?
15:58:22 <merijn> The conclusion is "sitting down and thinking hard before doing something can pay off" :p
15:58:36 cheater_ joins (~Username@user/cheater)
15:58:59 × cheater quits (~Username@user/cheater) (Ping timeout: 264 seconds)
15:59:00 cheater_ is now known as cheater
15:59:20 jespada joins (~jespada@148.252.132.45)
16:00:01 <EvanR> "ECS is used for performance" (i.e. ECS stands for "just use arrays for everything") is kind of like saying linear types are for performance
16:01:07 <kuribas> EvanR: I was thinking more about data oriented design.
16:01:19 <kuribas> Which isn't the same as ECS, but works well with it.
16:01:23 <EvanR> ECS the organization principle regardless of implementation would have benefits for a huge team who can't really coordinate
16:02:34 <kuribas> But yeah, the relational model for ECS can be used outside game programming.
16:03:01 y04nn joins (~username@2a03:1b20:5:f011::aaae)
16:03:03 × lomilomi quits (~Thunderbi@155.133.70.5) (Quit: lomilomi)
16:03:07 <kuribas> Instead of having all attirbutes for an object in one place, to have a relational model, makes a lot of sense.
16:03:30 cheater_ joins (~Username@user/cheater)
16:04:34 <kuribas> And I am convinced such relational modelling leads to more flexible programs.
16:04:52 <EvanR> I'm convinced such relational modelling could benefit from an actual type system
16:04:59 <kuribas> While OO leads to rigid, hard to maintain programming.
16:05:13 <kuribas> EvanR: certainly
16:05:24 <EvanR> the default is "anything can have any attribute, or be missing that attribute, good luck"
16:05:39 <kuribas> yeah, that is error prone.
16:05:47 × cheater quits (~Username@user/cheater) (Ping timeout: 260 seconds)
16:06:36 cheater__ joins (~Username@user/cheater)
16:06:36 cheater__ is now known as cheater
16:06:38 jmdaemon joins (~jmdaemon@user/jmdaemon)
16:08:54 × werneta quits (~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net) (Ping timeout: 255 seconds)
16:09:22 × cheater_ quits (~Username@user/cheater) (Ping timeout: 246 seconds)
16:09:42 cheater__ joins (~Username@user/cheater)
16:11:02 cheater_ joins (~Username@user/cheater)
16:11:23 × cheater quits (~Username@user/cheater) (Ping timeout: 248 seconds)
16:11:26 cheater_ is now known as cheater
16:12:42 tzh joins (~tzh@c-24-21-73-154.hsd1.or.comcast.net)
16:12:52 Tuplanolla joins (~Tuplanoll@91-159-68-152.elisa-laajakaista.fi)
16:14:20 × cheater__ quits (~Username@user/cheater) (Ping timeout: 252 seconds)
16:17:34 × jespada quits (~jespada@148.252.132.45) (Quit: My MacBook has gone to sleep. ZZZzzz…)
16:20:07 × coot quits (~coot@213.134.171.3) (Quit: coot)
16:22:20 cheater_ joins (~Username@user/cheater)
16:22:51 × merijn quits (~merijn@86-86-29-250.fixed.kpn.net) (Ping timeout: 255 seconds)
16:23:22 × cheater quits (~Username@user/cheater) (Ping timeout: 246 seconds)
16:24:31 cheater__ joins (~Username@user/cheater)
16:24:32 cheater__ is now known as cheater
16:26:14 cheater__ joins (~Username@user/cheater)
16:27:13 × jmdaemon quits (~jmdaemon@user/jmdaemon) (Ping timeout: 246 seconds)
16:27:47 × cheater_ quits (~Username@user/cheater) (Ping timeout: 264 seconds)
16:28:59 × cheater quits (~Username@user/cheater) (Ping timeout: 264 seconds)
16:29:00 cheater__ is now known as cheater
16:29:33 eggplantade joins (~Eggplanta@2600:1700:38c5:d800:19aa:397c:29a:40e4)
16:32:55 econo joins (uid147250@user/econo)
16:33:28 stackdroid18 joins (14094@de1.hashbang.sh)
16:44:04 × tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
16:46:07 <dminuoso> I have a Haskell binary that consumes 100% cpu time. Trying to debug with gdb right now yields not much information: https://gist.github.com/dminuoso/8f72ce7c27b6585cb9488fb7ccc603bc
16:46:13 <dminuoso> Why am I not seeing any useful stack traces here?
16:46:59 × cheater quits (~Username@user/cheater) (Ping timeout: 265 seconds)
16:47:18 <dminuoso> Or here is the output in a better form: https://gist.github.com/dminuoso/9785a1799216d8d376cf6f4d7d56795e
16:47:19 cheater joins (~Username@user/cheater)
16:48:06 <mauke> because that's the C stack
16:48:16 <mauke> which apparently only contains bits of the runtime system
16:48:36 <sm> you need a dwarf but have not uttered the right incantation ?
16:48:43 <dminuoso> I guess so
16:49:04 merijn joins (~merijn@86-86-29-250.fixed.kpn.net)
16:49:43 <dminuoso> Im passing -g3 to the executable
16:49:46 <mauke> I'm not sure how to instrument haskell code so it can provide usable traces of what it's doing
16:49:47 <dminuoso> I thought this would be enough
16:51:50 <mauke> it might be a better idea to build the code with profiling support
16:52:05 <mauke> the part that consumes 99% of the runtime is the one with the busy loop
16:52:34 <dminuoso> Mmm I guess that works too
16:52:42 <dminuoso> Though I would really like to be able to gdb this thing.
16:54:24 <sm> are you seeing similar results to what's shown in https://downloads.haskell.org/ghc/latest/docs/users_guide/debug-info.html ?
16:54:36 <dminuoso> Not at all
16:54:39 tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
16:55:00 coot joins (~coot@213.134.171.3)
17:00:30 enoq joins (~enoq@2a05:1141:1f5:5600:b9c9:721a:599:bfe7)
17:01:39 × coot quits (~coot@213.134.171.3) (Quit: coot)
17:03:00 coot joins (~coot@2a02:a310:e241:1b00:ec1a:e9df:79ac:66ba)
17:06:42 jmdaemon joins (~jmdaemon@user/jmdaemon)
17:07:17 × merijn quits (~merijn@86-86-29-250.fixed.kpn.net) (Ping timeout: 250 seconds)
17:07:41 <kuribas> EvanR: does the haskell ECR system use a typed approach?
17:07:56 <kuribas> EvanR: for attributes I mean?
17:08:21 <EvanR> ECS?
17:08:36 <kuribas> yeah
17:09:45 <EvanR> I've never looked into those
17:11:01 <EvanR> https://github.com/jonascarpay/apecs/blob/master/examples/Shmup.md
17:11:51 cheater_ joins (~Username@user/cheater)
17:13:16 <mastarija> So, let's say I have a list like this one: [(a, b)]
17:13:27 × cheater quits (~Username@user/cheater) (Ping timeout: 260 seconds)
17:13:34 <mastarija> And a function `f :: a -> s (f b)`
17:13:36 cheater_ is now known as cheater
17:13:48 <mastarija> Where s and f are a monad / applicative
17:14:17 <mastarija> is there an elegant way to get `s (f [(a, b)]`?
17:14:46 <mastarija> I can do `S [( f a, b)]` with `mapMOf`
17:14:56 <mastarija> From the lens package.
17:15:02 <mauke> pure . pure
17:15:15 <mastarija> But I'm not sure how to sequence `f` out of the first element of a list.
17:16:07 <kuribas> mastarija: what happens to the 'b' in the first list?
17:16:14 <mastarija> something like `mapMOf (traverse . _1) f myList` and then sequence again?
17:16:33 <mastarija> kuribas: it's left untouched.
17:16:50 <mauke> :t pure . pure :: (Monad s, Monad f) => [(a, b)] -> s (f [(a, b)])
17:16:51 <lambdabot> (Monad s, Monad f) => [(a, b)] -> s (f [(a, b)])
17:16:59 <kuribas> mastarija: then why do you generate a new 'b'?
17:17:22 <mastarija> I don't.
17:17:36 <EvanR> good one mauke
17:17:43 <mauke> ?
17:18:02 <mastarija> I just want to wrapp it in the `f` after I apply `f :: a -> `s (f a)``
17:18:08 slack1256 joins (~slack1256@186.11.43.166)
17:18:17 <mauke> where did you get that other f function?
17:18:26 <mastarija> I've defined it.
17:18:36 <mauke> you can't define two functions that are both called f
17:18:46 <kuribas> mastarija: you had "a -> s (f b)"
17:18:47 <mastarija> They are the same function.
17:18:57 <mauke> they have different types; they can't be the same function
17:19:07 <mastarija> yeah, wrong signature
17:19:09 <mastarija> my bad
17:19:09 <kuribas> :t first
17:19:10 <lambdabot> Arrow a => a b c -> a (b, d) (c, d)
17:19:13 <mastarija> it's `a`
17:20:19 <mastarija> Maybe something like this? `theList & mapMOf (traverse . _1) f & fmap (sequenceAOf (traverse . _1))`
17:21:05 merijn joins (~merijn@86-86-29-250.fixed.kpn.net)
17:21:36 <mauke> :t mapM (\(ma, b) -> flip (,) b <$> ma)
17:21:37 <lambdabot> (Traversable t, Monad m) => t (m a, b) -> m (t (a, b))
17:22:01 <mauke> :t traverse (\(ma, b) -> flip (,) b <$> ma)
17:22:02 <lambdabot> (Traversable t, Applicative f) => t (f a, b) -> f (t (a, b))
17:22:20 <kuribas> :t \f -> getCompose . ((traverse . _1) (Compose . f))
17:22:21 <lambdabot> error:
17:22:21 <lambdabot> Variable not in scope: getCompose :: f0 (t b0) -> c
17:22:22 <lambdabot> error:
17:22:29 <kuribas> :t \f -> runCompose . ((traverse . _1) (Compose . f))
17:22:30 <lambdabot> error:
17:22:30 <lambdabot> Variable not in scope: runCompose :: f0 (t b0) -> c
17:22:30 <lambdabot> error:
17:22:55 <mastarija> Can we import stuff from hackage with lambdabot? :)
17:23:55 × gurkenglas quits (~gurkengla@dynamic-089-204-153-207.89.204.153.pool.telefonica.de) (Ping timeout: 246 seconds)
17:24:27 × gurkengl1s quits (~gurkengla@dynamic-089-204-153-207.89.204.153.pool.telefonica.de) (Ping timeout: 268 seconds)
17:25:13 × mbuf quits (~Shakthi@49.207.178.186) (Quit: Leaving)
17:25:35 × merijn quits (~merijn@86-86-29-250.fixed.kpn.net) (Ping timeout: 246 seconds)
17:26:39 <kuribas> f -> getCompose . ((traverse . _1) (Compose . f)) :: forall {k1} {t :: * -> *} {f :: k1 -> *} {g :: * -> k1} {a1} {b1} {a2} {b2}. (Traversable t, Applicative (Compose f g), Field1 a1 b1 a2 b2) => (a2 -> f (g b2)) -> t a1 -> f (g (t b1))
17:26:39 <kuribas>
17:27:13 <kuribas> that should work :)
17:27:16 gurkenglas joins (~gurkengla@dynamic-089-204-153-207.89.204.153.pool.telefonica.de)
17:27:17 gurkengl1s joins (~gurkengla@dynamic-089-204-153-207.89.204.153.pool.telefonica.de)
17:28:07 <dminuoso> mastarija: the type of f confuses me.
17:28:18 <mastarija> It's some applicative.
17:28:24 <mastarija> And `s` also.
17:28:28 <dminuoso> Sure, lets pick upper letters for concrete types, perh aps.
17:29:03 <dminuoso> So say `f :: forall a b. a -> S (F b)` with `instance Monad S` and `instance Monad F` right?
17:29:07 <mastarija> ok, f :: a -> (State Int (Const a))
17:29:16 <mastarija> or what you've said :)
17:29:25 <dminuoso> Well, Im a bit curious about quantification here.
17:29:32 × codaraxis__ quits (~codaraxis@user/codaraxis) (Quit: Leaving)
17:29:37 <mastarija> There's only 'a'
17:29:44 <mastarija> It was a mistake in my first example
17:30:01 <mastarija> `b` is just in the second element in the list.
17:30:03 <dminuoso> Okay, that resolves the mystery then.
17:30:11 <dminuoso> So `f :: forall a. a -> S (F a)`?
17:30:12 × nschoe quits (~q@141.101.51.197) (Ping timeout: 264 seconds)
17:30:17 <mastarija> I yes
17:30:38 × monoidal quits (~monoidal@2a01cb0801ce4b0038ab7da82b18adcb.ipv6.abo.wanadoo.fr) (Quit: Client closed)
17:30:58 <mastarija> Sorry for the confusion :)
17:31:05 <dminuoso> kuribas last answer is indeed spot on then.
17:31:53 <mastarija> hm...
17:32:21 <dminuoso> The relevant observation here is that unlike Monads, the composition of two applicatives gives another applicative.
17:32:27 <mastarija> That's a bit too advanced for me xD
17:32:40 <dminuoso> mastarija: Okay lets make it a bit simpler
17:33:19 × kuribas quits (~user@ip-188-118-57-242.reverse.destiny.be) (Ping timeout: 276 seconds)
17:33:41 <dminuoso> instance (Alternative f, Applicative g) => Alternative (f :.: g)
17:33:55 <dminuoso> This says: the composition of two applicatives gives rise to another applicative.
17:34:00 <mastarija> Aha, so `Compose` composes two nested Applicatives into 1?
17:34:04 <dminuoso> Yes
17:34:10 <dminuoso> its just a newtype wrapper
17:34:21 <dminuoso> that gives you access to instances for the "type level composition" of two things.
17:34:33 <dminuoso> 18:33:40 dminuoso | instance (Alternative f, Applicative g) => Alternative (f :.: g)
17:34:41 <dminuoso> Think of Compose as just a synonym for :.:
17:34:59 <dminuoso> I think the version from GHC.Generics reads *much* nicer and is more obvious, but in practice you only see Compose around.
17:35:19 <mastarija> Would my previous solution work?
17:35:29 <mastarija> `theList & mapMOf (traverse . _1) f & fmap (sequenceAOf (traverse . _1))`
17:35:42 <mastarija> I'm assuming it would traverse twice
17:36:05 <dminuoso> Ohh sorry I miscopied above
17:36:09 <dminuoso> (Applicative f, Applicative g) => Applicative (f :.: g)\
17:36:10 <mastarija> while kuribas's solution only traverses once.
17:36:19 <dminuoso> Well, not really
17:36:51 <dminuoso> It just hides this behind the instance (Applicative f, Applicative g) => Applicative (Compose f g)
17:37:10 <mastarija> But it still traverses twice?
17:37:13 <dminuoso> Compose f <*> Compose x = Compose (liftA2 (<*>) f x)
17:37:16 <dminuoso> Well sort of
17:38:09 <dminuoso> mastarija: Oh let me change my answer. Yes, kuribas solution traverses only once.
17:38:44 <dminuoso> The real trick in kuribas answer likes in how lens really works underneath
17:38:54 <dminuoso> Compose is only the simpler part of it.
17:39:00 <dminuoso> % :t _1
17:39:01 <yahb2> <interactive>:1:1: error: ; Found hole: _1 :: p ; Where: ‘p’ is a rigid type variable bound by ; the inferred type of it :: p ; at <interactive>:1:1 ; Or perha...
17:39:09 <dminuoso> :t _1
17:39:10 <lambdabot> (Field1 s t a b, Functor f) => (a -> f b) -> s -> f t
17:40:04 <dminuoso> This makes direct knowledge of how van Laarhoven lenses work internally (in one view you could think of them as "partial traversal" perhaps)
17:40:27 <dminuoso> So you have a kind of nested traversal, but not a complete one
17:40:31 <dminuoso> c.f.:
17:41:10 <dminuoso> % import Data.Foldable
17:41:10 <yahb2> <no output>
17:41:14 <dminuoso> % (traverse_ . traverse_) putChar ["foo", "bar"]
17:41:15 <yahb2> foobar
17:41:24 <dminuoso> mastarija: See how you can do a kind of nested traverse this way?
17:41:25 <mastarija> Aha, so `_1` already has some trickery for handling traversals over only that element
17:41:56 <dminuoso> mastarija: as a very rough intuition think of `_1` as really something like `traverse` except it only goes over *some* part of the structure, while rebuilding the other part with the original values
17:42:14 <mastarija> Yeah. I get it. I think :)
17:42:14 <dminuoso> if the this thing targets only one element its called a lens
17:42:21 <dminuoso> if it targets multiple things lens calls it a traversal
17:43:07 <dminuoso> mastarija: Since we're at this point, you might find this interesting now:
17:44:07 <dminuoso> view :: Lens' s a -> s -> a view l s = getConst (l Const s)
17:44:35 cheater_ joins (~Username@user/cheater)
17:45:01 <dminuoso> mastarija: Note how `view` sort of "traverses (which ends up touching just one element) over s (the data) with the function `Const`"
17:45:22 <mastarija> Yes.
17:45:25 <mastarija> Noted :)
17:45:38 × cheater quits (~Username@user/cheater) (Ping timeout: 252 seconds)
17:45:45 <dminuoso> Thats how view extracts the thing, because if you then execute that effect, you get that single element that is stuffed into Const back.
17:46:02 <dminuoso> Similarly
17:46:17 <dminuoso> set l a s = runIdentity (l (const (Identity a)) s)
17:46:17 <mastarija> Yeah. I've gone through that already, so I kind of get it.
17:46:36 <dminuoso> Anyway, little fun excursion
17:47:00 <dminuoso> mastarija: and thats why composing optics works with . just like that.
17:47:05 <mastarija> Yeah. I was also surprised when I've noticed that `traverse` has lenslike signature
17:47:10 <dminuoso> `traverse . traverse` traverses over a nested container
17:47:32 <dminuoso> mastarija: thats why we dont have some general `traverseEach`, because thats `traverse` already precisely.
17:47:43 <dminuoso> % (traverse_ . traverse_) putChar ["foo", "bar"]
17:47:44 <yahb2> foobar
17:47:54 <dminuoso> Similarly
17:48:09 <dminuoso> > toListOf (traverse . traverse) ["foo", "bar"]
17:48:11 <lambdabot> "foobar"
17:48:30 <dminuoso> Hence:
17:49:03 <dminuoso> (traverse . _1) gives you a "traversal like thing" that will map values to effects over each element, then inside each first field.
17:49:10 <dminuoso> you can just readily execute that
17:49:17 <dminuoso> next observation is:
17:49:20 × cheater_ quits (~Username@user/cheater) (Ping timeout: 265 seconds)
17:50:10 <dminuoso> % :t traverse
17:50:10 <yahb2> traverse ; :: (Traversable t, Applicative f) => (a -> f b) -> t a -> f (t b)
17:50:15 <dminuoso> :t Lens
17:50:16 <lambdabot> Lens s t a b -> ReifiedLens s t a b
17:50:22 <dminuoso> type Lens s t a b = forall f . Functor f => (a -> f b) -> s -> f t
17:50:36 <dminuoso> mastarija: ^- note the only difference here is that a Lens is "just Functor", while a traverse has an applicative
17:50:47 <dminuoso> :t traverse . _1
17:50:48 <lambdabot> (Traversable t, Applicative f, Field1 a1 b1 a2 b2) => (a2 -> f b2) -> t a1 -> f (t b1)
17:50:52 <mastarija> Wait, how do I use this again?: `getCompose . ((traverse . _1) (Compose . f))`, I don't have to pass this to `mapMOf` or something? It's something I apply to the raw value, right?
17:51:00 cheater_ joins (~Username@user/cheater)
17:51:01 cheater_ is now known as cheater
17:51:05 <dminuoso> getting to that in a second
17:51:09 <mastarija> What's a `ReifiedLens`?
17:51:14 <dminuoso> Ignore that type
17:51:16 <mastarija> k
17:51:17 <dminuoso> type Lens s t a b = forall f . Functor f => (a -> f b) -> s -> f t
17:51:22 <dminuoso> thats the one I want you to think about
17:51:44 <dminuoso> the only difference between `Lens` and `Traversal` is that a Traversal has an Applicative instead of Functor constraint
17:52:14 <dminuoso> So if you compose a lens with a traversal, the common join point in the hierarchy here is still applicative, so the composition of `traverse . _1` is a traversable
17:52:28 <dminuoso> which is able to map and collect applicative effects
17:52:30 <dminuoso> Just like:
17:52:33 <dminuoso> % (traverse_ . traverse_) putChar ["foo", "bar"]
17:52:34 <yahb2> foobar
17:52:36 <dminuoso> or
17:52:38 <dminuoso> > toListOf (traverse . traverse) ["foo", "bar"]
17:52:40 <lambdabot> "foobar"
17:52:50 × pavonia quits (~user@user/siracusa) (Quit: Bye!)
17:52:56 <dminuoso> % (traverse_ . _1) putChar [('a', 1), ('b', 2)]
17:52:56 <yahb2> <interactive>:16:14: error: ; • Found hole: _1 :: (Char -> IO ()) -> (Char, Integer) -> f b0 ; Where: ‘b0’ is an ambiguous type variable ; ‘f’ is a rigid type variable bound ...
17:53:03 <dminuoso> > (traverse_ . _1) putChar [('a', 1), ('b', 2)]
17:53:05 <lambdabot> <IO ()>
17:53:13 <dminuoso> Oh well that should print `ab`
17:53:21 <dminuoso> > toListOf traverse_ . _1) [('a', 1), ('b', 2)]
17:53:23 <lambdabot> <hint>:1:24: error: parse error on input ‘)’
17:53:27 <dminuoso> > toListOf (traverse_ . _1) [('a', 1), ('b', 2)]
17:53:29 <dminuoso> mastarija: so far so good?
17:53:30 <lambdabot> error:
17:53:30 <lambdabot> • Couldn't match type ‘()’ with ‘t0 a0’
17:53:30 <lambdabot> Expected type: Getting (Endo [b]) () b
17:53:35 <dminuoso> > toListOf (traverse . _1) [('a', 1), ('b', 2)]
17:53:37 <lambdabot> "ab"
17:53:49 <mastarija> Well, I'm reading. Not sure if I understand everyhing :)
17:53:49 <dminuoso> mastarija: So here comes everything together
17:54:03 <dminuoso> `(traverse . _1)` gives you something
17:54:16 <dminuoso> like "traverse" that will map applicative effects to every first field of every element of some structure
17:54:21 <dminuoso> you have a function
17:54:38 <dminuoso> `f :: a -> S (F b)` for which both S and F have applicat ive
17:55:26 <dminuoso> We have `instance (Applicative f, Applicative g) => Applicative (Compose f g)` which says if you have something like Q (R a) for which both Q and R have an applicative instance, then `Compose Q R` will give you an applicative instance too
17:55:39 <dminuoso> So using the above "traverse" like thing we can do
17:55:49 <dminuoso> (traverse . _1) (Compose . f)
17:56:19 <dminuoso> The `Compose` will just select the "applicative instance of the composition of S and T"
17:56:49 <dminuoso> And then at the end you must toss that "useless" compose wrapper away (whose only purpose was the instance selection)
17:57:00 <dminuoso> getCompose . ((traverse . _1) (Compose . f))
17:58:35 × y04nn quits (~username@2a03:1b20:5:f011::aaae) (Ping timeout: 248 seconds)
17:58:36 × ubert1 quits (~Thunderbi@2a02:8109:abc0:6434:e47:2f53:4085:22b0) (Remote host closed the connection)
17:59:19 <mastarija> Well, that was interesting. Now I'll try to apply it :)
18:02:03 × machinedgod quits (~machinedg@d198-53-218-113.abhsia.telus.net) (Ping timeout: 256 seconds)
18:04:27 × Major_Biscuit quits (~MajorBisc@c-001-030-022.client.tudelft.eduvpn.nl) (Quit: WeeChat 3.6)
18:08:05 zmt01 joins (~zmt00@user/zmt00)
18:11:19 levinlevinlevin joins (~levin@ip5f584d02.dynamic.kabel-deutschland.de)
18:11:19 × zmt00 quits (~zmt00@user/zmt00) (Ping timeout: 260 seconds)
18:14:42 werneta joins (~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net)
18:14:46 cheater_ joins (~Username@user/cheater)
18:14:58 × bhall quits (~brunohall@195.147.207.136) (Ping timeout: 252 seconds)
18:17:23 × cheater quits (~Username@user/cheater) (Ping timeout: 260 seconds)
18:18:53 cheater joins (~Username@user/cheater)
18:19:13 × cheater_ quits (~Username@user/cheater) (Ping timeout: 250 seconds)
18:21:42 cheater_ joins (~Username@user/cheater)
18:23:44 × cheater quits (~Username@user/cheater) (Ping timeout: 246 seconds)
18:24:01 × shriekingnoise quits (~shrieking@186.137.175.87) (Ping timeout: 276 seconds)
18:26:01 shriekingnoise joins (~shrieking@186.137.175.87)
18:27:12 × cheater_ quits (~Username@user/cheater) (Ping timeout: 264 seconds)
18:29:37 × zmt01 quits (~zmt00@user/zmt00) (Ping timeout: 250 seconds)
18:41:10 cheater_ joins (~Username@user/cheater)
18:41:11 cheater_ is now known as cheater
18:42:27 TheMatten[m] joins (~thematten@2001:470:69fc:105::1:5ba1)
18:53:52 bhall joins (~brunohall@195.147.207.136)
18:55:04 szkl joins (uid110435@id-110435.uxbridge.irccloud.com)
18:57:01 × MironZ quits (~MironZ@nat-infra.ehlab.uk) (Ping timeout: 256 seconds)
19:00:37 cheater_ joins (~Username@user/cheater)
19:01:41 × cheater quits (~Username@user/cheater) (Ping timeout: 250 seconds)
19:01:51 cheater_ is now known as cheater
19:02:23 wootehfoot joins (~wootehfoo@user/wootehfoot)
19:03:40 × vglfr quits (~vglfr@91.102.183.234) (Ping timeout: 276 seconds)
19:06:43 <sm> is there any stackage resolver or huge list of extra-deps to let stack users try building with ghc 9.6 ?
19:06:48 crazazy joins (~user@130.89.171.62)
19:08:06 caryhartline joins (~caryhartl@2603-8080-6a0e-8d88-cde1-108a-3c91-10d3.res6.spectrum.com)
19:08:45 <tomsmeding> most packages on hackage aren't even up to date yet
19:09:05 <tomsmeding> s/up to date/having a loose enough upper bound on base/
19:09:23 <sm> I'm allowing it to ignore bounds
19:09:39 sm thought things might be a bit further along this time what with all the prereleases
19:10:06 <tomsmeding> stuff like https://hackage.haskell.org/package/these having base<4.18 blocks a _lot_ of stuff
19:10:36 <sm> I'm ignoring bounds.. if I could even get to a compilation error that would be pretty good
19:11:30 <sm> currently troubleshooting these "PKG dependency cycle" errors with my big extra-deps list
19:11:59 tomsmeding . o O ( cabal build --allow-newer=base )
19:12:39 × coot quits (~coot@2a02:a310:e241:1b00:ec1a:e9df:79ac:66ba) (Quit: coot)
19:13:45 <sm> ah yes cabal would make this easier of course. Still, this is a useful exercise for me
19:17:19 talismanick joins (~talismani@c-73-66-168-202.hsd1.ca.comcast.net)
19:18:12 cheater_ joins (~Username@user/cheater)
19:19:08 thyriaen_ joins (~thyriaen@144.208.201.160)
19:19:44 cheater__ joins (~Username@user/cheater)
19:21:10 × cheater quits (~Username@user/cheater) (Ping timeout: 246 seconds)
19:21:12 × thyriaen quits (~thyriaen@2a01:aea0:dd4:5328:6245:cbff:fe9f:48b1) (Ping timeout: 264 seconds)
19:21:19 cheater__ is now known as cheater
19:21:37 <sm> ok, done. cabal time :)
19:23:15 × cheater_ quits (~Username@user/cheater) (Ping timeout: 246 seconds)
19:25:57 <sm> nice! cabal build -w ghc-9.6.1 --allow-newer gets as far as building my package
19:29:01 × ph88 quits (~ph88@ip5b426553.dynamic.kabel-deutschland.de) (Ping timeout: 276 seconds)
19:29:28 × levinlevinlevin quits (~levin@ip5f584d02.dynamic.kabel-deutschland.de) (Quit: leaving)
19:32:57 ft joins (~ft@p3e9bc443.dip0.t-ipconnect.de)
19:34:19 <mastarija> 9.6 has the JavaScript backend, right?
19:34:31 <geekosaur> yes
19:35:16 × cheater quits (~Username@user/cheater) (Ping timeout: 252 seconds)
19:37:16 × hugo- quits (znc@verdigris.lysator.liu.se) (Ping timeout: 246 seconds)
19:38:29 <sm> if you make a custom build of it
19:40:45 cheater joins (~Username@user/cheater)
19:42:03 merijn joins (~merijn@86-86-29-250.fixed.kpn.net)
19:45:45 MironZ joins (~MironZ@nat-infra.ehlab.uk)
19:47:34 hugo- joins (znc@verdigris.lysator.liu.se)
19:47:48 cheater_ joins (~Username@user/cheater)
19:49:45 MironZ9 joins (~MironZ@nat-infra.ehlab.uk)
19:50:10 × cheater quits (~Username@user/cheater) (Ping timeout: 265 seconds)
19:50:11 cheater__ joins (~Username@user/cheater)
19:50:18 cheater__ is now known as cheater
19:51:22 cheater__ joins (~Username@user/cheater)
19:51:37 × MironZ quits (~MironZ@nat-infra.ehlab.uk) (Ping timeout: 265 seconds)
19:51:38 MironZ9 is now known as MironZ
19:53:33 × cheater_ quits (~Username@user/cheater) (Ping timeout: 265 seconds)
19:54:55 × cheater quits (~Username@user/cheater) (Ping timeout: 260 seconds)
19:54:58 cheater__ is now known as cheater
19:57:23 × jmdaemon quits (~jmdaemon@user/jmdaemon) (Ping timeout: 268 seconds)
20:02:59 <sm> is there a way in ghci to see which module has reexported another module's symbol ?
20:05:24 × eggplantade quits (~Eggplanta@2600:1700:38c5:d800:19aa:397c:29a:40e4) (Remote host closed the connection)
20:06:31 <sm> in a module I have void in scope, from Data.Functor, and I can't see how Data.Functor is in scope
20:07:35 <int-e> this is silly... what does :t vpid say?
20:10:12 cheater_ joins (~Username@user/cheater)
20:10:19 <sm> (after entering the module like so:)
20:10:20 <sm> ghci> :m +*Hledger.Data.Balancing
20:10:20 <sm> ghci> :t void
20:10:20 <sm> void :: Functor f => f a -> f ()
20:10:26 <int-e> sm: http://paste.debian.net/1274030/
20:10:31 <int-e> (no, you have to make a typo)
20:12:39 <sm> int-e: oh, clever! "Perhaps use ‘void’ (imported from Control.Monad.Reader)"
20:12:39 <sm> That import fooled me because it's "as R".. but not qualified
20:12:40 <sm> thanks!
20:13:23 × cheater quits (~Username@user/cheater) (Ping timeout: 264 seconds)
20:13:27 cheater_ is now known as cheater
20:14:39 kimjetwav parts (~user@2607:fea8:235e:b600:904e:e9db:46f6:ca3a) (ERC 5.4.1 (IRC client for GNU Emacs 29.0.60))
20:16:59 × merijn quits (~merijn@86-86-29-250.fixed.kpn.net) (Ping timeout: 264 seconds)
20:20:01 dsrt^ joins (~dsrt@c-24-30-76-89.hsd1.ga.comcast.net)
20:20:01 opticblast joins (~Thunderbi@172.58.84.141)
20:22:19 nschoe joins (~q@2a01:e0a:8e:a190:c215:d296:d03:1e62)
20:22:22 × nschoe quits (~q@2a01:e0a:8e:a190:c215:d296:d03:1e62) (Client Quit)
20:24:56 × azimut quits (~azimut@gateway/tor-sasl/azimut) (Ping timeout: 255 seconds)
20:30:04 × bhall quits (~brunohall@195.147.207.136) (Ping timeout: 268 seconds)
20:31:38 a_coll joins (~acoll@45.92.120.189)
20:32:41 kenran joins (~user@user/kenran)
20:33:29 coot joins (~coot@2a02:a310:e241:1b00:ec1a:e9df:79ac:66ba)
20:34:31 pavonia joins (~user@user/siracusa)
20:36:40 coot_ joins (~coot@2a02:a310:e241:1b00:ec1a:e9df:79ac:66ba)
20:39:57 × coot quits (~coot@2a02:a310:e241:1b00:ec1a:e9df:79ac:66ba) (Ping timeout: 265 seconds)
20:39:57 coot_ is now known as coot
20:51:28 × opticblast quits (~Thunderbi@172.58.84.141) (Ping timeout: 246 seconds)
20:52:02 opticblast joins (~Thunderbi@172.58.84.141)
20:53:12 × justsomeguy quits (~justsomeg@user/justsomeguy) (Quit: WeeChat 3.6)
20:55:04 <mastarija> Is there perhaps an extension that allows us to define type synonym in the `where` block?
20:55:27 <geekosaur> nope
20:55:35 <mastarija> I ges we can get by with (x ~ Something), but that's annoying.
20:55:38 <Jade[m]1> why would you want that?
20:55:39 <mastarija> *guess
20:55:42 × use-value quits (~Thunderbi@2a00:23c6:8a03:2f01:75c2:a71f:beaa:29bf) (Remote host closed the connection)
20:56:00 <mastarija> Jade[m]1: sometimes I have to write some long types in the where block definitions
20:56:00 use-value joins (~Thunderbi@2a00:23c6:8a03:2f01:75c2:a71f:beaa:29bf)
20:56:21 <mastarija> And I'd like to not write them multiple times
20:57:22 <Jade[m]1> mh
20:59:20 <EvanR> local type definitions would be cool
20:59:50 <EvanR> though poor man can get by just using another module
21:00:35 <Jade[m]1> Would there be a use-case for local ADTs?
21:00:56 jmdaemon joins (~jmdaemon@user/jmdaemon)
21:00:56 <EvanR> totally
21:01:04 × tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Read error: Connection reset by peer)
21:01:07 <ddellacosta> I just end up defining type aliases above functions when I want a kind of localized type alias, an even more poor approach lol
21:01:41 <EvanR> local "data" type would be even cooler
21:02:01 <Jade[m]1> that's what I meant with a local ADT
21:02:06 <EvanR> yeah
21:02:15 <Jade[m]1> I never know what to call "data" haha
21:02:19 <ddellacosta> I guess it'd have to be consumed completely inside of the local scope, which is interesting
21:02:32 <EvanR> when your algorithm wants to use data for its own purposes without having to tell everyone about it and they don't care
21:02:41 × wootehfoot quits (~wootehfoo@user/wootehfoot) (Read error: Connection reset by peer)
21:03:00 <EvanR> of course, you can use another module and not export it. But it still kind of feels like you have to worry about not stepping on anyone's feet
21:03:16 <EvanR> and if this is 1 function, that's a whole module for 1 function
21:03:27 <EvanR> which is probably typical in haskell generally
21:03:37 × _ht quits (~Thunderbi@28-52-174-82.ftth.glasoperator.nl) (Quit: _ht)
21:03:55 <Jade[m]1> EvanR: do you have an example in mind?
21:05:54 eggplantade joins (~Eggplanta@2600:1700:38c5:d800:19aa:397c:29a:40e4)
21:06:22 <mastarija> Agda has local type definitions
21:06:29 <mastarija> IIRC
21:08:46 × stackdroid18 quits (14094@de1.hashbang.sh) (Quit: hasta la vista... tchau!)
21:09:19 × mncheck quits (~mncheck@193.224.205.254) (Ping timeout: 246 seconds)
21:10:14 × eggplantade quits (~Eggplanta@2600:1700:38c5:d800:19aa:397c:29a:40e4) (Ping timeout: 252 seconds)
21:10:15 kimjetwav joins (~user@2607:fea8:235e:b600:4cf2:6784:6712:f6ef)
21:13:43 × takuan quits (~takuan@178-116-218-225.access.telenet.be) (Remote host closed the connection)
21:16:44 <EvanR> Jade[m]1, if you've ever tried to write an algorithm and said damn I need to define a sum type to keep these steps straight (at the expense of possibly using more time and memory)
21:18:26 <EvanR> (the reverse of scott encoding or church encoding a data type as higher order functions)
21:18:50 × caryhartline quits (~caryhartl@2603-8080-6a0e-8d88-cde1-108a-3c91-10d3.res6.spectrum.com) (Quit: caryhartline)
21:20:11 × gnalzo quits (~gnalzo@2a01:e0a:498:fd50:fcc6:bb5d:489a:ce8c) (Quit: WeeChat 3.8)
21:29:11 × crazazy quits (~user@130.89.171.62) (Ping timeout: 246 seconds)
21:30:02 <Nosrep> any idea why basicunsafeindexm from vector is eating 10% of my programs runtime and allocations?
21:30:22 <Nosrep> for context im allocating a couple big vectors (200k elements) and indexing them a lot but not actually modifying the vector
21:34:59 machinedgod joins (~machinedg@d198-53-218-113.abhsia.telus.net)
21:36:14 × talismanick quits (~talismani@c-73-66-168-202.hsd1.ca.comcast.net) (Ping timeout: 246 seconds)
21:41:04 × trev quits (~trev@user/trev) (Remote host closed the connection)
21:41:56 zmt00 joins (~zmt00@user/zmt00)
21:44:09 × michalz quits (~michalz@185.246.207.215) (Remote host closed the connection)
21:46:10 × jonathanx quits (~jonathan@h-176-10-144-60.NA.cust.bahnhof.se) (Remote host closed the connection)
21:56:46 ph88 joins (~ph88@91.66.101.83)
21:57:37 vglfr joins (~vglfr@37.73.89.236)
21:59:06 × biberu quits (~biberu@user/biberu) (Read error: Connection reset by peer)
22:00:27 × coot quits (~coot@2a02:a310:e241:1b00:ec1a:e9df:79ac:66ba) (Quit: coot)
22:00:28 × bgs quits (~bgs@212-85-160-171.dynamic.telemach.net) (Remote host closed the connection)
22:01:28 × kenran quits (~user@user/kenran) (Remote host closed the connection)
22:10:07 biberu joins (~biberu@user/biberu)
22:13:05 merijn joins (~merijn@86-86-29-250.fixed.kpn.net)
22:16:23 × vglfr quits (~vglfr@37.73.89.236) (Remote host closed the connection)
22:17:08 vglfr joins (~vglfr@37.73.89.236)
22:19:32 emmanuelux joins (~emmanuelu@user/emmanuelux)
22:21:39 Unicorn_Princess joins (~Unicorn_P@user/Unicorn-Princess/x-3540542)
22:24:46 × enoq quits (~enoq@2a05:1141:1f5:5600:b9c9:721a:599:bfe7) (Quit: enoq)
22:28:52 <hammond> I'm confused about functors and category theory when it comes to random functions, can you map a function to a number that was randomly created? and back again?
22:30:22 <Jade[m]1> A functor is simply a structure that allows a mapping `(a -> b) -> f a -> f b`
22:30:33 <Jade[m]1> not sure what you mean with your question
22:30:35 <int-e> Nosrep: Note that naively, basicUnsafeIndexM *does* allocate (namely, a box for its result)... though I'd hope that this disappears through inlining, but maybe that's not working in your case? That, or profiling misattributes allocations.
22:33:33 × ph88 quits (~ph88@91.66.101.83) (Quit: Leaving)
22:34:09 <mauke> hammond: are you asking about RNGs? what does it mean to map a function to a number?
22:34:42 Kuttenbrunzer joins (~Kuttenbru@2a02:8108:8b80:1d48::f907)
22:35:55 <geekosaur> hammond, note that category theory operates at the level of Haskell types, not of values. So no, you are not expected to be able to apply it to a number, because that's a value
22:36:14 <Jade[m]1> mhm
22:36:15 <hammond> ok
22:36:23 <int-e> Arbitrary/Coarbitrary comes to mind but is unlikely to be the right picture.
22:36:41 × mei quits (~mei@user/mei) (Remote host closed the connection)
22:37:37 <int-e> There's also some work on probability monads.
22:39:08 mei joins (~mei@user/mei)
22:39:51 <int-e> Where the functor takes a random variable X with values in A, and a function f: A -> B, and produces f(X) which is another random variable with values in B.
22:45:33 emmanuelux_ joins (~emmanuelu@user/emmanuelux)
22:47:54 × motherfsck quits (~motherfsc@user/motherfsck) (Remote host closed the connection)
22:48:02 × merijn quits (~merijn@86-86-29-250.fixed.kpn.net) (Ping timeout: 265 seconds)
22:49:13 × emmanuelux quits (~emmanuelu@user/emmanuelux) (Ping timeout: 276 seconds)
22:51:04 caryhartline joins (~caryhartl@107.128.194.73)
22:58:19 × caryhartline quits (~caryhartl@107.128.194.73) (Ping timeout: 276 seconds)
23:02:14 talismanick joins (~talismani@2601:200:c000:f7a0::5321)
23:06:27 × talismanick quits (~talismani@2601:200:c000:f7a0::5321) (Remote host closed the connection)
23:07:05 motherfsck joins (~motherfsc@user/motherfsck)
23:15:14 × acidjnk quits (~acidjnk@p200300d6e715c49529b622cef8024c18.dip0.t-ipconnect.de) (Ping timeout: 246 seconds)
23:16:43 × xff0x quits (~xff0x@ai098135.d.east.v6connect.net) (Ping timeout: 246 seconds)
23:18:54 xff0x joins (~xff0x@178.255.149.135)
23:19:57 <EvanR> Functor as "post processing"
23:20:53 × jmdaemon quits (~jmdaemon@user/jmdaemon) (Ping timeout: 268 seconds)
23:20:54 <EvanR> the functor laws do operate on the value level
23:23:32 srz joins (~srz@181.228.49.93)
23:24:32 × zeenk quits (~zeenk@2a02:2f04:a307:2300::7fe) (Quit: Konversation terminated!)
23:24:47 × xff0x quits (~xff0x@178.255.149.135) (Ping timeout: 264 seconds)
23:26:05 xff0x joins (~xff0x@2405:6580:b080:900:c2ab:3233:9b06:70ff)
23:29:13 [itchyjunk] joins (~itchyjunk@user/itchyjunk/x-7353470)
23:31:38 × fnurglewitz quits (uid263868@id-263868.lymington.irccloud.com) (Quit: Connection closed for inactivity)
23:32:11 jmdaemon joins (~jmdaemon@user/jmdaemon)
23:34:23 × srz quits (~srz@181.228.49.93) (Ping timeout: 264 seconds)
23:35:30 × mastarija quits (~mastarija@188.252.199.82) (Quit: WeeChat 3.7.1)
23:41:12 × emmanuelux_ quits (~emmanuelu@user/emmanuelux) (Quit: au revoir)
23:45:26 × a_coll quits (~acoll@45.92.120.189) (Remote host closed the connection)
23:47:04 × gurkengl1s quits (~gurkengla@dynamic-089-204-153-207.89.204.153.pool.telefonica.de) (Ping timeout: 276 seconds)
23:47:04 × gurkenglas quits (~gurkengla@dynamic-089-204-153-207.89.204.153.pool.telefonica.de) (Ping timeout: 276 seconds)
23:49:25 × vgtw quits (~vgtw@user/vgtw) (Ping timeout: 250 seconds)
23:50:29 wroathe joins (~wroathe@207-153-38-140.fttp.usinternet.com)
23:50:30 × wroathe quits (~wroathe@207-153-38-140.fttp.usinternet.com) (Changing host)
23:50:30 wroathe joins (~wroathe@user/wroathe)
23:50:31 bitdex joins (~bitdex@gateway/tor-sasl/bitdex)
23:57:29 × Unicorn_Princess quits (~Unicorn_P@user/Unicorn-Princess/x-3540542) (Quit: Leaving)

All times are in UTC on 2023-03-14.