Home liberachat/#haskell: Logs Calendar

Logs on 2022-03-15 (liberachat/#haskell)

00:03:00 × mrkajetanp quits (~mrkajetan@2a01:4b00:ea36:6c00:7994:941c:3f5d:2b88) (Ping timeout: 240 seconds)
00:04:12 × lavaman quits (~lavaman@98.38.249.169) (Ping timeout: 250 seconds)
00:05:41 × doyougnu quits (~doyougnu@cpe-67-249-83-190.twcny.res.rr.com) (Ping timeout: 256 seconds)
00:16:42 machinedgod joins (~machinedg@24.105.81.50)
00:19:50 × mmhat quits (~mmh@55d4b6b1.access.ecotel.net) (Quit: WeeChat 3.4)
00:22:15 gdown joins (~gavin@h69-11-149-231.kndrid.broadband.dynamic.tds.net)
00:24:35 the_proffesor joins (~theproffe@c-24-9-30-127.hsd1.co.comcast.net)
00:26:05 × Guest27 quits (~Guest27@2601:281:d47f:1590::6b90) (Ping timeout: 256 seconds)
00:26:25 × theproffesor quits (~theproffe@c-24-9-30-127.hsd1.co.comcast.net) (Ping timeout: 256 seconds)
00:26:32 × raehik quits (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 240 seconds)
00:32:06 × epolanski quits (uid312403@id-312403.helmsley.irccloud.com) (Quit: Connection closed for inactivity)
00:33:58 InstX1 joins (~Liam@2601:6c4:4080:3f80:ac7b:7176:d055:eccc)
00:36:32 × ninioArtillero[m quits (~ninioarti@2001:470:69fc:105::1:d1ef) (Ping timeout: 240 seconds)
00:36:32 × FernandoChu[m] quits (~ryunaqmat@2001:470:69fc:105::1:4dc0) (Ping timeout: 240 seconds)
00:36:36 × jpds quits (~jpds@gateway/tor-sasl/jpds) (Ping timeout: 240 seconds)
00:37:02 × Las[m] quits (~lasmatrix@2001:470:69fc:105::74e) (Ping timeout: 240 seconds)
00:37:02 × schuelermine[m] quits (~schuelerm@user/schuelermine) (Ping timeout: 240 seconds)
00:37:02 × MosheTeutsch[m] quits (~moteutsch@2001:470:69fc:105::1:c250) (Ping timeout: 240 seconds)
00:37:02 × bb010g quits (~bb010g@2001:470:69fc:105::9a5) (Ping timeout: 240 seconds)
00:37:02 × VanceIsM7[m] quits (~vanceism7@2001:470:69fc:105::3ad) (Ping timeout: 240 seconds)
00:37:02 × pareto-optimal-d quits (~pareto-op@2001:470:69fc:105::1:b61f) (Ping timeout: 240 seconds)
00:37:02 × zwro[m] quits (~zwromatri@2001:470:69fc:105::1d4) (Ping timeout: 240 seconds)
00:37:02 × marinelli[m] quits (~marinelli@2001:470:69fc:105::2d8) (Ping timeout: 240 seconds)
00:37:02 × jinsun_ quits (~jinsun@user/jinsun) (Ping timeout: 240 seconds)
00:37:02 × mahene[m] quits (~mahenemat@2001:470:69fc:105::1:6a93) (Ping timeout: 240 seconds)
00:37:04 ninioArtillero[m joins (~ninioarti@2001:470:69fc:105::1:d1ef)
00:37:17 × Inst quits (~Liam@2601:6c4:4080:3f80:dc06:54f2:d0a:6b8c) (Ping timeout: 240 seconds)
00:39:36 × stefan-_ quits (~cri@42dots.de) (Ping timeout: 252 seconds)
00:40:36 jpds joins (~jpds@gateway/tor-sasl/jpds)
00:43:46 stefan-_ joins (~cri@42dots.de)
00:45:21 × machinedgod quits (~machinedg@24.105.81.50) (Ping timeout: 256 seconds)
00:45:54 johnw joins (~johnw@2607:f6f0:3004:1:c8b4:50ff:fef8:6bf0)
00:50:07 FernandoChu[m] joins (~ryunaqmat@2001:470:69fc:105::1:4dc0)
00:50:48 MosheTeutsch[m] joins (~moteutsch@2001:470:69fc:105::1:c250)
00:50:57 mahene[m] joins (~mahenemat@2001:470:69fc:105::1:6a93)
00:51:03 jinsun_ joins (~jinsun@user/jinsun)
00:51:32 pareto-optimal-d joins (~pareto-op@2001:470:69fc:105::1:b61f)
00:51:40 Las[m] joins (~lasmatrix@2001:470:69fc:105::74e)
00:51:44 marinelli[m] joins (~marinelli@2001:470:69fc:105::2d8)
00:53:10 VanceIsM7[m] joins (~vanceism7@2001:470:69fc:105::3ad)
00:54:19 bb010g joins (~bb010g@2001:470:69fc:105::9a5)
00:54:23 schuelermine[m] joins (~schuelerm@user/schuelermine)
00:55:00 zwro[m] joins (~zwromatri@2001:470:69fc:105::1d4)
00:59:00 × zmt00 quits (~zmt00@user/zmt00) (Ping timeout: 240 seconds)
01:00:46 Everything joins (~Everythin@37.115.210.35)
01:05:14 <neverwas> <Midjak> tried several hie.yaml configuration without succeed </Midjak> Replacing the contents with "cradle:\nstack:\n" worked for me. (Not sure why though. Seems like that'd make it a no-op.)
01:11:02 × albet70 quits (~xxx@2400:8902::f03c:92ff:fe60:98d8) (Remote host closed the connection)
01:12:05 × tremon quits (~tremon@83-84-18-241.cable.dynamic.v4.ziggo.nl) (Quit: getting boxed in)
01:13:02 lavaman joins (~lavaman@98.38.249.169)
01:13:19 mrkajetanp joins (~mrkajetan@2a01:4b00:ea36:6c00:7994:941c:3f5d:2b88)
01:14:23 azimut_ joins (~azimut@gateway/tor-sasl/azimut)
01:14:33 Guest27 joins (~Guest27@2601:281:d47f:1590::6b90)
01:15:16 × nexus_ quits (~nexus@80-95-70-217.pool.digikabel.hu) (Ping timeout: 250 seconds)
01:16:36 × azimut quits (~azimut@gateway/tor-sasl/azimut) (Ping timeout: 240 seconds)
01:16:54 nexus_ joins (~nexus@84-236-60-119.pool.digikabel.hu)
01:17:09 albet70 joins (~xxx@2400:8902::f03c:92ff:fe60:98d8)
01:27:11 TonyStone joins (~TonyStone@cpe-74-76-51-197.nycap.res.rr.com)
01:29:11 merijn joins (~merijn@c-001-001-001.client.esciencecenter.eduvpn.nl)
01:34:49 × lavaman quits (~lavaman@98.38.249.169) (Remote host closed the connection)
01:35:21 lavaman joins (~lavaman@98.38.249.169)
01:35:52 justsomeguy joins (~justsomeg@user/justsomeguy)
01:40:19 × Guest27 quits (~Guest27@2601:281:d47f:1590::6b90) (Ping timeout: 256 seconds)
01:40:21 × haskl quits (~haskl@user/haskl) (Ping timeout: 245 seconds)
01:40:35 haskl joins (~haskl@user/haskl)
01:42:56 ss joins (~ss@187.83.249.216.dyn.smithville.net)
01:42:58 ss is now known as Guest7560
01:43:06 × FinnElija quits (~finn_elij@user/finn-elija/x-0085643) (Remote host closed the connection)
01:43:31 FinnElija joins (~finn_elij@user/finn-elija/x-0085643)
01:43:37 × jamestmartin quits (~james@jtmar.me) (Quit: ZNC 1.8.2+deb2+b1 - https://znc.in)
01:43:45 jtmar joins (~james@jtmar.me)
01:43:49 × meejah quits (~meejah@rutas.meejah.ca) (Ping timeout: 240 seconds)
01:43:56 × sm[i] quits (~user@plaintextaccounting/sm) (Ping timeout: 252 seconds)
01:44:29 bahamas joins (~lucian@84.232.140.158)
01:44:48 meejah joins (~meejah@rutas.meejah.ca)
01:45:47 × tolt quits (~weechat-h@li219-154.members.linode.com) (Ping timeout: 250 seconds)
01:47:31 tolt joins (~weechat-h@li219-154.members.linode.com)
01:47:35 × Unicorn_Princess quits (~Unicorn_P@46-54-248-191.static.kate-wing.si) (Remote host closed the connection)
01:47:54 Unicorn_Princess joins (~Unicorn_P@46-54-248-191.static.kate-wing.si)
01:48:20 wroathe joins (~wroathe@206-55-188-8.fttp.usinternet.com)
01:48:20 × wroathe quits (~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host)
01:48:20 wroathe joins (~wroathe@user/wroathe)
01:48:38 × jao quits (~jao@45.134.142.199) (Ping timeout: 250 seconds)
01:48:54 × bahamas quits (~lucian@84.232.140.158) (Ping timeout: 252 seconds)
01:49:31 sm[i] joins (~user@plaintextaccounting/sm)
01:49:55 <justsomeguy> lol, I just came across this in Data.ByteString https://hackage.haskell.org/package/bytestring-0.11.3.0/docs/src/Data.ByteString.Internal.html#accursedUnutterablePerformIO
01:50:18 zmt00 joins (~zmt00@user/zmt00)
01:50:37 jao joins (~jao@45.134.142.225)
01:51:15 × ProfSimm quits (~ProfSimm@87.227.196.109) (Remote host closed the connection)
01:51:37 <Guest7560> so i'm writing a function type signature with a spliced template haskell type, something like f :: $(foo) -> $(bar), where $(foo) is a Q Type splicing in Foo a and $(bar) is a Q Type splicing in Bar b. unfortunately, it seems like this isn't actually equivalent to writing f :: Foo a -> Bar b and doesn't compile, because a and b don't get implicitly
01:51:37 <Guest7560> forall'd when spliced in. are my options basically writing a Q Type for the full signature or writing the quantifiers manually, or am I missing something?
01:51:48 <byorgey> justsomeguy: =)
01:55:00 <davean> justsomeguy: You can't talk about that
01:55:16 <byorgey> I wonder who wrote that comment originally.
01:55:22 byorgey goes digging in the commit history
01:57:18 <byorgey> ah, it was dcoutts__ =) https://github.com/haskell/bytestring/commit/80ff4a3018cd8909abb1d4e0c32f012a523883ec
01:58:27 × merijn quits (~merijn@c-001-001-001.client.esciencecenter.eduvpn.nl) (Ping timeout: 256 seconds)
01:58:59 <byorgey> Guest7560: I don't know much about TH, but it would be very strange to me if there was a way to splice in types with type variables like that and have the type variables bound at the outermost level like that. That is what would happen if you just spliced in those types "as text" but thankfully that's not how TH works, it splices at the level of syntax trees.
01:59:33 <byorgey> I would think your best bet is to write a single Q Type that generates the entire signature.
02:00:24 <byorgey> But you could perhaps turn your current 'foo' and 'bar' into functions that accept a type variable as input, so it wouldn't necessarily mean rewriting everything from scratch
02:01:07 <byorgey> But I'm really just guessing here.
02:03:33 × zmt00 quits (~zmt00@user/zmt00) (Ping timeout: 256 seconds)
02:04:26 <Guest7560> ah i figured as much; thanks! yeah, it's not too bad for me to try to generate the whole signature at once; that might be the best approach then
02:04:41 × TonyStone quits (~TonyStone@cpe-74-76-51-197.nycap.res.rr.com) (Ping timeout: 256 seconds)
02:14:18 <Guest7560> it turned out to be as easy as f :: $(quantify [t| $(foo) -> $(bar)|]) where quantify :: Q Type -> Q Type! thanks again
02:16:41 TonyStone joins (~TonyStone@2603-7080-8607-c36a-a0f7-4a6c-9396-dfff.res6.spectrum.com)
02:17:33 × rekahsoft quits (~rekahsoft@cpe0008a20f982f-cm64777d666260.cpe.net.cable.rogers.com) (Ping timeout: 268 seconds)
02:18:23 <Axman6> justsomeguy: I can't believe you would even utter that!
02:18:57 × eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:64ad:f021:a34e:c231) (Remote host closed the connection)
02:20:42 <byorgey> Guest7560: ah, nice!
02:21:15 <Axman6> justsomeguy: see also: https://github.com/well-typed/cborg/blob/master/.travis/dragon-bureaucrat.sh
02:21:23 bahamas joins (~lucian@84.232.140.158)
02:22:46 <Axman6> note that this bureaucratic dragon can be fooled by adding "git grep" to a comment after you use of the incorrect spelling "serialize"
02:24:45 AlexNoo_ joins (~AlexNoo@178.34.161.174)
02:25:59 × bahamas quits (~lucian@84.232.140.158) (Ping timeout: 256 seconds)
02:26:03 eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:64ad:f021:a34e:c231)
02:27:32 × AlexZenon quits (~alzenon@94.233.240.159) (Ping timeout: 240 seconds)
02:27:39 × Alex_test quits (~al_test@94.233.240.159) (Ping timeout: 272 seconds)
02:28:18 <jackdk> Guest7560: That's cool, I didn't know about `quantify`
02:28:29 × AlexNoo quits (~AlexNoo@94.233.240.159) (Ping timeout: 252 seconds)
02:29:57 <Guest7560> jackdk I don't think it's a function in a library or anything; i just meant it was easy enough to write out by hand heh
02:30:33 <Guest7560> oh wait no way https://hackage.haskell.org/package/th-abstraction-0.4.3.0/docs/Language-Haskell-TH-Datatype.html#v:quantifyType
02:30:50 <jackdk> Guest7560: Oh, right. I think you just hoogled the same thing as I did =)
02:31:10 Alex_test joins (~al_test@178.34.161.174)
02:31:18 AlexZenon joins (~alzenon@178.34.161.174)
02:34:50 zmt00 joins (~zmt00@user/zmt00)
02:37:21 × CiaoSen quits (~Jura@p200300c95737a2002a3a4dfffe84dbd5.dip0.t-ipconnect.de) (Ping timeout: 250 seconds)
02:38:24 × jao quits (~jao@45.134.142.225) (Ping timeout: 252 seconds)
02:38:45 × eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:64ad:f021:a34e:c231) (Remote host closed the connection)
02:41:56 × Guest7560 quits (~ss@187.83.249.216.dyn.smithville.net) (Quit: Client closed)
02:43:02 eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:64ad:f021:a34e:c231)
02:45:51 ub joins (~Thunderbi@p200300ecdf19b70a55005d108b4dd460.dip0.t-ipconnect.de)
02:46:42 × ubert quits (~Thunderbi@p200300ecdf19b765b1fc5a865b2694ae.dip0.t-ipconnect.de) (Ping timeout: 250 seconds)
02:46:43 ub is now known as ubert
02:47:23 Henson joins (~kvirc@107-179-133-201.cpe.teksavvy.com)
02:47:31 × ubert1 quits (~Thunderbi@p200300ecdf19b7650b46467200086b86.dip0.t-ipconnect.de) (Ping timeout: 256 seconds)
02:49:13 <Henson> what's the paradigm if I'm using Pipes (or Conduit) if I have a stream of paired data (like tuples) and I want to turn the stream of pairs into a pair of streams and feed the elements through two pipelines that handle single items, and then combine them back together later? Is that something these libraries are designed to do, or there another paradigm I should be using?
02:49:55 mvk joins (~mvk@2607:fea8:5cc3:7e00::45ee)
02:53:41 × eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:64ad:f021:a34e:c231) (Remote host closed the connection)
02:59:52 <jackdk> Once you go from stream-of-pairs to pair-of-streams, you still need to process in lockstep otherwise you need to buffer one side of the data that comes in from teh initial stream
03:00:47 × wroathe quits (~wroathe@user/wroathe) (Ping timeout: 256 seconds)
03:01:21 × kaph quits (~kaph@net-109-116-124-149.cust.vodafonedsl.it) (Read error: Connection reset by peer)
03:01:29 kaph joins (~kaph@net-109-116-124-149.cust.vodafonedsl.it)
03:02:11 <jackdk> So I would probably push each side of the input stream into a separate bounded queue, then have streams that go Read inQueueA -> process A -> write outQueueA (and similar for B), and then have another stream that reads from outQueue{A,B} and emits the output. And run it all in parallel
03:02:22 <jackdk> but I haven't done a lot of streaming work so I'm not 100% that this is a good idea
03:03:42 × [itchyjunk] quits (~itchyjunk@user/itchyjunk/x-7353470) (Ping timeout: 252 seconds)
03:03:42 <jackdk> Hm, `streaming` (which I'm least unfamiliar with) has a `zip :: Monad m => Stream (Of a) m r -> Stream (Of b) m r -> Stream (Of (a, b)) m r`
03:04:43 wroathe joins (~wroathe@206-55-188-8.fttp.usinternet.com)
03:04:43 × wroathe quits (~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host)
03:04:43 wroathe joins (~wroathe@user/wroathe)
03:04:45 <jackdk> It also has an `unzip` with a curious type, to preserve streaming: https://hackage.haskell.org/package/streaming-0.2.3.1/docs/Streaming-Prelude.html#v:unzip
03:07:36 × bitdex quits (~bitdex@gateway/tor-sasl/bitdex) (Ping timeout: 240 seconds)
03:09:24 × wroathe quits (~wroathe@user/wroathe) (Ping timeout: 240 seconds)
03:10:36 bitdex joins (~bitdex@gateway/tor-sasl/bitdex)
03:11:33 [itchyjunk] joins (~itchyjunk@user/itchyjunk/x-7353470)
03:12:10 × lavaman quits (~lavaman@98.38.249.169) (Remote host closed the connection)
03:12:32 mbuf joins (~Shakthi@27.58.140.82)
03:16:46 × Unicorn_Princess quits (~Unicorn_P@46-54-248-191.static.kate-wing.si) (Remote host closed the connection)
03:18:07 lavaman joins (~lavaman@98.38.249.169)
03:19:36 × yauhsien quits (~yauhsien@61-231-44-111.dynamic-ip.hinet.net) (Remote host closed the connection)
03:20:21 yauhsien joins (~yauhsien@61-231-44-111.dynamic-ip.hinet.net)
03:25:00 <Henson> jackdk: thank you for the suggestion.
03:25:43 finn_elija joins (~finn_elij@user/finn-elija/x-0085643)
03:25:43 × FinnElija quits (~finn_elij@user/finn-elija/x-0085643) (Killed (NickServ (Forcing logout FinnElija -> finn_elija)))
03:25:43 finn_elija is now known as FinnElija
03:25:56 × Henson quits (~kvirc@107-179-133-201.cpe.teksavvy.com) (Quit: goodnight)
03:26:17 × nexus_ quits (~nexus@84-236-60-119.pool.digikabel.hu) (Ping timeout: 256 seconds)
03:26:36 × bitdex quits (~bitdex@gateway/tor-sasl/bitdex) (Ping timeout: 240 seconds)
03:28:07 nexus_ joins (~nexus@178-164-188-12.pool.digikabel.hu)
03:31:31 bitdex joins (~bitdex@gateway/tor-sasl/bitdex)
03:33:54 × Chai-T-Rex quits (~ChaiTRex@user/chaitrex) (Quit: Chai-T-Rex)
03:34:31 ChaiTRex joins (~ChaiTRex@user/chaitrex)
03:36:46 eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:64ad:f021:a34e:c231)
03:38:13 × geranim0 quits (~geranim0@modemcable242.171-178-173.mc.videotron.ca) (Ping timeout: 240 seconds)
03:40:24 k8yun joins (~k8yun@user/k8yun)
03:42:25 × lavaman quits (~lavaman@98.38.249.169) (Remote host closed the connection)
03:42:39 lavaman joins (~lavaman@98.38.249.169)
03:44:02 × terrorjack quits (~terrorjac@2a01:4f8:1c1e:509a::1) (Quit: The Lounge - https://thelounge.chat)
03:44:50 × pretty_d1 quits (trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655) (Quit: WeeChat 3.4.1)
03:45:16 terrorjack joins (~terrorjac@2a01:4f8:1c1e:509a::1)
03:47:47 × kaph quits (~kaph@net-109-116-124-149.cust.vodafonedsl.it) (Read error: Connection reset by peer)
03:47:57 × mon_aaraj quits (~MonAaraj@user/mon-aaraj/x-4416475) (Ping timeout: 240 seconds)
03:48:04 kaph joins (~kaph@net-109-116-124-149.cust.vodafonedsl.it)
03:50:05 mon_aaraj joins (~MonAaraj@user/mon-aaraj/x-4416475)
03:52:28 × lumberjack123 quits (~alMalsamo@gateway/tor-sasl/almalsamo) (Remote host closed the connection)
03:53:56 × mzan quits (~quassel@mail.asterisell.com) (Quit: https://quassel-irc.org - Chat comfortably. Anywhere.)
03:55:01 mzan joins (~quassel@mail.asterisell.com)
03:55:02 merijn joins (~merijn@c-001-001-001.client.esciencecenter.eduvpn.nl)
03:56:48 lumberjack123 joins (~alMalsamo@gateway/tor-sasl/almalsamo)
04:00:45 yauhsien_ joins (~yauhsien@61-231-44-111.dynamic-ip.hinet.net)
04:00:45 × yauhsien quits (~yauhsien@61-231-44-111.dynamic-ip.hinet.net) (Read error: Connection reset by peer)
04:03:49 × Flow quits (~none@gentoo/developer/flow) (Ping timeout: 250 seconds)
04:04:51 Flow joins (~none@gentoo/developer/flow)
04:05:07 eggplant_ joins (~Eggplanta@2600:1700:bef1:5e10:fcf5:76ff:669c:b084)
04:07:57 × eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:64ad:f021:a34e:c231) (Ping timeout: 240 seconds)
04:13:33 × boborygmy_ quits (~bob@pool-173-54-217-168.nwrknj.fios.verizon.net) (Ping timeout: 252 seconds)
04:13:33 × boborygmy quits (~bob@pool-173-54-217-168.nwrknj.fios.verizon.net) (Ping timeout: 252 seconds)
04:20:58 Guest84 joins (~Guest84@2601:602:87f:4220:c3f4:c3dc:6b1f:b324)
04:21:33 × Guest84 quits (~Guest84@2601:602:87f:4220:c3f4:c3dc:6b1f:b324) (Client Quit)
04:24:38 × euandreh quits (~euandreh@2804:14c:33:9fe5:a4f7:3458:36c4:ffd7) (Ping timeout: 250 seconds)
04:25:26 × yauhsien_ quits (~yauhsien@61-231-44-111.dynamic-ip.hinet.net) (Remote host closed the connection)
04:25:58 yauhsien joins (~yauhsien@61-231-44-111.dynamic-ip.hinet.net)
04:26:32 euandreh joins (~euandreh@2804:14c:33:9fe5:e51b:ac6b:af96:5d6c)
04:29:30 × merijn quits (~merijn@c-001-001-001.client.esciencecenter.eduvpn.nl) (Ping timeout: 252 seconds)
04:30:42 × yauhsien quits (~yauhsien@61-231-44-111.dynamic-ip.hinet.net) (Ping timeout: 250 seconds)
04:31:46 × MironZ quits (~MironZ@nat-infra.ehlab.uk) (Quit: Ping timeout (120 seconds))
04:31:56 × sus quits (zero@user/zeromomentum) (Quit: Ping timeout (120 seconds))
04:32:06 MironZ joins (~MironZ@nat-infra.ehlab.uk)
04:32:07 sus joins (zero@user/zeromomentum)
04:33:55 × _xor quits (~xor@dsl-50-5-233-169.fuse.net) (Read error: Connection reset by peer)
04:37:48 _xor joins (~xor@dsl-50-5-233-169.fuse.net)
04:41:11 × shapr quits (~user@pool-173-73-44-186.washdc.fios.verizon.net) (Remote host closed the connection)
04:41:24 shapr joins (~user@pool-173-73-44-186.washdc.fios.verizon.net)
04:43:16 × waleee quits (~waleee@2001:9b0:213:7200:cc36:a556:b1e8:b340) (Ping timeout: 250 seconds)
04:45:00 kaph_ joins (~kaph@net-109-116-124-149.cust.vodafonedsl.it)
04:46:00 × notzmv quits (~zmv@user/notzmv) (Ping timeout: 252 seconds)
04:47:39 × kaph quits (~kaph@net-109-116-124-149.cust.vodafonedsl.it) (Ping timeout: 252 seconds)
04:56:29 xkuru joins (~xkuru@user/xkuru)
05:00:10 × kaph_ quits (~kaph@net-109-116-124-149.cust.vodafonedsl.it) (Ping timeout: 250 seconds)
05:02:21 × russruss quits (~russruss@my.russellmcc.com) (Quit: The Lounge - https://thelounge.chat)
05:03:13 × Giovanni quits (~Giovanni@176.55.166.222) (Remote host closed the connection)
05:07:44 InstX1_ joins (~Liam@2601:6c4:4080:3f80:51cd:6d8f:20a7:5eaa)
05:07:54 russruss joins (~russruss@my.russellmcc.com)
05:11:17 × InstX1 quits (~Liam@2601:6c4:4080:3f80:ac7b:7176:d055:eccc) (Ping timeout: 240 seconds)
05:18:37 × tomku quits (~tomku@user/tomku) (Ping timeout: 240 seconds)
05:21:13 kaph_ joins (~kaph@151.43.120.248)
05:22:14 jakalx parts (~jakalx@base.jakalx.net) ()
05:22:27 × nexus_ quits (~nexus@178-164-188-12.pool.digikabel.hu) (Ping timeout: 256 seconds)
05:24:08 nexus_ joins (~nexus@80-95-85-52.pool.digikabel.hu)
05:24:27 × lavaman quits (~lavaman@98.38.249.169) (Remote host closed the connection)
05:24:35 gabiruh_ joins (~gabiruh@vps19177.publiccloud.com.br)
05:25:18 × gabiruh quits (~gabiruh@vps19177.publiccloud.com.br) (Read error: Connection reset by peer)
05:28:02 jakalx joins (~jakalx@base.jakalx.net)
05:28:15 deadmarshal_ joins (~deadmarsh@95.38.115.168)
05:28:26 × img quits (~img@user/img) (Quit: ZNC 1.8.2 - https://znc.in)
05:29:29 img joins (~img@user/img)
05:29:38 × mbuf quits (~Shakthi@27.58.140.82) (Quit: Leaving)
05:31:02 × img quits (~img@user/img) (Client Quit)
05:31:19 × cheater quits (~Username@user/cheater) (Ping timeout: 272 seconds)
05:32:24 img joins (~img@user/img)
05:32:36 × deadmarshal_ quits (~deadmarsh@95.38.115.168) (Ping timeout: 240 seconds)
05:33:33 × kaph_ quits (~kaph@151.43.120.248) (Read error: Connection reset by peer)
05:34:26 kaph joins (~kaph@151.43.120.248)
05:41:44 jonathanx joins (~jonathan@h-178-174-176-109.A357.priv.bahnhof.se)
05:46:25 deadmarshal_ joins (~deadmarsh@95.38.115.168)
05:46:53 lavaman joins (~lavaman@98.38.249.169)
05:49:12 × [itchyjunk] quits (~itchyjunk@user/itchyjunk/x-7353470) (Remote host closed the connection)
05:52:24 yauhsien joins (~yauhsien@61-231-44-111.dynamic-ip.hinet.net)
05:54:00 × shriekingnoise quits (~shrieking@201.231.16.156) (Quit: Quit)
05:55:44 tomku joins (~tomku@user/tomku)
05:57:55 × kaph quits (~kaph@151.43.120.248) (Read error: Connection reset by peer)
05:58:33 × cyphase quits (~cyphase@user/cyphase) (Ping timeout: 272 seconds)
06:02:15 cyphase joins (~cyphase@user/cyphase)
06:09:33 takuan joins (~takuan@178-116-218-225.access.telenet.be)
06:11:21 × xkuru quits (~xkuru@user/xkuru) (Read error: Connection reset by peer)
06:14:06 vglfr joins (~vglfr@46.96.161.0)
06:17:45 xkuru joins (~xkuru@user/xkuru)
06:25:40 merijn joins (~merijn@c-001-001-001.client.esciencecenter.eduvpn.nl)
06:32:16 × tzh quits (~tzh@c-24-21-73-154.hsd1.wa.comcast.net) (Quit: zzz)
06:40:05 x_kuru joins (xkuru@user/xkuru)
06:43:29 liz joins (~liz@2a00:23c5:9680:501:b62e:99ff:fee4:47fa)
06:43:49 × xkuru quits (~xkuru@user/xkuru) (Ping timeout: 256 seconds)
06:44:59 × zebrag quits (~chris@user/zebrag) (Quit: Konversation terminated!)
06:45:11 × k8yun quits (~k8yun@user/k8yun) (Ping timeout: 256 seconds)
06:48:06 × deadmarshal_ quits (~deadmarsh@95.38.115.168) (Ping timeout: 252 seconds)
06:57:04 notzmv joins (~zmv@user/notzmv)
06:59:46 × merijn quits (~merijn@c-001-001-001.client.esciencecenter.eduvpn.nl) (Ping timeout: 250 seconds)
07:02:44 × liz quits (~liz@2a00:23c5:9680:501:b62e:99ff:fee4:47fa) (Remote host closed the connection)
07:06:15 × cyphase quits (~cyphase@user/cyphase) (Ping timeout: 252 seconds)
07:08:55 cfricke joins (~cfricke@user/cfricke)
07:09:18 × tomku quits (~tomku@user/tomku) (Ping timeout: 250 seconds)
07:09:38 coot joins (~coot@213.134.190.95)
07:10:50 feliix42_ joins (~felix@gibbs.uberspace.de)
07:11:13 cyphase joins (~cyphase@user/cyphase)
07:11:45 × feliix42 quits (~felix@gibbs.uberspace.de) (Ping timeout: 252 seconds)
07:18:46 dschrempf joins (~dominik@070-207.dynamic.dsl.fonira.net)
07:22:00 Pickchea joins (~private@user/pickchea)
07:25:35 × lavaman quits (~lavaman@98.38.249.169) (Remote host closed the connection)
07:25:49 lavaman joins (~lavaman@98.38.249.169)
07:25:57 × lavaman quits (~lavaman@98.38.249.169) (Remote host closed the connection)
07:28:28 _ht joins (~quassel@231-169-21-31.ftth.glasoperator.nl)
07:28:38 × Vajb quits (~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi) (Read error: Connection reset by peer)
07:28:50 Vajb joins (~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi)
07:30:55 michalz joins (~michalz@185.246.204.43)
07:36:29 × jonathanx quits (~jonathan@h-178-174-176-109.A357.priv.bahnhof.se) (Ping timeout: 252 seconds)
07:40:07 jonathanx joins (~jonathan@c-5eea3758-74736162.cust.telenor.se)
07:43:39 × nexus_ quits (~nexus@80-95-85-52.pool.digikabel.hu) (Ping timeout: 252 seconds)
07:44:50 × Akiva quits (~Akiva@user/Akiva) (Ping timeout: 250 seconds)
07:45:32 nexus_ joins (~nexus@84-236-55-113.pool.digikabel.hu)
07:47:41 machinedgod joins (~machinedg@24.105.81.50)
07:48:50 × yauhsien quits (~yauhsien@61-231-44-111.dynamic-ip.hinet.net) (Remote host closed the connection)
07:51:04 yauhsien joins (~yauhsien@61-231-44-111.dynamic-ip.hinet.net)
07:52:37 × jonathanx quits (~jonathan@c-5eea3758-74736162.cust.telenor.se) (Ping timeout: 256 seconds)
07:56:06 × yauhsien quits (~yauhsien@61-231-44-111.dynamic-ip.hinet.net) (Ping timeout: 268 seconds)
07:57:18 lortabac joins (~lortabac@2a01:e0a:541:b8f0:cecd:603d:2da7:a044)
08:00:58 MarcoBuster joins (~MarcoBust@37.161.174.126)
08:01:04 MajorBiscuit joins (~MajorBisc@2a02:a461:129d:1:193d:75d8:745d:e91e)
08:02:31 × _ht quits (~quassel@231-169-21-31.ftth.glasoperator.nl) (Remote host closed the connection)
08:03:00 briandaed joins (~root@109.95.142.93.r.toneticgroup.pl)
08:04:13 <MarcoBuster> Hi! I'm trying to learn Haskell for my first time. Can someone explain what this expression does?
08:04:14 <MarcoBuster> λx.(case x of inl(y) -> x, inr(z) -> inl(z))
08:04:14 <MarcoBuster> Thank you very much
08:04:15 × mreh quits (~matthew@host86-172-33-212.range86-172.btcentralplus.com) (Quit: Lost terminal)
08:11:19 × Pickchea quits (~private@user/pickchea) (Ping timeout: 256 seconds)
08:11:41 × Sgeo quits (~Sgeo@user/sgeo) (Read error: Connection reset by peer)
08:14:20 fendor joins (~fendor@178.165.206.62.wireless.dyn.drei.com)
08:16:01 tomku joins (~tomku@user/tomku)
08:16:10 alp joins (~alp@user/alp)
08:16:27 yauhsien joins (~yauhsien@61-231-44-111.dynamic-ip.hinet.net)
08:18:26 acidjnk joins (~acidjnk@pd9e0b763.dip0.t-ipconnect.de)
08:21:12 × jinsun__ quits (~jinsun@user/jinsun) ()
08:25:01 × dextaa_ quits (~dextaa@user/dextaa) (Remote host closed the connection)
08:26:53 × gdown quits (~gavin@h69-11-149-231.kndrid.broadband.dynamic.tds.net) (Remote host closed the connection)
08:27:17 × MarcoBuster quits (~MarcoBust@37.161.174.126) (Remote host closed the connection)
08:27:19 zmt01 joins (~zmt00@user/zmt00)
08:27:33 MarcoBuster joins (~MarcoBust@37.161.174.126)
08:28:12 × zmt00 quits (~zmt00@user/zmt00) (Ping timeout: 240 seconds)
08:28:55 <jackdk> MarcoBuster: do you have a link to where you saw that expression, because the lower-case `inl` and `inr` would not be valid
08:30:26 lavaman joins (~lavaman@98.38.249.169)
08:33:34 <MarcoBuster> jackdk: in Haskell terms that is \x -> case x of { Left y -> x; Right z -> Left z }
08:34:27 <jackdk> What parts of this expression do you understand? Specifically, do you understand what a lambda abstraction means, and what a case expression does?
08:36:20 chele joins (~chele@user/chele)
08:36:39 <MarcoBuster> I think I don't really understood what a case expression does
08:37:58 <MarcoBuster> I'm familiar with the case expression of non-functional programming languages of course but it can't map the concept to the Haskell "case"
08:38:08 <jackdk> yeah, this is quite different
08:39:27 × vglfr quits (~vglfr@46.96.161.0) (Read error: Connection reset by peer)
08:39:55 <jackdk> A case expression means: look at the shape of the expression between `case` and `of` (the "scrutinee"). Working through the list of `pattern -> expression` clauses, in order, seeing if the pattern matches the scrutinee. If it does, assign the variables in the pattern and evaluate the right hand side of the `->`
08:40:07 <jackdk> that's a lot of words, so let's do an example
08:40:10 vglfr joins (~vglfr@46.96.161.0)
08:40:41 <jackdk> `(\x -> case x of { Left y -> x; Right z -> Left z }) (Right 3)`
08:41:39 <jackdk> First step: evaluate the lambda, substituting `x`: `case Right 3 of { Left y -> Right 3; Right z -> Left z }`. Does `Right 3` match the pattern `Left y`?
08:44:27 × perrierjouet quits (~perrier-j@modemcable012.251-130-66.mc.videotron.ca) (Quit: WeeChat 3.4)
08:45:34 merijn joins (~merijn@c-001-001-001.client.esciencecenter.eduvpn.nl)
08:46:13 × sander quits (~sander@user/sander) (Ping timeout: 240 seconds)
08:49:21 cheater joins (~Username@user/cheater)
08:49:50 perrierjouet joins (~perrier-j@modemcable012.251-130-66.mc.videotron.ca)
08:51:10 kuribas joins (~user@ptr-25vy0i9smgbd9x89015.18120a2.ip6.access.telenet.be)
08:52:57 × lavaman quits (~lavaman@98.38.249.169) (Ping timeout: 252 seconds)
08:52:57 × MarcoBuster quits (~MarcoBust@37.161.174.126) (Read error: Connection reset by peer)
08:54:12 deadmarshal_ joins (~deadmarsh@95.38.115.168)
08:54:21 Guest16 joins (~Guest16@89-64-88-131.dynamic.chello.pl)
08:54:28 Guest16 is now known as HaskLove
08:54:36 <dminuoso> Is there a way to delete a package candidate on hackage?
08:54:51 <dminuoso> I specified an incorrect version, but I want to avoid accidentally ever publishing this in the future.
08:55:13 InstX1 joins (~Liam@2601:6c4:4080:3f80:c5d8:5b17:fec2:5fb2)
08:56:45 <HaskLove> Hello! Does anybody here have experience with time / space profiling? For some reason 52%time of my program is being taken up by the "MAIN <built-in>" cost center and I can't find any documentation that explicitly states what that cost center refers to. Appreciate any inputs!
08:56:53 <dminuoso> Gah the hackage UX is so bizarre.
08:57:19 <dminuoso> It's like people without a graphical browser designed it. :>
08:58:16 × HaskLove quits (~Guest16@89-64-88-131.dynamic.chello.pl) (Client Quit)
08:58:37 × InstX1_ quits (~Liam@2601:6c4:4080:3f80:51cd:6d8f:20a7:5eaa) (Ping timeout: 240 seconds)
08:59:54 <jackdk> dminuoso: click into the package candidate -> edit package information -> delete candidate
09:00:06 × vglfr quits (~vglfr@46.96.161.0) (Ping timeout: 252 seconds)
09:00:16 × lumberjack123 quits (~alMalsamo@gateway/tor-sasl/almalsamo) (Ping timeout: 240 seconds)
09:00:21 <dminuoso> jackdk: Ahh!
09:00:25 <dminuoso> Thanks.
09:00:38 <jackdk> dminuoso: not that I disagree with your complaint :->
09:01:10 <[exa]> hackage admin interface isn't on gopher? ._.
09:01:34 <jackdk> nah coz gopher's readonly iirc
09:06:34 × FinnElija quits (~finn_elij@user/finn-elija/x-0085643) (Remote host closed the connection)
09:11:33 alMalsamo joins (~alMalsamo@gateway/tor-sasl/almalsamo)
09:12:53 alMalsamo is now known as lumberjack13
09:13:24 <[exa]> jackdk: you can actually smuggle in user data to scripts in the very same way as with old html (there's "search form" support :D )
09:13:42 FinnElija joins (~finn_elij@user/finn-elija/x-0085643)
09:14:01 Guest16 joins (~Guest16@89-64-88-131.dynamic.chello.pl)
09:14:09 × Guest16 quits (~Guest16@89-64-88-131.dynamic.chello.pl) (Client Quit)
09:14:37 rond_ joins (~rond_@90.254.208.190)
09:15:14 <dminuoso> `ghcup: make: executeFile: does not exist (No such file or directory)`
09:15:17 mbuf joins (~Shakthi@122.174.246.23)
09:15:23 <dminuoso> Does ghcup require manual installation of its dependencies beforehand?
09:15:39 <dminuoso> Shouldn't it take care of that? (I really dont know, Im not a ghcup regular user)
09:15:39 <jackdk> [exa]: oh noooooo
09:16:03 <jackdk> dminuoso: depends on how you installed it, I would've through the installer script would do that
09:16:30 <jackdk> (I also do not use it that much, having shed physical form and ascended to the nix plane)
09:16:47 <merijn> dminuoso: Because it wasn't designed for browsers. There was an API designed, without a frontend and the frontend is mostly hacked on "as needed"
09:17:46 <dminuoso> merijn: Okay that explains a few things
09:19:14 nishant joins (~Nishant@49.37.242.151)
09:19:17 <merijn> dminuoso: So for awhile you would just sent manual REST requests to it for stuff like deleting candidates until someone hacked in a minimum viable webpage with a button
09:19:28 × nishant quits (~Nishant@49.37.242.151) (Remote host closed the connection)
09:19:58 nishant joins (~Nishant@49.37.242.151)
09:20:22 lavaman joins (~lavaman@98.38.249.169)
09:23:37 <geekosaur> re ghcuup deps, it's impossible to keep up with naming in different distros
09:24:34 ccntrq joins (~Thunderbi@2a01:c22:89c9:4f00:38e1:ceae:1fb6:a685)
09:29:39 Major_Biscuit joins (~MajorBisc@c-001-021-050.client.tudelft.eduvpn.nl)
09:31:00 × MajorBiscuit quits (~MajorBisc@2a02:a461:129d:1:193d:75d8:745d:e91e) (Ping timeout: 240 seconds)
09:32:10 <tomsmeding> I think the ghcup installer tries to print a list of required package names, but needs you to install them manually still
09:40:47 <geekosaur> yes
09:41:21 <geekosaur> and the list is only for the largest distros (I think debian-based,fedora-based, arch-based, otherwise you're on your own last I checked?)
09:41:38 <maerwald> dminuoso: no
09:41:50 × lavaman quits (~lavaman@98.38.249.169) (Ping timeout: 250 seconds)
09:42:00 <maerwald> invoking sudo, apt-get or any package manager is a declared non-goal
09:42:20 jonathanx joins (~jonathan@c-5eea3758-74736162.cust.telenor.se)
09:43:42 × szkl quits (uid110435@id-110435.uxbridge.irccloud.com) (Quit: Connection closed for inactivity)
09:43:48 <maerwald> `ghcup tool-requirements` can be of some help
09:45:50 <geekosaur> ghcup aims to be installed by ordinary users,very few systems allow package managers to be run directly by an ordinary user (which is a good thing)
09:46:36 <merijn> geekosaur: Hard disagree
09:46:59 <merijn> The fact that linux package managers don't by default support user-specific installs is a terrible misfeature
09:47:19 <maerwald> they do, but no one uses those
09:47:31 <merijn> "let's make sure that on our multi-user OS only the admin can actually install stuff! Yeah!"
09:47:32 <geekosaur> user-*specific* is a much more complicated design than what I'm talking about
09:47:50 <maerwald> most package managers allow to define chroot targets
09:47:56 × lumberjack13 quits (~alMalsamo@gateway/tor-sasl/almalsamo) (Ping timeout: 240 seconds)
09:47:57 <geekosaur> it's also largely obsolete these days
09:48:08 <merijn> maerwald: Only with *a lot* of effort
09:48:15 <dminuoso> merijn: Makes perfect sense. Thanks
09:48:18 <dminuoso> Err maerwald!
09:48:39 <maerwald> XDG spec is not usable for package managers
09:48:46 × jonathanx quits (~jonathan@c-5eea3758-74736162.cust.telenor.se) (Ping timeout: 250 seconds)
09:48:54 <maerwald> so it has to be a proper chroot
09:49:27 <[exa]> kinda wondering how many of the computers in question are actually multiuser
09:49:31 <merijn> Creating a "proper chroot" is a nightmare task as unprivileged user, though
09:49:46 <maerwald> merijn: please ask your system administrator xD
09:49:54 <geekosaur> I'm sorry,but to me this sounds like docker all over again
09:50:01 <merijn> [exa]: All university clusters, where you most need user installs, because everything is 15 years old
09:50:04 <tomsmeding> [exa]: I think if a user has no permissions to install system packages, it's likely to be an actual multi-user system
09:50:18 <merijn> tomsmeding++
09:50:51 <maerwald> tomsmeding: well... if you don't want users to install system packages, do you want them to be able to install arbitrary toolchains and install binaries?
09:50:55 <maerwald> I don't think so
09:51:14 <tomsmeding> well then you can usually only mess up your own user environment
09:51:16 <maerwald> but that's not my problem :p
09:51:18 <[exa]> tomsmeding: no like, if the user may just sudo, it's technically single user, there's just a tiny bit of user presence check
09:51:18 <merijn> maerwald: I mean, that's exactly what people do on university clusters and supercomputers
09:51:19 <tomsmeding> which is generally the whole point of that permission system
09:51:28 <[exa]> merijn: valid but these provide at least LMod or something
09:51:29 <maerwald> merijn: yeah, I consider those misconfigured
09:51:39 <tomsmeding> [exa]: yes and we're taling about the systems where a user may _not_ just sudo, e.g. university systems
09:51:40 <merijn> maerwald: They'd be useless in any other configuration
09:51:57 <merijn> maerwald: wtf use is a cluster machine where you can't install the stuff you need??
09:52:05 <maerwald> either they should disallow installing any binary or allow installing of system packages in a way that doesn't persist re-login or switching users
09:52:22 <maerwald> anything in between makes no sense
09:52:36 <[exa]> tomsmeding: ah so okay
09:52:40 <tomsmeding> maerwald: "system package that doesn't persist switching users", i.e. user-local packages? :p
09:52:43 <merijn> maerwald: And you think any admin can setup the latter satisfactory?
09:52:51 <maerwald> tomsmeding: that can be achieved in a number of ways
09:52:56 <merijn> tomsmeding: Get outta here with your logic!
09:52:59 <maerwald> merijn: xD
09:53:24 <dminuoso> maerwald: It would be nice if ghcup had some basic probing of used binaries. Something along the lines of "Missing `make`. Please install this yourself`
09:53:25 <maerwald> they might not actually reside in $HOME
09:53:31 <dminuoso> Would you be opposed of something along these lines?
09:53:41 <maerwald> dminuoso: that's what the GHC configure script does, basically
09:53:45 <maerwald> it checks your toolchain
09:53:48 <dminuoso> [ ghc-make ] ghcup: make: executeFile: does not exist (No such file or directory)
09:54:07 <[exa]> we had this once tbh
09:54:08 <maerwald> that would be a bug in the configure script then
09:54:35 <[exa]> Checking for make presence... no
09:56:26 <maerwald> dminuoso: https://gitlab.haskell.org/ghc/ghc/-/blob/master/distrib/configure.ac.in
09:56:47 <[exa]> kinda realizing that all custom packages I've got on the hpc here are autotools and I didn't even notice because all just worked. including the binary distribution of ghc lol
09:58:03 nunggu joins (~q@user/nunggu)
09:59:25 <dminuoso> My autotools-fu is practically non-existent.
09:59:38 DNH joins (~DNH@2a02:8108:1100:16d8:2015:9361:6306:3ac4)
09:59:41 <dminuoso> Im sure there's still a few greybearded GNU wizards that can understand .ac.in files
09:59:50 cosimone joins (~user@93-44-187-176.ip98.fastwebnet.it)
10:00:13 lumberjack13 joins (~alMalsamo@gateway/tor-sasl/almalsamo)
10:01:01 × nexus_ quits (~nexus@84-236-55-113.pool.digikabel.hu) (Ping timeout: 240 seconds)
10:02:51 kenran joins (~kenran@ip-037-024-119-190.um08.pools.vodafone-ip.de)
10:02:54 nexus_ joins (~nexus@178-164-207-227.pool.digikabel.hu)
10:03:46 jinsun joins (~jinsun@user/jinsun)
10:03:52 <[exa]> nah, it's not that bad
10:04:08 <maerwald> https://gitlab.haskell.org/ghc/ghc/-/issues/21232
10:06:23 <dminuoso> Ah interesting, Ill have to check why I couldnt find that issue
10:07:04 × yauhsien quits (~yauhsien@61-231-44-111.dynamic-ip.hinet.net) (Remote host closed the connection)
10:08:09 <maerwald> because I just opened it
10:08:26 <dminuoso> Oh hah
10:08:40 <dminuoso> I totally read that "Created 2 minutes ago" as "Created 2 years ago"
10:09:13 lavaman joins (~lavaman@98.38.249.169)
10:09:21 zincy_ joins (~zincy@2a00:23c8:970c:4801:6945:2980:3f53:dff8)
10:09:49 geekosaur is pretty good at .ac.in files actually
10:09:56 <geekosaur> been doing it for long enough
10:10:52 <maerwald> I know autotools as well, but I'm not too keen about digging into it and debugging 15k LOC generated shell mess :p
10:11:09 jonathanx joins (~jonathan@c-5eea3758-74736162.cust.telenor.se)
10:11:23 chele_ joins (~chele@user/chele)
10:11:55 <maerwald> autotools is the reason for broken network package on windows too
10:12:04 <maerwald> it's an abomination
10:12:07 × jonathanx quits (~jonathan@c-5eea3758-74736162.cust.telenor.se) (Remote host closed the connection)
10:12:18 <geekosaur> vi m4 even
10:12:31 × zincy_ quits (~zincy@2a00:23c8:970c:4801:6945:2980:3f53:dff8) (Remote host closed the connection)
10:12:37 <geekosaur> *via
10:13:48 × chele quits (~chele@user/chele) (Ping timeout: 252 seconds)
10:15:49 jonathanx joins (~jonathan@c-5eea3758-74736162.cust.telenor.se)
10:16:13 Guest14 joins (~Guest14@185.249.168.124)
10:16:37 <dminuoso> geekosaur: So I genuinely think that it's mostly older folks who come from that time that potentially have autotools experience. The younger generations don't even know how to build software anymore, they hand you a snapshot of an entire filesystem instead.
10:17:06 <geekosaur> yeh. I made a docker comment earlier
10:17:07 <dminuoso> Not that autotools is a pleasent experience, my previous remark was a bit of a hyperbole, but they are a tried mechanism of somewhat portably building software
10:17:07 <maerwald> the only thing good about older times is that manpages and HTML documentations were actually useful
10:17:29 <maerwald> now you just have blog posts and broken readmes
10:17:51 <dminuoso> maerwald: Back then mostly stable APIs was a thing as well
10:17:55 <maerwald> yes
10:18:11 × rond_ quits (~rond_@90.254.208.190) (Quit: Client closed)
10:18:18 <maerwald> I keep arguing that PVP doesn't help with this, but I think no one understands what I mean
10:18:48 <dminuoso> I guess PVP/semver is a symptom rather than a solution. The fact that we have to establish these rules in the first place happens because breaking APIs is a common practice.
10:19:33 <dminuoso> Its a similar story with wayland
10:19:36 <maerwald> I think it's hard to distinguish cause and effect. Because the early go ecosystem had very bad tooling wrt semver etc and you mostly just encountered stable APIs
10:19:58 <dminuoso> You can critize X all you want, but it *is* completely standardized. Wayland is just a quickly moving mess
10:20:14 × coot quits (~coot@213.134.190.95) (Quit: coot)
10:20:14 <dminuoso> Whether your wayland app will work 6 months from now, nobody can say
10:20:37 <maerwald> and because there was no good tooling to break API, people would publish new packages if they make backwards incompatible changes
10:20:38 InstX1_ joins (~Liam@2601:6c4:4080:3f80:94f:38ab:47e0:127c)
10:20:58 <maerwald> and that leads to thinking longer about your changes
10:21:16 × jonathanx quits (~jonathan@c-5eea3758-74736162.cust.telenor.se) (Read error: Connection reset by peer)
10:21:32 <maerwald> now, you just bump PVP and ignore the angry users on your github issue tracker
10:21:34 jonathanx joins (~jonathan@c-5eea3758-74736162.cust.telenor.se)
10:22:20 Evan_ joins (~Evan@185.249.168.124)
10:22:50 <dminuoso> Perhaps the main issue is that software development has been commercialized and managed to death. If management forces you to push software as fast as possible, and keep development cycles as short as possible, you quickly arrive at the fact that carefully designing things (takes time) and adhering to stable APIs (limits future features).
10:22:55 <maerwald> Shame is actually a good driver for quality. E.g. bad releases used to be shameful. Now that everything is rolling, you just fix bugs quickly and make yet another release.
10:23:02 <dminuoso> This trains an entire generation of software developers to work in that mind model
10:23:38 <dminuoso> Much of old linux was not products of industrial work, but people doing this in their spare time. Things like API stability was just noble intent
10:23:48 × InstX1 quits (~Liam@2601:6c4:4080:3f80:c5d8:5b17:fec2:5fb2) (Ping timeout: 240 seconds)
10:24:05 <dminuoso> Oh the previous remark was incomplete
10:24:25 <dminuoso> ... you quickly arrive at the fact that carefully designing things (takes time) and adhering to stable APIs (limits future features) is incompatible and too expensive.
10:24:32 <dminuoso> Ship now, worry about breaking later.
10:25:07 × Evan_ quits (~Evan@185.249.168.124) (Client Quit)
10:25:26 <dminuoso> Amusingly, go folks work around this problem by pinning dependencies onto github references with commit hashes. Sticking to a particular commit is definitely stable.
10:25:52 <dminuoso> (In some sense this is what nix ends up doing as well, but at least there exists workflows of easily updating said dependencies)
10:25:54 <maerwald> The problem is that there are actually real studies out there proving that releasing often improves product quality. I've talked to a researcher who was part of this. There is some truth to it, apparently, but... it's a much more complicated topic to unpack.
10:26:44 × Guest14 quits (~Guest14@185.249.168.124) (Quit: Client closed)
10:27:04 <dminuoso> Sure, from a business perspective there may be valid perspectives. Perhaps API stability is just a victim of capitalism in software development.
10:27:30 <maerwald> Yes, I doubt that the main products they were considering were libraries or stdlibs.
10:27:47 <maerwald> or kernel userpsace
10:27:48 <kritzefitz> Releasing often doesn't necessarily imply breaking the API often.
10:27:58 <maerwald> kritzefitz: exactly
10:28:11 <merijn> maerwald: Joke's on you, I ignore angry users anyway! :D
10:28:34 <dminuoso> kritzefitz: There is a direct correlation though. Releasing often makes it much harder to ship long overhauls. Or equivalently, if you need to ship a feature now, you also need to ship dependend APIs wit hit.
10:28:35 × eggplant_ quits (~Eggplanta@2600:1700:bef1:5e10:fcf5:76ff:669c:b084) (Remote host closed the connection)
10:28:44 <merijn> "you broke our stuff!" 'oh, well, that sounds inconvenient for you...'
10:28:48 <dminuoso> That might mean you might ship an incomplete or poorly designed API
10:29:10 <dminuoso> Releasing often definitely promotes unstable APIs
10:29:24 <dminuoso> Designing stable APIs with long foresight is hard.
10:29:24 <merijn> maerwald: Your problem isn't with the PVP, your problem is with people not committing to longterm stability
10:29:41 <merijn> And most people won't commit to that, PVP or no
10:29:46 <dminuoso> merijn: Well, perhaps PVP should be tracked in cabal packages.
10:29:49 <maerwald> merijn: well, PVP promotes unstable APIs as well, although you can use PVP differently
10:29:53 × aplainze1akind quits (~johndoe@captainludd.powered.by.lunarbnc.net) (Quit: Free ZNC ~ Powered by LunarBNC: https://LunarBNC.net)
10:29:55 aplainzetakind joins (~johndoe@captainludd.powered.by.lunarbnc.net)
10:29:59 <dminuoso> In the sense that you mark a package as "respectsPVP"
10:30:11 <kritzefitz> But does taking a long time to design an API really result in a good API? I don't know the actual history, but I bet PAM took a long time to design the API. Nowadays its API is rock solid, but basically good for nothing except UNIX authentication.
10:30:14 <merijn> maerwald: Which is fine, because in reality, basically all open source APIs *are* unstable
10:30:23 <maerwald> and the other thing is... no one really backports bugfixes to older PVP releases
10:30:27 <kritzefitz> I.e. it completely failed at the design goal to become a general authentication framework.
10:30:44 <maerwald> merijn: well, moreso in Haskell, because of the type system
10:31:02 <maerwald> I mean, I can't imagine how servant would not break PVP regularly
10:31:06 <dminuoso> kritzefitz: That argument doesnt quite follow. Im not saying that spending a lot of time leads to good APIs.
10:31:14 <dminuoso> But spending *little* time likely leads to worse APIs.
10:31:25 × lavaman quits (~lavaman@98.38.249.169) (Ping timeout: 250 seconds)
10:31:28 <dminuoso> Allowing yourself to spend more at least gives you better potential for a good API
10:31:51 <merijn> maerwald: "nobody backports bugfixes" <- oh, I'm sorry, was I unclear when I licensed my code "as is"? :D
10:31:56 <dminuoso> Of course we get into management debates now when to recognize that the API is in a good shape, and how to avoid overspending time on it
10:32:38 <kritzefitz> Ok, yeah. Spending little time on an API probably won't improve it.
10:33:13 <maerwald> merijn: you should treat the authors of the libraries you use like your enemies: know them well, eat and dine with them, know where they live :p
10:33:17 <merijn> maerwald: A lot of your critique boils down to "I want people to commit to long-term stable APIs and long-term support of it". Which just will never happen in an open source context, unless you pay for it
10:33:33 shriekingnoise joins (~shrieking@201.231.16.156)
10:33:41 <dminuoso> merijn: Never is a bit too strong, it does happen in open source context.
10:33:45 <maerwald> merijn: I disagree with that
10:33:51 <dminuoso> But there's usually no way to know whether the commitment has been done at all.
10:33:54 <merijn> dminuoso: Mostly in cases where people get paid for it ;)
10:34:04 <kritzefitz> But I think the actual thing that kills rigid-hard APIs such as PAM isn't their development time, but their rigidness. I don't think it's possible to design a good API without experience of how to use it, which you will necessarily only get in sufficient amounts once the API is done.
10:34:05 <maerwald> I think it's more of a recent trend to not care, that's promoted by further tooling
10:34:05 <dminuoso> Perhaps
10:34:05 <merijn> maerwald: With what?
10:34:07 <maerwald> an culture
10:34:24 <maerwald> it wasn't always that way, when all you had is shitty C libraries
10:34:30 <merijn> maerwald: I don't think so. It's just selection bias
10:34:34 <kritzefitz> So I'd say practically you have the joist of incrementally improving your APIs and living with breaking changes or forever living with bad but stable APIs.
10:34:44 <kritzefitz> * choice
10:34:48 <merijn> maerwald: The only old stuff you remember/that is still around had long term commitment
10:34:52 <dminuoso> kritzefitz: It's a complex topic, and depends on the subject. But if you start with a semantic model, and shape your API around that semantic model, usually that leads to great results.
10:35:13 <maerwald> merijn: are you saying the only things that prevail are things that are stable?
10:35:39 <dminuoso> kritzefitz: This is what X did for example. It's an API around designed semantics. Whether you like the semantics or not, not as long as the semantics allow you to model most windowing problems, its a great fit.
10:35:51 <merijn> maerwald: Partially, sure
10:35:55 <dminuoso> It's perhaps somewhat antiquated and has lots of design goals that dont quite fit nowadays problems anymore
10:36:07 <merijn> maerwald: but "prevailing" is not always a goal when people release code
10:36:12 <dminuoso> But it is standardized, rock stable, and has a semantic model. You dont need to fear breaking changes. :)
10:36:20 <maerwald> merijn: what does that tell us about Haskell prevailing? xD
10:36:47 <maerwald> people think the only way for Haskell to prevail is keep feeding the researchers and their motivation
10:36:47 <merijn> maerwald: I mean, python is still around
10:36:53 <kritzefitz> dminuoso: I don't think you can just brush away changing design goals as something you can ignore. The world keeps changing and lots of software that needs to deal with the world needs to follow it.
10:37:02 <merijn> maerwald: I don't think anybody thinks that
10:37:10 <maerwald> merijn: many people I talked to think that
10:37:22 <merijn> maerwald: but most development is being done by 1) academic and 2) well-typed, so those *effectively* control what happens
10:37:22 InstX1 joins (~Liam@2601:6c4:4080:3f80:501d:140:cf41:aa43)
10:37:41 <dminuoso> kritzefitz: Dunno, so Im going to make a claim here. Agile development frequently leads to fragile software.
10:37:49 <dminuoso> Makes sense since `agile` is in the word `fragile`
10:37:56 <merijn> maerwald: Well, unless you come up with a way to replace (or outperform) the academic contribution to GHC, they will have a lot of control over where GHC goes
10:38:16 coot joins (~coot@213.134.190.95)
10:38:21 <maerwald> I think competition to GHC would be great
10:38:25 <dminuoso> kritzefitz: One of the big negative consequences of accepting "regular changes" is that it "regularly changes your product"
10:38:43 <merijn> maerwald: Sure. But it doesn't exist, for the same reason academics largely shape GHCs development
10:38:44 <dminuoso> And it leads to spending less time beforehand about what it is you're building
10:38:49 <merijn> maerwald: Because no one wants to pay for it
10:38:52 <dminuoso> As in "build now, lets see whether this is what we want later"
10:38:55 <kritzefitz> dminuoso: Ok, I don't want to argue against that claim. But I also want to make the claim that agile software meets the requirements of its users.
10:39:02 <dminuoso> Agile development is inherently incompatible with stable APIs.
10:39:06 <geekosaur> does it?
10:39:12 <maerwald> merijn: I can employ a compiler engineer for 3 months before I'm broke... will that be enough?
10:39:21 <dminuoso> kritzefitz: agile software meets the *changing* requirements of its users.
10:39:24 × InstX1_ quits (~Liam@2601:6c4:4080:3f80:94f:38ab:47e0:127c) (Ping timeout: 240 seconds)
10:39:28 <merijn> maerwald: No. Which is why GHC isn't going to be what you want anytime soon :)
10:40:14 <kritzefitz> dminuoso: I don't know a case where someone knew their requirements well enough to cast into unchangeable software before the software was done.
10:40:31 bitmapper joins (uid464869@id-464869.lymington.irccloud.com)
10:41:04 <kritzefitz> But I don't even want to say that adaptability always trumps stability. It seems more like a dilemma to me. How can we have software that is both stable and adaptable?
10:41:33 <dminuoso> kritzefitz: Well in GHC Haskell we have that situation. It's mostly stable, and we accept that we have shitty parts in the language. Of course we could get rid of `Read` and replace most String with Text. The breakage would be insane.
10:42:06 <dminuoso> Its not necessarily about predicting the ideal requirements, but sometimes its okay to say "We would like to change the requirements, but that has a cost"
10:42:31 <maerwald> dminuoso: good news, we're going to get rid of FilePath at some point :D
10:42:57 raehik joins (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net)
10:43:01 <maerwald> like, in 20 years
10:43:31 <dminuoso> Calendar entry done!
10:43:46 <dminuoso> If its not there by then, I demand to be paid 10 cookies in damages
10:44:36 <maerwald> feel free to help reviewing: https://github.com/haskell/filepath/pull/103
10:44:52 <dminuoso> kritzefitz: And arguably, the linux kernel is a more prominent example. It has *extremely* poor APIs to the point where you think "couldn't you have spend 10 minutes to think about this insanity?" or "who the heck ever agreed to merge this"
10:44:54 <dminuoso> But its stable.
10:45:29 <dminuoso> Linux Kernel API is so stable, you can expect ioctl to still exist unchanged 30 years from now.
10:45:38 <kritzefitz> dminuoso: Yes, changing requirements has a cost, just a depending on unstable software has a cost. So we have tools to reduce either of those costs. The dilemma seem to be unable to reduce both at the same time under a certain level.
10:45:40 <dminuoso> Despite being the the worst API to have ever entered the kernel
10:46:52 <maerwald> The main thing I remember about agile is an engineer working for german railway company and telling me in private they've considered leaking information to journalists about the state of the project. xD
10:46:55 × zmt01 quits (~zmt00@user/zmt00) (Ping timeout: 256 seconds)
10:47:56 <dminuoso> And bizarrely I would prefer a bad but stable API over a good but unstable API.
10:48:14 <dminuoso> Of course a stable good API is ideal, but those are hard to come by
10:48:16 × lumberjack13 quits (~alMalsamo@gateway/tor-sasl/almalsamo) (Ping timeout: 240 seconds)
10:48:39 <maerwald> Doing bad work in software doesn't have enough legal implications.
10:48:53 <dminuoso> Yes. There should be liability for software
10:49:15 <dminuoso> I recommend reintroducing flogging.
10:49:25 <dminuoso> Breaking PVP gives you 10 lashes.
10:49:54 <maerwald> lol
10:50:38 <Hecate> nice, I should do that more often
10:50:55 <maerwald> ewww xD
10:51:30 <kritzefitz> Yes, haham I get that it's hyperbole, but seriously? People put up stuff that they made in their free time for free and you want to shame them for doing it in a way they like?
10:52:55 mreh joins (~matthew@host86-172-33-212.range86-172.btcentralplus.com)
10:53:16 <dminuoso> The liability part is not a joke.
10:53:40 <dminuoso> Ask maerwald about liability in construction, for example with concrete
10:53:44 <geekosaur> it'll be gamed
10:54:04 jonathanx_ joins (~jonathan@dyn-2-sc.cdg.chalmers.se)
10:54:06 × ccntrq quits (~Thunderbi@2a01:c22:89c9:4f00:38e1:ceae:1fb6:a685) (Remote host closed the connection)
10:54:10 <kritzefitz> Yes, that's what I'm concerned about. That it's not a joke. If I was liable for software I make for free in my free time, I would stop doing software in my free time. Period.
10:54:12 gensyst joins (gensyst@user/gensyst)
10:54:19 <maerwald> I think it starts at C30 or C35
10:54:22 <dminuoso> I dont have a specific recommendation how liability would even work given how distant the author of a library and a resulting product using that library is
10:54:24 ccntrq joins (~Thunderbi@2a01:c22:89c9:4f00:38e1:ceae:1fb6:a685)
10:54:49 <dminuoso> kritzefitz: Okay asked differently"
10:55:15 <gensyst> My friends, can you help me decipher this time profile? https://paste.centos.org/view/d68cb444 Why is "otherFunc" directly below "someFunc" but with very low percentage figures?
10:55:23 <dminuoso> I build a plane and that plane runs on casual usual npm hosted software.
10:55:27 <maerwald> your software misbehaves and has no tests? => jail
10:55:29 <gensyst> Is otherFunc an *actual* bottleneck or am I being fooled?
10:55:41 <dminuoso> kritzefitz: Would you be opposed to that? Have any worries?
10:56:00 <dminuoso> Who would be responsile if the plane crashes and *why*?
10:56:01 <mreh> is there a way to express this type relationship? F (AppendSymbol "[]" s) = [F s]
10:56:11 <dminuoso> kritzefitz: All I ask for is due diligence
10:56:12 <gensyst> (Also, I even tried refactoring all calls to otherFunc into a separate intermediateFunc, but why does this not cause intermediateFunc to even show up in my profiler?)
10:56:17 × jonathanx quits (~jonathan@c-5eea3758-74736162.cust.telenor.se) (Ping timeout: 240 seconds)
10:56:22 <maerwald> dminuoso: tbf... a plane probably *could* run random npm software, given all the redundancy tricks in their architecture :p
10:56:22 <kritzefitz> dminuoso: Of course I don't want that. But the people building a plane usually don't do it for free.
10:56:53 <dminuoso> kritzefitz: that due diligence would include, but not be limited to, having tests, automated build processes, have a documented procedure and time table to respond to bug reports.
10:56:55 <maerwald> I really don't buy this argument that money is what makes the main difference
10:57:04 <maerwald> I don't apply half of my standards when working for money
10:57:20 <maerwald> Because the customer/employer wouldn't even want that
10:57:36 <dminuoso> kritzefitz: If I build electrical tools in my free time, there's tons of regulartions for that as well
10:57:41 <dminuoso> Why should software be any different?
10:57:50 <dminuoso> If that software has the potential to cause damages
10:58:16 <maerwald> if you build a skyscraper for free, because you're a millionare, no one cares... it has to follow law regulations
10:58:19 <dminuoso> Arguably software can have far wider reaching consequences due to how uniquitious it is
10:58:49 <dminuoso> A poor wiring in an electric drill can only harm the user. A bug in a software plane can cause hundreds of deaths
10:59:05 ProfSimm joins (~ProfSimm@87.227.196.109)
10:59:28 <dminuoso> Laws tend to regulate the producer, not the consumer part.
10:59:29 <tomsmeding> but only because someone who actually works on the plane decided it was a good idea to use that npm package
10:59:31 <dminuoso> Why would software be any different?
11:00:04 <tomsmeding> mreh: is F a type family?
11:00:22 <kritzefitz> I don't think you should put the blame for the crashing plane on the person who wrote the software, but on the people who put the software on a plane without making sure it's demonstratably up to the task.
11:00:40 <dminuoso> mreh: Mmm I think you have to employ defunctionalization tricks
11:00:41 <tomsmeding> what I said but then more eloquently
11:01:02 <maerwald> kritzefitz: that depends. Liability in automotive industry depends on whether you followed the *process*.
11:01:15 × ProfSimm quits (~ProfSimm@87.227.196.109) (Remote host closed the connection)
11:01:23 <maerwald> The process can described what kind of testing you need to do, how often in the product development, etc
11:01:31 <maerwald> it doesn't describe the quality of the software itself
11:01:42 <dminuoso> kritzefitz: as long as you follow due diligence with your software, you would be free of liability of damages resulting from it.
11:01:49 <dminuoso> for example:
11:02:22 <dminuoso> say someone reports a security bug to your software, and you have no response whatsoever to that, and as a result someone else takes damage, I think you should be liable to some degree
11:03:03 <tomsmeding> if you somehow indicate with your software that it's ready to be used by others
11:03:27 <tomsmeding> if it's some random repo on github with no real documentation, then the liability should IMO be with the person who decided to use that in a product
11:04:40 <gensyst> BSD license fixes this in my end afaik
11:04:45 <maerwald> yeah, I think no one is suggesting that you're liable for the *actual* quality of your product
11:05:02 <maerwald> that's impossible to enforce and not reasonable
11:05:48 <maerwald> but you have to demonstrate intent
11:06:06 <kritzefitz> dminuoso: Yes, basically what tomsmeding said. I often am in a situation where I wouldn't be able to respond to a security problem in software I write. So should I keep all software I write for recreation secret, so no one might accidentally use it in their plane without checking it?
11:06:09 <tomsmeding> "in no event shall the authors or copyright holders be liable for any claim, damages or other liability, whether in an action of contract, tort or otherwise, arising from, out of or in connection with the software or the use or other dealings in the software." -- mit license
11:06:47 <tomsmeding> so at least currently, there's no liability
11:07:18 <merijn> People *selling* devices that include software should be liable for the software.
11:07:32 <dminuoso> merijn: This already exists in Germany at least.
11:07:36 <tomsmeding> or actively marketing it as suitable for a purpose
11:07:38 <dminuoso> At least partially
11:07:48 <merijn> like, if you're Apple, you're liable for software blowing up the phone/exposing people's private info, the same way you're liable for the battery blowing up
11:07:53 <dminuoso> Not complete liability, but at least obligations to provide security updates for 2 years.
11:07:54 <kritzefitz> And this is why I think money helps with this problem. If I get paid for something it enables me to reliably make time for it in my day to day live.
11:07:59 <dminuoso> which is a good first step at least
11:08:03 <merijn> if you're tesla and your software crashes cars? liable
11:08:42 <merijn> kritzefitz: Well, that circles back to my initial "aggressively no support" standpoint on open source ;)
11:09:07 <maerwald> I think money here is really irrelevant
11:09:15 <merijn> Open source as a "community effort" is great. People being merely consumers using open source, then demanding stuff...not fine
11:09:54 <maerwald> I'd argue anyone publishing their software on github are *actively adverstising* its use
11:10:11 <tomsmeding> maerwald: https://github.com/tomsmeding/tomjson/
11:10:15 <merijn> maerwald: I disagree, the money is very relevant. If nobodies paying, I'm gonna do whatever the hell I want and provide the exact amount of support I want (which should be assumed to be zero)
11:10:17 <kritzefitz> I think you're musing GitHub then.
11:10:19 <merijn> maerwald: Hard disagree
11:10:38 <maerwald> I have my own private gitea server
11:10:38 <merijn> maerwald: I put my code on github because "someone might find it instructive or useful"
11:10:40 <kritzefitz> *misusing
11:10:44 <maerwald> if you pull from there, joke is on you
11:10:54 geekosaur certainly hopes nobody else is trying to use his dotfiles that he put on github for multi-machine convenience
11:11:04 <geekosaur> and that, yes
11:11:18 <mreh> is this discussion OT?
11:11:24 <maerwald> I just want to get merijn into jail xD
11:11:40 <merijn> If you find my stuff on github useful, great! If you don't, well, eh, sucks to be you
11:11:43 <geekosaur> mreh, not really since it goes back to the question as applied to ghc
11:12:13 <merijn> Also, I think any discussion on programming practices/engineering are fairly on topic
11:12:15 <geekosaur> and software on hackage
11:12:41 geekosaur would have said something by now if it were off topic
11:16:27 <kuribas> maerwald: yeah right, as if anyone ever looks at your github repos.
11:20:08 × econo quits (uid147250@user/econo) (Quit: Connection closed for inactivity)
11:20:52 o-90 joins (~o-90@gateway/tor-sasl/o-90)
11:22:50 <maerwald[m]> kuribas: xD
11:23:53 × o-90 quits (~o-90@gateway/tor-sasl/o-90) (Remote host closed the connection)
11:24:19 <maerwald[m]> We could fix it locally and add a liability clause to hackage :p
11:25:21 <maerwald[m]> Hackage trustees hire a lawyer and we're good to go
11:25:47 finn_elija joins (~finn_elij@user/finn-elija/x-0085643)
11:25:47 × FinnElija quits (~finn_elij@user/finn-elija/x-0085643) (Killed (NickServ (Forcing logout FinnElija -> finn_elija)))
11:25:47 finn_elija is now known as FinnElija
11:25:56 <kritzefitz> maerwald[m]: I mean... we could. But I think effectively that would mean that most packages would have to vanish from hackage. I'm not sure that's what you want.
11:26:52 × DNH quits (~DNH@2a02:8108:1100:16d8:2015:9361:6306:3ac4) (Quit: My MacBook has gone to sleep. ZZZzzz…)
11:27:59 <maerwald[m]> Maybe I do xD
11:29:19 eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:a016:c70b:1497:f71c)
11:29:45 lavaman joins (~lavaman@98.38.249.169)
11:30:43 <maerwald[m]> I'm pretty sure uncle bob doesn't have high reputation here, but he made a good point once saying "if we don't come up with some rules ourselves, someone else will". And the latter might be worse for us
11:30:56 × gensyst quits (gensyst@user/gensyst) (Quit: Leaving)
11:31:02 <tomsmeding> we'd go back to the early days of open source, where stuff is shared between people instead of dumped on a public server first thing
11:31:04 <mreh> I thought OT meant "on topic", I was assuming good faith :)
11:31:21 <tomsmeding> same starting letters :p
11:32:43 <tomsmeding> for sure github would need less disk space in that universe
11:32:48 <mreh> tomsmeding: yeah, it is a type family
11:33:24 × eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:a016:c70b:1497:f71c) (Ping timeout: 240 seconds)
11:33:40 <[exa]> tomsmeding: hey wanna send me tapes with your haskell :D
11:33:47 <tomsmeding> :p
11:34:00 <mreh> just wondering if I can do some boilerplate reduction for the defnitions for polymorphic types
11:34:21 <tomsmeding> mreh: is this what you're looking for? https://hackage.haskell.org/package/symbols-0.3.0.0/docs/Data-Symbol-Ascii.html
11:34:23 <kritzefitz> I mean, I wouldn't even be opposed to something like “Hackage Premium” existing, where uploads imply Liability. I just don't think there would be much on it.
11:34:37 <tomsmeding> there would be almost nothing on it
11:35:03 <tomsmeding> perhaps only the nasa Copilot stuff
11:35:12 <mreh> tomsmeding: maybe, looks like you could do some type level parsing of Symbols with this
11:35:24 <tomsmeding> mreh: yeah that's the idea
11:35:29 DNH joins (~DNH@2a02:8108:1100:16d8:2015:9361:6306:3ac4)
11:35:37 <mreh> I just wanted a simple interface for a caching API and now I'm going down a rabbit hole
11:35:52 <tomsmeding> also: https://gitlab.haskell.org/ghc/ghc/-/issues/11342
11:36:58 <mreh> Is there a way to turn a type into a string other than a symbol?
11:37:16 <maerwald[m]> tomsmeding: I could imagine that having your projects on that platform would quickly become a sign for employers to hire for those devs. Balls of steel and work ethics ^^
11:37:18 <mreh> a type other than a symbol into a string, rather
11:38:07 Hemmo joins (~Hemmo@85-76-79-140-nat.elisa-mobile.fi)
11:38:23 <Hemmo> Hello! This the proper place to ask newbie haskell questions?
11:38:37 <[exa]> Hemmo: yes
11:39:04 <mreh> > show (Proxy :: Proxy Int)
11:39:06 <lambdabot> "Proxy"
11:39:12 <mreh> :|
11:40:34 <Hemmo> So I have a function that ought to return a "substring" of string 1 and 2 like this -> commonSubstring "XabcdefgY" "abcdefgXY"
11:40:34 <Hemmo> = "XY"
11:41:06 rond_ joins (~rond_@90.254.208.190)
11:41:11 <[exa]> Hemmo: why wouldn't it return "abcdefg" instead? (it looks like a better substring to me)
11:41:15 × dschrempf quits (~dominik@070-207.dynamic.dsl.fonira.net) (Ping timeout: 252 seconds)
11:41:34 <mreh> sounds like homework :P
11:41:37 jgeerds joins (~jgeerds@55d4548e.access.ecotel.net)
11:41:41 <Hemmo> Because this is one of my course exercises! It's a substring which isn't actually one
11:41:47 <Hemmo> It is ! and I am not asking for answers!
11:41:52 <Hemmo> I'm just absolutely stumped lol
11:41:53 <[exa]> ok good :]
11:41:56 <Hemmo> I'm trying to figure out
11:41:57 <Hemmo> how to ask this
11:42:16 <mreh> where are you studying?
11:43:02 <Hemmo> I'm in Finland
11:43:26 <Hemmo> And this is sort of a self-study course. There's nothing besides three lectures and a some problem sets
11:43:31 <mreh> I'm just curious where they're teaching Haskell
11:43:48 <Hemmo> Yeah this was an optional course for me
11:43:52 <[exa]> mreh: btw this is probably a bit overkill-ish but at this point you might want to check how Servant does this, they certainly have a way to render the types in the API docs, somehow
11:44:10 <Hemmo> Seemed interesting and possibly useful at some point ;D
11:44:21 <mreh> [exa]: Servant can create docs?
11:44:32 <tomsmeding> mreh: you're not secretly looking for Typeable, are you?
11:44:50 <[exa]> mreh: many unis have dedicated haskell courses, even surpassing the usual "lets learn recursion lol" from 20 years ago
11:44:52 <mreh> maybe?!
11:45:19 <[exa]> yeah +1 for Typeable.
11:45:24 <Hemmo> But back to my question. I can compare those strings in a "nested loop" kind of way, but I have no idea how to remove the characters I don't need anymore. This is what I have so far. commonSubstring s1 s2 = [x | x <- s1, y <- s2, x == y]
11:45:38 <tomsmeding> > typeRep (Proxy @Int)
11:45:39 <Hemmo> So I understand how that works, but
11:45:39 <lambdabot> <hint>:1:16: error: parse error on input ‘@’
11:45:45 <tomsmeding> % typeRep (Proxy @Int)
11:45:46 <yahb> tomsmeding: Int
11:45:59 <Hemmo> "The function removes c and all the characters before it in both strings, puts c in the output string, and continues."
11:46:25 <Hemmo> Any help with how to remove characters at a certain point and before in a string??
11:47:23 <mreh> tomsmeding: nice
11:47:34 <[exa]> Hemmo: your code finds all letters of all matching letter pairs between s1 and s2. You might like `dropWhile` or something like that
11:47:35 <mreh> % typeRep (Proxy @[Int])
11:47:35 <yahb> mreh: [Int]
11:47:54 razetime joins (~quassel@117.193.4.244)
11:48:04 <tomsmeding> mreh: essentially all monomorphic types have Typeable instances -- with emphasis on monomorphic
11:48:05 <mreh> is that printing the TypeRep?
11:48:10 <tomsmeding> % typeRep (Proxy @a)
11:48:10 <yahb> tomsmeding: ; <interactive>:22:17: error: Not in scope: type variable `a'
11:48:20 <tomsmeding> mreh: yeah just `show` on the TypeRep
11:48:33 <mreh> print or show?
11:48:40 <tomsmeding> :t print
11:48:40 <lambdabot> Show a => a -> IO ()
11:48:45 <tomsmeding> print calls show
11:48:55 <mreh> yes, okay I'm with you
11:49:18 <mreh> I can use `show` to get my String
11:49:56 <mreh> I'm indexing the cache table by the type so values can be unserialised later
11:50:26 <[exa]> Hemmo: if I get the task correctly, you take the first letter if s1, then either discard it and continue if it isn't in s2, or output it, discard the starting part of s2 up until that letter and and continue with the rest of s2, right?
11:50:46 <mreh> :t putStrLn . show
11:50:47 <lambdabot> Show a => a -> IO ()
11:51:56 <Hemmo> That is correct exa! I'm currently looking into dropWhile. Seems promising.
11:51:58 <[exa]> Hemmo: btw how do you get the `c` in your description?
11:52:42 <Hemmo> c is just the common character
11:52:55 <Hemmo> The actual function def is commonSubstring :: String -> String -> String
11:53:24 dyeplexer joins (~dyeplexer@user/dyeplexer)
11:56:05 <mreh> do you always need a forall a. to bring a into scope when using ScopedTypeVariables?
11:56:23 <[exa]> Hemmo: how do you find `c` though? you've got 2 strings and there are many possible common characters (or none)
11:57:00 × lavaman quits (~lavaman@98.38.249.169) (Ping timeout: 240 seconds)
11:58:02 <Hemmo> Right now I'm trying to solve it with this: commonSubstring s1 s2 = [x | x <- s1, y <- s2, x == y], so it takes x into the list if x==y. This is what you asked?
11:58:59 <Hemmo> My thinking right now is, if x == y, I must drop every character before the common one + the common one as well from S1 and S2
11:59:06 <tomsmeding> mreh: yes
11:59:13 <Hemmo> and then run through the function again
11:59:35 <tomsmeding> mreh: well in an instance declaration, the variables appearing in the instance head are already in scope without an explicit forall
12:00:39 <[exa]> Hemmo: ah so you basically take the first common character from s1 as `c`, yeah that could work
12:00:40 <dminuoso> mreh: Mind you this is a quirky historical artifact. If Haskell was designed from scratch, it's conceivable that type variables were brought into scope for sub-bindings automatically.
12:00:49 <dminuoso> Without an explicit forall.
12:01:25 <dminuoso> The need for forall is just to maintain backwards compatibility (such that enabling the flag will not break code that previously compiled, e.g. `f :: a ...; f = .. where g :: a ...; g = ...`)
12:02:45 <[exa]> Hemmo: otoh it might be much cleaner (and easier) to patternmatch a bit. You can for example say that `commonSubstring "" _ = ""`, and then examine the other case, `commonSubstring (c:s1) s2 = if c `elem` s1 then ???? else ????`
12:03:08 <[exa]> (uh I meant: c `elem` s2)
12:03:36 geranim0 joins (~geranim0@modemcable242.171-178-173.mc.videotron.ca)
12:06:48 boborygmy_ joins (~bob@pool-173-54-217-168.nwrknj.fios.verizon.net)
12:06:50 boborygmy joins (~bob@pool-173-54-217-168.nwrknj.fios.verizon.net)
12:07:12 × kenran quits (~kenran@ip-037-024-119-190.um08.pools.vodafone-ip.de) (Quit: WeeChat info:version)
12:12:14 × boborygmy_ quits (~bob@pool-173-54-217-168.nwrknj.fios.verizon.net) (Quit: Leaving)
12:12:14 × boborygmy quits (~bob@pool-173-54-217-168.nwrknj.fios.verizon.net) (Quit: Leaving)
12:14:11 <mreh> pi types when?
12:14:24 <mreh> :)
12:14:43 <geekosaur> some would hope never
12:17:03 <mreh> who are these people? /s
12:18:40 <tomsmeding> the day of the Convergence
12:19:10 <geekosaur> why do we need haskell to be a worse idris?
12:19:20 dschrempf joins (~dominik@070-207.dynamic.dsl.fonira.net)
12:19:45 <hpc> because not enough people use idris
12:20:48 <mreh> is idris being used much in industry?
12:21:10 × acidjnk quits (~acidjnk@pd9e0b763.dip0.t-ipconnect.de) (Ping timeout: 260 seconds)
12:21:37 <hpc> no clue, but i am not using it so tautologically not enough people are using idris :D
12:21:56 olle joins (~olle@c-8a89e455.034-536-6d6c6d4.bbcust.telenor.se)
12:23:36 × rtsn quits (~nstr@h-98-128-229-174.NA.cust.bahnhof.se) (Remote host closed the connection)
12:24:33 lavaman joins (~lavaman@98.38.249.169)
12:25:33 <mreh> I would like to be able to use Haskell for a living first. TypeScript is the best I can manage.
12:25:45 × zaquest quits (~notzaques@5.130.79.72) (Remote host closed the connection)
12:25:46 × dschrempf quits (~dominik@070-207.dynamic.dsl.fonira.net) (Quit: WeeChat 3.3)
12:27:03 zaquest joins (~notzaques@5.130.79.72)
12:27:09 <maerwald[m]> geekosaur: ...
12:28:58 <maerwald[m]> mreh: anything you use for a living loses its glamour
12:29:28 <mreh> true enough
12:29:32 <maerwald[m]> The best strategy is to only code as a hobby and, I dunno, do something else for a living
12:29:32 <Hemmo> [exa]: commonSubstring (c:s1) s2 = if c `elem` s2
12:29:33 <Hemmo> then commonSubstring (dropWhile (/=c) s1) (dropWhile (/=c) s2)
12:29:33 <Hemmo> else ??
12:29:47 <Hemmo> Do I need to create another string variable to save something to??
12:29:55 <mreh> I have to get out the house for a bit, later
12:30:13 <Hemmo> I don't know if I can return something without another variable?
12:31:40 <olle> I'm trying to convert the tagless-final use-case to PHP
12:31:56 <olle> Some notes here: https://old.reddit.com/r/PHP/comments/tdyf78/one_universal_dryrun_mockspy_ast_evaluator_to/
12:32:20 <olle> Using a builder pattern, or expression builder, to generate an AST, and then you can inject different AST evaluators into the builder.
12:33:27 <[exa]> Hemmo: you don't need to drop stuff from s1, also you forgot to push the 'c' to the output
12:34:27 <[exa]> (returning something like this is a common pattern: `c:(commonSubstring ...)` )
12:34:36 × nexus_ quits (~nexus@178-164-207-227.pool.digikabel.hu) (Ping timeout: 252 seconds)
12:35:08 CiaoSen joins (~Jura@p200300c95737a2002a3a4dfffe84dbd5.dip0.t-ipconnect.de)
12:36:33 nexus_ joins (~nexus@84-236-60-110.pool.digikabel.hu)
12:36:40 yauhsien joins (~yauhsien@61-231-44-111.dynamic-ip.hinet.net)
12:38:08 × Everything quits (~Everythin@37.115.210.35) (Quit: leaving)
12:40:22 × mreh quits (~matthew@host86-172-33-212.range86-172.btcentralplus.com) (Quit: Lost terminal)
12:40:27 <Hemmo> [exa]: so it would be; then c : (commonSubstring s1 (dropWhile (/=c) s2))?
12:41:46 <Hemmo> Oh yes I nearly got it to work
12:41:51 <[exa]> seems so
12:42:04 tcard_ joins (~tcard@p2878075-ipngn18701hodogaya.kanagawa.ocn.ne.jp)
12:42:18 <[exa]> I'd say you need to drop 1 extra character there (the c)
12:42:19 × tcard quits (~tcard@p2878075-ipngn18701hodogaya.kanagawa.ocn.ne.jp) (Read error: Connection reset by peer)
12:42:50 <[exa]> and the "else" case should be trivial, you just retry with the rest in s1, and don't do anything with s2
12:44:43 × bitdex quits (~bitdex@gateway/tor-sasl/bitdex) (Quit: = "")
12:45:03 zmt00 joins (~zmt00@user/zmt00)
12:47:26 <Hemmo> [exa]: Thanks for the help! It's very difficult not to think in terms of loops just yet so I seem to overcomplicate these functions I make ;D
12:47:48 × lavaman quits (~lavaman@98.38.249.169) (Ping timeout: 252 seconds)
12:48:23 <Hemmo> FP is such a different concept ;s
12:48:37 forell joins (~forell@user/forell)
12:49:12 <merijn> Monthly (bi-weekly?) reminder that if you are physically close to NL, you should register for NL-FP ;)
12:50:07 × forell_ quits (~forell@host-178-216-90-220.sta.tvknaszapraca.pl) (Ping timeout: 256 seconds)
12:53:26 × rond_ quits (~rond_@90.254.208.190) (Quit: Client closed)
12:54:29 <tomsmeding> ( https://wouter-swierstra.github.io/fp-dag/ )
12:58:23 × chele_ quits (~chele@user/chele) (Ping timeout: 256 seconds)
12:59:51 chele joins (~chele@user/chele)
13:00:20 <[exa]> merijn: does luxembourg count?
13:00:27 × justsomeguy quits (~justsomeg@user/justsomeguy) (Ping timeout: 252 seconds)
13:00:40 <earthy> is the program any good this year?
13:01:32 <earthy> exa: that'd be about a four hour drive...
13:01:46 AlexNoo_ is now known as AlexNoo
13:02:08 <earthy> (I remember the fp-dag when it was hosted by the royal dutch navy... at a navy compound in amsterdam... that was somewhat fun. :))
13:02:21 <[exa]> yeah 350km ain't super close
13:06:12 <maerwald[m]> merijn: when is it
13:07:14 <[exa]> April 22
13:09:49 vglfr joins (~vglfr@88.155.82.72)
13:10:05 <merijn> earthy: well, there is no program yet :p (since normally it's the first week of january, but it didn't happen last year, for obvious reasons :p)
13:10:38 <merijn> [exa]: I mean, it depends on your personal definition of close and travelling budget :p
13:10:59 <merijn> Participation is free anyway
13:11:14 <[exa]> yeah like, let's check them buses
13:11:50 <merijn> Should be interesting now that a bunch of the accelerate people moved from Australia to Utrecht :)
13:12:10 <[exa]> whew
13:25:42 k8yun joins (~k8yun@user/k8yun)
13:26:45 × son0p quits (~ff@181.136.122.143) (Remote host closed the connection)
13:27:07 <merijn> Man...next time someone says tracking down spaceleaks in Haskell is hard I'm going to whack them with a hammer and ask them to try tracking down a space leak in python >.<
13:28:16 <merijn> Consider this my annual prayer to the hero who implemented GHC's heap profiling tools >.>
13:31:24 × CiaoSen quits (~Jura@p200300c95737a2002a3a4dfffe84dbd5.dip0.t-ipconnect.de) (Ping timeout: 240 seconds)
13:35:06 <maerwald> Matthew?
13:35:38 × adanwan quits (~adanwan@gateway/tor-sasl/adanwan) (Remote host closed the connection)
13:36:02 × Midjak quits (~Midjak@82.66.147.146) (Remote host closed the connection)
13:36:53 <merijn> I don't think so? Pretty sure they predate his involvement
13:37:20 <merijn> I mean, his speedscope is nice too, but the heap profiling graphs predate that
13:37:51 adanwan joins (~adanwan@gateway/tor-sasl/adanwan)
13:39:15 <kuribas> or that "haskell is slow".
13:40:32 × ccntrq quits (~Thunderbi@2a01:c22:89c9:4f00:38e1:ceae:1fb6:a685) (Quit: ccntrq)
13:40:37 ccntrq1 joins (~Thunderbi@dynamic-077-006-029-074.77.6.pool.telefonica.de)
13:41:24 <maerwald> naive Haskell is slower than naive C, at least, sometimes by magnitudes. The maximum performance you can achieve with Haskell is almost unlimited though.
13:42:30 <maerwald> often times that means abandoning idiomatic Haskell, though
13:42:55 ccntrq1 is now known as ccntrq
13:43:25 <maerwald> I think the xeno parser is a good example for this
13:43:29 <dminuoso> "Language XYZ is slow" is not a major concern for the vast majority of users.
13:43:37 kaph joins (~kaph@net-109-116-124-149.cust.vodafonedsl.it)
13:43:52 <kuribas> high level, highly abstract haskell is slower than low level optimized C code. No kidding.
13:44:06 <dminuoso> If a billion devices run on (poorly written!) Java just fine, performance is not an issue for most peoplpe.
13:44:25 <maerwald> kuribas: no, I'm talking about unoptimized C code
13:44:30 × vglfr quits (~vglfr@88.155.82.72) (Ping timeout: 250 seconds)
13:44:51 <dminuoso> maerwald: well, of course you have to abandon idiomatic code. Writing fast and performant code in any language means catering to the implementation and hardware.
13:45:22 <dminuoso> Well there's of course algorithmic complexity, but once that's out of the way, all you end up doing is make sure the compiler and hardware is happy with it
13:45:33 kaph_ joins (~kaph@net-109-116-124-149.cust.vodafonedsl.it)
13:45:35 <dminuoso> That applies to any language out there
13:46:08 <kuribas> dminuoso: "once that is out of the way" <= that would increase most projects performance by tenfold.
13:46:18 <maerwald> optimized C code is, more or less, idiomatic =)
13:46:23 <dminuoso> kuribas: And cache awareness can increase performance by a thousand fold.
13:46:36 <merijn> maerwald[m]: No it's not
13:46:36 <dminuoso> It's ridiculous how slow memory is.
13:46:49 <kuribas> dminuoso: if that code is in an inner loop, and that inner loop is significant.
13:46:55 <merijn> Optimised C looks nothing like what 80-90% of C programmers produce
13:47:42 <dminuoso> Indeed, optimized C code is usually a bunch of ifdefs, using magical compiler primitives, relying on compiler behavior, assuming particular code generation, assuming particular architectural flaws..
13:47:54 <dminuoso> Usually near unreadable
13:48:12 <dminuoso> Sometimes I wonder why the authors dont just write out the assembly by hand
13:48:13 × kaph quits (~kaph@net-109-116-124-149.cust.vodafonedsl.it) (Ping timeout: 268 seconds)
13:48:32 <maerwald> anyway, my claim is that you can put a student with half a year of experience with C in front of a computer and their naive implementation will almost always outperform an equivalently naive Haskell implementation
13:48:40 <maerwald> The C implementation will likely crash a lot more, though
13:49:03 <dminuoso> And their implementation will take 2-4 times longer to write?
13:49:03 <merijn> maerwald[m]: Have you worked with lots of students?
13:49:05 <maerwald> emphasis on *naive* implementation
13:49:10 <maerwald> merijn: yeah
13:49:28 <merijn> maerwald[m]: In my experience students with even 1-2 years of C experience can barely produce a program that reliably doesn't crash >.>
13:49:42 <maerwald> true
13:49:55 <maerwald> it only works with the pre-defined input from the instructor
13:49:58 <maerwald> anything else crashes
13:51:12 Sgeo joins (~Sgeo@user/sgeo)
13:51:57 × k8yun quits (~k8yun@user/k8yun) (Read error: Connection reset by peer)
13:52:02 <maerwald> I wonder how rust "performs" in that settings for students
13:52:14 <maerwald> my guess is they will abuse 'unsafe'
13:52:19 <maerwald> or RefCell
13:54:38 ccntrq1 joins (~Thunderbi@2a01:c22:89c9:4f00:8f7e:228b:ee69:75c3)
13:54:46 <Ferdirand> my experience is that they abuse .clone()
13:54:52 <maerwald> ah
13:55:19 CiaoSen joins (~Jura@p200300c95737a2002a3a4dfffe84dbd5.dip0.t-ipconnect.de)
13:56:25 × ccntrq quits (~Thunderbi@dynamic-077-006-029-074.77.6.pool.telefonica.de) (Ping timeout: 256 seconds)
13:56:25 ccntrq1 is now known as ccntrq
13:59:49 lavaman joins (~lavaman@98.38.249.169)
14:01:21 × shapr quits (~user@pool-173-73-44-186.washdc.fios.verizon.net) (Read error: Connection reset by peer)
14:02:35 shapr joins (~user@pool-173-73-44-186.washdc.fios.verizon.net)
14:06:14 waleee joins (~waleee@2001:9b0:213:7200:cc36:a556:b1e8:b340)
14:08:06 × chele quits (~chele@user/chele) (Ping timeout: 252 seconds)
14:09:31 × troydm quits (~troydm@host-176-37-124-197.b025.la.net.ua) (Ping timeout: 245 seconds)
14:09:39 <tomsmeding> performance of idiomatic haskell code also heavily depends on the application
14:10:10 <tomsmeding> if you're talking about a tree-walking interpreter for a nice functional language, that's going to be super-readable and quite efficient
14:10:52 <tomsmeding> if you're talking about an imperative bytecode interpreter, even my non-idiomatic version that has mutable unboxed arrays and tries to be somewhat memory-efficient was an order of magnitude slower than the natural C implementation
14:11:06 <tomsmeding> profiling didn't turn up obvious bottlenecks
14:11:37 <tomsmeding> (and that was without bounds checks on the array accesses)
14:14:49 <maerwald> dminuoso: btw... this is relevant to our liability discussion https://github.com/haskellfoundation/stability/issues/7
14:19:31 <kuribas> tomsmeding: maybe because of lazyness?
14:20:09 <tomsmeding> kuribas: everything was in IO with unboxed mutable Word8 vectors, so I doubt there was much laziness around, but to be fair I didn't test -XStrict
14:20:41 <kuribas> tomsmeding: hmm, I would expect this to be slower, but not an order of magnitude.
14:20:45 <kuribas> Like 2x at most.
14:20:47 <tomsmeding> precisely
14:20:58 <kuribas> didi you inspect core?
14:21:01 <tomsmeding> no
14:21:01 <kuribas> or the assembly?
14:21:13 <tomsmeding> probably I'd be able to find the answers there
14:21:28 <tomsmeding> but that would be a Job :p
14:21:42 <kuribas> I actually enjoy this :)
14:21:55 <kuribas> I rarely get a chance to optimize for performance at work.
14:22:02 son0p joins (~ff@181.136.122.143)
14:22:10 mc47 joins (~mc47@xmonad/TheMC47)
14:22:35 <tomsmeding> usually I enjoy optimisation too, but this time I wasn't feeling like opening the large bulk of core that it would generate
14:22:38 <kuribas> I mean aside from the obvious stuff.
14:23:33 chele joins (~chele@user/chele)
14:23:51 ski . o O ( "Tales of a Former Disassembly Addict" in 2009-10-18 at <https://prog21.dadgum.com/50.html>,"How Did Things Ever Get This Good?" in 2009-11-10 at <https://prog21.dadgum.com/51.html>,"Slow Languages Battle Across Time" in 2009-11-14 at <https://prog21.dadgum.com/52.html>, by James Hague )
14:25:32 k8yun joins (~k8yun@user/k8yun)
14:25:34 <kuribas> tomsmeding: in such case, you could just use the C FFI as well :)
14:25:48 <kuribas> as long as it's well contained.
14:25:53 <tomsmeding> yes lol, but the whole point of the exercise was to see if Haskell could be fast as well
14:26:10 <tomsmeding> and the (preliminary) answer was, not too easily
14:26:35 × chele quits (~chele@user/chele) (Client Quit)
14:27:19 timCF joins (~timCF@200-149-20-81.sta.estpak.ee)
14:29:17 × mon_aaraj quits (~MonAaraj@user/mon-aaraj/x-4416475) (Ping timeout: 256 seconds)
14:29:17 × lavaman quits (~lavaman@98.38.249.169) (Ping timeout: 240 seconds)
14:37:53 bahamas joins (~lucian@86.120.77.115)
14:38:31 × ccntrq quits (~Thunderbi@2a01:c22:89c9:4f00:8f7e:228b:ee69:75c3) (Remote host closed the connection)
14:38:48 ccntrq joins (~Thunderbi@2a01:c22:89c9:4f00:8f7e:228b:ee69:75c3)
14:39:01 <kuribas> I suppose the C could also use a jump table.
14:41:17 mon_aaraj joins (~MonAaraj@user/mon-aaraj/x-4416475)
14:42:48 × timCF quits (~timCF@200-149-20-81.sta.estpak.ee) (Quit: leaving)
14:43:55 Guest30 joins (~Guest30@cpc151445-finc21-2-0-cust175.4-2.cable.virginm.net)
14:45:30 × raehik quits (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 252 seconds)
14:45:30 Guest30 parts (~Guest30@cpc151445-finc21-2-0-cust175.4-2.cable.virginm.net) ()
14:45:41 troydm joins (~troydm@host-176-37-124-197.b025.la.net.ua)
14:49:10 <tomsmeding> I have no idea why the haskell would not be able to have a jump table when I write a case on a Word8
14:52:02 <Ferdirand> how useful are jump tables these days ?
14:52:15 olle parts (~olle@c-8a89e455.034-536-6d6c6d4.bbcust.telenor.se) ()
14:52:21 olle joins (~olle@c-8a89e455.034-536-6d6c6d4.bbcust.telenor.se)
14:52:36 <Ferdirand> don't indirect jumps ruin branching prediction ?
14:57:17 × alp quits (~alp@user/alp) (Ping timeout: 240 seconds)
14:57:23 <merijn> Ferdirand: "It Depends (TM)"
14:57:49 × pavonia quits (~user@user/siracusa) (Quit: Bye!)
14:57:56 <geekosaur> ghc can compile case-of to jumptables at least under some circumstances
14:57:57 <merijn> tomsmeding: because Word8 is boxed ;)
14:58:11 <merijn> But yeah, there's no reason GHC couldn't do that
15:00:16 raehik joins (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net)
15:00:46 × mon_aaraj quits (~MonAaraj@user/mon-aaraj/x-4416475) (Ping timeout: 250 seconds)
15:01:01 kenran joins (~kenran@200116b82bb92e0095dde20ed8280a15.dip.versatel-1u1.de)
15:01:36 <kuribas> maybe because GHC is not optimized for low level byte handling?
15:01:49 [itchyjunk] joins (~itchyjunk@user/itchyjunk/x-7353470)
15:02:39 mon_aaraj joins (~MonAaraj@user/mon-aaraj/x-4416475)
15:03:24 thyriaen joins (~thyriaen@ip5f5af2d7.dynamic.kabel-deutschland.de)
15:03:25 <geekosaur> until 9.2 a "Word8" was really a machine word
15:03:44 <geekosaur> (this includes Word8#)
15:04:02 × thyriaen quits (~thyriaen@ip5f5af2d7.dynamic.kabel-deutschland.de) (Client Quit)
15:05:46 Giovanni joins (~Giovanni@176.219.119.243)
15:09:04 <tomsmeding> geekosaur: right, fair point, but still that's not a reason why making a jump table would be impossible
15:09:07 <raehik> geekosaur: what has changed in 9.2 regarding that? I'm curious
15:10:16 <geekosaur> tomsmeding,just makes it seem more likely to me that bthey use the same code for all machine word stuff, which also catches Word8#. so this might now be somelow hanging fruit in the NCG
15:10:44 × yauhsien quits (~yauhsien@61-231-44-111.dynamic-ip.hinet.net) (Ping timeout: 250 seconds)
15:10:57 × CiaoSen quits (~Jura@p200300c95737a2002a3a4dfffe84dbd5.dip0.t-ipconnect.de) (Ping timeout: 240 seconds)
15:11:17 yauhsien joins (~yauhsien@61-231-44-111.dynamic-ip.hinet.net)
15:11:42 <geekosaur> raehik, NCG Apple M1 support required support for native sized types, so for example a Word8# is now actually a byte instead of a machine word. this change is still shaking down, as above, and we may see some other improvements in its wake
15:12:28 <raehik> oh, right, machine words aren't always 1 byte! interesting
15:12:35 <geekosaur> (for example I think you still can't get a native Word8# vector without resorting to a ByteArray#)
15:12:45 Unicorn_Princess joins (~Unicorn_P@46-54-248-191.static.kate-wing.si)
15:12:48 × cosimone quits (~user@93-44-187-176.ip98.fastwebnet.it) (Read error: Connection reset by peer)
15:13:00 <geekosaur> machine word on most platforms these days, specifically including the M1, is 64 bits
15:13:28 <raehik> oh yeah. I think I had some concepts mixed
15:13:37 cosimone joins (~user@2001:b07:ae5:db26:c24a:d20:4d91:1e20)
15:13:50 <geekosaur> standard machine register size, basically
15:14:01 <raehik> yes, right
15:14:23 tzh joins (~tzh@c-24-21-73-154.hsd1.wa.comcast.net)
15:23:37 CiaoSen joins (~Jura@p200300c95737a2002a3a4dfffe84dbd5.dip0.t-ipconnect.de)
15:26:33 <merijn> raehik: machine words are basically never 1 byte? :p
15:26:58 <geekosaur> 6502, 6809, 8080 :þ
15:27:06 <raehik> merijn: yeah, I was thinking in Word terms, and forgot the context xd
15:28:18 <geekosaur> should have said 6800, the 6809 was 8/16 hybrid
15:32:28 eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:85fc:5466:5112:8a92)
15:34:17 __monty__ joins (~toonn@user/toonn)
15:36:53 jao joins (~jao@45.134.142.199)
15:37:10 × eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:85fc:5466:5112:8a92) (Ping timeout: 260 seconds)
15:39:02 × nexus_ quits (~nexus@84-236-60-110.pool.digikabel.hu) (Ping timeout: 260 seconds)
15:39:31 × jgeerds quits (~jgeerds@55d4548e.access.ecotel.net) (Ping timeout: 250 seconds)
15:41:16 × nishant quits (~Nishant@49.37.242.151) (Quit: Leaving)
15:46:04 nexus_ joins (~nexus@80-95-86-2.pool.digikabel.hu)
15:49:13 × lbseale quits (~ep1ctetus@user/ep1ctetus) (Read error: Connection reset by peer)
15:50:37 jakalx parts (~jakalx@base.jakalx.net) ()
15:50:45 lbseale joins (~ep1ctetus@user/ep1ctetus)
15:50:51 eggplantade joins (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
15:57:03 × Giovanni quits (~Giovanni@176.219.119.243) (Read error: Connection reset by peer)
15:58:23 xdej_ is now known as xdej
15:58:52 Giovanni joins (~Giovanni@176.219.119.243)
16:00:06 jakalx joins (~jakalx@base.jakalx.net)
16:00:08 × yauhsien quits (~yauhsien@61-231-44-111.dynamic-ip.hinet.net) (Remote host closed the connection)
16:04:25 yauhsien joins (~yauhsien@61-231-44-111.dynamic-ip.hinet.net)
16:04:48 × eggplantade quits (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection)
16:06:21 × bahamas quits (~lucian@86.120.77.115) (Ping timeout: 268 seconds)
16:11:09 × Giovanni quits (~Giovanni@176.219.119.243) (Read error: Connection reset by peer)
16:13:35 Giovanni joins (~Giovanni@176.219.119.243)
16:14:58 × waleee quits (~waleee@2001:9b0:213:7200:cc36:a556:b1e8:b340) (Ping timeout: 260 seconds)
16:15:05 jonathanx__ joins (~jonathan@c-5eea3758-74736162.cust.telenor.se)
16:15:50 × lortabac quits (~lortabac@2a01:e0a:541:b8f0:cecd:603d:2da7:a044) (Quit: WeeChat 2.8)
16:16:24 eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:85fc:5466:5112:8a92)
16:17:54 × jonathanx_ quits (~jonathan@dyn-2-sc.cdg.chalmers.se) (Ping timeout: 252 seconds)
16:18:19 × Hemmo quits (~Hemmo@85-76-79-140-nat.elisa-mobile.fi) (Remote host closed the connection)
16:27:08 lavaman joins (~lavaman@98.38.249.169)
16:28:08 × benin quits (~benin@183.82.26.94) (Quit: The Lounge - https://thelounge.chat)
16:30:15 Midjak joins (~Midjak@82.66.147.146)
16:32:37 × CiaoSen quits (~Jura@p200300c95737a2002a3a4dfffe84dbd5.dip0.t-ipconnect.de) (Ping timeout: 240 seconds)
16:34:52 joo-__ joins (~joo-_@80-62-117-227-mobile.dk.customer.tdc.net)
16:34:52 × joo-__ quits (~joo-_@80-62-117-227-mobile.dk.customer.tdc.net) (Changing host)
16:34:52 joo-__ joins (~joo-_@fsf/member/joo--)
16:37:01 × InstX1 quits (~Liam@2601:6c4:4080:3f80:501d:140:cf41:aa43) (Ping timeout: 240 seconds)
16:41:39 × raym quits (~raym@user/raym) (Ping timeout: 256 seconds)
16:42:42 raym joins (~raym@user/raym)
16:43:13 × nexus_ quits (~nexus@80-95-86-2.pool.digikabel.hu) (Ping timeout: 250 seconds)
16:45:08 bahamas joins (~lucian@84.232.140.158)
16:45:09 nexus_ joins (~nexus@80-95-86-2.pool.digikabel.hu)
16:46:17 × merijn quits (~merijn@c-001-001-001.client.esciencecenter.eduvpn.nl) (Ping timeout: 240 seconds)
16:52:57 Tuplanolla joins (~Tuplanoll@91-159-69-98.elisa-laajakaista.fi)
16:59:57 × mon_aaraj quits (~MonAaraj@user/mon-aaraj/x-4416475) (Ping timeout: 240 seconds)
17:00:52 × eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:85fc:5466:5112:8a92) (Remote host closed the connection)
17:00:53 szkl joins (uid110435@id-110435.uxbridge.irccloud.com)
17:01:51 × razetime quits (~quassel@117.193.4.244) (Ping timeout: 250 seconds)
17:02:07 eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:85fc:5466:5112:8a92)
17:02:24 mon_aaraj joins (~MonAaraj@user/mon-aaraj/x-4416475)
17:02:41 <maerwald> does IsElem not work with NamedRoutes?
17:09:42 × ccntrq quits (~Thunderbi@2a01:c22:89c9:4f00:8f7e:228b:ee69:75c3) (Remote host closed the connection)
17:12:30 × lavaman quits (~lavaman@98.38.249.169) (Ping timeout: 250 seconds)
17:19:17 × yauhsien quits (~yauhsien@61-231-44-111.dynamic-ip.hinet.net) (Remote host closed the connection)
17:20:06 yauhsien joins (~yauhsien@61-231-44-111.dynamic-ip.hinet.net)
17:20:11 merijn joins (~merijn@c-001-001-001.client.esciencecenter.eduvpn.nl)
17:20:14 <maerwald> how do you print the url of a servant route? The only SO answer I could find doesn't work anymore
17:21:13 × Giovanni quits (~Giovanni@176.219.119.243) (Remote host closed the connection)
17:21:38 Giovanni joins (~Giovanni@176.67.166.45)
17:24:48 × cfricke quits (~cfricke@user/cfricke) (Quit: WeeChat 3.3)
17:25:01 × merijn quits (~merijn@c-001-001-001.client.esciencecenter.eduvpn.nl) (Ping timeout: 240 seconds)
17:26:35 × Major_Biscuit quits (~MajorBisc@c-001-021-050.client.tudelft.eduvpn.nl) (Quit: WeeChat 3.4)
17:26:52 alp joins (~alp@user/alp)
17:28:17 × Giovanni quits (~Giovanni@176.67.166.45) (Ping timeout: 250 seconds)
17:28:58 Giovanni joins (~Giovanni@176.219.119.243)
17:29:39 × _xor quits (~xor@dsl-50-5-233-169.fuse.net) (Read error: Connection reset by peer)
17:30:02 _xor joins (~xor@dsl-50-5-233-169.fuse.net)
17:30:13 × kaph_ quits (~kaph@net-109-116-124-149.cust.vodafonedsl.it) (Ping timeout: 268 seconds)
17:31:08 × jonathanx__ quits (~jonathan@c-5eea3758-74736162.cust.telenor.se) (Ping timeout: 250 seconds)
17:38:45 × raym quits (~raym@user/raym) (Ping timeout: 252 seconds)
17:41:29 raym joins (~raym@user/raym)
17:43:10 × kenran quits (~kenran@200116b82bb92e0095dde20ed8280a15.dip.versatel-1u1.de) (Quit: WeeChat info:version)
17:45:16 <maerwald> https://hackage.haskell.org/package/servant-0.19/docs/Servant-Links.html#v:linkURI ...with NamedRoutes you also have to make sure to select the correct record after type-level matching. I also had to add a custom `IsElem'` instance.
17:46:25 econo joins (uid147250@user/econo)
17:48:11 zincy_ joins (~zincy@2a00:23c8:970c:4801:6945:2980:3f53:dff8)
17:52:11 × zincy_ quits (~zincy@2a00:23c8:970c:4801:6945:2980:3f53:dff8) (Remote host closed the connection)
17:52:21 slaydr joins (~seriley@75.164.66.230)
17:53:00 × zmt00 quits (~zmt00@user/zmt00) (Ping timeout: 240 seconds)
17:54:00 zincy_ joins (~zincy@host86-160-236-152.range86-160.btcentralplus.com)
17:57:38 × aeka quits (~aeka@user/hiruji) (Ping timeout: 260 seconds)
17:59:31 × slaydr quits (~seriley@75.164.66.230) (Ping timeout: 256 seconds)
18:02:22 kadenwolff[m] joins (~kadenwolf@2001:470:69fc:105::1:d97f)
18:04:22 × cosimone quits (~user@2001:b07:ae5:db26:c24a:d20:4d91:1e20) (Read error: Connection reset by peer)
18:04:41 ec joins (~ec@gateway/tor-sasl/ec)
18:07:07 × _xor quits (~xor@dsl-50-5-233-169.fuse.net) (Read error: Connection reset by peer)
18:07:27 vglfr joins (~vglfr@88.155.82.72)
18:08:50 × olle quits (~olle@c-8a89e455.034-536-6d6c6d4.bbcust.telenor.se) (Ping timeout: 250 seconds)
18:12:13 merijn joins (~merijn@c-001-001-001.client.esciencecenter.eduvpn.nl)
18:12:40 _xor joins (~xor@dsl-50-5-233-169.fuse.net)
18:13:29 × mbuf quits (~Shakthi@122.174.246.23) (Quit: Leaving)
18:25:59 jjhoo_ is now known as jjhoo
18:27:51 aeka joins (~aeka@user/hiruji)
18:30:18 × _xor quits (~xor@dsl-50-5-233-169.fuse.net) (Read error: Connection reset by peer)
18:30:59 jgeerds joins (~jgeerds@55d4548e.access.ecotel.net)
18:32:40 × aeka quits (~aeka@user/hiruji) (Ping timeout: 250 seconds)
18:33:07 × ec quits (~ec@gateway/tor-sasl/ec) (Quit: ec)
18:33:25 aeka joins (~aeka@user/hiruji)
18:33:40 zmt00 joins (~zmt00@user/zmt00)
18:34:42 _xor joins (~xor@dsl-50-5-233-169.fuse.net)
18:40:54 × dyeplexer quits (~dyeplexer@user/dyeplexer) (Ping timeout: 250 seconds)
18:41:47 × raehik quits (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 256 seconds)
18:43:17 × hyiltiz quits (~quassel@31.220.5.250) (Ping timeout: 240 seconds)
18:44:09 Akiva joins (~Akiva@user/Akiva)
18:46:41 × merijn quits (~merijn@c-001-001-001.client.esciencecenter.eduvpn.nl) (Ping timeout: 268 seconds)
18:47:30 × nexus_ quits (~nexus@80-95-86-2.pool.digikabel.hu) (Ping timeout: 252 seconds)
18:47:59 justsomeguy joins (~justsomeg@user/justsomeguy)
18:48:46 <justsomeguy> Is there a shell meant for interactive use that lets you intermix commands and haskell code, kind of like https://xon.sh does?
18:49:16 nexus_ joins (~nexus@178-164-207-111.pool.digikabel.hu)
18:50:03 jackhill_ is now known as jackhill
18:50:33 hyiltiz joins (~quassel@31.220.5.250)
18:54:46 × hyiltiz quits (~quassel@31.220.5.250) (Ping timeout: 250 seconds)
18:59:02 cosimone joins (~user@93-44-187-176.ip98.fastwebnet.it)
19:00:56 × justsomeguy quits (~justsomeg@user/justsomeguy) (Quit: WeeChat 3.4)
19:03:30 slaydr joins (~slaydr@75.164.66.230)
19:04:56 <slaydr> I'm a long time Vim user and am trying to switch to emacs. What packages are you emacs users using?
19:05:36 <monochrom> I use haskell-mode. Can be installed from melpa.
19:05:51 <monochrom> Actually I use the melpa-stable version.
19:06:29 <slaydr> thanks. Any others? I had a vim feature that auto indented keywords like 'when'
19:06:53 <slaydr> or maybe I missed a setting in haskell-mode?
19:07:48 ec joins (~ec@gateway/tor-sasl/ec)
19:08:52 waleee joins (~waleee@2001:9b0:213:7200:cc36:a556:b1e8:b340)
19:09:23 <monochrom> I don't know and don't use auto-indent.
19:09:58 lavaman joins (~lavaman@98.38.249.169)
19:10:14 × ec quits (~ec@gateway/tor-sasl/ec) (Client Quit)
19:10:15 <monochrom> I think I know that haskell-mode doesn't do auto-indent.
19:10:22 jonathanx joins (~jonathan@h-178-174-176-109.A357.priv.bahnhof.se)
19:11:25 × vglfr quits (~vglfr@88.155.82.72) (Ping timeout: 240 seconds)
19:12:02 <monochrom> It does semi-auto. You still have to press the tab key. But you can press it many times to traverse choices.
19:12:30 <slaydr> thank you
19:12:32 × Akiva quits (~Akiva@user/Akiva) (Ping timeout: 250 seconds)
19:13:20 <monochrom> And you can press it after you have entered something on the line. Then it takes into account what's already on the line, e.g., if it begins with "where" it is honoured.
19:16:15 <slaydr> that's good to know
19:18:08 × jlamothe quits (~jlamothe@198.251.61.229) (Ping timeout: 268 seconds)
19:18:20 Guest|20 joins (~Guest|20@tmo-100-189.customers.d1-online.com)
19:18:21 × yauhsien quits (~yauhsien@61-231-44-111.dynamic-ip.hinet.net) (Read error: Connection reset by peer)
19:18:34 jlamothe joins (~jlamothe@198.251.61.229)
19:19:11 yauhsien joins (~yauhsien@61-231-44-111.dynamic-ip.hinet.net)
19:19:38 <Guest|20> Hi im totally new in IT and only wrote HTML
19:19:59 hyiltiz joins (~quassel@31.220.5.250)
19:20:27 <Guest|20> How do I use Haskell?
19:20:59 mastarija joins (~mastarija@2a05:4f46:e04:6000:6118:54b1:a270:d89b)
19:21:16 <monochrom> It is a programming language.
19:21:48 <mastarija> is there a function in base that rounds towards zero?
19:22:06 <monochrom> I think truncate.
19:22:07 <mastarija> e.g. for positive numbers it behaves like `floor` and for negative as `ciel`?
19:22:14 <monochrom> > truncate (-0.9)
19:22:16 <lambdabot> 0
19:22:17 <Guest|20> Yes, thank you. That is one of a few things I know☺️
19:22:33 ProfSimm joins (~ProfSimm@87.227.196.109)
19:22:34 <Guest|20> How can I install haskell?
19:22:36 <mastarija> monochrom, thx
19:25:05 <maerwald> Guest|20: did you follow the instructions?
19:26:50 <Guest|20> I did not figure out yet how to follow them properly
19:27:20 vglfr joins (~vglfr@88.155.82.72)
19:28:03 × Guest|20 quits (~Guest|20@tmo-100-189.customers.d1-online.com) (Quit: Connection closed)
19:28:36 × yauhsien quits (~yauhsien@61-231-44-111.dynamic-ip.hinet.net) (Remote host closed the connection)
19:31:37 <janus> maralorn: how can i reach Ellie on the Nix Haskell calendar?
19:32:15 yauhsien joins (~yauhsien@61-231-44-111.dynamic-ip.hinet.net)
19:37:47 <maralorn> janus: We are all in #haskell:nixos.org .
19:38:05 <maralorn> Oh, wait, you asked that question from irc.^^
19:38:21 <janus> i can jump on matrix
19:38:29 <maralorn> Still, the answer holds. You can find us in that Matrix channel.
19:39:29 × kuribas quits (~user@ptr-25vy0i9smgbd9x89015.18120a2.ip6.access.telenet.be) (Remote host closed the connection)
19:40:07 namkeleser joins (~namkelese@101.175.155.55)
19:40:22 × szkl quits (uid110435@id-110435.uxbridge.irccloud.com) (Quit: Connection closed for inactivity)
19:42:14 × MironZ quits (~MironZ@nat-infra.ehlab.uk) (Quit: The Lounge - https://thelounge.chat)
19:42:26 × zmt00 quits (~zmt00@user/zmt00) (Ping timeout: 250 seconds)
19:43:09 MironZ joins (~MironZ@nat-infra.ehlab.uk)
19:44:32 × MironZ quits (~MironZ@nat-infra.ehlab.uk) (Client Quit)
19:44:56 dextaa_ joins (~dextaa@user/dextaa)
19:46:28 × yauhsien quits (~yauhsien@61-231-44-111.dynamic-ip.hinet.net) (Remote host closed the connection)
19:47:16 MironZ joins (~MironZ@nat-infra.ehlab.uk)
19:47:37 × vglfr quits (~vglfr@88.155.82.72) (Ping timeout: 240 seconds)
19:47:38 × xff0x quits (~xff0x@dslb-094-222-029-254.094.222.pools.vodafone-ip.de) (Ping timeout: 250 seconds)
19:48:02 × slaydr quits (~slaydr@75.164.66.230) (Quit: leaving)
19:48:11 zmt01 joins (~zmt00@user/zmt00)
19:51:10 Guest27 joins (~Guest27@2601:281:d47f:1590::6b90)
19:53:00 × lavaman quits (~lavaman@98.38.249.169) (Ping timeout: 240 seconds)
19:54:46 <dpratt> I'm rather ignorant of building/linking concerns on linux, so with that in mind, i tried to build some Haskell code in a docker container and run it on the host and it produced: "output/bms-pi: /lib64/libm.so.6: version `GLIBC_2.27' not found (required by output/bms-pi)"; is there an easy way to resolve this error?
19:56:28 <dpratt> I assume this is related to the fact that "ldd --version" reports "ldd (GNU libc) 2.26" on the host and "ldd (Debian GLIBC 2.28-10) 2.28" in the container
19:57:57 × bahamas quits (~lucian@84.232.140.158) (Ping timeout: 256 seconds)
19:59:03 <maerwald> yes
19:59:20 <maerwald> you can either link statically in an alpine container or use an older debian
19:59:31 wroathe joins (~wroathe@206-55-188-8.fttp.usinternet.com)
19:59:31 × wroathe quits (~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host)
19:59:31 wroathe joins (~wroathe@user/wroathe)
20:02:01 × Lord_of_Life quits (~Lord@user/lord-of-life/x-2819915) (Ping timeout: 245 seconds)
20:02:48 <hololeap> anyone know how to parse a natural number from a bytestring in parsec?
20:03:01 Lord_of_Life joins (~Lord@user/lord-of-life/x-2819915)
20:03:08 yauhsien joins (~yauhsien@61-231-44-111.dynamic-ip.hinet.net)
20:04:07 bahamas joins (~lucian@84.232.140.158)
20:05:18 Henson joins (~kvirc@107-179-133-201.cpe.teksavvy.com)
20:06:41 × eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:85fc:5466:5112:8a92) (Remote host closed the connection)
20:07:17 <Henson> is there a way I can use Lens or Optics with a data structure like this [Foo K X] to use a function like Bar :: [X] -> [Y] to generate a [Foo K Y] where Foo contains other data K that should be copied from the input to the output
20:07:27 <hololeap> muchWow $ many digit
20:08:37 × bahamas quits (~lucian@84.232.140.158) (Ping timeout: 240 seconds)
20:11:47 <[exa]> Henson: does Foo have lenses?
20:11:56 <dpratt> maerwald: thanks; for clarification, is it not possibly to statically link on a debian distribution?
20:12:10 <maerwald> not really with glibc
20:12:19 <Henson> [exa]: yes
20:12:43 xff0x joins (~xff0x@dslb-094-222-029-254.094.222.pools.vodafone-ip.de)
20:13:06 <[exa]> Henson: is there a single lens that accesses an X-typed element? (or more of them?)
20:13:09 <Henson> [exa]: it would be easy if I wanted bar :: X -> Y, but I want [X] -> [Y], so it reaches into the ensemble of inputs and manipulates their individual values all at once
20:13:35 <Henson> [exa]: while copying all the rest of the data that is not related to the manipulation
20:13:47 <dpratt> maerwald: ah, ok; and static linking is going to be "what will happen" from an alpine image?
20:13:47 × gentauro quits (~gentauro@user/gentauro) (Read error: Connection reset by peer)
20:13:52 <Henson> [exa]: there's a single one
20:14:04 gentauro joins (~gentauro@user/gentauro)
20:14:31 thyriaen joins (~thyriaen@ip5f5af2d7.dynamic.kabel-deutschland.de)
20:14:50 <maerwald> dpratt: you pass --ghc-options='-optl-static' to cabal and then yes
20:15:04 <[exa]> Henson: hm I see. can you model that [X]->[Y] as a fold or an (indexed) traversal or something?
20:15:10 <dpratt> maerwald: very helpful, thanks!
20:15:18 nucranium joins (~nucranium@2a02:8010:6173:0:1518:15e2:d1d7:f9f8)
20:16:14 <Henson> [exa]: I'll just write a custom function to do what I want. I thought there might be a way to do it with Lens/Optics using something I'm unfamiliar with.
20:16:56 <Henson> [exa]: the toList Traversal function gets me part of the way there, but it loses all of the structure and extra data.
20:17:11 <[exa]> Henson: it should be simple, I guess `traverseOf` does the trick
20:17:41 × cosimone quits (~user@93-44-187-176.ip98.fastwebnet.it) (Read error: Connection reset by peer)
20:18:58 <hololeap> % :t (\f -> sequence . fmap f . sequence) :: Monoid k => ([x] -> [y]) -> [(k,x)] -> [(k,y)] -- Henson
20:18:59 <yahb> hololeap: Monoid k => ([x] -> [y]) -> [(k, x)] -> [(k, y)]
20:19:51 <hololeap> hm maybe that wouldn't work
20:19:57 ec joins (~ec@gateway/tor-sasl/ec)
20:24:09 <[exa]> Henson: for that traverseOf -- you could put in a lazy State that creates the value that you want to know of _all_ elements, and at the same time use that value for deciding what to change. Not sure if there's a lens combinator for doing precisely this though.
20:25:20 × wroathe quits (~wroathe@user/wroathe) (Ping timeout: 250 seconds)
20:25:58 <janus> hololeap: have you seen Data.Attoparsec.Text? it has `decimal :: Integral a => Parser a`
20:26:27 × yauhsien quits (~yauhsien@61-231-44-111.dynamic-ip.hinet.net) (Remote host closed the connection)
20:28:06 × coot quits (~coot@213.134.190.95) (Quit: coot)
20:28:35 × jespada quits (~jespada@cpc121022-nmal24-2-0-cust171.19-2.cable.virginm.net) (Quit: Textual IRC Client: www.textualapp.com)
20:28:54 <Hecate> yes it's good
20:30:15 × hololeap quits (~hololeap@user/hololeap) (Remote host closed the connection)
20:31:34 olle joins (~olle@c-8a89e455.034-536-6d6c6d4.bbcust.telenor.se)
20:31:36 hololeap joins (~hololeap@user/hololeap)
20:33:57 <ski> > [M.fromList [(0,"zero")],M.fromList [(1,"one"),(2,"two")]] & partsOf (traverse . traverse) %~ reverse -- Henson, maybe something like this ?
20:33:58 <lambdabot> [fromList [(0,"two")],fromList [(1,"one"),(2,"zero")]]
20:34:19 yauhsien joins (~yauhsien@61-231-44-111.dynamic-ip.hinet.net)
20:36:36 × nucranium quits (~nucranium@2a02:8010:6173:0:1518:15e2:d1d7:f9f8) (Ping timeout: 250 seconds)
20:37:46 nucranium joins (~nucranium@2a02:8010:6173:0:1518:15e2:d1d7:f9f8)
20:37:48 <ski> (or perhaps using `unsafePartsOf' in place of `partsOf', which will error out if your `bar' produces too few elements (too many will ignore the excess ones, for either combinator))
20:38:58 <ski> @. hoogle type (sequence .) . fmap
20:39:00 <lambdabot> Prelude mapM :: (Traversable t, Monad m) => (a -> m b) -> t a -> m (t b)
20:39:00 <lambdabot> Control.Monad mapM :: (Traversable t, Monad m) => (a -> m b) -> t a -> m (t b)
20:39:00 <lambdabot> Data.Traversable mapM :: (Traversable t, Monad m) => (a -> m b) -> t a -> m (t b)
20:39:06 × yauhsien quits (~yauhsien@61-231-44-111.dynamic-ip.hinet.net) (Ping timeout: 245 seconds)
20:40:05 <[exa]> oh unsafePartsOf can change the type, cool.
20:40:22 × nucranium quits (~nucranium@2a02:8010:6173:0:1518:15e2:d1d7:f9f8) (Client Quit)
20:41:52 <Henson> ski: hmm, it looks like partsOf might be what I need, I'll experiment with that and see where it gets me.
20:42:16 × azimut_ quits (~azimut@gateway/tor-sasl/azimut) (Ping timeout: 240 seconds)
20:42:32 <ski> Henson : assuming you have `Traversable (Foo K)', obviously
20:42:51 merijn joins (~merijn@c-001-001-001.client.esciencecenter.eduvpn.nl)
20:43:55 acidjnk joins (~acidjnk@p200300d0c7049f99c07e6a42421e5c0c.dip0.t-ipconnect.de)
20:47:27 yauhsien joins (~yauhsien@61-231-44-111.dynamic-ip.hinet.net)
20:47:36 × zincy_ quits (~zincy@host86-160-236-152.range86-160.btcentralplus.com) (Remote host closed the connection)
20:48:46 × yauhsien quits (~yauhsien@61-231-44-111.dynamic-ip.hinet.net) (Remote host closed the connection)
20:49:00 <ski> hm, now i'm wondering if there's `Functor f => Traversing (->) f s t a b -> exists t. Traversable t *> LensLike f s t (t a) (t b)' or `(Functor f,Traversable t) => ATraversal s t a b -> (t a -> f (t b)) -> s -> f t' (possibly with `a = b')
20:50:27 × alx741 quits (~alx741@host-181-198-243-130.netlife.ec) (Read error: Connection reset by peer)
20:51:01 alx741 joins (~alx741@host-181-198-243-130.netlife.ec)
20:51:06 <ski> er, accidentally used the same tyvar `t' for two different things. and the latter one was wrong anyway. try `Functor f => Traversing (->) f s t a b -> exists g. Traversable g *> LensLike f s t (g a) (g b)' or `Functor f => ATraversal s t a b -> (forall g. Traversable g => g a -> f (g b)) -> s -> f t' (possibly with `a = b'), rather
20:52:31 <Henson> I don't actually need to the type change. In my application Y = X, so partsOf should work
20:52:32 × olle quits (~olle@c-8a89e455.034-536-6d6c6d4.bbcust.telenor.se) (Remote host closed the connection)
20:53:14 <Henson> ski: yeah, I'm writing all of these types myself, so I can make the necessary instances.
20:53:20 <ski> @type let partsOf'_ :: Functor f => ATraversal s t a a -> (forall g. Traversable g => g a -> f (g a)) -> s -> f t; partsOf'_ = partsOf' in partsOf'_
20:53:21 <lambdabot> Functor f => ATraversal s t a a -> (forall (g :: * -> *). Traversable g => g a -> f (g a)) -> s -> f t
20:53:26 <ski> seems legit ..
20:53:56 × mastarija quits (~mastarija@2a05:4f46:e04:6000:6118:54b1:a270:d89b) (Quit: Leaving)
20:54:18 <ski> of course, you can't easily use `reverse' with this variant
20:54:26 yauhsien joins (~yauhsien@61-231-44-111.dynamic-ip.hinet.net)
20:55:39 eggplantade joins (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
20:55:42 <ski> (you could probably do a `Control.Monad.State.Lazy' trick, along the lines of what [exa] suggested)
20:56:27 <ski> Henson : well, i was thinking maybe you'd prefer it to error out if `bar' returned a shorter list
20:57:16 <ski> (not sure if there's an easy way to also make it error out if it returns a longer list .. that's what got me thinking about using an abstract `Traversible' `g', rather than the concrete `[]')
20:59:00 × yauhsien quits (~yauhsien@61-231-44-111.dynamic-ip.hinet.net) (Ping timeout: 240 seconds)
20:59:01 <Henson> ski: thanks for the suggestion, but that would make things even more complicated. The returned list should always be the same size so I'm not concerned with it changing shape.
20:59:34 × nexus_ quits (~nexus@178-164-207-111.pool.digikabel.hu) (Ping timeout: 250 seconds)
21:00:29 <ski> yea, the `Traversable g' stuff was more of a side rumination, than an actual suggestion for you
21:01:34 nexus joins (~nexus@176-241-62-204.pool.digikabel.hu)
21:05:42 × namkeleser quits (~namkelese@101.175.155.55) (Quit: Client closed)
21:07:04 <ski> hm, perhaps one could add `Representable g' (or something ?) in addition to `Traversable g' ..
21:07:07 <jackdk> Henson: How'd you go with your streaming stuff yesterday?
21:07:13 × eggplantade quits (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection)
21:07:27 vorpuni joins (~pvorp@2001:861:3881:c690:c81a:b383:83c1:b919)
21:08:21 Everything joins (~Everythin@37.115.210.35)
21:08:49 × ph88 quits (~ph88@84-30-78-253.cable.dynamic.v4.ziggo.nl) (Read error: Connection reset by peer)
21:09:01 × alp quits (~alp@user/alp) (Ping timeout: 240 seconds)
21:09:35 Pickchea joins (~private@user/pickchea)
21:10:38 <Henson> jackdk: well, this Optics thing is a way to try to get around that. Instead of splitting the things into separate streams, I'm trying to manipulate the data in one go using something like "over".
21:12:19 × Giovanni quits (~Giovanni@176.219.119.243) (Ping timeout: 250 seconds)
21:12:20 <[exa]> ski: actually I'm not sure now if lazy state would even help there
21:12:34 Giovanni joins (~Giovanni@176.54.32.122)
21:13:38 <ski> exists a. C a *> (Foo a -> Bar) >---> (forall a. C a => Foo a) -> Bar
21:13:44 <ski> exists a. C a *> (Foo a -> Bar) ===== forall o. ((exists a. C a *> (Foo a -> Bar)) -> o) -> o
21:13:47 <ski> ===== forall o. (forall a. C a => (Foo a -> Bar) -> o) -> o
21:13:53 <ski> .. hmm
21:14:04 pavonia joins (~user@user/siracusa)
21:14:05 <ski> (how to make a commuting diagram ?)
21:15:20 <ski> [exa] : hm, wouldn't TyingTheKnot work, you think ?
21:15:44 <[exa]> yeah just wondering how to get all the values out correctly at once
21:16:24 yauhsien joins (~yauhsien@61-231-56-96.dynamic-ip.hinet.net)
21:16:57 × merijn quits (~merijn@c-001-001-001.client.esciencecenter.eduvpn.nl) (Ping timeout: 240 seconds)
21:17:08 <jackdk> Henson: so the item type of your stream is a `Foo K X` and you want to go to `Foo K Y`?
21:20:57 <ski> Henson : hm, your list is an incrementally produced stream ? i'd guess that the `partsOf' solution(s) above are bulky, rather than incremental (so waits for the end of the list/stream, before producing the first `Foo K Y' output element) (i haven't tested this, it's just a guess)
21:21:45 alp joins (~alp@user/alp)
21:22:35 <ski> @hoogle (a,b -> c) -> (a -> b) -> c
21:22:36 <lambdabot> No results found
21:22:36 × hpc quits (~juzz@ip98-169-35-13.dc.dc.cox.net) (Ping timeout: 240 seconds)
21:22:40 <ski> @djinn (a,b -> c) -> (a -> b) -> c
21:22:40 <lambdabot> f (a, b) c = b (c a)
21:22:43 <ski> @hoogle a -> (b -> c) -> (a -> b) -> c
21:22:44 <lambdabot> No results found
21:22:45 × thyriaen quits (~thyriaen@ip5f5af2d7.dynamic.kabel-deutschland.de) (Quit: Leaving)
21:23:16 szkl joins (uid110435@id-110435.uxbridge.irccloud.com)
21:24:37 hpc joins (~juzz@ip98-169-35-13.dc.dc.cox.net)
21:24:38 cosimone joins (~user@93-44-187-176.ip98.fastwebnet.it)
21:27:26 × vorpuni quits (~pvorp@2001:861:3881:c690:c81a:b383:83c1:b919) (Quit: bye)
21:29:21 <[exa]> ski: any thoughts on de-abominating this?--
21:29:22 <[exa]> > let (d,r) = traverseByOf (traverse._2) (\x->(mempty,x)) (<*>) (\x -> ([x],x++(concat d))) [('a',"bcd"),('c',"def")] in r
21:29:24 <lambdabot> [('a',"bcdbcddef"),('c',"defbcddef")]
21:30:36 <[exa]> okay there's one very explicit `pure`
21:31:00 <[exa]> which makes it traverseOf I guess....
21:31:26 worldhelloworld1 joins (uid543174@id-543174.helmsley.irccloud.com)
21:34:47 <[exa]> > let (d,r) = traverseOf (traverse._2) (\x -> ([x],show (x*sum d))) [('A',1),('B',2)] in r
21:34:48 <lambdabot> [('A',"3"),('B',"6")]
21:36:53 x_kuru_ joins (~xkuru@user/xkuru)
21:37:22 <[exa]> (,) is the best type ever and I can sleep now.
21:37:37 <ski> > sequence ["01","ab"]
21:37:38 <lambdabot> ["0a","0b","1a","1b"]
21:37:46 <ski> > getZipList `map` [ZipList [\case False -> '0'; True -> '1',\case False -> 'a'; True -> 'b'] <*> ZipList ij | ij <- replicateM 2 [False,True]]
21:37:47 <lambdabot> ["0a","0b","1a","1b"]
21:37:52 <ski> % :set -XApplicativeDo
21:37:52 <yahb> ski:
21:37:57 <ski> % getZipList `map` getZipList (do ij <- replicateM 2 (ZipList [False,True]); return (ZipList [\case False -> '0'; True -> '1',\case False -> 'a'; True -> 'b'] <*> ZipList ij))
21:37:57 <yahb> ski: ["0a","1b"]
21:38:23 <ski> @type sequence
21:38:24 <lambdabot> (Traversable t, Monad m) => t (m a) -> m (t a)
21:38:26 <ski> @type (<*>)
21:38:27 <lambdabot> Applicative f => f (a -> b) -> f a -> f b
21:38:53 × yauhsien quits (~yauhsien@61-231-56-96.dynamic-ip.hinet.net) (Remote host closed the connection)
21:41:05 × x_kuru quits (xkuru@user/xkuru) (Ping timeout: 256 seconds)
21:41:36 <nf> int-e: could you take a look at https://github.com/lambdabot/lambdabot/pull/204 when you have a minute?
21:42:30 <sm> nice, https://hackage.haskell.org/package/ihp-hsx on hackage now
21:42:35 yauhsien joins (~yauhsien@61-231-56-96.dynamic-ip.hinet.net)
21:42:56 × wyrd quits (~wyrd@gateway/tor-sasl/wyrd) (Ping timeout: 240 seconds)
21:45:03 wyrd joins (~wyrd@gateway/tor-sasl/wyrd)
21:45:22 × _xor quits (~xor@dsl-50-5-233-169.fuse.net) (Read error: Connection reset by peer)
21:50:15 CiaoSen joins (~Jura@p200300c95737a2002a3a4dfffe84dbd5.dip0.t-ipconnect.de)
21:50:51 × bitmapper quits (uid464869@id-464869.lymington.irccloud.com) (Quit: Connection closed for inactivity)
21:50:53 lavaman joins (~lavaman@98.38.249.169)
21:50:57 <ski> > let (d,r) = [('A',1),('B',2)] & traverse._2 %%~ \x -> ([x],show (x * sum d)) in r
21:50:58 <lambdabot> [('A',"3"),('B',"6")]
21:51:00 <ski> > let (r,d) = runWriter ([('A',1),('B',2)] & traverse._2 %%~ \x -> do tell [x]; return (show (x * sum d))) in r
21:51:02 <lambdabot> [('A',"3"),('B',"6")]
21:51:04 <shapr> oh wow, a lambdabot plugin I wrote no longer works with ghc 9?!
21:51:20 <ski> [exa] : took me a bit to decipher it
21:52:09 <shapr> nf: I think the fortune plugin was written in 2002 it's had a long life!
21:53:19 <ski> @fortune
21:53:19 <lambdabot> May you have many beautiful and obedient daughters.
21:54:11 <ski> @palomer
21:54:11 <lambdabot> (_|_)
21:54:30 <shapr> hahaha
21:54:48 ski still remembers palomer,Keal
21:54:52 <ski> @keal
21:54:52 <lambdabot> i aint running that on my puter
21:55:52 × michalz quits (~michalz@185.246.204.43) (Remote host closed the connection)
21:55:54 × TonyStone quits (~TonyStone@2603-7080-8607-c36a-a0f7-4a6c-9396-dfff.res6.spectrum.com) (Ping timeout: 250 seconds)
21:58:27 michalz joins (~michalz@185.246.204.41)
21:58:43 × michalz quits (~michalz@185.246.204.41) (Remote host closed the connection)
21:59:03 <[exa]> ski: we should have some syntax for marking important and arbitrary bits in the examples :] but I guess it's nailed there with the Writer
21:59:45 ski still isn't really familiar with `lens'
22:00:17 <nf> shapr: are you saying it's had a long life and it needs to die or the opposite :D
22:00:35 gehmehgeh joins (~user@user/gehmehgeh)
22:01:13 michalz joins (~michalz@185.246.204.43)
22:02:31 ski . o O ( ‟That is not dead which can eternal lie,And with strange aeons even death may die.” )
22:02:47 <c_wraith> ski: the best thing about your examples is that (%%~) = id
22:03:37 <jackdk> How much of lens is secretly `id` at this point?
22:03:52 <c_wraith> only like about 10 things
22:04:11 eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:85fc:5466:5112:8a92)
22:04:12 × ProfSimm quits (~ProfSimm@87.227.196.109) (Remote host closed the connection)
22:04:19 <[exa]> yup the rest is just Identity
22:04:32 ProfSimm joins (~ProfSimm@87.227.196.109)
22:05:16 <c_wraith> (and runIdentity)
22:05:37 <[exa]> :]
22:05:37 <ski> c_wraith : figured that'd look nicer, in the operator salad version :p
22:06:03 <jackdk> Axman6: see, I knew it!
22:06:04 <nf> that which is not id is (.), and that which is not (.) is id
22:06:31 <ski> (although, i'm pretty tired atm, so i only noticed it could be omitted, in passing, then promptly forgot about it again, when presenting the finished examples)
22:06:50 × michalz quits (~michalz@185.246.204.43) (Remote host closed the connection)
22:07:05 <[exa]> btw, now when seeing this, I might already have asked and forgot-- what was the reason the tuple is "reversed" in State and Writer?
22:07:20 <ski> (.. i had to check my backlog, to notice that i had already noticed before)
22:07:26 <c_wraith> I don't think there is a good reason
22:07:38 <c_wraith> Other than "it doesn't matter since it's behind a newtype anyway"
22:07:43 <[exa]> (reversed as in "unlike the usual functor position")
22:08:32 <ski> well, i suppose it's just an (unhappy) accident
22:08:43 TonyStone joins (~TonyStone@2603-7080-8607-c36a-a0f7-4a6c-9396-dfff.res6.spectrum.com)
22:09:15 <[exa]> maybe a safety precaution against misusing fmaps&others from actual (,) where they don't belong?
22:09:31 <[exa]> my best hypothesis so far ^
22:09:39 <ski> (perhaps, for the `Writer' case, it could be because there was a slight preference to writing the larger output expressions after the smaller result expression .. but that's focusing on convenience for implementation, rather than user interface ..)
22:09:57 × takuan quits (~takuan@178-116-218-225.access.telenet.be) (Remote host closed the connection)
22:09:59 × machinedgod quits (~machinedg@24.105.81.50) (Ping timeout: 256 seconds)
22:10:15 <monochrom> I heard the reason, but I forgot. Let me see if I can find it in my logs.
22:10:32 <ski> if `Writer' and `State' were to be redone, i'd advocate for swapping it around
22:10:36 <[exa]> yeah the question's been around already
22:10:47 <geekosaur> wasn't it some CT thing?
22:10:54 <geekosaur> vague memory
22:11:25 <ski> my bet would be on "hysterical raisins"
22:12:12 <shapr> nf: I don't know! It's a nice plugin I guess?
22:12:16 <shapr> @fortune
22:12:16 <lambdabot> "I say we take off; nuke the site from orbit. It's the only way to be sure."
22:12:16 <lambdabot> - Corporal Hicks, in "Aliens"
22:12:27 <ski> @yow
22:12:27 <lambdabot> Do I have a lifestyle yet?
22:12:49 <ski> perhaps there could be slightly more bot abuse in the channel
22:13:11 <shapr> When I first wrote that plugin it (and @quote) had an off by one error that persistent for years. Ten years later I jumped in to finally fix it, and found it HAD BEEN FIXED and someone had saved the off by one error as a quote?!?!?
22:13:37 <nf> @yow
22:13:37 <lambdabot> I'm also against BODY-SURFING!!
22:13:50 jespada joins (~jespada@cpc121022-nmal24-2-0-cust171.19-2.cable.virginm.net)
22:13:53 × Everything quits (~Everythin@37.115.210.35) (Quit: leaving)
22:14:03 <nf> @arr
22:14:03 <lambdabot> Keelhaul the swabs!
22:14:05 <nf> @yarr
22:14:05 <lambdabot> Yo ho ho, and a bottle of rum!
22:14:07 <shapr> Yeah, that plugin came from testing the quote plugin with zippy the pinhead quotes that shipped with emacs!
22:14:15 <shapr> @protontorpedo
22:14:15 <lambdabot> hakell is not lisp or ml right?
22:14:23 <ski> @v
22:14:23 <lambdabot> "\"\\\"\\\\\\\"\\\\\\\\\\\\\\\"\\\\\\\\\\"
22:14:34 × mc47 quits (~mc47@xmonad/TheMC47) (Remote host closed the connection)
22:15:24 <ski> @pinky
22:15:24 <lambdabot> I think so, Brain, but, the Rockettes? I mean, it's mostly girls, isn't it?
22:15:29 <nf> fine i'll make a shell wrapper
22:16:19 <shapr> The fortune / quote / yow / etc plugin was the second plugin that worked, @echo was the first
22:16:34 <shapr> @echo hello
22:16:34 <lambdabot> echo; msg:IrcMessage {ircMsgServer = "libera", ircMsgLBName = "lambdabot", ircMsgPrefix = "shapr!~user@pool-173-73-44-186.washdc.fios.verizon.net", ircMsgCommand = "PRIVMSG", ircMsgParams = ["#
22:16:34 <lambdabot> haskell",":@echo hello"]} target:#haskell rest:"hello"
22:17:17 <shapr> nf: if you're interested, there's a bit of history about lambdabot in the most recent cofree coffee podcast
22:17:33 <nf> i don't like history
22:17:39 <shapr> fair enough
22:17:39 _xor joins (~xor@dsl-50-5-233-169.fuse.net)
22:18:40 finn_elija joins (~finn_elij@user/finn-elija/x-0085643)
22:18:40 × FinnElija quits (~finn_elij@user/finn-elija/x-0085643) (Killed (NickServ (Forcing logout FinnElija -> finn_elija)))
22:18:40 finn_elija is now known as FinnElija
22:19:22 <shapr> though at least one person recently active in this channel did get their PhD from figuring out how to hot-reload lambdabot plugins
22:20:57 <hpc> i didn't think PhD work could be specific in that particular way
22:21:07 <nf> lol
22:21:13 Guest|20 joins (~Guest|20@dynamic-046-114-001-168.46.114.pool.telefonica.de)
22:21:26 × Guest|20 quits (~Guest|20@dynamic-046-114-001-168.46.114.pool.telefonica.de) (Client Quit)
22:21:31 ski . o O ( "Les Horribles Cernettes" <https://web.archive.org/web/20120101010055/http://musiclub.web.cern.ch/MusiClub/bands/cernettes> )
22:24:13 × Guest27 quits (~Guest27@2601:281:d47f:1590::6b90) (Quit: Client closed)
22:28:50 × k8yun quits (~k8yun@user/k8yun) (Ping timeout: 250 seconds)
22:30:41 <monochrom> This: https://ircbrowse.tomsmeding.com/day/lchaskell/2022/01/22?id=388992#trid388992
22:34:06 × lavaman quits (~lavaman@98.38.249.169) (Ping timeout: 252 seconds)
22:35:40 ski . o O ( "Types and Reflection" (Masters thesis) by Lauri Emil Alanko in 2004-11-08 at <https://web.archive.org/web/20130510183001if_/http://www.cs.helsinki.fi/u/lealanko/alanko04types.ps.gz>,<http://lambda-the-ultimate.org/node/219> )
22:36:30 romesrf joins (~romes@44.190.189.46.rev.vodafone.pt)
22:36:48 <shapr> Are you figuring out which thesis was about hot reloading lambdabot plugins?
22:36:48 <ski> monochrom : oh, that recently ..
22:37:50 <ski> shapr : i don't recall / i'm not sure which one you had in mind (note the above was not a Ph. D. thesis, so perhaps you were thinking about something else) .. it's just what i reminisced, when you mentioned that
22:37:59 <shapr> ah, fair enough
22:38:03 <shapr> I was curious
22:38:11 <ski> (although i was foiled for a little while, since i misremembered the surname as "Alenko")
22:38:19 boborygmy joins (~bob@pool-173-54-217-168.nwrknj.fios.verizon.net)
22:38:24 boborygmy_ joins (~bob@pool-173-54-217-168.nwrknj.fios.verizon.net)
22:38:41 × boborygmy_ quits (~bob@pool-173-54-217-168.nwrknj.fios.verizon.net) (Client Quit)
22:40:44 <ski> @wn trefoil
22:40:44 <lambdabot> *** "trefoil" wn "WordNet (r) 3.0 (2006)"
22:40:44 <lambdabot> trefoil
22:40:44 <lambdabot> n 1: any of several Old World herbs of the genus Medicago having
22:40:44 <lambdabot> small flowers and trifoliate compound leaves [syn: {medic},
22:40:44 <lambdabot> {medick}, {trefoil}]
22:40:46 <lambdabot> [3 @more lines]
22:41:01 <ski> @more
22:41:02 <lambdabot> 2: a plant of the genus Trifolium [syn: {clover}, {trefoil}]
22:41:02 <lambdabot> 3: an architectural ornament in the form of three arcs arranged
22:41:02 <lambdabot> in a circle
22:41:41 <ski> reading that backlog, i'm surprised i remember the conversation about `readme'
22:42:01 × ix quits (~ix@2a02:8010:674f:0:d65d:64ff:fe52:5efe) (Remote host closed the connection)
22:42:09 ix joins (~ix@2a02:8010:674f:0:d65d:64ff:fe52:5efe)
22:42:16 × ix quits (~ix@2a02:8010:674f:0:d65d:64ff:fe52:5efe) (Remote host closed the connection)
22:42:23 ix joins (~ix@2a02:8010:674f:0:d65d:64ff:fe52:5efe)
22:42:32 × ix quits (~ix@2a02:8010:674f:0:d65d:64ff:fe52:5efe) (Remote host closed the connection)
22:42:39 ix joins (~ix@2a02:8010:674f:0:d65d:64ff:fe52:5efe)
22:42:52 ski notes shapr was the one initiating that LtU thread, though
22:43:42 <shapr> uh oh
22:45:01 <dons> moin moin
22:45:27 <shapr> howdy dons ! How you doin?
22:45:38 <dons> hey d00d. pretty good. been a while.
22:45:48 <shapr> looks like the link to your PhD thesis is broken from your homepage
22:45:52 <shapr> yeah, it's been years!
22:45:53 × ix quits (~ix@2a02:8010:674f:0:d65d:64ff:fe52:5efe) (Remote host closed the connection)
22:46:03 <dons> oh yeah i need to update some links.
22:46:15 <dons> i think all the stuff was hosted on code.haskell.org
22:47:19 <monochrom> Here is an earlier one: https://ircbrowse.tomsmeding.com/day/lchaskell/2022/01/14?id=374888#trid374888
22:47:56 × ec quits (~ec@gateway/tor-sasl/ec) (Ping timeout: 240 seconds)
22:48:08 <shapr> dons: are you taking a break from management to write code?
22:48:27 <geekosaur> right, that;s the one I half-remembered
22:48:30 <dons> i most certainly am :) extended break i guess at this point (~2 years)
22:48:35 <shapr> oh nice!
22:49:01 <dons> moved back to australia, remote IC working on dev infra stuff for Meta still. code search/navigation/IDE things
22:49:05 <ski> yea, just found the reference to "Plugging Haskell In" by André Pang,Don Stewart,Sean Seefried,Manuel Chakravarty in 2004-09, in the references/bibliography of the Alanko thesis
22:49:16 <shapr> ski: yup! you're getting close!
22:50:33 ix joins (~ix@2a02:8010:674f:0:d65d:64ff:fe52:5efe)
22:54:47 × DNH quits (~DNH@2a02:8108:1100:16d8:2015:9361:6306:3ac4) (Quit: My MacBook has gone to sleep. ZZZzzz…)
22:55:01 machinedgod joins (~machinedg@24.105.81.50)
22:59:16 <ski> ah, i guess it's available at <https://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.9.7627>
22:59:38 <ski> (a draft version, anyway)
23:00:02 <geekosaur> I did a quick once-over of archives.haskell.org/code.haskell.org and didn't spot it
23:00:07 <ski> "plugs" -- heh :)
23:00:22 InstX1 joins (~Liam@2601:6c4:4080:3f80:b1b7:1201:f52f:8468)
23:01:46 × nexus quits (~nexus@176-241-62-204.pool.digikabel.hu) (Ping timeout: 250 seconds)
23:03:39 nexus joins (~nexus@92-249-150-216.static.digikabel.hu)
23:04:00 <hololeap> janus, I'm working on someone else's project and I don't want to pull in any more deps. parsec is already in the build-depends
23:04:09 × __monty__ quits (~toonn@user/toonn) (Quit: leaving)
23:05:03 <hololeap> but remind me, what is the canonical way to parse a lazy ByteString encoded as UTF8 into lazy Text?
23:05:42 <monochrom> I think text has some utf-8 decode functions.
23:06:24 <hololeap> ok, I just found Data.Text.Lazy.Encoding.decodeUtf8
23:07:05 <hololeap> or I should probably use decodeUtf8' to avoid pure errors
23:08:10 <monochrom> Yeah, or the "With" variant if you have a per-bad-byte replacement plan.
23:09:20 <hololeap> eh, yeah `decodeUtf8With lenientDecode`
23:13:24 jbox joins (~jbox@user/jbox)
23:16:59 × ProfSimm quits (~ProfSimm@87.227.196.109) (Remote host closed the connection)
23:17:18 ProfSimm joins (~ProfSimm@87.227.196.109)
23:18:27 <ski> > let seqM :: (Ord k,Ord l) => M.Map k (M.Map l a) -> M.Map (M.Map k l) (M.Map k a); seqM kla = M.fromList [(M.fromList kl,M.fromList ka) | (kl,ka) <- map unzip (sequence [[((k,l),(k,a)) | (l,a) <- M.toList la] | (k,la) <- M.toList kla])] in (map (M.toList *** M.toList) . M.toList . seqM . M.fromList . (map . fmap) M.fromList) [(False,[(False,'0'),(True,'1')]),(True,[(False,'a'),(True,'b')])]
23:18:29 <lambdabot> [([(False,False),(True,False)],[(False,'0'),(True,'a')]),([(False,False),(Tr...
23:18:32 fendor_ joins (~fendor@91.141.70.76.wireless.dyn.drei.com)
23:18:34 merijn joins (~merijn@c-001-001-001.client.esciencecenter.eduvpn.nl)
23:18:42 <ski> hmm .. can this be done more nicely ?
23:18:58 InstX1 is now known as Inst
23:20:24 × acidjnk quits (~acidjnk@p200300d0c7049f99c07e6a42421e5c0c.dip0.t-ipconnect.de) (Ping timeout: 250 seconds)
23:21:02 × fendor quits (~fendor@178.165.206.62.wireless.dyn.drei.com) (Ping timeout: 260 seconds)
23:21:53 kaph joins (~kaph@net-109-116-124-149.cust.vodafonedsl.it)
23:22:32 <ski> (yea, this is a continuation of the `sequence' and `(<*>)' examples from close to two hours ago)
23:24:03 <Henson> jackdk: I really want to go from Foo K X to Foo K X where X is of the same type but has been manipulated. I initially asked about going to Foo K Y to ask the more generic question first.
23:25:10 <Henson> ski: the Pipe stream produces a list of values which I then collect into a list of values into a chunk. The chunk needs to be processed all at once, then de-chunked afterwards. So the lists will be the same length and don't need to be read lazily. They'll be ready to go when they're passed into the bar :: [X] -> [X] function
23:25:22 × fendor_ quits (~fendor@91.141.70.76.wireless.dyn.drei.com) (Remote host closed the connection)
23:26:01 <ski> ok
23:26:24 <jackdk> Henson: look up Bifunctor or Bitraversable type classes?
23:26:25 <ski> (being able to process them incrementally would be a nice bonus .. but i guess you don't need that, then)
23:26:50 <ski> it sounds to me like `Traversable (Foo K)' should be enough ?
23:28:41 <ski> (or maybe `MonoTraversable (Foo K X)' .. although there's probably no need to reach for that)
23:29:47 Alleria joins (~textual@user/alleria)
23:30:01 <Henson> ski: remember the Foo K is inside of a list. Can I make a Traversable instance for [Foo K]? Can I make a Traversable instance for something that is a bunch of types combined together, provided it has kind * -> *?
23:32:48 bitdex joins (~bitdex@gateway/tor-sasl/bitdex)
23:34:51 <ski> @type traverse :: (Traversable f,Traversable g) => Applicative i => (a -> i b) -> (Compose f g a -> i (Compose f g b))
23:34:52 <lambdabot> (Traversable f, Traversable g, Applicative i) => (a -> i b) -> Compose f g a -> i (Compose f g b)
23:34:57 <ski> @type ((fmap getCompose .) . (. Compose)) . traverse :: (Traversable f,Traversable g) => Applicative i => (a -> i b) -> (f (g a) -> i (f (g b)))
23:34:58 <lambdabot> (Traversable f, Traversable g, Applicative i) => (a -> i b) -> f (g a) -> i (f (g b))
23:35:11 <ski> @type traverse . traverse :: (Traversable f,Traversable g) => Applicative i => (a -> i b) -> (f (g a) -> i (f (g b)))
23:35:12 <lambdabot> (Traversable f, Traversable g, Applicative i) => (a -> i b) -> f (g a) -> i (f (g b))
23:36:25 <ski> Henson : as in the `lens' examples above, it's enough to use `traverse . traverse' to step inside the list, and then the `Foo K'. but if you really want to, you could use a single `traverse', with `Compose', to step inside both at the same time
23:37:37 <ski> (note that `Traversable (Compose [] (Foo K)' holds, provided `Traversable (Foo K)' does, since there is an instance `(Traversable f,Traversable g) => Traversable (Compose f g)', where in our case `f' is `[]' and `g' is `Foo K')
23:38:54 <ski> (another way would be to do `newtype Foos k a = MkFoos [Foo k a]', and then make a `Traversable (Foos K)' instance)
23:38:54 × alp quits (~alp@user/alp) (Remote host closed the connection)
23:39:15 alp joins (~alp@user/alp)
23:40:20 <ski> (`[Foo K]' is a kind error, however. `Foo K :: * -> *', but `[]' doesn't accept a `* -> *' as input, just a `*', since (also) `[] :: * -> *'. so you either need to define a new type like `Foos', or use a presupplied composition combinator like `Compose')
23:40:57 <ski> (`newtype Compose f g a = Compose {getCompose :: f (g a)}', if you were unfamiliar with that one. it's in `Data.Functor.Compose')
23:42:00 × agumonkey quits (~user@88.163.231.79) (Read error: Connection reset by peer)
23:43:01 agumonkey joins (~user@88.163.231.79)
23:47:47 × merijn quits (~merijn@c-001-001-001.client.esciencecenter.eduvpn.nl) (Ping timeout: 256 seconds)
23:47:48 × jgeerds quits (~jgeerds@55d4548e.access.ecotel.net) (Ping timeout: 252 seconds)
23:53:44 DNH joins (~DNH@2a02:8108:1100:16d8:2015:9361:6306:3ac4)
23:56:47 <Henson> ski: thank you for all of these suggestions. A lot of it is over my head, as I'm just learning about Lenses, but I've got the chat logs, and will try out some of these ideas tomorrow and see what happens. Maybe I'll be back tomorrow with new questions :-)
23:58:49 × gehmehgeh quits (~user@user/gehmehgeh) (Quit: Leaving)
23:59:22 namkeleser joins (~namkelese@125.7.37.86)

All times are in UTC on 2022-03-15.