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.