2021/11/13

2021-11-13 00:00:14 +0100dsrt^(~dsrt@h50.174.139.63.static.ip.windstream.net)
2021-11-13 00:01:18 +0100burnsidesLlama(~burnsides@dhcp168-014.wadham.ox.ac.uk)
2021-11-13 00:05:59 +0100gabiruh_gabiruh
2021-11-13 00:07:02 +0100burnsidesLlama(~burnsides@dhcp168-014.wadham.ox.ac.uk) (Ping timeout: 260 seconds)
2021-11-13 00:11:30 +0100 <Franciman> been trying to write a sexpr parser in Zig
2021-11-13 00:11:36 +0100 <Franciman> it is insanely fast and small
2021-11-13 00:11:50 +0100 <Franciman> what are the usual techniques to improve Haskell's parsing?
2021-11-13 00:11:54 +0100 <Franciman> I am using attoparsec
2021-11-13 00:11:58 +0100 <Franciman> for example
2021-11-13 00:12:08 +0100 <Franciman> i give up on size, because ehe
2021-11-13 00:12:11 +0100 <Franciman> it's not fair
2021-11-13 00:12:13 +0100johnny_sitar(~artur@078088015209.bialystok.vectranet.pl) (Ping timeout: 268 seconds)
2021-11-13 00:12:30 +0100unit73e(~emanuel@2001:818:e8dd:7c00:32b5:c2ff:fe6b:5291) (Quit: Leaving)
2021-11-13 00:12:30 +0100 <Franciman> haskell is a dinosaur if compared with zig, talking about runtimes. so it's unfair
2021-11-13 00:12:51 +0100 <Franciman> to improve haskell's parsing speed
2021-11-13 00:14:47 +0100shapr(~user@pool-100-36-247-68.washdc.fios.verizon.net) (Ping timeout: 264 seconds)
2021-11-13 00:19:20 +0100takuan(~takuan@178-116-218-225.access.telenet.be) (Remote host closed the connection)
2021-11-13 00:20:08 +0100eggplantade(~Eggplanta@2600:1700:bef1:5e10:c075:f6f7:f2c7:7314)
2021-11-13 00:22:00 +0100unit73e(~emanuel@2001:818:e8dd:7c00:32b5:c2ff:fe6b:5291)
2021-11-13 00:22:35 +0100mikoto-chan(~mikoto-ch@esm-84-240-99-143.netplaza.fi) (Quit: mikoto-chan)
2021-11-13 00:22:40 +0100max22-(~maxime@lfbn-ren-1-762-224.w81-53.abo.wanadoo.fr) (Remote host closed the connection)
2021-11-13 00:23:22 +0100stefan-_(~cri@42dots.de) (Ping timeout: 260 seconds)
2021-11-13 00:25:31 +0100zava(~zava@ip5f5bdf0f.dynamic.kabel-deutschland.de)
2021-11-13 00:26:57 +0100stefan-_(~cri@42dots.de)
2021-11-13 00:28:24 +0100zer0bitz(~zer0bitz@2001:2003:f6e3:7400:d8e7:a6fa:245:fafa) (Read error: Connection reset by peer)
2021-11-13 00:28:51 +0100zebrag(~chris@user/zebrag) (Remote host closed the connection)
2021-11-13 00:29:47 +0100jkaye(~jkaye@2601:281:8300:7530:25cb:799d:2790:e606) (Ping timeout: 264 seconds)
2021-11-13 00:32:43 +0100 <maerwald[m]> <Franciman> "what are the usual techniques to..." <- Streamly can be really fast, but needs a lot of library knowledge
2021-11-13 00:33:07 +0100 <maerwald[m]> The fastest is an ad-hoc xeno approach, using only bytestring functions that use memchr under the hood like elemIndex
2021-11-13 00:33:31 +0100 <maerwald[m]> attoparsec for example is really slow compared to that
2021-11-13 00:33:55 +0100michalz(~michalz@185.246.204.37) (Remote host closed the connection)
2021-11-13 00:35:32 +0100 <maerwald[m]> Simple line parsing is slow even in attoparsec
2021-11-13 00:35:32 +0100 <maerwald[m]> https://github.com/hasufell/parselines/blob/master/app/Main.hs
2021-11-13 00:35:54 +0100 <maerwald[m]> Someone tweaked the streamly code to make it almost as fast as the bytestring variant afair, but I don't have the code
2021-11-13 00:37:41 +0100 <maerwald[m]> streamly is lacking partial parsers where you can reset to some position in the chunked input array. That would allow to combine memchr based primitives I believe
2021-11-13 00:38:24 +0100 <maerwald[m]> There are some non-idiomatic workarounds of course, but that's hairv
2021-11-13 00:38:47 +0100Pickchea(~private@user/pickchea) (Ping timeout: 264 seconds)
2021-11-13 00:38:55 +0100 <dsal> I find it strange that Aeson returns a `Result` type that looks just like `Either String` but doesn't offer any conversions. I wonder how many codebases convert that to `Either String` or `Maybe`
2021-11-13 00:41:55 +0100 <monochrom> But I would use eitherDecode which gives an Either.
2021-11-13 00:42:15 +0100 <monochrom> I don't think I ever needed to touch Result.
2021-11-13 00:42:57 +0100 <maerwald[m]> Maybe it has interesting instances?
2021-11-13 00:45:37 +0100 <janus> how do i find the minimum calculated using a custom function, but with the ability to recover the original item?
2021-11-13 00:46:36 +0100 <janus> i was thinking to make a newtype and have one item be 'Min a' and the other be 'a' but feel like i am reinventing the wheel
2021-11-13 00:47:03 +0100 <monochrom> Something about ArgMin or Arg.
2021-11-13 00:47:43 +0100 <monochrom> in Data.Semigroup
2021-11-13 00:48:45 +0100 <janus> oooh perfect!
2021-11-13 00:48:49 +0100 <monochrom> :)
2021-11-13 00:53:32 +0100son0p(~ff@181.136.122.143) (Ping timeout: 268 seconds)
2021-11-13 00:53:34 +0100ec(~ec@gateway/tor-sasl/ec) (Remote host closed the connection)
2021-11-13 00:53:43 +0100pooryorick(~pooryoric@87-119-174-173.tll.elisa.ee) (Ping timeout: 250 seconds)
2021-11-13 00:53:49 +0100zebrag(~chris@user/zebrag)
2021-11-13 00:54:03 +0100ec(~ec@gateway/tor-sasl/ec)
2021-11-13 00:55:57 +0100 <dsal> If you use fromJSON, you get a Result. It just seems odd to have a custom type for that. I don't know why it'd *need* to be less powerful.
2021-11-13 00:57:13 +0100 <dsal> It might have something interesting. I'm looking at a piece of code that converts it to a `Maybe` and wonder how often that function is written.
2021-11-13 00:57:37 +0100 <monochrom> But I don't use fromJSON. I use eitherDecode.
2021-11-13 00:58:29 +0100 <monochrom> I bet the vibe is "Result is internal and/or if you bypass part of normal aeson workflow".
2021-11-13 00:58:39 +0100 <dsal> Sure, those just do different things. This codebase I'm using has three different uses of fromJSON
2021-11-13 00:59:00 +0100 <dsal> Making it slightly more annoying, I guess...
2021-11-13 00:59:03 +0100 <Franciman> thanks maerwald[m] awesome
2021-11-13 01:00:30 +0100emf(~emf@2620:10d:c090:400::5:6b1) (Quit: emf)
2021-11-13 01:01:14 +0100 <dsal> There's also ifromJSON that returns an IResult in case you want more letters in your code.
2021-11-13 01:01:21 +0100lavaman(~lavaman@98.38.249.169)
2021-11-13 01:03:00 +0100jinsun__(~quassel@user/jinsun)
2021-11-13 01:04:01 +0100jinsun___(~quassel@user/jinsun)
2021-11-13 01:04:45 +0100__monty__(~toonn@user/toonn) (Quit: leaving)
2021-11-13 01:05:50 +0100lavaman(~lavaman@98.38.249.169) (Ping timeout: 260 seconds)
2021-11-13 01:06:02 +0100jinsun(~quassel@user/jinsun) (Ping timeout: 240 seconds)
2021-11-13 01:08:20 +0100jinsun__(~quassel@user/jinsun) (Ping timeout: 268 seconds)
2021-11-13 01:08:43 +0100mikoto-chan(~mikoto-ch@esm-84-240-99-143.netplaza.fi)
2021-11-13 01:18:15 +0100servytor(uid525486@hampstead.irccloud.com) (Quit: Connection closed for inactivity)
2021-11-13 01:19:21 +0100Guest42(~Guest42@eth-west-pareq2-46-193-4-100.wb.wifirst.net) (Quit: Client closed)
2021-11-13 01:25:14 +0100zava(~zava@ip5f5bdf0f.dynamic.kabel-deutschland.de) (Quit: WeeChat 3.3)
2021-11-13 01:26:22 +0100johnjay(~pi@192.142.100.50) (Ping timeout: 260 seconds)
2021-11-13 01:27:18 +0100Lord_of_Life(~Lord@user/lord-of-life/x-2819915) (Ping timeout: 260 seconds)
2021-11-13 01:28:00 +0100johnjay(~pi@192.142.100.50)
2021-11-13 01:28:47 +0100Lord_of_Life(~Lord@user/lord-of-life/x-2819915)
2021-11-13 01:35:28 +0100myShoggoth(~myShoggot@97-120-85-195.ptld.qwest.net) (Ping timeout: 268 seconds)
2021-11-13 01:35:39 +0100burnsidesLlama(~burnsides@dhcp168-014.wadham.ox.ac.uk)
2021-11-13 01:37:05 +0100Tuplanolla(~Tuplanoll@91-159-69-50.elisa-laajakaista.fi)
2021-11-13 01:38:17 +0100falafel__(~falafel@cpe-76-168-195-162.socal.res.rr.com)
2021-11-13 01:38:29 +0100gdown(~gavin@h69-11-248-109.kndrid.broadband.dynamic.tds.net) (Remote host closed the connection)
2021-11-13 01:39:06 +0100yauhsien(~yauhsien@118-167-47-187.dynamic-ip.hinet.net)
2021-11-13 01:44:06 +0100yauhsien(~yauhsien@118-167-47-187.dynamic-ip.hinet.net) (Ping timeout: 268 seconds)
2021-11-13 01:44:07 +0100mvk(~mvk@2607:fea8:5cc3:e900::df92)
2021-11-13 01:45:26 +0100jinsun___jinsun
2021-11-13 01:48:09 +0100mvk(~mvk@2607:fea8:5cc3:e900::df92) (Client Quit)
2021-11-13 01:48:33 +0100mvk(~mvk@2607:fea8:5cc3:e900::df92)
2021-11-13 01:48:36 +0100mvk(~mvk@2607:fea8:5cc3:e900::df92) (Client Quit)
2021-11-13 01:48:53 +0100mvk(~mvk@2607:fea8:5cc3:e900::df92)
2021-11-13 01:49:23 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-11-13 01:49:38 +0100Flonk(~Flonk@vps-zap441517-1.zap-srv.com) (Quit: The Lounge - https://thelounge.chat)
2021-11-13 01:49:54 +0100Flonk(~Flonk@vps-zap441517-1.zap-srv.com)
2021-11-13 01:50:38 +0100Flonk(~Flonk@vps-zap441517-1.zap-srv.com) (Client Quit)
2021-11-13 01:50:54 +0100Flonk(~Flonk@vps-zap441517-1.zap-srv.com)
2021-11-13 01:52:11 +0100jlamothe(~jlamothe@198.251.61.229) (Ping timeout: 245 seconds)
2021-11-13 01:53:56 +0100Flonk(~Flonk@vps-zap441517-1.zap-srv.com) (Client Quit)
2021-11-13 01:54:12 +0100Flonk(~Flonk@vps-zap441517-1.zap-srv.com)
2021-11-13 01:55:56 +0100Flonk(~Flonk@vps-zap441517-1.zap-srv.com) (Client Quit)
2021-11-13 01:56:12 +0100Flonk(~Flonk@vps-zap441517-1.zap-srv.com)
2021-11-13 01:56:43 +0100Flonk(~Flonk@vps-zap441517-1.zap-srv.com) (Client Quit)
2021-11-13 01:56:59 +0100Flonk(~Flonk@vps-zap441517-1.zap-srv.com)
2021-11-13 02:00:59 +0100renzhi(~xp@2607:fa49:6500:b100::6e7f)
2021-11-13 02:01:21 +0100[itchyjunk](~itchyjunk@user/itchyjunk/x-7353470) (Ping timeout: 245 seconds)
2021-11-13 02:02:00 +0100jgeerds(~jgeerds@55d41b94.access.ecotel.net) (Ping timeout: 268 seconds)
2021-11-13 02:03:22 +0100falafel__(~falafel@cpe-76-168-195-162.socal.res.rr.com) (Remote host closed the connection)
2021-11-13 02:03:38 +0100falafel__(~falafel@2603-8000-d800-688c-34f9-26f3-71b0-5b78.res6.spectrum.com)
2021-11-13 02:03:52 +0100acidjnk_new(~acidjnk@p200300d0c725147020cf3de033c5d4d3.dip0.t-ipconnect.de) (Ping timeout: 265 seconds)
2021-11-13 02:03:59 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
2021-11-13 02:03:59 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host)
2021-11-13 02:03:59 +0100wroathe(~wroathe@user/wroathe)
2021-11-13 02:05:00 +0100Flonk(~Flonk@vps-zap441517-1.zap-srv.com) (Quit: The Lounge - https://thelounge.chat)
2021-11-13 02:05:16 +0100Flonk(~Flonk@vps-zap441517-1.zap-srv.com)
2021-11-13 02:05:33 +0100werneta(~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net)
2021-11-13 02:05:51 +0100Flonk(~Flonk@vps-zap441517-1.zap-srv.com) (Client Quit)
2021-11-13 02:05:57 +0100Gurkenglas(~Gurkengla@dslb-002-203-144-204.002.203.pools.vodafone-ip.de) (Leaving)
2021-11-13 02:06:07 +0100Flonk(~Flonk@vps-zap441517-1.zap-srv.com)
2021-11-13 02:07:35 +0100[itchyjunk](~itchyjunk@user/itchyjunk/x-7353470)
2021-11-13 02:08:01 +0100falafel__(~falafel@2603-8000-d800-688c-34f9-26f3-71b0-5b78.res6.spectrum.com) (Ping timeout: 245 seconds)
2021-11-13 02:17:18 +0100Midjak(~Midjak@82-65-111-221.subs.proxad.net) (Quit: This computer has gone to sleep)
2021-11-13 02:19:03 +0100gdown(~gavin@h69-11-248-109.kndrid.broadband.dynamic.tds.net)
2021-11-13 02:19:18 +0100gdown(~gavin@h69-11-248-109.kndrid.broadband.dynamic.tds.net) (Remote host closed the connection)
2021-11-13 02:20:17 +0100SeungheonOh(~Thunderbi@2600:1700:5168:1400:efbd:f13b:39e3:ec30)
2021-11-13 02:21:43 +0100waleee(~waleee@2001:9b0:216:8200:d457:9189:7843:1dbd) (Ping timeout: 268 seconds)
2021-11-13 02:22:53 +0100lavaman(~lavaman@98.38.249.169)
2021-11-13 02:23:10 +0100waleee(~waleee@h-98-128-228-119.NA.cust.bahnhof.se)
2021-11-13 02:23:46 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 260 seconds)
2021-11-13 02:28:30 +0100retroid_(~retro@2e41e9c8.skybroadband.com) (Ping timeout: 268 seconds)
2021-11-13 02:28:51 +0100alzgh(~alzgh@user/alzgh) (Remote host closed the connection)
2021-11-13 02:28:55 +0100shapr(~user@pool-100-36-247-68.washdc.fios.verizon.net)
2021-11-13 02:32:08 +0100DNH(~DNH@8.44.0.72) (Quit: Textual IRC Client: www.textualapp.com)
2021-11-13 02:44:54 +0100jbox(~atlas@2600:1700:2196:2060:2906:6b16:da43:7be2)
2021-11-13 02:45:01 +0100jbox(~atlas@2600:1700:2196:2060:2906:6b16:da43:7be2) (Changing host)
2021-11-13 02:45:01 +0100jbox(~atlas@user/jbox)
2021-11-13 02:45:41 +0100jbox(~atlas@user/jbox) (Client Quit)
2021-11-13 02:45:59 +0100jbox(~jbox@user/jbox)
2021-11-13 02:48:27 +0100ec(~ec@gateway/tor-sasl/ec) (Ping timeout: 276 seconds)
2021-11-13 02:49:52 +0100mmhat(~mmh@55d4bb38.access.ecotel.net) (Quit: WeeChat 3.3)
2021-11-13 02:51:14 +0100notzmv(~zmv@user/notzmv) (Ping timeout: 265 seconds)
2021-11-13 02:51:34 +0100 <amesgen[m]> Franciman: Another very new lib for extremely high performance parsing is https://github.com/AndrasKovacs/flatparse
2021-11-13 02:51:43 +0100Tuplanolla(~Tuplanoll@91-159-69-50.elisa-laajakaista.fi) (Quit: Leaving.)
2021-11-13 02:55:05 +0100emf(~emf@63.64.162.234)
2021-11-13 02:56:47 +0100notzmv(~zmv@user/notzmv)
2021-11-13 02:57:09 +0100jlamothe(~jlamothe@198.251.61.229)
2021-11-13 02:59:57 +0100emf(~emf@63.64.162.234) (Ping timeout: 268 seconds)
2021-11-13 03:01:07 +0100emf(~emf@2620:10d:c090:400::5:3d2a)
2021-11-13 03:02:41 +0100harveypwca(~harveypwc@2601:246:c180:a570:3828:d8:e523:3f67)
2021-11-13 03:09:05 +0100 <sm> > On microbenchmarks, flatparse is around 10 times faster than attoparsec or megaparsec. On larger examples with heavier use of source positions and spans and/or indentation parsing, the performance difference grows to 20-30 times. Compile times and exectuable sizes are also significantly better with flatparse than with megaparsec or attoparsec
2021-11-13 03:09:07 +0100 <lambdabot> <hint>:1:19: error: parse error on input ‘,’
2021-11-13 03:11:18 +0100emf(~emf@2620:10d:c090:400::5:3d2a) (Quit: emf)
2021-11-13 03:11:43 +0100 <SeungheonOh> how do they accomplish a significantly better performance?
2021-11-13 03:11:50 +0100 <SeungheonOh> do they use C ffi?
2021-11-13 03:12:07 +0100 <c_wraith> you don't need to that.
2021-11-13 03:12:16 +0100 <c_wraith> GHC gives you plenty of low-level tools
2021-11-13 03:12:26 +0100 <sm> the readme tells
2021-11-13 03:13:23 +0100 <SeungheonOh> ByteString?
2021-11-13 03:13:44 +0100 <SeungheonOh> and GHC Primops
2021-11-13 03:14:13 +0100 <davean> dsal: You don't even need to write it - its Foldable
2021-11-13 03:14:59 +0100pretty_dumm_guy(trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655) (Quit: WeeChat 3.3)
2021-11-13 03:16:06 +0100 <jbox> I wish the haskell ecosystem was more modern
2021-11-13 03:16:19 +0100 <jbox> I absolutely adore Haskell as a language but that's the only good thing about it imo
2021-11-13 03:16:39 +0100 <SeungheonOh> why do you think haskell tooling is not modern?
2021-11-13 03:17:00 +0100 <jbox> it's just a mess in my experience.
2021-11-13 03:17:19 +0100 <jbox> for example, why does cabal need its own language? can't we just use toml or something?
2021-11-13 03:17:52 +0100 <sclv> toml is not expressive enough
2021-11-13 03:17:52 +0100 <davean> cabal is a mess, but if you tried to encode what it does in toml it would be a mess - how do you plan to condititionals for example?
2021-11-13 03:18:08 +0100 <sclv> also cabal format predates toml or json for that matter
2021-11-13 03:18:15 +0100 <SeungheonOh> stack is more refined
2021-11-13 03:18:20 +0100 <sclv> if it used “the standard” it would have been xml
2021-11-13 03:18:22 +0100 <davean> people do cram things into generic formats but they just never actually work
2021-11-13 03:18:31 +0100jboxhisses at xml
2021-11-13 03:18:43 +0100 <sclv> i just talked to cargo devs this weekend who lamented the problems with toml
2021-11-13 03:18:51 +0100 <jbox> you make a good point davean, I don't know.
2021-11-13 03:18:55 +0100whatsupdoc(uid509081@hampstead.irccloud.com) (Quit: Connection closed for inactivity)
2021-11-13 03:19:11 +0100 <jbox> sclv: can you link me the conversation? That sounds like something I'd be interested in
2021-11-13 03:19:20 +0100 <davean> jbox: talk to kubnernets people about the security issues and random API errors from them using yaml :)
2021-11-13 03:19:24 +0100 <sclv> i literally talked to them
2021-11-13 03:19:31 +0100 <SeungheonOh> Golang uses their own unliterate formats. Cabal formats looks modern enough
2021-11-13 03:19:44 +0100alx741(~alx741@181.196.68.187) (Quit: alx741)
2021-11-13 03:19:47 +0100 <davean> sclv: yes, but there is a proper citation format for a discusssion
2021-11-13 03:19:52 +0100 <sclv> like with spoken voices
2021-11-13 03:20:25 +0100 <davean> sclv: yes, you can cite that though :)
2021-11-13 03:20:29 +0100 <jbox> davean: I wholeheartedly believe yaml is the spawn of satan
2021-11-13 03:21:14 +0100 <davean> sclv: you give the name, list it as "Personal Interview" and give the date
2021-11-13 03:21:46 +0100 <sclv> a common package description format between multiple languages would be great. as is, the cabal format is better than lots of alternatives and even with others
2021-11-13 03:22:13 +0100 <jbox> the solution is lisp, of course
2021-11-13 03:22:27 +0100 <sm> for a refreshing change, I submit... https://treenotation.org & https://treebase.treenotation.org
2021-11-13 03:22:29 +0100 <sclv> python and npm are disasters, which require executing arbitrary code to even discover what is in a package manifest
2021-11-13 03:22:33 +0100 <davean> Hum, yah I'd support configuring out packages in lisp, at least it wouldn't be cabal!
2021-11-13 03:22:53 +0100 <davean> sclv: neither of those made me deal with cabal's format though :-p
2021-11-13 03:22:53 +0100 <sm> it's like s-exprs, with indentation instead of parentheses
2021-11-13 03:23:09 +0100 <monochrom> Unpopular opinion: cabal is not a mess.
2021-11-13 03:23:34 +0100 <sclv> from talking to those maintainers, arbitrary code has been a terrible choice they can’t dig themselves out of
2021-11-13 03:23:34 +0100 <monochrom> Unpopular opinion: s/modern/hype, fad/
2021-11-13 03:24:14 +0100 <sclv> this was all at packaging-con btw, if you want a cite, but it was unrecorded “hallway track”
2021-11-13 03:24:45 +0100 <sclv> Xml is like s exprs but with angle brackets instead of parens :-p
2021-11-13 03:25:07 +0100 <davean> sclv: s-exprs are single-level, xml is trilevel
2021-11-13 03:25:15 +0100 <monochrom> I don't know how to map xml attributes to s-expressions, honestly.
2021-11-13 03:25:21 +0100 <davean> you can't
2021-11-13 03:25:35 +0100 <sclv> Very Carefully!!!
2021-11-13 03:25:37 +0100 <davean> not in general
2021-11-13 03:25:41 +0100 <jbox> sm: this Tree Notation thing looks too ambitious and broad in scope
2021-11-13 03:25:54 +0100 <monochrom> I like s-expressions, but please don't pretend every fad can be shoehorned into it.
2021-11-13 03:26:00 +0100ec(~ec@gateway/tor-sasl/ec)
2021-11-13 03:26:01 +0100 <jbox> davean: what do you mean by single- and tri-level?
2021-11-13 03:26:02 +0100 <davean> jbox: it also says things like "no syntax" and then discusses its syntax
2021-11-13 03:26:15 +0100 <sm> I agree, but I think there's something good there
2021-11-13 03:26:18 +0100 <davean> jbox: seperate denoted namespaces
2021-11-13 03:26:35 +0100 <davean> jbox: xml has different meanings for node names, attributes, etc
2021-11-13 03:27:10 +0100 <jbox> yeah, at first the claims with "no syntax" paired with the drawings made me think it was some kind of joke
2021-11-13 03:28:42 +0100 <davean> I don't trust anything that starts with outright lies
2021-11-13 03:29:19 +0100 <sclv> well if it starts with outright lies it has nowhere to go but up!
2021-11-13 03:29:40 +0100 <monochrom> @quote monochrom kripke
2021-11-13 03:29:40 +0100 <lambdabot> monochrom says: There are truths, damn truths, and Kripke structures.
2021-11-13 03:29:46 +0100 <monochrom> :)
2021-11-13 03:35:14 +0100 <jbox> while we're on the topic, what's the best information-rich document format?
2021-11-13 03:35:32 +0100 <jbox> honestly I'd say xml, as much as I hate it
2021-11-13 03:36:12 +0100 <jbox> I was just thinking of how nice it would be to have a repository of documentation for all sorts of things, in a standardized format, possibly as literate programming
2021-11-13 03:39:39 +0100 <monochrom> I don't know what "best" should mean. But lately I have switched from xhtml to pandoc's markdown and become much happier.
2021-11-13 03:39:51 +0100falafel__(~falafel@2603-8000-d800-688c-34f9-26f3-71b0-5b78.res6.spectrum.com)
2021-11-13 03:43:44 +0100mark___(~a@p200300ef973db1754086f0a6a24fc4dd.dip0.t-ipconnect.de) (Ping timeout: 268 seconds)
2021-11-13 03:48:04 +0100 <dsal> This is disappointing:
2021-11-13 03:48:08 +0100 <dsal> listToMaybe :: [a] -> Maybe a
2021-11-13 03:48:08 +0100 <dsal> listToMaybe = foldr (const . Just) Nothing
2021-11-13 03:50:56 +0100falafel__(~falafel@2603-8000-d800-688c-34f9-26f3-71b0-5b78.res6.spectrum.com) (Ping timeout: 245 seconds)
2021-11-13 03:51:53 +0100 <monochrom> That's a bit of an overkill, using foldr for just 2 cases :)
2021-11-13 03:52:12 +0100 <monochrom> Someone was trying to be cute heh
2021-11-13 03:54:23 +0100xff0x(~xff0x@2001:1a81:5251:b200:1b67:fb84:b521:2e46) (Ping timeout: 264 seconds)
2021-11-13 03:55:35 +0100neurocyte0132889(~neurocyte@user/neurocyte) (Ping timeout: 264 seconds)
2021-11-13 03:56:09 +0100 <jbox> monochrom: I love pandoc markdown!
2021-11-13 03:56:09 +0100xff0x(~xff0x@2001:1a81:526d:df00:a345:8523:ad73:f70)
2021-11-13 03:56:22 +0100 <monochrom> :)
2021-11-13 03:56:56 +0100 <jbox> sorry, I meant to clarify and never did: by "best", I mean "stores as much data as possible and encompasses all forseeable use-cases"
2021-11-13 03:57:31 +0100 <jbox> e.g. with my documentation database idea above, I'd want hyperlinks and all kind of metadata. Perhaps attributes, etc. Markdown wouldn't give me anything near what I would want
2021-11-13 03:57:40 +0100 <jbox> I'm thinking LSP-like documentation interaction
2021-11-13 03:58:43 +0100 <dsal> monochrom: It'd be super great if weren't limited to list. Or yeah, just do the two cases.
2021-11-13 03:59:01 +0100 <jbox> also, can someone explain `listToMaybe = foldr (const . Just) Nothing` to me? I don't understand the `(const . Just)` part :)
2021-11-13 03:59:26 +0100 <jbox> oh yeah and while I have everyone's attention can someone please for the love of god explain to me how a List is a monad?
2021-11-13 03:59:44 +0100 <jollygood2> const . Just is the same as \_ x -> Just x
2021-11-13 03:59:47 +0100renzhi(~xp@2607:fa49:6500:b100::6e7f) (Ping timeout: 264 seconds)
2021-11-13 03:59:54 +0100 <dsal> Other way around.
2021-11-13 03:59:57 +0100 <jollygood2> yeah sorry
2021-11-13 04:00:00 +0100 <dsal> @pl \x _ -> pure x
2021-11-13 04:00:00 +0100 <lambdabot> const . pure
2021-11-13 04:00:48 +0100 <dsal> Short story: If there's anything at all in the list, it returns the first element and ignores the rest.
2021-11-13 04:01:00 +0100 <jollygood2> I'm having a lot of fun using this image processing library in haskell https://hackage.haskell.org/package/hip-1.5.6.0/docs/Graphics-Image.html
2021-11-13 04:01:02 +0100 <dsal> (Because it ignores the accumulator, therefore laziness wins)
2021-11-13 04:01:46 +0100 <jollygood2> mergeImages images = foldl1 leftToRight (intersperse border images) where makeImage (31, 10) (const 1)
2021-11-13 04:02:01 +0100 <jollygood2> this merges a list of images and adds an all-white border between each one
2021-11-13 04:07:08 +0100ec(~ec@gateway/tor-sasl/ec) (Remote host closed the connection)
2021-11-13 04:09:59 +0100SeungheonOh(~Thunderbi@2600:1700:5168:1400:efbd:f13b:39e3:ec30) (Quit: SeungheonOh)
2021-11-13 04:12:26 +0100ec(~ec@gateway/tor-sasl/ec)
2021-11-13 04:15:47 +0100wroathe(~wroathe@user/wroathe) (Ping timeout: 256 seconds)
2021-11-13 04:20:10 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-11-13 04:23:19 +0100yauhsien(~yauhsien@118-167-47-187.dynamic-ip.hinet.net)
2021-11-13 04:24:14 +0100xkuru(~xkuru@user/xkuru) (Read error: Connection reset by peer)
2021-11-13 04:24:27 +0100machinedgod(~machinedg@24.105.81.50) (Ping timeout: 268 seconds)
2021-11-13 04:24:52 +0100myShoggoth(~myShoggot@97-120-85-195.ptld.qwest.net)
2021-11-13 04:26:46 +0100brainfreeze(~brainfree@2a03:1b20:4:f011::20d)
2021-11-13 04:27:41 +0100yauhsien(~yauhsien@118-167-47-187.dynamic-ip.hinet.net) (Ping timeout: 256 seconds)
2021-11-13 04:30:04 +0100falafel(~falafel@2603-8000-d800-688c-34f9-26f3-71b0-5b78.res6.spectrum.com)
2021-11-13 04:31:26 +0100 <jollygood2> am I finally going insane for thinking this isn't such a bad idea? :). https://paste.tomsmeding.com/xE6Ou9fh
2021-11-13 04:33:27 +0100jmorris(uid433911@hampstead.irccloud.com) (Quit: Connection closed for inactivity)
2021-11-13 04:33:35 +0100 <monochrom> Heh, it is worth the while if you use it like at 10 places in your code.
2021-11-13 04:33:37 +0100deadmarshal(~deadmarsh@95.38.228.182)
2021-11-13 04:38:37 +0100deadmarshal(~deadmarsh@95.38.228.182) (Ping timeout: 268 seconds)
2021-11-13 04:42:20 +0100ec(~ec@gateway/tor-sasl/ec) (Quit: ec)
2021-11-13 04:47:45 +0100 <jbox> dsal: what does the pure mean there?
2021-11-13 04:48:10 +0100 <dsal> jbox: It can only mean `Just` here. `pure` is just the first thing that came to mind.
2021-11-13 04:48:28 +0100 <jbox> ohh, I see. Thanks :)
2021-11-13 04:48:29 +0100 <dsal> > pure 1 :: Maybe Int
2021-11-13 04:48:30 +0100 <lambdabot> Just 1
2021-11-13 04:48:31 +0100 <jbox> dsal++
2021-11-13 04:49:01 +0100 <yin> any reason why take is not :: Foldable f => f a -> [a] ?
2021-11-13 04:49:07 +0100 <jbox> is there documentation for the bot somewhere? I don't want to flood the channel trying to get the usage info lol
2021-11-13 04:49:09 +0100dajoer(~david@user/gvx)
2021-11-13 04:49:21 +0100yauhsien(~yauhsien@49.216.238.61)
2021-11-13 04:49:38 +0100 <yin> take = foldl1 const
2021-11-13 04:50:01 +0100 <dsal> :t foldl1 const
2021-11-13 04:50:02 +0100 <lambdabot> Foldable t => t b -> b
2021-11-13 04:50:03 +0100 <yin> oops nevermind that
2021-11-13 04:50:23 +0100 <yin> i meant head
2021-11-13 04:50:26 +0100 <dsal> Deciding the result should be a list is kind of limiting.
2021-11-13 04:50:52 +0100 <dsal> `head` is generally a bad idea if it does anything other than `foldr (const . Just) Nothing`
2021-11-13 04:51:00 +0100jboxreputation
2021-11-13 04:51:19 +0100 <yin> that's why i was confusing it with take
2021-11-13 04:51:24 +0100reputationjbox
2021-11-13 04:51:30 +0100 <yin> i use (take 1) instead
2021-11-13 04:52:32 +0100 <yin> this was, as they call it, a brain fart
2021-11-13 04:52:32 +0100yauhsien(~yauhsien@49.216.238.61) (Read error: Connection reset by peer)
2021-11-13 04:52:39 +0100 <dsal> take 1 is a different shape sort of, though it's the same cardinality as `Maybe a`
2021-11-13 04:52:54 +0100 <jbox> found it: https://wiki.haskell.org/Lambdabot
2021-11-13 04:52:56 +0100 <dsal> I mean, in that it gives you either 0 things or 1 thing.
2021-11-13 04:53:07 +0100 <yin> dsal: yes
2021-11-13 04:53:11 +0100myShoggoth(~myShoggot@97-120-85-195.ptld.qwest.net) (Ping timeout: 264 seconds)
2021-11-13 04:53:29 +0100 <dsal> > (listToMaybe [0..], listToMaybe [])
2021-11-13 04:53:31 +0100 <lambdabot> (Just 0,Nothing)
2021-11-13 04:54:11 +0100jboxrepbot
2021-11-13 04:54:30 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 260 seconds)
2021-11-13 04:54:41 +0100repbotjbox
2021-11-13 04:55:22 +0100 <jbox> darcs is dead, right?
2021-11-13 04:56:04 +0100Guest|1(~Guest|1@bp.ptr231.ptrcloud.net)
2021-11-13 04:59:59 +0100td_(~td@94.134.91.243) (Ping timeout: 256 seconds)
2021-11-13 05:00:46 +0100myShoggoth(~myShoggot@97-120-85-195.ptld.qwest.net)
2021-11-13 05:01:29 +0100td_(~td@muedsl-82-207-238-039.citykom.de)
2021-11-13 05:05:11 +0100falafel(~falafel@2603-8000-d800-688c-34f9-26f3-71b0-5b78.res6.spectrum.com) (Ping timeout: 264 seconds)
2021-11-13 05:07:12 +0100jbox(~jbox@user/jbox) (Quit: Leaving)
2021-11-13 05:10:23 +0100jbox(~jbox@user/jbox)
2021-11-13 05:11:43 +0100jbox(~jbox@user/jbox) (Client Quit)
2021-11-13 05:11:55 +0100myShoggoth(~myShoggot@97-120-85-195.ptld.qwest.net) (Read error: Connection reset by peer)
2021-11-13 05:12:13 +0100myShoggoth(~myShoggot@97-120-85-195.ptld.qwest.net)
2021-11-13 05:13:09 +0100unit73e(~emanuel@2001:818:e8dd:7c00:32b5:c2ff:fe6b:5291) (Ping timeout: 268 seconds)
2021-11-13 05:16:52 +0100jbox(~jbox@user/jbox)
2021-11-13 05:17:13 +0100Guest|1(~Guest|1@bp.ptr231.ptrcloud.net) (Quit: Connection closed)
2021-11-13 05:18:33 +0100atlas(~jbox@user/jbox)
2021-11-13 05:18:56 +0100myShoggoth(~myShoggot@97-120-85-195.ptld.qwest.net) (Read error: Connection reset by peer)
2021-11-13 05:19:13 +0100myShoggoth(~myShoggot@97-120-85-195.ptld.qwest.net)
2021-11-13 05:22:02 +0100ralu(~ralu@static.211.245.203.116.clients.your-server.de) (Ping timeout: 260 seconds)
2021-11-13 05:23:19 +0100lavaman(~lavaman@98.38.249.169) (Remote host closed the connection)
2021-11-13 05:23:34 +0100lavaman(~lavaman@98.38.249.169)
2021-11-13 05:23:40 +0100lavaman(~lavaman@98.38.249.169) (Remote host closed the connection)
2021-11-13 05:33:22 +0100jinsun__(~quassel@user/jinsun)
2021-11-13 05:34:35 +0100jbox(~jbox@user/jbox) (Quit: Leaving)
2021-11-13 05:34:44 +0100atlas(~jbox@user/jbox) (Quit: Leaving)
2021-11-13 05:34:44 +0100jinsun(~quassel@user/jinsun) (Ping timeout: 268 seconds)
2021-11-13 05:34:48 +0100img(~img@user/img) (Quit: ZNC 1.8.2 - https://znc.in)
2021-11-13 05:34:51 +0100 <dsal> I think I still use it now and then.
2021-11-13 05:34:57 +0100fvr(uid503686@uxbridge.irccloud.com)
2021-11-13 05:35:01 +0100jbox(~jbox@user/jbox)
2021-11-13 05:35:10 +0100jbox(~jbox@user/jbox) (Remote host closed the connection)
2021-11-13 05:35:11 +0100atlas(~jbox@user/jbox)
2021-11-13 05:38:20 +0100drdo(~drdo@roach0.drdo.eu) (Quit: Ping timeout (120 seconds))
2021-11-13 05:40:11 +0100img(~img@user/img)
2021-11-13 05:40:13 +0100shapr(~user@pool-100-36-247-68.washdc.fios.verizon.net) (Ping timeout: 256 seconds)
2021-11-13 05:41:57 +0100drdo(~drdo@roach0.drdo.eu)
2021-11-13 05:43:31 +0100drdo(~drdo@roach0.drdo.eu) (Client Quit)
2021-11-13 05:47:32 +0100drdo(~drdo@roach0.drdo.eu)
2021-11-13 05:48:43 +0100drdo(~drdo@roach0.drdo.eu) (Client Quit)
2021-11-13 05:52:37 +0100drdo(~drdo@roach0.drdo.eu)
2021-11-13 05:52:48 +0100wei2912(~wei2912@138.75.71.147)
2021-11-13 05:53:54 +0100drdo(~drdo@roach0.drdo.eu) (Client Quit)
2021-11-13 05:56:17 +0100drdo(~drdo@roach0.drdo.eu)
2021-11-13 05:56:39 +0100Guest|26(~Guest|26@c-73-153-68-22.hsd1.co.comcast.net)
2021-11-13 05:57:36 +0100ChaiTRex(~ChaiTRex@user/chaitrex) (Remote host closed the connection)
2021-11-13 05:58:00 +0100ChaiTRex(~ChaiTRex@user/chaitrex)
2021-11-13 05:58:06 +0100waleee(~waleee@h-98-128-228-119.NA.cust.bahnhof.se) (Quit: WeeChat 3.3)
2021-11-13 05:58:12 +0100yauhsien(~yauhsien@118-167-47-187.dynamic-ip.hinet.net)
2021-11-13 05:59:05 +0100drdo(~drdo@roach0.drdo.eu) (Client Quit)
2021-11-13 05:59:15 +0100mvk(~mvk@2607:fea8:5cc3:e900::df92) (Quit: Going elsewhere)
2021-11-13 06:00:15 +0100Guest|26(~Guest|26@c-73-153-68-22.hsd1.co.comcast.net) (Client Quit)
2021-11-13 06:02:00 +0100somnolent(~somnolent@c-73-153-68-22.hsd1.co.comcast.net)
2021-11-13 06:02:36 +0100yauhsien(~yauhsien@118-167-47-187.dynamic-ip.hinet.net) (Ping timeout: 245 seconds)
2021-11-13 06:03:08 +0100drdo(~drdo@roach0.drdo.eu)
2021-11-13 06:03:18 +0100 <somnolent> Hi, I'm trying to install ghcup and it fails with a cabal error
2021-11-13 06:03:25 +0100 <somnolent> cabal: error while loading shared libraries: libffi.so.7: cannot open shared object file: No such file or directory
2021-11-13 06:03:26 +0100 <somnolent> "cabal new-update" failed!
2021-11-13 06:03:35 +0100 <somnolent> Any idea how I should start debugging this?
2021-11-13 06:04:17 +0100drdo(~drdo@roach0.drdo.eu) (Client Quit)
2021-11-13 06:04:47 +0100 <sclv> what os
2021-11-13 06:06:25 +0100 <somnolent> pop-os
2021-11-13 06:06:33 +0100 <somnolent> very nearly ubuntu
2021-11-13 06:08:52 +0100drdo(~drdo@roach0.drdo.eu)
2021-11-13 06:09:28 +0100drdo(~drdo@roach0.drdo.eu) (Client Quit)
2021-11-13 06:10:03 +0100ralu(~ralu@static.211.245.203.116.clients.your-server.de)
2021-11-13 06:13:29 +0100 <sclv> i suspect you need to install libffi or libffi-dev?
2021-11-13 06:13:50 +0100drdo(~drdo@roach0.drdo.eu)
2021-11-13 06:14:02 +0100falafel(~falafel@2603-8000-d800-688c-34f9-26f3-71b0-5b78.res6.spectrum.com)
2021-11-13 06:14:14 +0100 <sclv> the cabal binary expects some system libs to be around. ghcup tries to install them for you but only on distros it has a clue about
2021-11-13 06:14:39 +0100drdo(~drdo@roach0.drdo.eu) (Client Quit)
2021-11-13 06:15:33 +0100 <somnolent> okay, apt-cache search libffi shows libffi-dev, libffi7, and a few others
2021-11-13 06:15:41 +0100 <somnolent> is there any way to know which I need?
2021-11-13 06:15:44 +0100 <somnolent> libffi7?
2021-11-13 06:15:52 +0100 <sclv> i suspect that
2021-11-13 06:16:14 +0100 <sclv> ghcup source will list what it usually looks for if you skim it
2021-11-13 06:18:12 +0100 <somnolent> that fixed it, thanks!
2021-11-13 06:18:24 +0100drdo(~drdo@roach0.drdo.eu)
2021-11-13 06:19:00 +0100gdown(~gavin@h69-11-248-109.kndrid.broadband.dynamic.tds.net)
2021-11-13 06:19:50 +0100drdo(~drdo@roach0.drdo.eu) (Client Quit)
2021-11-13 06:23:18 +0100drdo(~drdo@roach0.drdo.eu)
2021-11-13 06:25:02 +0100drdo(~drdo@roach0.drdo.eu) (Client Quit)
2021-11-13 06:25:58 +0100mvk(~mvk@2607:fea8:5cc3:e900::df92)
2021-11-13 06:29:39 +0100drdo(~drdo@roach0.drdo.eu)
2021-11-13 06:29:59 +0100ishutin_(~ishutin@92-249-179-61.pool.digikabel.hu) (Ping timeout: 250 seconds)
2021-11-13 06:30:13 +0100drdo(~drdo@roach0.drdo.eu) (Client Quit)
2021-11-13 06:31:50 +0100ishutin(~ishutin@84-236-40-131.pool.digikabel.hu)
2021-11-13 06:33:59 +0100drdo(~drdo@roach0.drdo.eu)
2021-11-13 06:35:24 +0100drdo(~drdo@roach0.drdo.eu) (Client Quit)
2021-11-13 06:38:21 +0100drdo(~drdo@roach0.drdo.eu)
2021-11-13 06:40:00 +0100zebrag(~chris@user/zebrag) (Remote host closed the connection)
2021-11-13 06:40:36 +0100drdo(~drdo@roach0.drdo.eu) (Client Quit)
2021-11-13 06:44:30 +0100drdo(~drdo@roach0.drdo.eu)
2021-11-13 06:45:47 +0100drdo(~drdo@roach0.drdo.eu) (Client Quit)
2021-11-13 06:49:02 +0100somnolent(~somnolent@c-73-153-68-22.hsd1.co.comcast.net) (Quit: Connection closed)
2021-11-13 06:49:54 +0100drdo(~drdo@roach0.drdo.eu)
2021-11-13 06:50:44 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-11-13 06:50:58 +0100drdo(~drdo@roach0.drdo.eu) (Client Quit)
2021-11-13 06:53:58 +0100drdo(~drdo@roach0.drdo.eu)
2021-11-13 06:56:10 +0100drdo(~drdo@roach0.drdo.eu) (Client Quit)
2021-11-13 06:59:27 +0100drdo(~drdo@roach0.drdo.eu)
2021-11-13 07:01:02 +0100yahb(xsbot@user/mniip/bot/yahb) (Ping timeout: 240 seconds)
2021-11-13 07:01:13 +0100yahb(xsbot@user/mniip/bot/yahb)
2021-11-13 07:01:21 +0100drdo(~drdo@roach0.drdo.eu) (Client Quit)
2021-11-13 07:05:11 +0100bgamari(~bgamari@64.223.227.106) (Ping timeout: 264 seconds)
2021-11-13 07:05:12 +0100drdo(~drdo@roach0.drdo.eu)
2021-11-13 07:06:19 +0100superbil(~superbil@1-34-176-171.hinet-ip.hinet.net) (Ping timeout: 268 seconds)
2021-11-13 07:06:32 +0100drdo(~drdo@roach0.drdo.eu) (Client Quit)
2021-11-13 07:07:06 +0100bgamari(~bgamari@70.16.103.161)
2021-11-13 07:07:15 +0100deadmarshal(~deadmarsh@95.38.228.182)
2021-11-13 07:07:20 +0100slowButPresent(~slowButPr@user/slowbutpresent) (Quit: leaving)
2021-11-13 07:08:03 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
2021-11-13 07:08:03 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host)
2021-11-13 07:08:03 +0100wroathe(~wroathe@user/wroathe)
2021-11-13 07:08:27 +0100superbil(~superbil@1-34-176-171.hinet-ip.hinet.net)
2021-11-13 07:10:50 +0100drdo(~drdo@roach0.drdo.eu)
2021-11-13 07:10:50 +0100drdo(~drdo@roach0.drdo.eu) (Client Quit)
2021-11-13 07:11:09 +0100drdo(~drdo@roach0.drdo.eu)
2021-11-13 07:12:15 +0100img(~img@user/img) (Quit: ZNC 1.8.2 - https://znc.in)
2021-11-13 07:13:01 +0100wroathe(~wroathe@user/wroathe) (Ping timeout: 245 seconds)
2021-11-13 07:14:16 +0100hololeap(~hololeap@user/hololeap) (Remote host closed the connection)
2021-11-13 07:15:37 +0100img(~img@user/img)
2021-11-13 07:15:45 +0100hololeap(~hololeap@user/hololeap)
2021-11-13 07:16:16 +0100[itchyjunk](~itchyjunk@user/itchyjunk/x-7353470) (Read error: Connection reset by peer)
2021-11-13 07:19:20 +0100burnsidesLlama(~burnsides@dhcp168-014.wadham.ox.ac.uk) (Remote host closed the connection)
2021-11-13 07:21:59 +0100falafel(~falafel@2603-8000-d800-688c-34f9-26f3-71b0-5b78.res6.spectrum.com) (Ping timeout: 264 seconds)
2021-11-13 07:22:46 +0100aplainzetakind(~johndoe@captainludd.powered.by.lunarbnc.net) (Quit: Free ZNC ~ Powered by LunarBNC: https://LunarBNC.net)
2021-11-13 07:22:49 +0100eruditass(uid248673@uxbridge.irccloud.com)
2021-11-13 07:24:04 +0100aplainzetakind(~johndoe@captainludd.powered.by.lunarbnc.net)
2021-11-13 07:25:03 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 256 seconds)
2021-11-13 07:29:28 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
2021-11-13 07:29:28 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host)
2021-11-13 07:29:28 +0100wroathe(~wroathe@user/wroathe)
2021-11-13 07:32:54 +0100 <energizer> has anybody made statistics on the most common functions used in popular packages?
2021-11-13 07:34:03 +0100falafel(~falafel@2603-8000-d800-688c-34f9-26f3-71b0-5b78.res6.spectrum.com)
2021-11-13 07:34:22 +0100gdown(~gavin@h69-11-248-109.kndrid.broadband.dynamic.tds.net) (Ping timeout: 268 seconds)
2021-11-13 07:35:25 +0100shidima(~shidima@84-104-108-90.cable.dynamic.v4.ziggo.nl)
2021-11-13 07:38:35 +0100mei3(~mei@user/mei)
2021-11-13 07:38:42 +0100mei3mei
2021-11-13 07:41:51 +0100falafel_(~falafel@cpe-76-168-195-162.socal.res.rr.com)
2021-11-13 07:45:23 +0100falafel(~falafel@2603-8000-d800-688c-34f9-26f3-71b0-5b78.res6.spectrum.com) (Ping timeout: 264 seconds)
2021-11-13 07:47:44 +0100aegon(~mike@174.127.249.180) (Remote host closed the connection)
2021-11-13 07:47:47 +0100mvk(~mvk@2607:fea8:5cc3:e900::df92) (Ping timeout: 264 seconds)
2021-11-13 07:49:35 +0100atlasjbox
2021-11-13 07:56:58 +0100chomwitt(~chomwitt@2a02:587:dc0f:7c00:12c3:7bff:fe6d:d374)
2021-11-13 07:59:37 +0100wroathe(~wroathe@user/wroathe) (Ping timeout: 256 seconds)
2021-11-13 08:06:33 +0100yauhsien(~yauhsien@118-167-47-187.dynamic-ip.hinet.net)
2021-11-13 08:07:14 +0100gehmehgeh(~user@user/gehmehgeh)
2021-11-13 08:10:57 +0100yauhsien(~yauhsien@118-167-47-187.dynamic-ip.hinet.net) (Ping timeout: 256 seconds)
2021-11-13 08:15:24 +0100pooryorick(~pooryoric@87-119-174-173.tll.elisa.ee)
2021-11-13 08:15:38 +0100falafel_(~falafel@cpe-76-168-195-162.socal.res.rr.com) (Ping timeout: 260 seconds)
2021-11-13 08:15:54 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
2021-11-13 08:15:54 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host)
2021-11-13 08:15:54 +0100wroathe(~wroathe@user/wroathe)
2021-11-13 08:16:33 +0100retroid_(~retro@176.255.22.26)
2021-11-13 08:19:32 +0100falafel_(~falafel@2603-8000-d800-688c-34f9-26f3-71b0-5b78.res6.spectrum.com)
2021-11-13 08:20:18 +0100wroathe(~wroathe@user/wroathe) (Ping timeout: 260 seconds)
2021-11-13 08:24:23 +0100falafel_(~falafel@2603-8000-d800-688c-34f9-26f3-71b0-5b78.res6.spectrum.com) (Ping timeout: 264 seconds)
2021-11-13 08:26:08 +0100lavaman(~lavaman@98.38.249.169)
2021-11-13 08:30:59 +0100lavaman(~lavaman@98.38.249.169) (Ping timeout: 264 seconds)
2021-11-13 08:31:20 +0100mbuf(~Shakthi@136.185.92.113)
2021-11-13 08:35:09 +0100max22-(~maxime@lfbn-ren-1-762-224.w81-53.abo.wanadoo.fr)
2021-11-13 08:35:58 +0100max22-(~maxime@lfbn-ren-1-762-224.w81-53.abo.wanadoo.fr) (Remote host closed the connection)
2021-11-13 08:41:20 +0100jmorris(uid433911@hampstead.irccloud.com)
2021-11-13 08:44:23 +0100takuan(~takuan@178-116-218-225.access.telenet.be)
2021-11-13 08:50:43 +0100yauhsien(~yauhsien@118-167-47-187.dynamic-ip.hinet.net)
2021-11-13 08:54:42 +0100 <sm> jbox: it's not dead. It's restin'!
2021-11-13 08:55:35 +0100yauhsien(~yauhsien@118-167-47-187.dynamic-ip.hinet.net) (Ping timeout: 264 seconds)
2021-11-13 08:55:35 +0100xff0x(~xff0x@2001:1a81:526d:df00:a345:8523:ad73:f70) (Ping timeout: 264 seconds)
2021-11-13 08:56:21 +0100xff0x(~xff0x@2001:1a81:526d:df00:9ede:d6:8225:5301)
2021-11-13 09:03:58 +0100 <sm> what's a good way to group [(a,b)] into [(a,[b])] ?
2021-11-13 09:05:05 +0100 <sm> extra:groupSort
2021-11-13 09:07:30 +0100 <sm> extra, that's the package I forgot
2021-11-13 09:07:54 +0100 <sm> everything useful lives there
2021-11-13 09:09:23 +0100deadmarshal(~deadmarsh@95.38.228.182) (Ping timeout: 264 seconds)
2021-11-13 09:12:43 +0100rtsn(~nstr@c-c7fe225c.07-59-7570703.bbcust.telenor.se) (Ping timeout: 256 seconds)
2021-11-13 09:13:26 +0100rtsn(~nstr@c-c7fe225c.07-59-7570703.bbcust.telenor.se)
2021-11-13 09:15:35 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-11-13 09:22:01 +0100Vajb(~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi) (Read error: Connection reset by peer)
2021-11-13 09:22:24 +0100Vajb(~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi)
2021-11-13 09:22:52 +0100Everything(~Everythin@37.115.210.35)
2021-11-13 09:22:56 +0100brainfreeze(~brainfree@2a03:1b20:4:f011::20d) (Remote host closed the connection)
2021-11-13 09:28:43 +0100mei(~mei@user/mei) (Read error: Connection reset by peer)
2021-11-13 09:31:31 +0100jollygood2(~bc8165b6@217.29.117.252) (Quit: http://www.okay.uz/ (Session timeout))
2021-11-13 09:35:42 +0100Pickchea(~private@user/pickchea)
2021-11-13 09:36:58 +0100acidjnk_new(~acidjnk@p200300d0c725147020cf3de033c5d4d3.dip0.t-ipconnect.de)
2021-11-13 09:40:20 +0100eggplantade(~Eggplanta@2600:1700:bef1:5e10:c075:f6f7:f2c7:7314) (Remote host closed the connection)
2021-11-13 09:48:11 +0100xff0x(~xff0x@2001:1a81:526d:df00:9ede:d6:8225:5301) (Ping timeout: 268 seconds)
2021-11-13 09:48:33 +0100xff0x(~xff0x@2001:1a81:526d:df00:e60d:1bd2:2f9f:7e19)
2021-11-13 09:49:53 +0100jinsun__jinusun
2021-11-13 09:49:57 +0100jinusunjinsun
2021-11-13 09:51:39 +0100tinwood(~tinwood@canonical/tinwood) (Remote host closed the connection)
2021-11-13 09:52:39 +0100deadmarshal(~deadmarsh@95.38.228.182)
2021-11-13 09:53:23 +0100forell(~forell@user/forell) (Quit: ZNC - https://znc.in)
2021-11-13 09:54:11 +0100forell(~forell@user/forell)
2021-11-13 09:54:41 +0100tinwood(~tinwood@general.default.akavanagh.uk0.bigv.io)
2021-11-13 09:54:41 +0100tinwood(~tinwood@general.default.akavanagh.uk0.bigv.io) (Changing host)
2021-11-13 09:54:41 +0100tinwood(~tinwood@canonical/tinwood)
2021-11-13 10:12:16 +0100Sgeo(~Sgeo@user/sgeo) (Read error: Connection reset by peer)
2021-11-13 10:12:55 +0100_ht(~quassel@82-169-194-8.biz.kpn.net)
2021-11-13 10:14:29 +0100ProofTechnique(sid79547@ilkley.irccloud.com) (Ping timeout: 256 seconds)
2021-11-13 10:14:29 +0100hamishmack(sid389057@hampstead.irccloud.com) (Ping timeout: 256 seconds)
2021-11-13 10:14:47 +0100JSharp(sid4580@lymington.irccloud.com) (Ping timeout: 264 seconds)
2021-11-13 10:15:03 +0100kristjansson_(sid126207@tinside.irccloud.com) (Ping timeout: 256 seconds)
2021-11-13 10:15:19 +0100jakesyl_(sid56879@hampstead.irccloud.com) (Ping timeout: 268 seconds)
2021-11-13 10:15:51 +0100JSharp(sid4580@lymington.irccloud.com)
2021-11-13 10:16:11 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
2021-11-13 10:16:11 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host)
2021-11-13 10:16:11 +0100wroathe(~wroathe@user/wroathe)
2021-11-13 10:16:35 +0100hendi(sid489601@lymington.irccloud.com) (Ping timeout: 264 seconds)
2021-11-13 10:16:35 +0100mc47(~mc47@xmonad/TheMC47)
2021-11-13 10:16:52 +0100jakesyl_(sid56879@hampstead.irccloud.com)
2021-11-13 10:17:04 +0100yauhsien(~yauhsien@118-167-47-187.dynamic-ip.hinet.net)
2021-11-13 10:17:33 +0100allbery_b(~geekosaur@xmonad/geekosaur)
2021-11-13 10:17:33 +0100geekosaur(~geekosaur@xmonad/geekosaur) (Killed (NickServ (GHOST command used by allbery_b)))
2021-11-13 10:17:36 +0100allbery_bgeekosaur
2021-11-13 10:17:42 +0100ProofTechnique(sid79547@ilkley.irccloud.com)
2021-11-13 10:18:07 +0100hamishmack(sid389057@hampstead.irccloud.com)
2021-11-13 10:18:53 +0100hendi(sid489601@lymington.irccloud.com)
2021-11-13 10:18:53 +0100kristjansson_(sid126207@tinside.irccloud.com)
2021-11-13 10:18:59 +0100ephemient(uid407513@lymington.irccloud.com) (Ping timeout: 264 seconds)
2021-11-13 10:18:59 +0100hongminhee(sid295@tinside.irccloud.com) (Ping timeout: 264 seconds)
2021-11-13 10:19:01 +0100S11001001(sid42510@ilkley.irccloud.com) (Ping timeout: 256 seconds)
2021-11-13 10:19:18 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 260 seconds)
2021-11-13 10:19:32 +0100jakesyl_(sid56879@hampstead.irccloud.com) (Max SendQ exceeded)
2021-11-13 10:19:35 +0100carter(sid14827@helmsley.irccloud.com) (Ping timeout: 264 seconds)
2021-11-13 10:19:35 +0100elvishjerricco(sid237756@helmsley.irccloud.com) (Ping timeout: 264 seconds)
2021-11-13 10:19:35 +0100Pent(sid313808@lymington.irccloud.com) (Ping timeout: 256 seconds)
2021-11-13 10:19:35 +0100obviyus(sid415299@user/obviyus) (Ping timeout: 256 seconds)
2021-11-13 10:19:35 +0100bjs(sid190364@user/bjs) (Ping timeout: 256 seconds)
2021-11-13 10:19:35 +0100SethTisue__(sid14912@ilkley.irccloud.com) (Ping timeout: 256 seconds)
2021-11-13 10:19:35 +0100degraafk(sid71464@lymington.irccloud.com) (Ping timeout: 256 seconds)
2021-11-13 10:19:46 +0100SethTisue__(sid14912@ilkley.irccloud.com)
2021-11-13 10:19:50 +0100Pent(sid313808@lymington.irccloud.com)
2021-11-13 10:20:09 +0100NiKaN(sid385034@helmsley.irccloud.com) (Ping timeout: 256 seconds)
2021-11-13 10:20:11 +0100aarchi(sid486183@uxbridge.irccloud.com) (Ping timeout: 264 seconds)
2021-11-13 10:20:13 +0100degraafk(sid71464@lymington.irccloud.com)
2021-11-13 10:20:25 +0100S11001001(sid42510@ilkley.irccloud.com)
2021-11-13 10:20:27 +0100jakesyl_(sid56879@hampstead.irccloud.com)
2021-11-13 10:20:42 +0100obviyus(sid415299@user/obviyus)
2021-11-13 10:21:10 +0100wroathe(~wroathe@user/wroathe) (Ping timeout: 260 seconds)
2021-11-13 10:21:20 +0100carter(sid14827@helmsley.irccloud.com)
2021-11-13 10:21:39 +0100ephemient(uid407513@lymington.irccloud.com)
2021-11-13 10:21:51 +0100amir(sid22336@user/amir) (Ping timeout: 256 seconds)
2021-11-13 10:22:03 +0100econo(uid147250@user/econo) (Quit: Connection closed for inactivity)
2021-11-13 10:23:29 +0100aarchi(sid486183@uxbridge.irccloud.com)
2021-11-13 10:23:47 +0100parseval(sid239098@helmsley.irccloud.com) (Ping timeout: 264 seconds)
2021-11-13 10:23:55 +0100elvishjerricco(sid237756@helmsley.irccloud.com)
2021-11-13 10:24:23 +0100fvr(uid503686@uxbridge.irccloud.com) (Ping timeout: 264 seconds)
2021-11-13 10:24:44 +0100NiKaN(sid385034@helmsley.irccloud.com)
2021-11-13 10:25:29 +0100max22-(~maxime@lfbn-ren-1-762-224.w81-53.abo.wanadoo.fr)
2021-11-13 10:25:36 +0100amir(sid22336@user/amir)
2021-11-13 10:26:23 +0100ehamberg(sid18208@hampstead.irccloud.com) (Ping timeout: 256 seconds)
2021-11-13 10:26:23 +0100gaze___(sid387101@helmsley.irccloud.com) (Ping timeout: 256 seconds)
2021-11-13 10:26:35 +0100hongminhee(sid295@tinside.irccloud.com)
2021-11-13 10:26:47 +0100bw(sid2730@user/betawaffle) (Ping timeout: 264 seconds)
2021-11-13 10:26:57 +0100obviyus(sid415299@user/obviyus) (Ping timeout: 256 seconds)
2021-11-13 10:26:57 +0100rtpg(sid443069@ilkley.irccloud.com) (Ping timeout: 256 seconds)
2021-11-13 10:27:07 +0100ehamberg(sid18208@hampstead.irccloud.com)
2021-11-13 10:27:08 +0100bjs(sid190364@user/bjs)
2021-11-13 10:27:24 +0100fvr(uid503686@uxbridge.irccloud.com)
2021-11-13 10:27:32 +0100parseval(sid239098@helmsley.irccloud.com)
2021-11-13 10:28:10 +0100obviyus(sid415299@user/obviyus)
2021-11-13 10:28:32 +0100 <Franciman> amesgen[m]: thanks
2021-11-13 10:29:32 +0100rtpg(sid443069@ilkley.irccloud.com)
2021-11-13 10:29:36 +0100gaze___(sid387101@helmsley.irccloud.com)
2021-11-13 10:29:38 +0100bw(sid2730@user/betawaffle)
2021-11-13 10:39:23 +0100deadmarshal(~deadmarsh@95.38.228.182) (Ping timeout: 264 seconds)
2021-11-13 10:40:54 +0100eggplantade(~Eggplanta@2600:1700:bef1:5e10:d49b:b47c:7bbd:b323)
2021-11-13 10:45:06 +0100eggplantade(~Eggplanta@2600:1700:bef1:5e10:d49b:b47c:7bbd:b323) (Ping timeout: 245 seconds)
2021-11-13 10:51:21 +0100notzmv(~zmv@user/notzmv) (Ping timeout: 245 seconds)
2021-11-13 10:54:25 +0100Vajb(~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi) (Read error: Connection reset by peer)
2021-11-13 10:55:18 +0100Vajb(~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi)
2021-11-13 10:55:27 +0100johnny_sitar(~artur@078088015209.bialystok.vectranet.pl)
2021-11-13 10:56:28 +0100aliosablack(~chomwitt@ppp-94-67-200-81.home.otenet.gr)
2021-11-13 10:56:40 +0100cosimone(~user@2001:b07:ae5:db26:a7aa:8027:6b4e:2fb3)
2021-11-13 10:58:26 +0100chomwitt(~chomwitt@2a02:587:dc0f:7c00:12c3:7bff:fe6d:d374) (Ping timeout: 245 seconds)
2021-11-13 11:02:15 +0100cosimone(~user@2001:b07:ae5:db26:a7aa:8027:6b4e:2fb3) (Quit: ERC (IRC client for Emacs 27.1))
2021-11-13 11:02:50 +0100cosimone(~user@2001:b07:ae5:db26:a7aa:8027:6b4e:2fb3)
2021-11-13 11:03:28 +0100tcard(~tcard@p2878075-ipngn18701hodogaya.kanagawa.ocn.ne.jp) (Quit: Leaving)
2021-11-13 11:04:17 +0100mmhat(~mmh@55d46755.access.ecotel.net)
2021-11-13 11:04:32 +0100etrepum(sid763@uxbridge.irccloud.com) (Quit: Connection closed for inactivity)
2021-11-13 11:05:36 +0100unit73e(~emanuel@2001:818:e8dd:7c00:32b5:c2ff:fe6b:5291)
2021-11-13 11:06:18 +0100 <sm> what operation transforms Just n to Just (n+1) and Nothing to Just 1 ?
2021-11-13 11:07:31 +0100 <sm> map (maybe 1 (+1))
2021-11-13 11:07:39 +0100 <sm> thank you rubber duck
2021-11-13 11:08:03 +0100deadmarshal(~deadmarsh@95.38.228.182)
2021-11-13 11:08:08 +0100tcard(~tcard@p2878075-ipngn18701hodogaya.kanagawa.ocn.ne.jp)
2021-11-13 11:08:24 +0100 <Hecate> yer welcome
2021-11-13 11:08:30 +0100 <Hecate> how are you doing sm btw?
2021-11-13 11:09:04 +0100 <sm> good thanks Hecate, other than coding a bit too late. And yourself ?
2021-11-13 11:09:16 +0100 <f-a> wait
2021-11-13 11:09:36 +0100 <f-a> maybe 1 (+1) value works too, withoutu the map, am I wrong?
2021-11-13 11:10:11 +0100 <f-a> > maybe 1 (+1) Nothing
2021-11-13 11:10:12 +0100 <lambdabot> 1
2021-11-13 11:10:15 +0100 <f-a> > maybe 1 (+1) (Just 8)
2021-11-13 11:10:16 +0100 <lambdabot> 9
2021-11-13 11:10:38 +0100lavaman(~lavaman@98.38.249.169)
2021-11-13 11:11:44 +0100 <int-e> f-a: the map was just context leaking into the IRC channel I think, not part of the answer
2021-11-13 11:12:08 +0100 <f-a> ah of course
2021-11-13 11:12:29 +0100 <Hecate> sm: starting to wake up, got a little html encoding issue with lucid & servant
2021-11-13 11:13:19 +0100 <unit73e> f-a, you're not wrong. that's exactly what sm wants
2021-11-13 11:13:38 +0100 <f-a> my question: I am writing a small game library
2021-11-13 11:14:00 +0100 <f-a> and I would like a «turn this flag on to display current fps»
2021-11-13 11:14:22 +0100 <f-a> I know «flag» in cabal files
2021-11-13 11:14:25 +0100 <f-a> but:
2021-11-13 11:14:30 +0100fvr(uid503686@uxbridge.irccloud.com) (Quit: Connection closed for inactivity)
2021-11-13 11:14:47 +0100 <f-a> • can I conditionally compile my library based on these flags?; and
2021-11-13 11:14:54 +0100 <unit73e> hum... but that's for users correct? forcing users to use cabal... not a good practice
2021-11-13 11:15:07 +0100 <f-a> • how will the end user of the library be able pass those flags?
2021-11-13 11:15:13 +0100 <unit73e> he won't
2021-11-13 11:15:17 +0100 <f-a> yeah it is for the user unit73e
2021-11-13 11:15:18 +0100lavaman(~lavaman@98.38.249.169) (Ping timeout: 260 seconds)
2021-11-13 11:15:26 +0100 <unit73e> that's engine logic
2021-11-13 11:15:29 +0100 <f-a> I am of course open to suggestions
2021-11-13 11:15:31 +0100smis only loosely in control of this problem. Here is more of what I needed:
2021-11-13 11:15:31 +0100sm```haskell
2021-11-13 11:15:31 +0100sm-- Crash sites within a row, and how many times at each one.
2021-11-13 11:15:31 +0100smtype RowCrashes = M.Map CaveCol Int
2021-11-13 11:15:31 +0100sm-- Add a new crash site to a RowCrashes.
2021-11-13 11:15:32 +0100smrowCrashesAdd col rowcrashes = M.alter (maybe (Just 1) (Just . (+1))) col rowcrashes
2021-11-13 11:15:32 +0100sm```
2021-11-13 11:15:47 +0100 <unit73e> you should just use an actual flag, in code
2021-11-13 11:16:05 +0100 <unit73e> in engines there's usually a key for that
2021-11-13 11:16:12 +0100 <sm> I wouldn't use cabal flags f-a, they aren't worth the added complexity
2021-11-13 11:16:31 +0100 <sm> and build time
2021-11-13 11:17:00 +0100 <f-a> sm: you would go for Bool -> … like unit73e then?
2021-11-13 11:17:16 +0100 <unit73e> users usually want to enable/disable fps while the game is running
2021-11-13 11:17:16 +0100 <sm> a runtime flag, certainly
2021-11-13 11:17:25 +0100 <unit73e> not at start
2021-11-13 11:17:35 +0100 <unit73e> like F12 shows fps
2021-11-13 11:17:37 +0100 <unit73e> something like that
2021-11-13 11:17:49 +0100 <unit73e> or an option in the meny
2021-11-13 11:17:51 +0100 <unit73e> or an option in the menu
2021-11-13 11:18:00 +0100 <sm> I wouldn't mind specifying it at start of game, but changing on the fly while game is running is ideal of course
2021-11-13 11:18:11 +0100 <f-a> mhhh I see, thanks for the feedback
2021-11-13 11:18:26 +0100 <sm> but why ? Isn't it something you can always provide, and game can use it or not ?
2021-11-13 11:18:58 +0100 <f-a> I could provide it in the `draw` function :: s -> FPS (Int) -> Plane
2021-11-13 11:18:59 +0100stefan-_(~cri@42dots.de) (Ping timeout: 264 seconds)
2021-11-13 11:19:16 +0100 <unit73e> enabling/disabling show fps in runtime is a convention. if you do that as an cmd option gamers will be confused why it's only available as an option.
2021-11-13 11:19:26 +0100 <unit73e> conventions are important
2021-11-13 11:19:48 +0100 <unit73e> yeah you should have some sort of state
2021-11-13 11:21:30 +0100 <f-a> https://hackage.haskell.org/package/ansi-terminal-game-1.5.0.0/docs/Terminal-Game.html#t:Game these are the current logic/draw function sigs, unit73e , I guess adding it to gDrawFunction is a possibility and then if the user does not need it, they will ignore it
2021-11-13 11:22:10 +0100Tuplanolla(~Tuplanoll@91-159-69-50.elisa-laajakaista.fi)
2021-11-13 11:22:50 +0100stefan-_(~cri@42dots.de)
2021-11-13 11:22:55 +0100 <unit73e> you can infer the fps with ticks per second
2021-11-13 11:23:06 +0100 <f-a> you cannot as now
2021-11-13 11:23:30 +0100 <f-a> Ticks are the same even if frames (drawing frames) are dropped
2021-11-13 11:23:40 +0100 <unit73e> I see
2021-11-13 11:23:46 +0100Midjak(~Midjak@82-65-111-221.subs.proxad.net)
2021-11-13 11:23:51 +0100 <f-a> (so the game runs at the same speed on every machine)
2021-11-13 11:24:14 +0100 <unit73e> you might want other options so perhaps it would be included in a record or data for all runtime options
2021-11-13 11:24:33 +0100 <unit73e> and your loop would cycle with those options
2021-11-13 11:24:52 +0100 <unit73e> one being show fps
2021-11-13 11:25:56 +0100 <unit73e> that would also allow you to have terminal options using the same runtime options structure
2021-11-13 11:26:56 +0100 <unit73e> that would be your options state
2021-11-13 11:27:23 +0100deadmarshal(~deadmarsh@95.38.228.182) (Ping timeout: 264 seconds)
2021-11-13 11:28:14 +0100 <unit73e> I wouldn't do options with something generic with a Map but I bet someone would think that way :P
2021-11-13 11:29:37 +0100 <unit73e> speaking of game engines, I added one more example here: https://gitlab.com/unit73e/sdl2-examples
2021-11-13 11:29:47 +0100yauhsien(~yauhsien@118-167-47-187.dynamic-ip.hinet.net) (Remote host closed the connection)
2021-11-13 11:30:07 +0100zer0bitz(~zer0bitz@dsl-hkibng31-54fae3-116.dhcp.inet.fi)
2021-11-13 11:31:22 +0100 <unit73e> it's about texture clipping, for animations, it's not exactly how I would like yet but the idea is to pack all your sprites in N^2 textures, make a JSON with the packer, and load animations with it. I need to make a better data structure though.
2021-11-13 11:31:36 +0100 <f-a> do they add material to lazyfoo’s ones?
2021-11-13 11:31:47 +0100 <f-a> if so you could see if they get merged
2021-11-13 11:31:47 +0100 <unit73e> I don't think so
2021-11-13 11:31:58 +0100 <unit73e> lazyfoo examples are very basic
2021-11-13 11:32:16 +0100 <f-a> they are
2021-11-13 11:32:19 +0100 <unit73e> they're not fit for proper game development though the examples do help
2021-11-13 11:32:39 +0100 <f-a> and it is tricky to understand why they are wrong
2021-11-13 11:32:46 +0100 <unit73e> yeah
2021-11-13 11:32:52 +0100yauhsien(~yauhsien@118-167-47-187.dynamic-ip.hinet.net)
2021-11-13 11:34:17 +0100 <unit73e> one example is textures should always be N^2 because VRAM is in N^2 blocks so it's more efficient to have images with that size. lazyfoo uses several images instead. but the part that really bugged me was movement.
2021-11-13 11:34:34 +0100 <unit73e> it's not smooth at all. what lazyfoo did was press arrows and the player moves N pixels
2021-11-13 11:34:39 +0100 <unit73e> once per keystroke
2021-11-13 11:36:46 +0100 <unit73e> he does end up explaning scrolling but I was not impressed. also lazyfoo doesn't want ports in other languages and that was the deal breaker.
2021-11-13 11:37:42 +0100yauhsien(~yauhsien@118-167-47-187.dynamic-ip.hinet.net) (Ping timeout: 260 seconds)
2021-11-13 11:39:48 +0100tzh(~tzh@c-24-21-73-154.hsd1.wa.comcast.net) (Quit: zzz)
2021-11-13 11:40:30 +0100MiguelNegrao(~MiguelNeg@194.210.216.223)
2021-11-13 11:41:48 +0100 <MiguelNegrao> Hi all. Is there a package providing a variable size tuple backed by a type list ? Something like (a,b,c) ~ Tuple '[a,b,c]
2021-11-13 11:42:13 +0100 <unit73e> is that your real name?
2021-11-13 11:42:23 +0100 <MiguelNegrao> yes
2021-11-13 11:42:33 +0100 <unit73e> lol just curious
2021-11-13 11:42:36 +0100 <MiguelNegrao> why ?
2021-11-13 11:42:44 +0100 <unit73e> well it's somewhat funny
2021-11-13 11:43:08 +0100 <unit73e> but don't worry mine is funny too because of tooth paste, couto is my last name
2021-11-13 11:43:16 +0100 <MiguelNegrao> For Brazilians I guess it would be
2021-11-13 11:43:25 +0100 <MiguelNegrao> In Portugal it is pretty normal
2021-11-13 11:43:34 +0100 <unit73e> I'm portuguese
2021-11-13 11:43:44 +0100 <unit73e> and yeah I guess
2021-11-13 11:44:05 +0100 <unit73e> just to be clear
2021-11-13 11:44:09 +0100 <MiguelNegrao> I think it comes from italian. https://en.wikipedia.org/wiki/Negroni_(surname)
2021-11-13 11:44:16 +0100 <unit73e> you want to transform a list to a tuple?
2021-11-13 11:44:23 +0100 <unit73e> of any size?
2021-11-13 11:44:57 +0100 <MiguelNegrao> Not exactly, a list would have to have all elements of same type
2021-11-13 11:45:07 +0100 <MiguelNegrao> kind of like an HList but using normal tuples
2021-11-13 11:45:15 +0100aliosablack(~chomwitt@ppp-94-67-200-81.home.otenet.gr) (Quit: Leaving)
2021-11-13 11:45:24 +0100 <unit73e> why not just use an HList?
2021-11-13 11:46:36 +0100smfound this needful:
2021-11-13 11:46:36 +0100sm```haskell
2021-11-13 11:46:36 +0100sminsertOrUpdate :: Ord k => v -> (v -> v) -> k -> M.Map k v -> M.Map k v
2021-11-13 11:46:36 +0100sminsertOrUpdate newval valupdatefn key = M.alter (maybe (Just newval) (Just . valupdatefn)) key
2021-11-13 11:46:36 +0100sm```
2021-11-13 11:47:31 +0100 <MiguelNegrao> I guess I thought people are more familiar with tuples
2021-11-13 11:47:48 +0100 <MiguelNegrao> Something similar is implemented here https://hackage.haskell.org/package/vivid-0.5.1.0/docs/Vivid-SynthDef-TypesafeArgs.html
2021-11-13 11:47:54 +0100 <MiguelNegrao> the VarArg type
2021-11-13 11:48:05 +0100 <MiguelNegrao> Sorry VarList
2021-11-13 11:48:41 +0100 <unit73e> it's not that different. there's data.tuple.select but I would just use an HList
2021-11-13 11:48:57 +0100 <MiguelNegrao> Ok, thanks.
2021-11-13 11:49:07 +0100 <MiguelNegrao> Good to know there are other Haskelers in Portugal. :-)
2021-11-13 11:49:32 +0100 <unit73e> yup it's already hard enough to convince functional programming is good
2021-11-13 11:49:59 +0100 <MiguelNegrao> Do you use Haskell at work ?
2021-11-13 11:50:11 +0100 <unit73e> unfortunately no
2021-11-13 11:50:23 +0100 <unit73e> you probably know portugal is a java country
2021-11-13 11:50:25 +0100mniip(mniip@libera/staff/mniip) (Quit: This page is intentionally left blank.)
2021-11-13 11:51:22 +0100 <unit73e> but I might take an haskell project if the opportunity arrives
2021-11-13 11:52:02 +0100chomwitt(~chomwitt@2a02:587:dc12:3f00:12c3:7bff:fe6d:d374)
2021-11-13 11:54:29 +0100MiguelNegrao(~MiguelNeg@194.210.216.223) (Quit: Client closed)
2021-11-13 11:57:45 +0100yauhsien(~yauhsien@118-167-47-187.dynamic-ip.hinet.net)
2021-11-13 11:57:48 +0100mniip(mniip@libera/staff/mniip)
2021-11-13 12:00:52 +0100alx741(~alx741@181.196.68.187)
2021-11-13 12:08:06 +0100xkuru(~xkuru@user/xkuru)
2021-11-13 12:13:08 +0100jgeerds(~jgeerds@55d41b94.access.ecotel.net)
2021-11-13 12:15:47 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-11-13 12:17:45 +0100yauhsien(~yauhsien@118-167-47-187.dynamic-ip.hinet.net) (Remote host closed the connection)
2021-11-13 12:18:22 +0100yauhsien(~yauhsien@118-167-47-187.dynamic-ip.hinet.net)
2021-11-13 12:22:58 +0100yauhsien(~yauhsien@118-167-47-187.dynamic-ip.hinet.net) (Ping timeout: 260 seconds)
2021-11-13 12:23:55 +0100FragByte(~christian@user/fragbyte) (Quit: Quit)
2021-11-13 12:25:44 +0100FragByte(~christian@user/fragbyte)
2021-11-13 12:30:14 +0100DNH(~DNH@8.43.122.53)
2021-11-13 12:30:32 +0100DNH(~DNH@8.43.122.53) (Client Quit)
2021-11-13 12:37:54 +0100max22-(~maxime@lfbn-ren-1-762-224.w81-53.abo.wanadoo.fr) (Remote host closed the connection)
2021-11-13 12:38:43 +0100max22-(~maxime@lfbn-ren-1-762-224.w81-53.abo.wanadoo.fr)
2021-11-13 12:40:07 +0100pooryorick(~pooryoric@87-119-174-173.tll.elisa.ee) (Ping timeout: 256 seconds)
2021-11-13 12:41:55 +0100pooryorick(~pooryoric@87-119-174-173.tll.elisa.ee)
2021-11-13 12:42:50 +0100eggplantade(~Eggplanta@2600:1700:bef1:5e10:d49b:b47c:7bbd:b323)
2021-11-13 12:46:13 +0100acidjnk_new(~acidjnk@p200300d0c725147020cf3de033c5d4d3.dip0.t-ipconnect.de) (Ping timeout: 265 seconds)
2021-11-13 12:48:01 +0100eggplantade(~Eggplanta@2600:1700:bef1:5e10:d49b:b47c:7bbd:b323) (Ping timeout: 245 seconds)
2021-11-13 12:48:41 +0100yauhsien(~yauhsien@118-167-47-187.dynamic-ip.hinet.net)
2021-11-13 12:50:19 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 256 seconds)
2021-11-13 12:52:28 +0100jollygood2(~bc8165b6@217.29.117.252)
2021-11-13 12:53:47 +0100yauhsien(~yauhsien@118-167-47-187.dynamic-ip.hinet.net) (Ping timeout: 264 seconds)
2021-11-13 12:56:03 +0100MiguelNegrao(~MiguelNeg@194.210.216.113)
2021-11-13 12:56:15 +0100MiguelNegrao(~MiguelNeg@194.210.216.113) (Client Quit)
2021-11-13 13:02:38 +0100Pickchea(~private@user/pickchea) (Ping timeout: 260 seconds)
2021-11-13 13:06:08 +0100caubert(~caubert@136.244.111.235) (Quit: WeeChat 3.2)
2021-11-13 13:07:12 +0100caubert(~caubert@136.244.111.235)
2021-11-13 13:07:39 +0100wei2912(~wei2912@138.75.71.147) (Quit: Lost terminal)
2021-11-13 13:14:20 +0100jassob1(~jassob@h-98-128-167-112.NA.cust.bahnhof.se) (Ping timeout: 246 seconds)
2021-11-13 13:22:52 +0100yauhsien(~yauhsien@118-167-47-187.dynamic-ip.hinet.net)
2021-11-13 13:27:50 +0100yauhsien(~yauhsien@118-167-47-187.dynamic-ip.hinet.net) (Ping timeout: 260 seconds)
2021-11-13 13:28:00 +0100burnsidesLlama(~burnsides@dhcp168-014.wadham.ox.ac.uk)
2021-11-13 13:28:38 +0100max22-(~maxime@lfbn-ren-1-762-224.w81-53.abo.wanadoo.fr) (Remote host closed the connection)
2021-11-13 13:29:14 +0100max22-(~maxime@lfbn-ren-1-762-224.w81-53.abo.wanadoo.fr)
2021-11-13 13:35:57 +0100__monty__(~toonn@user/toonn)
2021-11-13 13:38:00 +0100Guest80(~Guest80@pd95ed7c0.dip0.t-ipconnect.de)
2021-11-13 13:45:37 +0100jgeerds(~jgeerds@55d41b94.access.ecotel.net) (Ping timeout: 268 seconds)
2021-11-13 13:46:02 +0100_ht(~quassel@82-169-194-8.biz.kpn.net) (Ping timeout: 260 seconds)
2021-11-13 13:46:15 +0100_ht(~quassel@37.120.218.148)
2021-11-13 13:52:36 +0100jbox(~jbox@user/jbox) (Ping timeout: 245 seconds)
2021-11-13 13:59:44 +0100mark___(~a@p200300ef973db1754086f0a6a24fc4dd.dip0.t-ipconnect.de)
2021-11-13 14:02:37 +0100v01d4lph4(~v01d4lph4@user/v01d4lph4)
2021-11-13 14:03:13 +0100zava(~zava@ip5f5bdf0f.dynamic.kabel-deutschland.de)
2021-11-13 14:09:03 +0100max22-(~maxime@lfbn-ren-1-762-224.w81-53.abo.wanadoo.fr) (Ping timeout: 268 seconds)
2021-11-13 14:09:06 +0100Pickchea(~private@user/pickchea)
2021-11-13 14:22:00 +0100jpds(~jpds@gateway/tor-sasl/jpds) (Ping timeout: 276 seconds)
2021-11-13 14:22:20 +0100[itchyjunk](~itchyjunk@user/itchyjunk/x-7353470)
2021-11-13 14:23:29 +0100xdej(~xdej@quatramaran.salle-s.org)
2021-11-13 14:23:41 +0100jpds(~jpds@gateway/tor-sasl/jpds)
2021-11-13 14:25:41 +0100mark___(~a@p200300ef973db1754086f0a6a24fc4dd.dip0.t-ipconnect.de) (Quit: WeeChat 3.0.1)
2021-11-13 14:26:38 +0100yauhsien(~yauhsien@118-167-47-187.dynamic-ip.hinet.net)
2021-11-13 14:27:22 +0100 <Profpatsch> tryError :: forall exc a. (Exception exc) => IO a -> IO (Either Error a)
2021-11-13 14:27:25 +0100 <Profpatsch> tryError io = Exc.try @exc io <&> first exceptionToError
2021-11-13 14:27:36 +0100 <Profpatsch> GHC complains at the type application “not in scope: type variable exc”
2021-11-13 14:27:46 +0100 <Profpatsch> But I explicitely brought it into scope with the forall, no?
2021-11-13 14:27:55 +0100 <hpc> ScopedTypeVariables maybe?
2021-11-13 14:27:57 +0100 <Profpatsch> Does it need to be mentioned on the right side of => to be in scope?
2021-11-13 14:28:19 +0100 <Profpatsch> hpc: It asks for AllowAmbiguousTypeVAriables now
2021-11-13 14:28:30 +0100 <Profpatsch> Hm
2021-11-13 14:29:03 +0100 <Profpatsch> Ah, apparently that was a problem before TypeApplications https://stackoverflow.com/questions/45128492/what-is-allowambiguoustypes-and-why-is-it-needed-in-t…
2021-11-13 14:29:10 +0100 <Profpatsch> So it looks like I’m safe more or less
2021-11-13 14:29:20 +0100 <Profpatsch> is gonna require TypeApplications from downstream hm
2021-11-13 14:29:29 +0100skippy(~slice@user/slice)
2021-11-13 14:29:30 +0100 <hpc> yeah, you just have to call tryError @Whatever do {...}
2021-11-13 14:31:18 +0100yauhsien(~yauhsien@118-167-47-187.dynamic-ip.hinet.net) (Ping timeout: 260 seconds)
2021-11-13 14:32:28 +0100 <Profpatsch> that was the idea, yeah
2021-11-13 14:33:00 +0100 <Profpatsch> But then the code won’t compile before 8.0.1 hmm
2021-11-13 14:34:35 +0100_ht(~quassel@37.120.218.148) (Ping timeout: 256 seconds)
2021-11-13 14:35:02 +0100_ht(~quassel@82-169-194-8.biz.kpn.net)
2021-11-13 14:45:17 +0100eggplantade(~Eggplanta@2600:1700:bef1:5e10:d49b:b47c:7bbd:b323)
2021-11-13 14:46:17 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-11-13 14:48:27 +0100jkaye(~jkaye@2601:281:8300:7530:2d7e:ffab:3b55:862f)
2021-11-13 14:48:29 +0100Guest42(~Guest42@eth-west-pareq2-46-193-4-100.wb.wifirst.net)
2021-11-13 14:48:48 +0100 <Guest42> what't the state of game developement in functional programming?
2021-11-13 14:49:17 +0100 <int-e> <insert state-less joke here>
2021-11-13 14:49:37 +0100 <jkaye> https://wiki.haskell.org/Game_Development
2021-11-13 14:49:41 +0100eggplantade(~Eggplanta@2600:1700:bef1:5e10:d49b:b47c:7bbd:b323) (Ping timeout: 245 seconds)
2021-11-13 14:51:42 +0100 <f-a> Guest42: that is a large topic, any specific requirements?
2021-11-13 14:52:02 +0100 <f-a> gaming goes from roguelikes to VR stuff
2021-11-13 14:53:48 +0100machinedgod(~machinedg@24.105.81.50)
2021-11-13 14:55:42 +0100 <f-a> also: join #haskell-game , lots of useful discussion going there
2021-11-13 14:57:02 +0100skippy(~slice@user/slice) (Quit: cya)
2021-11-13 14:57:03 +0100slowButPresent(~slowButPr@user/slowbutpresent)
2021-11-13 14:57:25 +0100slice(~slice@user/slice)
2021-11-13 14:58:33 +0100slice(~slice@user/slice) (Client Quit)
2021-11-13 15:09:35 +0100 <Guest42> f-a: well let's say we're talking about a 2d roguelike like Dead Cells
2021-11-13 15:11:09 +0100 <Guest42> how does one model the "game loop" in a pure functional way? will it perform badly compared to imperative languages?
2021-11-13 15:12:17 +0100lavaman(~lavaman@98.38.249.169)
2021-11-13 15:12:23 +0100bitdex(~bitdex@gateway/tor-sasl/bitdex)
2021-11-13 15:12:47 +0100 <f-a> Guest42: I would advise to start with sdl2, if you do not fancy that, shop around. A «game loop» can be made pure in various ways (callbacks, etc.)
2021-11-13 15:13:09 +0100 <f-a> for performance, use the appropriate tools (criterion, etc.) and you will be fine
2021-11-13 15:15:44 +0100 <f-a> game making seldom is a clean job
2021-11-13 15:16:09 +0100 <Franciman> it surely is not the most exciting thing around
2021-11-13 15:16:13 +0100 <Franciman> https://www.patreon.com/posts/58563886 it being
2021-11-13 15:16:55 +0100 <Franciman> as you can see this is not functional programming
2021-11-13 15:17:05 +0100lavaman(~lavaman@98.38.249.169) (Ping timeout: 256 seconds)
2021-11-13 15:17:20 +0100 <Franciman> yet it seems an impacting thing
2021-11-13 15:17:49 +0100sydddddd(~syd@cpc91646-hart11-2-0-cust432.11-3.cable.virginm.net) (Quit: Lost terminal)
2021-11-13 15:19:26 +0100unit73e(~emanuel@2001:818:e8dd:7c00:32b5:c2ff:fe6b:5291) (Ping timeout: 265 seconds)
2021-11-13 15:19:43 +0100 <Guest80> The game loop can be a function that takes the previous game-state, an event (input or timer) and creates the new state. Performance depends on the complexity of your state and the computations you do on it. Of course this can vary very much depending on your game. But for many games this shouldn't be an issue.
2021-11-13 15:19:58 +0100 <maerwald> Guest42: maybe check out LambdaHack
2021-11-13 15:20:47 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 264 seconds)
2021-11-13 15:21:09 +0100 <Guest42> Guest80: my intuition tells me that the game state will have to be copied every frame so there is the overhead of recalculating it and GC-ing it, no?
2021-11-13 15:21:35 +0100 <Guest42> maerwald: cool!
2021-11-13 15:22:43 +0100 <jkaye> Guest42, not necessarily, immutability allows for all sorts of optimizations that would not otherwise be possible
2021-11-13 15:23:16 +0100 <jkaye> E.g. if an immutable pure state is being replaced, the compiler can freely perform the update in place since it knows that the previous state would just be discarded anyway
2021-11-13 15:23:22 +0100 <Guest80> Guest42: Depends on the datastructures you use. If most of the state is static (lets say the "world") and only some dynamic objects change then the new state will refer to the same static stuff in each iteration. So static objects won't be copied/reallocated. They will reuse the same values in each iteration.
2021-11-13 15:23:33 +0100 <jkaye> So it's a little different than what you might expect from the imperative (C++ etc) world
2021-11-13 15:25:07 +0100 <Guest42> jkaye: do I have ways to explicitly make the compiler (say GHC), to "change this data structure in place" ?
2021-11-13 15:25:08 +0100 <Guest80> In Haskell you usually end up with a kind of "copy on write" model (if think in imperative terms).
2021-11-13 15:26:08 +0100 <Guest80> Guest42: You shouldn't think that way if you want to write pure functional programs.
2021-11-13 15:27:08 +0100 <Guest80> Of course you can... but why use Haskell when you want to mess around with mutable state? ;D
2021-11-13 15:29:28 +0100 <Guest42> well I imagine you can build quite nice abstractions if you get the critical parts to perform right
2021-11-13 15:29:49 +0100max22-(~maxime@2a01cb08833598001b74a41a00edb48c.ipv6.abo.wanadoo.fr)
2021-11-13 15:30:00 +0100 <Guest42> LambdaHack is quite a nice place to start for me, reading their code will be a pleasure
2021-11-13 15:32:42 +0100jollygood2(~bc8165b6@217.29.117.252) (Quit: http://www.okay.uz/ (Ping timeout))
2021-11-13 15:32:42 +0100johnny_sitar(~artur@078088015209.bialystok.vectranet.pl) (Read error: Connection reset by peer)
2021-11-13 15:35:18 +0100gawen(~gawen@user/gawen) (Quit: cya)
2021-11-13 15:35:31 +0100zebrag(~chris@user/zebrag)
2021-11-13 15:35:39 +0100zaquest(~notzaques@5.130.79.72)
2021-11-13 15:36:39 +0100gawen(~gawen@user/gawen)
2021-11-13 15:37:06 +0100shapr(~user@pool-100-36-247-68.washdc.fios.verizon.net)
2021-11-13 15:37:20 +0100 <fluxit> Guest42: If you're open to more options, I'm having a good experience writing a game using the brick library. https://samtay.github.io/posts/introduction-to-brick got me started.
2021-11-13 15:37:21 +0100 <shapr> good MORNING!
2021-11-13 15:37:31 +0100jassob1(~jassob@h-98-128-167-112.NA.cust.bahnhof.se)
2021-11-13 15:37:32 +0100Guest80(~Guest80@pd95ed7c0.dip0.t-ipconnect.de) (Ping timeout: 256 seconds)
2021-11-13 15:39:40 +0100EvanR(~evan@user/evanr)
2021-11-13 15:46:00 +0100eggplantade(~Eggplanta@2600:1700:bef1:5e10:7032:7aef:17c2:c830)
2021-11-13 15:48:22 +0100jgeerds(~jgeerds@55d41b94.access.ecotel.net)
2021-11-13 15:50:06 +0100eggplantade(~Eggplanta@2600:1700:bef1:5e10:7032:7aef:17c2:c830) (Ping timeout: 245 seconds)
2021-11-13 15:51:35 +0100johnny_sitar(~artur@078088015209.bialystok.vectranet.pl)
2021-11-13 15:52:04 +0100tafa(~tafa@2a04:52c0:101:85c::1) (Quit: ZNC - https://znc.in)
2021-11-13 15:53:05 +0100renzhi(~xp@2607:fa49:6500:b100::6e7f)
2021-11-13 15:54:24 +0100tafa(~tafa@2a04:52c0:101:85c::1)
2021-11-13 15:54:39 +0100max22-(~maxime@2a01cb08833598001b74a41a00edb48c.ipv6.abo.wanadoo.fr) (Remote host closed the connection)
2021-11-13 15:55:39 +0100zincy_(~zincy@2a00:23c8:970c:4801:350f:7ee:191a:6f65)
2021-11-13 15:57:59 +0100Midjak(~Midjak@82-65-111-221.subs.proxad.net) (Ping timeout: 264 seconds)
2021-11-13 15:58:58 +0100pavonia(~user@user/siracusa) (Quit: Bye!)
2021-11-13 16:05:37 +0100son0p(~ff@181.136.122.143)
2021-11-13 16:06:59 +0100zincy_(~zincy@2a00:23c8:970c:4801:350f:7ee:191a:6f65) (Remote host closed the connection)
2021-11-13 16:07:52 +0100zincy_(~zincy@host86-181-60-139.range86-181.btcentralplus.com)
2021-11-13 16:08:28 +0100Vajb(~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi) (Read error: Connection reset by peer)
2021-11-13 16:09:23 +0100johnny_sitar(~artur@078088015209.bialystok.vectranet.pl) (Ping timeout: 264 seconds)
2021-11-13 16:10:18 +0100Vajb(~Vajb@2001:999:50:707f:90e9:e423:1236:7744)
2021-11-13 16:11:41 +0100yauhsien(~yauhsien@118-167-47-187.dynamic-ip.hinet.net)
2021-11-13 16:12:00 +0100pretty_dumm_guy(trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655)
2021-11-13 16:12:01 +0100jmorris(uid433911@hampstead.irccloud.com) (Quit: Connection closed for inactivity)
2021-11-13 16:14:47 +0100Everything(~Everythin@37.115.210.35) (Quit: leaving)
2021-11-13 16:19:09 +0100yauhsien(~yauhsien@118-167-47-187.dynamic-ip.hinet.net) (Remote host closed the connection)
2021-11-13 16:25:03 +0100yauhsien(~yauhsien@118-167-47-187.dynamic-ip.hinet.net)
2021-11-13 16:27:59 +0100jkaye(~jkaye@2601:281:8300:7530:2d7e:ffab:3b55:862f) (Ping timeout: 264 seconds)
2021-11-13 16:34:19 +0100burnsidesLlama(~burnsides@dhcp168-014.wadham.ox.ac.uk) (Remote host closed the connection)
2021-11-13 16:38:12 +0100Lycurgus(~juan@98.4.112.204)
2021-11-13 16:40:07 +0100EvanR(~evan@user/evanr) (Ping timeout: 268 seconds)
2021-11-13 16:41:58 +0100Vajb(~Vajb@2001:999:50:707f:90e9:e423:1236:7744) (Ping timeout: 268 seconds)
2021-11-13 16:42:17 +0100sprout_(~quassel@2a02:a467:ccd6:1:9825:20f3:f69:55d5) (Ping timeout: 250 seconds)
2021-11-13 16:46:20 +0100sprout(~quassel@2a02:a467:ccd6:1:34a5:6053:7bcf:2391)
2021-11-13 16:47:54 +0100waleee(~waleee@h-98-128-228-119.NA.cust.bahnhof.se)
2021-11-13 16:52:51 +0100machinedgod(~machinedg@24.105.81.50) (Ping timeout: 256 seconds)
2021-11-13 16:55:56 +0100xff0x(~xff0x@2001:1a81:526d:df00:e60d:1bd2:2f9f:7e19) (Ping timeout: 245 seconds)
2021-11-13 16:56:45 +0100xff0x(~xff0x@2001:1a81:526d:df00:b864:176f:3a64:2e83)
2021-11-13 16:58:47 +0100yauhsien(~yauhsien@118-167-47-187.dynamic-ip.hinet.net) (Remote host closed the connection)
2021-11-13 16:59:09 +0100Guest80(~Guest80@pd95ed7c0.dip0.t-ipconnect.de)
2021-11-13 17:00:58 +0100Lycurgus(~juan@98.4.112.204) (Quit: Exeunt)
2021-11-13 17:04:57 +0100Hanicef(~gustaf@81-229-9-108-no92.tbcn.telia.com)
2021-11-13 17:06:19 +0100burnsidesLlama(~burnsides@dhcp168-014.wadham.ox.ac.uk)
2021-11-13 17:09:00 +0100yauhsien(~yauhsien@118-167-47-187.dynamic-ip.hinet.net)
2021-11-13 17:12:07 +0100burnsidesLlama(~burnsides@dhcp168-014.wadham.ox.ac.uk) (Ping timeout: 256 seconds)
2021-11-13 17:13:49 +0100yauhsien(~yauhsien@118-167-47-187.dynamic-ip.hinet.net) (Ping timeout: 256 seconds)
2021-11-13 17:15:43 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
2021-11-13 17:15:43 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host)
2021-11-13 17:15:43 +0100wroathe(~wroathe@user/wroathe)
2021-11-13 17:16:52 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-11-13 17:17:50 +0100jgeerds(~jgeerds@55d41b94.access.ecotel.net) (Ping timeout: 260 seconds)
2021-11-13 17:26:13 +0100dsrt^(~dsrt@h50.174.139.63.static.ip.windstream.net) (Remote host closed the connection)
2021-11-13 17:28:33 +0100 <zincy_> Is there a nice way of dealing duplicate record field names and lens?
2021-11-13 17:29:02 +0100 <zincy_> I have two record types that share some field names and am not sure what to do
2021-11-13 17:29:21 +0100 <zincy_> Prefixing would work but a bit tedious
2021-11-13 17:30:08 +0100yauhsien(~yauhsien@118-167-47-187.dynamic-ip.hinet.net)
2021-11-13 17:30:40 +0100 <Taneb> zincy_: lens has makeFieldsNoPrefix which may be useful for you
2021-11-13 17:31:03 +0100 <zincy_> thanks!
2021-11-13 17:31:11 +0100yauhsien(~yauhsien@118-167-47-187.dynamic-ip.hinet.net) (Remote host closed the connection)
2021-11-13 17:31:45 +0100yauhsien(~yauhsien@118-167-47-187.dynamic-ip.hinet.net)
2021-11-13 17:33:05 +0100shapr(~user@pool-100-36-247-68.washdc.fios.verizon.net) (Ping timeout: 256 seconds)
2021-11-13 17:36:29 +0100yauhsien(~yauhsien@118-167-47-187.dynamic-ip.hinet.net) (Ping timeout: 256 seconds)
2021-11-13 17:37:35 +0100MoC(~moc@user/moc)
2021-11-13 17:37:53 +0100dolio(~dolio@130.44.130.54) (Quit: ZNC 1.8.2 - https://znc.in)
2021-11-13 17:43:10 +0100dolio(~dolio@130.44.130.54)
2021-11-13 17:47:48 +0100eggplantade(~Eggplanta@2600:1700:bef1:5e10:7032:7aef:17c2:c830)
2021-11-13 17:49:48 +0100wroathe(~wroathe@user/wroathe) (Ping timeout: 268 seconds)
2021-11-13 17:51:12 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 265 seconds)
2021-11-13 17:52:03 +0100burnsidesLlama(~burnsides@dhcp168-014.wadham.ox.ac.uk)
2021-11-13 17:52:11 +0100eggplantade(~Eggplanta@2600:1700:bef1:5e10:7032:7aef:17c2:c830) (Ping timeout: 245 seconds)
2021-11-13 17:53:01 +0100mbuf(~Shakthi@136.185.92.113) (Quit: Leaving)
2021-11-13 17:53:48 +0100yauhsien(~yauhsien@118-167-47-187.dynamic-ip.hinet.net)
2021-11-13 17:54:39 +0100MoC(~moc@user/moc) (Quit: Konversation terminated!)
2021-11-13 17:54:49 +0100jakalx(~jakalx@base.jakalx.net) ()
2021-11-13 17:58:11 +0100jakalx(~jakalx@base.jakalx.net)
2021-11-13 17:59:01 +0100machinedgod(~machinedg@24.105.81.50)
2021-11-13 18:02:42 +0100johnny_sitar(~artur@078088015209.bialystok.vectranet.pl)
2021-11-13 18:04:37 +0100jzsinatra(~jzsinatra@88-114-238-31.elisa-laajakaista.fi) (Ping timeout: 268 seconds)
2021-11-13 18:06:12 +0100Digit(~user@user/digit)
2021-11-13 18:07:25 +0100dajoer(~david@user/gvx) (Quit: leaving)
2021-11-13 18:07:56 +0100MoC(~moc@user/moc)
2021-11-13 18:11:52 +0100timCF(~timCF@m91-129-99-212.cust.tele2.ee)
2021-11-13 18:14:27 +0100Pickchea(~private@user/pickchea) (Ping timeout: 256 seconds)
2021-11-13 18:20:19 +0100yauhsien(~yauhsien@118-167-47-187.dynamic-ip.hinet.net) (Remote host closed the connection)
2021-11-13 18:24:23 +0100sprout(~quassel@2a02:a467:ccd6:1:34a5:6053:7bcf:2391) (Ping timeout: 264 seconds)
2021-11-13 18:25:33 +0100jess(~jess@libera/staff/jess)
2021-11-13 18:26:01 +0100jzsinatra(~jzsinatra@88-114-238-31.elisa-laajakaista.fi)
2021-11-13 18:30:42 +0100zincy_(~zincy@host86-181-60-139.range86-181.btcentralplus.com) (Remote host closed the connection)
2021-11-13 18:31:22 +0100 <dsal> zincy_: There's also classy lenses, thought that may end up more confusing depending on the collisions. If a bunch of the things have a "_name" field that's `Text` then classy lens will let you access any of them via a `name` lens.
2021-11-13 18:36:46 +0100sprout(~quassel@2a02:a467:ccd6:1:34a5:6053:7bcf:2391)
2021-11-13 18:41:37 +0100sprout(~quassel@2a02:a467:ccd6:1:34a5:6053:7bcf:2391) (Ping timeout: 268 seconds)
2021-11-13 18:45:18 +0100yauhsien(~yauhsien@118-167-47-187.dynamic-ip.hinet.net)
2021-11-13 18:55:20 +0100hippoid(~hippoid@c-98-220-13-8.hsd1.il.comcast.net)
2021-11-13 19:01:23 +0100yauhsien(~yauhsien@118-167-47-187.dynamic-ip.hinet.net) (Remote host closed the connection)
2021-11-13 19:01:23 +0100sprout(~quassel@2a02:a467:ccd6:1:34a5:6053:7bcf:2391)
2021-11-13 19:01:58 +0100yauhsien(~yauhsien@118-167-47-187.dynamic-ip.hinet.net)
2021-11-13 19:02:37 +0100hippoid(~hippoid@c-98-220-13-8.hsd1.il.comcast.net) (Ping timeout: 256 seconds)
2021-11-13 19:03:01 +0100hippoid(~hippoid@c-98-220-13-8.hsd1.il.comcast.net)
2021-11-13 19:08:11 +0100hippoid(~hippoid@c-98-220-13-8.hsd1.il.comcast.net) (Ping timeout: 264 seconds)
2021-11-13 19:13:00 +0100nehsou^(~nehsou@h50.174.139.63.static.ip.windstream.net)
2021-11-13 19:14:04 +0100lavaman(~lavaman@98.38.249.169)
2021-11-13 19:18:59 +0100lavaman(~lavaman@98.38.249.169) (Ping timeout: 264 seconds)
2021-11-13 19:18:59 +0100tzh(~tzh@c-24-21-73-154.hsd1.or.comcast.net)
2021-11-13 19:21:36 +0100max22-(~maxime@lfbn-ren-1-762-224.w81-53.abo.wanadoo.fr)
2021-11-13 19:22:20 +0100Vajb(~Vajb@2001:999:83:e6dd:c80d:a972:83d6:40ce)
2021-11-13 19:22:52 +0100shapr(~user@2607:fb90:18d1:24ad:cf6e:d458:40ab:e571)
2021-11-13 19:23:25 +0100hippoid(~hippoid@c-98-220-13-8.hsd1.il.comcast.net)
2021-11-13 19:27:13 +0100zincy_(~zincy@2a00:23c8:970c:4801:350f:7ee:191a:6f65)
2021-11-13 19:28:07 +0100hippoid(~hippoid@c-98-220-13-8.hsd1.il.comcast.net) (Ping timeout: 256 seconds)
2021-11-13 19:30:42 +0100 <shapr> Anyone know how to use cabal as a library to get all the dependencies from a given cabal file?
2021-11-13 19:31:06 +0100 <sclv> Cabal-the-library can't get anything
2021-11-13 19:31:26 +0100 <shapr> Fair enough, I'm happy to hand it the files as bytestring or whatever
2021-11-13 19:31:34 +0100 <sclv> cabal the binary can unpack all deps, but idk if it can do it recursively
2021-11-13 19:32:02 +0100 <sclv> oh i see, you mean just "determine"?
2021-11-13 19:32:04 +0100 <shapr> I'm happy to hand all the files to cabal
2021-11-13 19:32:10 +0100 <sclv> not like fetch
2021-11-13 19:32:21 +0100 <shapr> yes, I'm back on "build a graph of dependencies" from a big pile of cabal files
2021-11-13 19:32:36 +0100 <shapr> I could write my own parser, but would rather not.
2021-11-13 19:32:39 +0100 <sclv> the best way is to "cabal configure" and then read the plan.json
2021-11-13 19:32:40 +0100eldritch_(~eldritch@user/eldritch/x-9272577) (Quit: bye)
2021-11-13 19:32:44 +0100yauhsien(~yauhsien@118-167-47-187.dynamic-ip.hinet.net) (Remote host closed the connection)
2021-11-13 19:32:45 +0100 <shapr> oh that sounds easy
2021-11-13 19:32:46 +0100 <sclv> if you want to calculate recursive deps
2021-11-13 19:33:01 +0100 <sclv> if you want one level deps direct from the cabal file then you just use Cabal the library to parse the file
2021-11-13 19:33:09 +0100 <shapr> I want a command line tool though, so using cabal as a library would be nicer.
2021-11-13 19:33:11 +0100econo(uid147250@user/econo)
2021-11-13 19:33:13 +0100mrmaximuzz(~mrmaximuz@178.71.193.198)
2021-11-13 19:33:36 +0100yauhsien(~yauhsien@118-167-47-187.dynamic-ip.hinet.net)
2021-11-13 19:34:01 +0100hippoid(~hippoid@c-98-220-13-8.hsd1.il.comcast.net)
2021-11-13 19:34:41 +0100 <maerwald> dependencies depend on architecture, flags etc... it isn't that straight forward with Cabal library
2021-11-13 19:35:05 +0100 <maerwald> there are a couple of distro tools that do that, e.g. gentoos hackport
2021-11-13 19:35:09 +0100 <sclv> for just parsing a cabal file its this: https://hackage.haskell.org/package/Cabal-3.6.2.0/docs/Distribution-PackageDescription-Parsec.html
2021-11-13 19:35:40 +0100 <maerwald> https://github.com/gentoo-haskell/hackport/blob/master/Merge/Dependencies.hs
2021-11-13 19:35:41 +0100 <sclv> you can find the entry point of cabal-install into `configure` and invoke it directly instead of via the command line as well -- sec
2021-11-13 19:35:44 +0100mrmaximuzz(~mrmaximuz@178.71.193.198) (Read error: Connection reset by peer)
2021-11-13 19:36:00 +0100eldritch_(~eldritch@user/eldritch/x-9272577)
2021-11-13 19:36:19 +0100 <sclv> actually, only unreleased cabal exposes cabal-install as a lib, so i wouldn't recommend that yet
2021-11-13 19:37:06 +0100Vajb(~Vajb@2001:999:83:e6dd:c80d:a972:83d6:40ce) (Ping timeout: 268 seconds)
2021-11-13 19:38:20 +0100yauhsien(~yauhsien@118-167-47-187.dynamic-ip.hinet.net) (Ping timeout: 268 seconds)
2021-11-13 19:39:01 +0100 <sclv> shapr: for your use case you're in a monorepo and want to calc for a set of packages, so my suggestion is make one package that depends on all the others, configure it once and forall, and read the graph right out of plan.json
2021-11-13 19:39:03 +0100Vajb(~Vajb@2001:999:83:e6dd:c80d:a972:83d6:40ce)
2021-11-13 19:39:33 +0100 <sclv> (i _think_ that you'll get the full dep tree and not just a streamlined one)
2021-11-13 19:39:45 +0100 <shapr> sclv: hm, that may not give me the info I want
2021-11-13 19:39:46 +0100 <shapr> but it might
2021-11-13 19:40:06 +0100 <maerwald> Also check https://hackage.haskell.org/package/cabal-plan
2021-11-13 19:40:34 +0100Pickchea(~private@user/pickchea)
2021-11-13 19:40:48 +0100 <shapr> that could help
2021-11-13 19:43:49 +0100Vajb(~Vajb@2001:999:83:e6dd:c80d:a972:83d6:40ce) (Ping timeout: 265 seconds)
2021-11-13 19:47:21 +0100eggplantade(~Eggplanta@2600:1700:bef1:5e10:7032:7aef:17c2:c830)
2021-11-13 19:47:24 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-11-13 19:47:47 +0100hippoid(~hippoid@c-98-220-13-8.hsd1.il.comcast.net) (Ping timeout: 264 seconds)
2021-11-13 19:54:47 +0100allbery_b(~geekosaur@xmonad/geekosaur)
2021-11-13 19:54:47 +0100geekosaur(~geekosaur@xmonad/geekosaur) (Killed (NickServ (GHOST command used by allbery_b)))
2021-11-13 19:54:50 +0100allbery_bgeekosaur
2021-11-13 19:55:31 +0100deadmarshal(~deadmarsh@95.38.228.182)
2021-11-13 19:57:13 +0100ees(~user@pool-108-18-30-46.washdc.fios.verizon.net)
2021-11-13 19:57:52 +0100zincy_(~zincy@2a00:23c8:970c:4801:350f:7ee:191a:6f65) (Remote host closed the connection)
2021-11-13 19:58:11 +0100Sgeo(~Sgeo@user/sgeo)
2021-11-13 19:58:37 +0100 <ddb> int-e, geekosaur: I finally got it figured out. The last bit is that instead of @admin you do admin in the console.
2021-11-13 20:00:10 +0100Guest15(~Guest15@nat-users-79-98-157-003.pnet.netair.net)
2021-11-13 20:01:05 +0100 <geekosaur> I'd probably stick it in the config file, but whatever
2021-11-13 20:01:34 +0100 <geekosaur> I don't think you use @ prefixes in the console since there isn't anything else to read commands the bot doesn't understand
2021-11-13 20:01:47 +0100max22-(~maxime@lfbn-ren-1-762-224.w81-53.abo.wanadoo.fr) (Ping timeout: 268 seconds)
2021-11-13 20:02:17 +0100 <int-e> right. it's a bit confusing because the `> ` prefix is still the same
2021-11-13 20:02:45 +0100Hanicef(~gustaf@81-229-9-108-no92.tbcn.telia.com) (Quit: leaving)
2021-11-13 20:03:06 +0100hippoid(~hippoid@c-98-220-13-8.hsd1.il.comcast.net)
2021-11-13 20:03:11 +0100Guest15(~Guest15@nat-users-79-98-157-003.pnet.netair.net) (Client Quit)
2021-11-13 20:03:48 +0100 <ddb> so I'm just running lambdabot, is there a param to pass in the config file?
2021-11-13 20:05:35 +0100 <geekosaur> I don't understand the question. Param for what?
2021-11-13 20:05:45 +0100 <ddb> which file to use as the config file
2021-11-13 20:05:57 +0100 <int-e> ddb: there's a `-e` to run commands, and an `rc` command to source a file: -e 'rc online-min.rc'
2021-11-13 20:06:17 +0100 <ddb> ah perfect
2021-11-13 20:06:42 +0100 <geekosaur> oh, right, I'd forgotten that part
2021-11-13 20:06:52 +0100 <int-e> https://github.com/lambdabot/lambdabot/tree/master/lambdabot/scripts should really have an example run script, tsk
2021-11-13 20:06:59 +0100 <geekosaur> only remembered the usual config file was online.rc, not how you used it :)
2021-11-13 20:07:11 +0100 <geekosaur> it's been a decade
2021-11-13 20:07:43 +0100shapr(~user@2607:fb90:18d1:24ad:cf6e:d458:40ab:e571) (Remote host closed the connection)
2021-11-13 20:07:46 +0100hippoid(~hippoid@c-98-220-13-8.hsd1.il.comcast.net) (Ping timeout: 260 seconds)
2021-11-13 20:07:56 +0100shapr(~user@2607:fb90:18d1:24ad:216e:e60a:4c82:5164)
2021-11-13 20:07:58 +0100 <ddb> indeed, that's ok, I've got it working well now. I'll update it to use a config file on next boot.
2021-11-13 20:08:17 +0100 <geekosaur> hope they fixed the bug in the version I was running where I had to hit enter every so often in the console so the IRC connect and join would actually happen in the background :)
2021-11-13 20:08:40 +0100 <geekosaur> was always annoying when I had to restart the bot
2021-11-13 20:08:45 +0100 <ddb> I did have another question though, now that it's working
2021-11-13 20:08:50 +0100 <ddb> sometimes mueval seems to take a long time
2021-11-13 20:08:55 +0100 <ddb> > product [1..5]
2021-11-13 20:08:56 +0100 <lambdabot> 120
2021-11-13 20:08:59 +0100 <ddb> I got a timeout once by doing that
2021-11-13 20:09:13 +0100 <geekosaur> occasionally this one times out as well
2021-11-13 20:09:40 +0100 <ddb> cool, all the other modules seem to run quite quickly
2021-11-13 20:09:48 +0100 <int-e> mueval is slow, especially when compiled statically... which it *forces* by default
2021-11-13 20:10:17 +0100 <hpc> mueval is also just in general a whole new process
2021-11-13 20:10:20 +0100 <hpc> it has to load /everything/
2021-11-13 20:10:23 +0100hippoid(~hippoid@c-98-220-13-8.hsd1.il.comcast.net)
2021-11-13 20:10:23 +0100 <hpc> it's not just typing into ghci
2021-11-13 20:10:38 +0100 <ddb> ooh that makes sense then
2021-11-13 20:10:43 +0100 <hpc> even () can time out
2021-11-13 20:10:45 +0100fendor(~fendor@178.115.56.25.wireless.dyn.drei.com)
2021-11-13 20:10:53 +0100 <int-e> (it does ghc-options: -Wall -static -threaded in its .cabal file which is quite terrible IMHO)
2021-11-13 20:11:18 +0100 <int-e> It's quite a bit faster if you patch that out and build a dynamic version
2021-11-13 20:12:23 +0100 <johnjay> is there a deeper reason that 5*-3 makes ghci complain about a varible out of scope *-?
2021-11-13 20:12:39 +0100 <johnjay> i expect something more like invalid operator or something
2021-11-13 20:12:45 +0100 <geekosaur> johnjay, you can make new operators on the fly
2021-11-13 20:13:01 +0100 <geekosaur> hyow would it know when to stop doing so and treat the - as something else?
2021-11-13 20:13:08 +0100 <hpc> > let x *- y = "surprise!" in 5*-3
2021-11-13 20:13:09 +0100 <lambdabot> "surprise!"
2021-11-13 20:13:10 +0100 <awpr> the way the lexical syntax is defined is that adjacent runs of symbols are single operators
2021-11-13 20:13:18 +0100 <hpc> > let x *- y = "surprise!" in 5 * -3
2021-11-13 20:13:19 +0100 <lambdabot> error:
2021-11-13 20:13:19 +0100 <lambdabot> Precedence parsing error
2021-11-13 20:13:19 +0100 <lambdabot> cannot mix ‘*’ [infixl 7] and prefix `-' [infixl 6] in the same infi...
2021-11-13 20:13:23 +0100 <int-e> hpc: well, a standalong mueval command with hot cache and nothing else running in parallel takes a bit over a second on lambdabot's VPS. the timeout is 5s. it can overshoot by running several muevals in parallel and perhaps some other VM on the same server causing the shared libraries to be evicted from memory
2021-11-13 20:13:24 +0100 <hpc> > let x *- y = "surprise!" in 5 * (-3)
2021-11-13 20:13:25 +0100 <lambdabot> -15
2021-11-13 20:13:29 +0100 <hpc> johnjay: ^
2021-11-13 20:13:35 +0100 <awpr> same reason you can get messed up comments by writing e.g. `--|`
2021-11-13 20:13:50 +0100 <int-e> Anyway, it works most of the time these days.
2021-11-13 20:13:56 +0100 <int-e> (as far as I can see)
2021-11-13 20:13:56 +0100HurdyGurdyBurdy(~HurdyGurd@user/hurdygurdyburdy)
2021-11-13 20:15:41 +0100 <johnjay> int-e: that latter one raises more questions lol
2021-11-13 20:15:44 +0100 <johnjay> but ok
2021-11-13 20:15:52 +0100 <int-e> the reason why the dynamic version of mueval is faster is that then it loads libraries as shared libraries with the system's dynamic linker; the static version uses ghc's own linker from the RTS which can load standard .o files... which I think has more relocations to do, and definitely has more files to load and is less optimized.
2021-11-13 20:16:10 +0100 <geekosaur> johnjay, consider that --> is a perfectly valid operator name
2021-11-13 20:16:42 +0100 <geekosaur> but | as the start of a comment is part of haddock markup. so some people initially leave off the space before the | and get an unpleasant surprise
2021-11-13 20:18:17 +0100 <hpc> maybe base could define (--|) and (--^) with a custom error
2021-11-13 20:18:38 +0100 <geekosaur> wonder how many packages that would break :)
2021-11-13 20:19:20 +0100 <hpc> according to hoogle, it would break https://hackage.haskell.org/package/persistent-documentation-0.1.0.4/docs/Database-Persist-Documen…
2021-11-13 20:19:26 +0100 <hpc> so hmm, maybe not then
2021-11-13 20:19:34 +0100 <geekosaur> anyway xmonad is an example of using --> as an operator. (this breaks a remarkable number of syntax coloring engines, too :)
2021-11-13 20:20:27 +0100zincy_(~zincy@host86-181-60-139.range86-181.btcentralplus.com)
2021-11-13 20:20:57 +0100 <geekosaur> actually, hm, that mnakes me wonder if they did the same thing
2021-11-13 20:21:13 +0100 <maerwald> if it's not that, then CPP or TH/QuasiQuotes will break your tools
2021-11-13 20:21:28 +0100 <geekosaur> nope, just borrowed the idea I guess
2021-11-13 20:21:45 +0100zincy_(~zincy@host86-181-60-139.range86-181.btcentralplus.com) (Remote host closed the connection)
2021-11-13 20:21:59 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 264 seconds)
2021-11-13 20:23:21 +0100yauhsien(~yauhsien@118-167-47-187.dynamic-ip.hinet.net)
2021-11-13 20:23:47 +0100hippoid(~hippoid@c-98-220-13-8.hsd1.il.comcast.net) (Ping timeout: 264 seconds)
2021-11-13 20:26:07 +0100shapr(~user@2607:fb90:18d1:24ad:216e:e60a:4c82:5164) (Remote host closed the connection)
2021-11-13 20:27:36 +0100yauhsien(~yauhsien@118-167-47-187.dynamic-ip.hinet.net) (Ping timeout: 245 seconds)
2021-11-13 20:27:58 +0100 <geekosaur> johnjay, the other half of the answer is that Haskell is functional, so an operator is just a variable whose value is *usually* a function
2021-11-13 20:28:17 +0100 <johnjay> ah
2021-11-13 20:29:28 +0100 <johnjay> just for my sanity haskell doesn't care about whitespace correct?
2021-11-13 20:29:37 +0100 <johnjay> so let x=5 and let x = 5 and let x = 5 are the same?
2021-11-13 20:29:46 +0100 <geekosaur> the lexer uses different rules to identify infix variables vs. prefix, but they're both variables as far as haskell is concerned
2021-11-13 20:29:50 +0100 <geekosaur> they are the same
2021-11-13 20:30:03 +0100 <geekosaur> although there are a few extensions which break this
2021-11-13 20:30:34 +0100 <geekosaur> already BangPatterns made foo ! bar different from foo !bar a decade ago
2021-11-13 20:30:56 +0100 <geekosaur> and several other such things have crept in over the years
2021-11-13 20:32:19 +0100Jeanne-Kamikaze(~Jeanne-Ka@static-198-54-131-104.cust.tzulo.com)
2021-11-13 20:33:20 +0100 <geekosaur> most recently RecordDotSyntax completely confused how dots are parsed in various contexts including spacing, so they don't break . as an operator
2021-11-13 20:34:06 +0100 <yin> data Nat = 1 | 2 | 3 | 4 ... ; data Int = Neg Nat | Zero | Pos Nat -- this is my fantasy
2021-11-13 20:34:08 +0100geekosaurseriously thinks we could have lived without that complication, dots are hard enough to parse as it is
2021-11-13 20:34:50 +0100 <geekosaur> (in fact ghc does not parse them according to the Report, which shows in obscure ways related to qualified names)
2021-11-13 20:34:53 +0100 <johnjay> why does it allow "let 2 = 7" in ghci?
2021-11-13 20:35:07 +0100 <geekosaur> because it's a patttern that can never be referenced
2021-11-13 20:35:23 +0100 <geekosaur> so it never finds out that the pattern fails
2021-11-13 20:35:36 +0100 <geekosaur> > let 2 = 7 then 5
2021-11-13 20:35:37 +0100 <lambdabot> <hint>:1:11: error: parse error on input ‘then’
2021-11-13 20:35:43 +0100 <geekosaur> whoo[ps duh
2021-11-13 20:35:48 +0100 <geekosaur> > let 2 = 7 in 5
2021-11-13 20:35:49 +0100 <lambdabot> 5
2021-11-13 20:36:07 +0100deadmarshal(~deadmarsh@95.38.228.182) (Ping timeout: 256 seconds)
2021-11-13 20:36:11 +0100 <geekosaur> one of the weird corner cases in how pattern matching works
2021-11-13 20:36:52 +0100 <johnjay> TIL
2021-11-13 20:37:03 +0100 <johnjay> i was trying to generate an error to get more familiar with the error messages
2021-11-13 20:39:06 +0100 <yin> > let Nothing = pure () in 1
2021-11-13 20:39:07 +0100 <lambdabot> 1
2021-11-13 20:39:09 +0100 <geekosaur> > let 2 = !7 in 5
2021-11-13 20:39:10 +0100 <lambdabot> <hint>:1:9: error: parse error on input ‘!’
2021-11-13 20:39:25 +0100 <geekosaur> right, wrong side duh
2021-11-13 20:39:34 +0100 <geekosaur> > let !2 = 7 in 5
2021-11-13 20:39:35 +0100 <lambdabot> *Exception: <interactive>:3:5-10: Non-exhaustive patterns in 2
2021-11-13 20:40:09 +0100 <yin> it should be simple enough to make patterns that bind no variables illegal, no?
2021-11-13 20:40:21 +0100Vajb(~Vajb@n1s4o3bcbx01a3mj1-2.v6.elisa-mobile.fi)
2021-11-13 20:40:40 +0100 <johnjay> i have main = do let result = 5 print result in file.hs
2021-11-13 20:40:42 +0100 <hpc> that Nothing pattern doesn't bind any variables
2021-11-13 20:41:00 +0100 <johnjay> how do i actually see the result of main? ghci file.hs just says it loaded the module
2021-11-13 20:41:10 +0100 <hpc> johnjay: you have to run main
2021-11-13 20:41:11 +0100 <geekosaur> do :main
2021-11-13 20:41:19 +0100 <johnjay> you mean in ghci?
2021-11-13 20:41:21 +0100 <yin> hoc: any reason not to have the cmpiler disallow it?
2021-11-13 20:41:21 +0100 <geekosaur> you can also pass "command line" arguments that way
2021-11-13 20:41:21 +0100 <hpc> ghci is strictly a repl
2021-11-13 20:41:30 +0100 <geekosaur> :main foo bar baz
2021-11-13 20:41:31 +0100 <johnjay> ah ok
2021-11-13 20:41:31 +0100 <hpc> it's not like running python foo.py
2021-11-13 20:41:37 +0100 <janus> does haskell really require a dollar before 'do' while purescript doesn't? seems like i can get away with omitting it there
2021-11-13 20:41:56 +0100 <yin> janus: there's an extension for that
2021-11-13 20:42:08 +0100 <janus> yin: BlockArguments?
2021-11-13 20:42:08 +0100 <yin> dont rememeber the name though
2021-11-13 20:42:13 +0100 <hpc> janus: it's a parsing thing, unfortunately
2021-11-13 20:42:20 +0100 <yin> janus: yes i think that's the one
2021-11-13 20:42:30 +0100max22-(~maxime@2a01cb0883359800a1957cb129df87ea.ipv6.abo.wanadoo.fr)
2021-11-13 20:42:34 +0100 <geekosaur> yeh, BlockArguments
2021-11-13 20:43:09 +0100 <janus> i have heard people don't like it in haskell... wonder if the purescript version has the same problems
2021-11-13 20:43:17 +0100 <johnjay> oh i see i can do 'ghc asdf.hs' as long as I have llvm in path
2021-11-13 20:43:25 +0100 <johnjay> also i have llvm13 and 12 for some reason in /opt
2021-11-13 20:43:25 +0100 <geekosaur> there's also runghc
2021-11-13 20:43:31 +0100Guest80(~Guest80@pd95ed7c0.dip0.t-ipconnect.de) (Ping timeout: 256 seconds)
2021-11-13 20:44:15 +0100 <yin> so, is there any reason not to disallow patterns that don't bind variables?
2021-11-13 20:44:17 +0100 <geekosaur> (there's also ghc -e "expression")
2021-11-13 20:44:44 +0100 <geekosaur> technically a pattern using a wildcard doesn't bind a variable
2021-11-13 20:44:47 +0100 <awpr> `case x of 0 -> "zero"; _ -> "nonzero"`
2021-11-13 20:45:06 +0100 <yin> i mean in let expressions
2021-11-13 20:45:11 +0100 <awpr> does `-Wincomplete-uni-patterns` complain about this?
2021-11-13 20:46:38 +0100 <geekosaur> by the time the compiler can tell it has a pattern in a let vs. a case, can it still tell that there's no bindings because a wildcard was used?
2021-11-13 20:46:40 +0100 <yin> > let _ = 0 in 1
2021-11-13 20:46:42 +0100 <lambdabot> 1
2021-11-13 20:46:54 +0100 <yin> :/
2021-11-13 20:46:56 +0100max22-(~maxime@2a01cb0883359800a1957cb129df87ea.ipv6.abo.wanadoo.fr) (Remote host closed the connection)
2021-11-13 20:47:03 +0100zincy_(~zincy@2a00:23c8:970c:4801:350f:7ee:191a:6f65)
2021-11-13 20:47:23 +0100 <awpr> I don't see any problem with that one. it's unnecessary, sure, but so is `id $ id id $ id 5`
2021-11-13 20:47:57 +0100 <geekosaur> or a lambda (including the implicit one in do's <-)?
2021-11-13 20:48:33 +0100 <geekosaur> basically I think it comes down to having to carry too much state around internally that would be used only to prevent a weird corner case most people don't care about
2021-11-13 20:48:50 +0100falafel(~falafel@2603-8000-d800-688c-34f9-26f3-71b0-5b78.res6.spectrum.com)
2021-11-13 20:49:30 +0100 <yin> λ let Nothing = pure 1 in ()
2021-11-13 20:49:30 +0100 <yin> <interactive>:1:5: warning: [-Wunused-pattern-binds] This pattern-binding binds no variables: Nothing = pure 1
2021-11-13 20:49:33 +0100 <yin> ()
2021-11-13 20:50:02 +0100Vajb(~Vajb@n1s4o3bcbx01a3mj1-2.v6.elisa-mobile.fi) (Ping timeout: 265 seconds)
2021-11-13 20:50:09 +0100 <yin> why not make this an error instead of the warning? isn't the check there anyways?
2021-11-13 20:50:14 +0100max22-(~maxime@lfbn-ren-1-762-224.w81-53.abo.wanadoo.fr)
2021-11-13 20:51:05 +0100 <c_wraith> the main reason I'd think of to not make it an error is to make generating code easier.
2021-11-13 20:51:32 +0100 <awpr> the program is still well-defined and can still be compiled in that case, so it's not really an error. `-Werror` is meant for this kind of situation, where you want the compiler to reject weird / suspicious things that are technically okay
2021-11-13 20:51:34 +0100 <c_wraith> I have written template-haskell that generates a non-binding let expression before, just as an additional layer of type-checking.
2021-11-13 20:52:19 +0100eldritch_eldritch
2021-11-13 20:52:51 +0100 <yin> weirdness
2021-11-13 20:53:05 +0100 <johnjay> i'm amazed that Tru && False and rue && False both suggest I meant True. phenomenal!
2021-11-13 20:53:06 +0100pbrisbin(~patrick@pool-173-49-152-45.phlapa.fios.verizon.net) (Quit: WeeChat 3.3)
2021-11-13 20:53:32 +0100 <johnjay> but ru doesn't
2021-11-13 20:53:54 +0100 <yin> johnjay: you should like copilot
2021-11-13 20:56:27 +0100 <johnjay> yin: maybe i'm missing something. it says it helps you verify c programs
2021-11-13 20:56:37 +0100 <johnjay> wouldn't you just verify c programs from the c programs
2021-11-13 20:56:39 +0100zincy_(~zincy@2a00:23c8:970c:4801:350f:7ee:191a:6f65) (Remote host closed the connection)
2021-11-13 20:56:55 +0100zincy_(~zincy@2a00:23c8:970c:4801:350f:7ee:191a:6f65)
2021-11-13 20:56:56 +0100zincy_(~zincy@2a00:23c8:970c:4801:350f:7ee:191a:6f65) (Read error: Connection reset by peer)
2021-11-13 20:57:18 +0100 <yin> https://copilot.github.com/
2021-11-13 20:58:07 +0100 <yin> you look videos of people using it, it's insane
2021-11-13 20:58:12 +0100 <johnjay> videos huh
2021-11-13 20:58:23 +0100 <geekosaur> I wonder if verify means the same thing to you that it does to us
2021-11-13 20:59:07 +0100 <yin> narrator: "it does not"
2021-11-13 20:59:19 +0100 <johnjay> you probably mean something like formally verify
2021-11-13 20:59:32 +0100 <geekosaur> yep
2021-11-13 20:59:34 +0100 <johnjay> like using hoare logic to prove something always terminates
2021-11-13 21:00:53 +0100hippoid(~hippoid@c-98-220-13-8.hsd1.il.comcast.net)
2021-11-13 21:01:51 +0100lavaman(~lavaman@98.38.249.169)
2021-11-13 21:02:36 +0100 <johnjay> amusingly ( and ) give different errors. the former says mismatched parentheses but the later says parse error
2021-11-13 21:03:27 +0100 <geekosaur> I sus[pect something about the brace insertion logic leads to that because it has to track opened/unclosed parens to get it right
2021-11-13 21:03:44 +0100 <geekosaur> (brace insertion is relevant to do/let/case blocks)
2021-11-13 21:04:00 +0100 <johnjay> well i should probably learn me more haskell before continuing
2021-11-13 21:04:11 +0100 <johnjay> all punctuation was similar except : and $
2021-11-13 21:04:21 +0100 <johnjay> $ said i need to use TemplateHaskell and : just said loaded empty module
2021-11-13 21:04:22 +0100 <geekosaur> and is something you'll rarely care about unless looking to cimplement a Haskell compiler
2021-11-13 21:04:41 +0100 <johnjay> i always try to learn the error messages of any software i use
2021-11-13 21:04:50 +0100 <johnjay> because they are bad and require lots of interpretation to use
2021-11-13 21:04:53 +0100 <geekosaur> right, $ at the top level (or the prompt in ghci) expects to insert a TH splice
2021-11-13 21:05:11 +0100juhp(~juhp@128.106.188.220) (Ping timeout: 264 seconds)
2021-11-13 21:05:16 +0100 <geekosaur> : in ghci not followed by a command repeats the previous command
2021-11-13 21:05:20 +0100 <yin> : is the mandatory prefix to infix data constructors
2021-11-13 21:05:25 +0100 <johnjay> suggestin I meant 'True' instead of 'Tru' frankly shocking to me
2021-11-13 21:05:47 +0100hippoid(~hippoid@c-98-220-13-8.hsd1.il.comcast.net) (Ping timeout: 264 seconds)
2021-11-13 21:05:54 +0100 <johnjay> geekosaur: not that i can tell. it says OK, no modules loaded.
2021-11-13 21:06:06 +0100 <yin> the '$' operator has *some magic* going on iirc but it's otherwise not special at all
2021-11-13 21:06:25 +0100 <yin> mind that ghci commands start with :
2021-11-13 21:06:38 +0100 <geekosaur> right, and : by itself repeats the previous command
2021-11-13 21:07:02 +0100 <yin> ah right
2021-11-13 21:07:04 +0100 <geekosaur> which will be a (possibly null) load at the start of a session, if you have not typed any :-commands yet
2021-11-13 21:07:59 +0100 <johnjay> apparently it is the last thing
2021-11-13 21:08:05 +0100juhp(~juhp@128.106.188.220)
2021-11-13 21:08:33 +0100 <dolio> ($) isn't special in 9.2 anymore, right?
2021-11-13 21:08:35 +0100 <johnjay> if i type 5 though then print it says in stmt of form print it
2021-11-13 21:08:44 +0100 <johnjay> where is "print it" coming from?
2021-11-13 21:09:09 +0100 <awpr> dolio: right, IIRC the only special-ness left is that it has the ImpredicativeTypes behavior even when ImpredicativeTypes is not enabled
2021-11-13 21:09:21 +0100 <geekosaur> dolio, pretty sure this is just typing "$" to ghci, which would try to expand a TH splice but TH was disabled
2021-11-13 21:09:43 +0100 <geekosaur> awpr, not even that because with QuickLook it's impredicative anyway
2021-11-13 21:10:11 +0100 <geekosaur> hm, maybe
2021-11-13 21:10:30 +0100 <awpr> my recollection is that quick look is enabled by ImpredicativeTypes, with the exception that $ always has it
2021-11-13 21:11:04 +0100 <geekosaur> johnjay, the way ghci works, it evaluates an expression, then binds the result to `it`, then executes `print it` or a replacement that can be specified by an option
2021-11-13 21:11:27 +0100 <geekosaur> except that if the expression is in IO then it assumes the output was done by the IO action
2021-11-13 21:12:00 +0100 <geekosaur> but see https://downloads.haskell.org/ghc/latest/docs/html/users_guide/ghci.html#using-a-custom-interactiv…
2021-11-13 21:12:08 +0100 <geekosaur> which would then replace `print it`
2021-11-13 21:12:40 +0100 <johnjay> hmm good i'll use the manual as well
2021-11-13 21:12:59 +0100eggplantade(~Eggplanta@2600:1700:bef1:5e10:7032:7aef:17c2:c830) (Remote host closed the connection)
2021-11-13 21:13:10 +0100 <yin> interesting! it = print it
2021-11-13 21:13:16 +0100 <johnjay> the first message it says was no instance for (Show (() -> IO ()))
2021-11-13 21:13:43 +0100 <johnjay> i guess they are really one statement but separated by bullet points
2021-11-13 21:13:45 +0100 <yin> @type print
2021-11-13 21:13:46 +0100 <lambdabot> Show a => a -> IO ()
2021-11-13 21:15:56 +0100hippoid(~hippoid@c-98-220-13-8.hsd1.il.comcast.net)
2021-11-13 21:17:20 +0100 <yin> you can't print a function because they are opaque. the nly way to know what a function does is to run it
2021-11-13 21:17:36 +0100 <yin> > print id
2021-11-13 21:17:37 +0100 <lambdabot> error:
2021-11-13 21:17:37 +0100 <lambdabot> • No instance for (Typeable a0) arising from a use of ‘print’
2021-11-13 21:17:37 +0100 <lambdabot> • In the expression: print id
2021-11-13 21:17:48 +0100 <yin> > print print
2021-11-13 21:17:49 +0100 <lambdabot> <IO ()>
2021-11-13 21:17:58 +0100 <yin> wait what?
2021-11-13 21:18:19 +0100 <awpr> https://hackage.haskell.org/package/base-4.16.0.0/docs/Text-Show-Functions.html
2021-11-13 21:18:36 +0100 <awpr> er, not exactly that, but apparently a similar orphan instance
2021-11-13 21:19:28 +0100 <yin> > show id
2021-11-13 21:19:29 +0100 <lambdabot> error:
2021-11-13 21:19:29 +0100 <lambdabot> • No instance for (Typeable a0) arising from a use of ‘show’
2021-11-13 21:19:29 +0100 <lambdabot> • In the expression: show id
2021-11-13 21:19:33 +0100 <yin> > show print
2021-11-13 21:19:34 +0100 <lambdabot> "<() -> IO ()>"
2021-11-13 21:19:44 +0100 <awpr> uh, Typeable?
2021-11-13 21:19:46 +0100 <yin> when did this happen?
2021-11-13 21:20:05 +0100 <awpr> I would guess this is a lambdabot-specific orphan instance that's OVERLAPPABLE
2021-11-13 21:20:06 +0100hippoid(~hippoid@c-98-220-13-8.hsd1.il.comcast.net) (Ping timeout: 245 seconds)
2021-11-13 21:21:02 +0100 <awpr> e.g. `instance {-# OVERLAPPABLE #-} Typeable a => Show a where showsPrec x = showChar '<' . showsPrec 0 (typeOf x) . showChar '>'`
2021-11-13 21:22:46 +0100 <geekosaur> yes
2021-11-13 21:23:26 +0100 <geekosaur> @version
2021-11-13 21:23:26 +0100 <lambdabot> lambdabot 5.3.0.1
2021-11-13 21:23:27 +0100 <lambdabot> git clone https://github.com/lambdabot/lambdabot
2021-11-13 21:24:20 +0100 <geekosaur> hm, not there
2021-11-13 21:24:23 +0100 <geekosaur> @where L.hs
2021-11-13 21:24:24 +0100 <lambdabot> what lambdabot has in scope is at https://silicon.int-e.eu/lambdabot/State/Pristine.hs
2021-11-13 21:27:13 +0100 <geekosaur> hm, can't find the ShowFun module
2021-11-13 21:27:24 +0100 <geekosaur> @hoogle ShowFun
2021-11-13 21:27:25 +0100 <lambdabot> TextShow.Generic data ShowFunsB arity a
2021-11-13 21:27:25 +0100 <lambdabot> TextShow.Generic data ShowFunsT arity a
2021-11-13 21:27:25 +0100 <lambdabot> TextShow.Generic data ShowFunsTL arity a
2021-11-13 21:28:35 +0100falafel(~falafel@2603-8000-d800-688c-34f9-26f3-71b0-5b78.res6.spectrum.com) (Ping timeout: 264 seconds)
2021-11-13 21:33:40 +0100falafel(~falafel@2603-8000-d800-688c-34f9-26f3-71b0-5b78.res6.spectrum.com)
2021-11-13 21:36:26 +0100chomwitt(~chomwitt@2a02:587:dc12:3f00:12c3:7bff:fe6d:d374) (Read error: Connection reset by peer)
2021-11-13 21:37:01 +0100acidjnk_new(~acidjnk@p200300d0c725147020cf3de033c5d4d3.dip0.t-ipconnect.de)
2021-11-13 21:37:10 +0100Jeanne-Kamikaze(~Jeanne-Ka@static-198-54-131-104.cust.tzulo.com) (Quit: Leaving)
2021-11-13 21:38:11 +0100falafel(~falafel@2603-8000-d800-688c-34f9-26f3-71b0-5b78.res6.spectrum.com) (Ping timeout: 264 seconds)
2021-11-13 21:38:17 +0100acidjnk_new3(~acidjnk@p200300d0c736cb18d4b31450c12316ac.dip0.t-ipconnect.de)
2021-11-13 21:41:43 +0100fresheyeball(~fresheyeb@c-76-25-93-164.hsd1.co.comcast.net)
2021-11-13 21:42:14 +0100acidjnk_new(~acidjnk@p200300d0c725147020cf3de033c5d4d3.dip0.t-ipconnect.de) (Ping timeout: 265 seconds)
2021-11-13 21:46:50 +0100eggplantade(~Eggplanta@2600:1700:bef1:5e10:7032:7aef:17c2:c830)
2021-11-13 21:50:14 +0100random-jellyfish(~random-je@user/random-jellyfish)
2021-11-13 21:52:27 +0100fresheyeball(~fresheyeb@c-76-25-93-164.hsd1.co.comcast.net) (Quit: WeeChat 2.9)
2021-11-13 21:55:47 +0100zincy_(~zincy@host86-181-60-139.range86-181.btcentralplus.com)
2021-11-13 21:58:50 +0100jkaye(~jkaye@2601:281:8300:7530:663a:b6d3:3081:a6b4)
2021-11-13 21:58:51 +0100Vajb(~Vajb@npscn2i6yp8h48ih-3.v6.elisa-mobile.fi)
2021-11-13 22:01:47 +0100eggplant_(~Eggplanta@2600:1700:bef1:5e10:d32:7961:c8e7:76c1)
2021-11-13 22:03:04 +0100_ht(~quassel@82-169-194-8.biz.kpn.net) (Remote host closed the connection)
2021-11-13 22:04:29 +0100lavaman(~lavaman@98.38.249.169) (Ping timeout: 268 seconds)
2021-11-13 22:04:51 +0100gdown(~gavin@h69-11-248-109.kndrid.broadband.dynamic.tds.net)
2021-11-13 22:05:11 +0100eggplantade(~Eggplanta@2600:1700:bef1:5e10:7032:7aef:17c2:c830) (Ping timeout: 264 seconds)
2021-11-13 22:08:48 +0100Vajb(~Vajb@npscn2i6yp8h48ih-3.v6.elisa-mobile.fi) (Ping timeout: 268 seconds)
2021-11-13 22:15:10 +0100Vajb(~Vajb@2001:999:54:373a:391d:ee55:f345:f09a)
2021-11-13 22:18:07 +0100Pickchea(~private@user/pickchea) (Ping timeout: 256 seconds)
2021-11-13 22:18:13 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-11-13 22:19:34 +0100etrepum(uid763@uxbridge.irccloud.com)
2021-11-13 22:19:56 +0100Vajb(~Vajb@2001:999:54:373a:391d:ee55:f345:f09a) (Ping timeout: 265 seconds)
2021-11-13 22:21:03 +0100azimut_(~azimut@gateway/tor-sasl/azimut) (Ping timeout: 276 seconds)
2021-11-13 22:21:20 +0100FinnElija(~finn_elij@user/finn-elija/x-0085643) (Remote host closed the connection)
2021-11-13 22:21:48 +0100hippoid(~hippoid@c-98-220-13-8.hsd1.il.comcast.net)
2021-11-13 22:23:21 +0100hippoid(~hippoid@c-98-220-13-8.hsd1.il.comcast.net) (Client Quit)
2021-11-13 22:25:27 +0100FinnElija(~finn_elij@user/finn-elija/x-0085643)
2021-11-13 22:26:56 +0100hippoid(~hippoid@c-98-220-13-8.hsd1.il.comcast.net)
2021-11-13 22:28:10 +0100m5zs7k(aquares@web10.mydevil.net) (Ping timeout: 260 seconds)
2021-11-13 22:30:03 +0100Vajb(~Vajb@2001:999:85:46d7:d6a4:d6c1:950b:ce99)
2021-11-13 22:31:31 +0100hippoid(~hippoid@c-98-220-13-8.hsd1.il.comcast.net) (Quit: leaving)
2021-11-13 22:32:26 +0100azimut(~azimut@gateway/tor-sasl/azimut)
2021-11-13 22:33:18 +0100m5zs7k(aquares@web10.mydevil.net)
2021-11-13 22:34:26 +0100Vajb(~Vajb@2001:999:85:46d7:d6a4:d6c1:950b:ce99) (Ping timeout: 265 seconds)
2021-11-13 22:37:34 +0100shidima(~shidima@84-104-108-90.cable.dynamic.v4.ziggo.nl) (Ping timeout: 260 seconds)
2021-11-13 22:39:27 +0100Vajb(~Vajb@2001:999:85:46d7:d6a4:d6c1:950b:ce99)
2021-11-13 22:46:25 +0100Vajb(~Vajb@2001:999:85:46d7:d6a4:d6c1:950b:ce99) (Ping timeout: 268 seconds)
2021-11-13 22:52:11 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 245 seconds)
2021-11-13 22:58:04 +0100Pickchea(~private@user/pickchea)
2021-11-13 22:59:28 +0100Pickchea(~private@user/pickchea) (Remote host closed the connection)
2021-11-13 23:00:28 +0100mvk(~mvk@2607:fea8:5cc3:e900::df92)
2021-11-13 23:01:45 +0100zincy_(~zincy@host86-181-60-139.range86-181.btcentralplus.com) (Remote host closed the connection)
2021-11-13 23:01:47 +0100aegon(~mike@174.127.249.180)
2021-11-13 23:02:51 +0100ec(~ec@gateway/tor-sasl/ec)
2021-11-13 23:06:06 +0100[itchyjunk](~itchyjunk@user/itchyjunk/x-7353470) (Read error: Connection reset by peer)
2021-11-13 23:12:19 +0100max22-(~maxime@lfbn-ren-1-762-224.w81-53.abo.wanadoo.fr) (Quit: Leaving)
2021-11-13 23:12:50 +0100econo(uid147250@user/econo) (Quit: Connection closed for inactivity)
2021-11-13 23:17:40 +0100fendor(~fendor@178.115.56.25.wireless.dyn.drei.com) (Read error: Connection reset by peer)
2021-11-13 23:24:10 +0100yauhsien(~yauhsien@118-167-47-187.dynamic-ip.hinet.net)
2021-11-13 23:26:50 +0100unit73e(~emanuel@2001:818:e8dd:7c00:32b5:c2ff:fe6b:5291)
2021-11-13 23:28:17 +0100Vajb(~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi)
2021-11-13 23:28:57 +0100yauhsien(~yauhsien@118-167-47-187.dynamic-ip.hinet.net) (Ping timeout: 256 seconds)
2021-11-13 23:31:03 +0100Feuermagier(~Feuermagi@user/feuermagier)
2021-11-13 23:34:00 +0100allbery_b(~geekosaur@xmonad/geekosaur)
2021-11-13 23:34:00 +0100geekosaur(~geekosaur@xmonad/geekosaur) (Killed (NickServ (GHOST command used by allbery_b)))
2021-11-13 23:34:02 +0100zer0bitz(~zer0bitz@dsl-hkibng31-54fae3-116.dhcp.inet.fi) (Ping timeout: 260 seconds)
2021-11-13 23:34:03 +0100allbery_bgeekosaur
2021-11-13 23:34:25 +0100jgeerds(~jgeerds@55d41b94.access.ecotel.net)
2021-11-13 23:37:11 +0100 <energizer> Hello. I'm interested in functional programming and performance. If I understand right, there are *some* algorithms whose fastest imperative implementation is significantly faster than the fastest functional version. Is there a good place to read about which algorithms are "solved" from this perspective and which are still slower than imperative?
2021-11-13 23:38:39 +0100tfeb(~tfb@88.98.95.237)
2021-11-13 23:39:39 +0100tfebtfb
2021-11-13 23:39:48 +0100 <maerwald> what qualifies a functional algorithm? Recursive? No mutable updates?
2021-11-13 23:39:53 +0100gehmehgeh(~user@user/gehmehgeh) (Quit: Leaving)
2021-11-13 23:40:10 +0100slice(~slice@user/slice)
2021-11-13 23:40:22 +0100 <geekosaur> https://en.wikipedia.org/wiki/Purely_functional_data_structure
2021-11-13 23:40:39 +0100 <geekosaur> which among other things links to Okasaki's thesis work on it
2021-11-13 23:40:50 +0100 <energizer> yes, no mutable updates
2021-11-13 23:40:55 +0100 <geekosaur> (also to his book but that's not free)
2021-11-13 23:40:59 +0100 <maerwald> geekosaur: that link doesn't seem to talk about algorithms
2021-11-13 23:42:08 +0100 <geekosaur> usually the algorithm falls out from the data structure, like how lists in Haskell are loops encoded as data
2021-11-13 23:42:34 +0100f-a(f2a@f2a.jujube.ircnow.org) ()
2021-11-13 23:42:37 +0100 <maerwald> can't relate
2021-11-13 23:43:36 +0100 <maerwald> I only remember the blog about quicksort in haskell and the argument that quicksort IS an imperative algorithm
2021-11-13 23:43:56 +0100 <maerwald> because it uses mutable updates
2021-11-13 23:44:14 +0100 <maerwald> (which was then implemented via ST)
2021-11-13 23:44:45 +0100 <maerwald> but here you say *implementation*
2021-11-13 23:45:05 +0100 <maerwald> where I feel it's more like: there are two algorithms to solve the same issue, which one is faster?
2021-11-13 23:45:31 +0100 <maerwald> and I doubt there is an answer
2021-11-13 23:45:35 +0100tfb(~tfb@88.98.95.237) (Quit: died)
2021-11-13 23:45:56 +0100 <energizer> i didnt know the word for what you're calling an "issue" so i used algorithm but yeah "algorithm" isn't the right word
2021-11-13 23:46:46 +0100kadir(~kadir@78.178.105.36)
2021-11-13 23:47:42 +0100 <maerwald> I just feel the definitions aren't really precise enough to give useful answers
2021-11-13 23:49:10 +0100 <maerwald> is graham scan imperative or functional?
2021-11-13 23:49:22 +0100 <c_wraith> graham scan works fine either way
2021-11-13 23:49:28 +0100 <maerwald> yes
2021-11-13 23:49:39 +0100 <energizer> in other words - for each task, how much of a slowdown do you suffer if you disallow mutation
2021-11-13 23:49:46 +0100 <c_wraith> look at something like Tarjan's Union-Find for really wanting mutable data
2021-11-13 23:49:52 +0100 <energizer> some tasks the difference is small, for some big
2021-11-13 23:50:03 +0100 <energizer> i want to see a list
2021-11-13 23:50:21 +0100 <c_wraith> I doubt anyone's ever made such a list
2021-11-13 23:50:23 +0100jmorris(uid433911@hampstead.irccloud.com)
2021-11-13 23:50:43 +0100 <maerwald> and even if you did... it's hard to attribute the performance difference to the paradigm
2021-11-13 23:50:49 +0100pwug(~pwug@user/pwug) (Quit: Leaving)
2021-11-13 23:50:53 +0100 <energizer> is it?
2021-11-13 23:50:57 +0100 <c_wraith> it's the sort of thing you look at a description of the algorithm and go "how much does this depend on mutation of shared values?"
2021-11-13 23:51:09 +0100 <maerwald> energizer: well, which language/compiler etc are you using?
2021-11-13 23:51:53 +0100Vajb(~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi) (Read error: Connection reset by peer)
2021-11-13 23:51:59 +0100 <maerwald> and... what's really "functional" then? You're not producing code for functional architectures
2021-11-13 23:52:12 +0100 <c_wraith> maerwald: I really feel like you're working hard to ignore the core question
2021-11-13 23:52:43 +0100 <c_wraith> maerwald: "how much does the performance of these algorithms depend on mutation" is a perfectly fine question
2021-11-13 23:52:46 +0100 <maerwald> c_wraith: no, I reverse engineered some imperative algorithms to haskell that were "imperative" and I was never able to tell a difference
2021-11-13 23:52:55 +0100 <Franciman> maerwald: functional is theoretically sound
2021-11-13 23:53:15 +0100deadmarshal(~deadmarsh@95.38.117.102)
2021-11-13 23:53:28 +0100 <geekosaur> doesn't help that a compiler like ghc will happily optimize functional code to code that does mutations behind your back
2021-11-13 23:53:34 +0100 <energizer> i can tell the difference https://koerbitz.me/posts/Efficient-Quicksort-in-Haskell.html
2021-11-13 23:53:35 +0100 <maerwald> e.g. the half-edge algorithm
2021-11-13 23:53:45 +0100 <maerwald> (or data structure)
2021-11-13 23:53:49 +0100 <geekosaur> and purity gives it considerable leeway to do so, because it knows when it's safe
2021-11-13 23:53:53 +0100 <c_wraith> energizer: that's not really a fair question, as the Haskell version is *not* quicksort
2021-11-13 23:54:04 +0100 <maerwald> geekosaur: exactly
2021-11-13 23:54:07 +0100Vajb(~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi)
2021-11-13 23:54:20 +0100 <maerwald> so even if you did compare implementations, what are you really comparing?
2021-11-13 23:54:30 +0100 <maerwald> probably compilers?
2021-11-13 23:54:56 +0100ees(~user@pool-108-18-30-46.washdc.fios.verizon.net) (Read error: Connection reset by peer)
2021-11-13 23:55:01 +0100 <energizer> some compilers exist and some don't
2021-11-13 23:55:05 +0100pwug(~pwug@user/pwug)
2021-11-13 23:55:12 +0100 <c_wraith> why not do something obvious then? Kruskall's algorithm on a complete graph, comparing a mutation-based union-find with one that uses no observable mutation?
2021-11-13 23:56:44 +0100 <c_wraith> (nevermind that you'd use Djikstra's algorithm in basically any real-world case)
2021-11-13 23:56:46 +0100random-jellyfish(~random-je@user/random-jellyfish) (Ping timeout: 256 seconds)
2021-11-13 23:57:14 +0100ees(~user@pool-108-18-30-46.washdc.fios.verizon.net)
2021-11-13 23:57:36 +0100deadmarshal(~deadmarsh@95.38.117.102) (Ping timeout: 245 seconds)