2023/03/14

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