Logs on 2025-02-26 (liberachat/#haskell)
| 00:00:25 | <geekosaur> | if regex is extended with "functions", see raku |
| 00:00:36 | <mauke> | parsec can nest |
| 00:00:57 | <geekosaur> | but there's some question as to whether that's actually "regex" (I think the "actually should be regular" ship sailed years ago) |
| 00:03:28 | × | merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 265 seconds) |
| 00:07:40 | <EvanR> | I guess irregular expressions isn't particularly marketable |
| 00:10:48 | → | mange joins (~user@user/mange) |
| 00:11:03 | → | alfiee joins (~alfiee@user/alfiee) |
| 00:12:50 | <jackdk> | Don't we call those "perl compatible"? |
| 00:13:47 | <mauke> | I think "perl compatible" is mostly about syntax (ok, and some features as well) |
| 00:14:08 | → | merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl) |
| 00:14:16 | <mauke> | backreferences existed long before perl |
| 00:15:31 | × | alfiee quits (~alfiee@user/alfiee) (Ping timeout: 244 seconds) |
| 00:16:44 | → | Googulator78 joins (~Googulato@2a01-036d-0106-0c81-ad7c-ac56-196b-c9a2.pool6.digikabel.hu) |
| 00:16:45 | <EvanR> | now I have to pull out the history to figure out what "long before perl" means |
| 00:17:04 | <geekosaur> | egrep |
| 00:18:28 | × | merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds) |
| 00:19:42 | <mauke> | https://unix.stackexchange.com/questions/623521/why-does-ed-support-backreferences-but-not-alternations-in-regular-expressions |
| 00:20:10 | × | Googulator quits (~Googulato@2a01-036d-0106-0c81-ad7c-ac56-196b-c9a2.pool6.digikabel.hu) (Ping timeout: 240 seconds) |
| 00:21:54 | → | Smiles joins (uid551636@id-551636.lymington.irccloud.com) |
| 00:26:59 | <geekosaur> | mm, right, forgot ed went back even further |
| 00:29:31 | → | merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl) |
| 00:29:38 | <ski> | geekosaur : "IrRegular Expressions" by foof at <https://synthcode.com/scheme/irregex/> |
| 00:32:29 | → | krei-se- joins (~krei-se@p3ee0f060.dip0.t-ipconnect.de) |
| 00:32:35 | <mauke> | the bell labs regex code wasn't freely available, so perl 2.0 incorporated henry spencer's implementation, which used backtracking |
| 00:33:36 | × | krei-se quits (~krei-se@p3ee0fb6e.dip0.t-ipconnect.de) (Ping timeout: 252 seconds) |
| 00:33:52 | × | merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds) |
| 00:34:49 | ski | . o O ( "Regular Expression Matching Can Be Simple And Fast (but is slow in Java, Perl, PHP, Python, Ruby, ...)" by Russ Cox in 2007-01 at <https://swtch.com/~rsc/regexp/regexp1.html> ) |
| 00:36:02 | <mauke> | "With the exception of backreferences, the features provided by the slow backtracking implementations can be provided by the automata-based implementations at dramatically faster, more consistent speeds." is of course wrong |
| 00:36:26 | × | misterfish quits (~misterfis@84.53.85.146) (Ping timeout: 252 seconds) |
| 00:40:22 | → | JuanDaugherty joins (~juan@user/JuanDaugherty) |
| 00:44:53 | → | merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl) |
| 00:45:24 | <geekosaur> | yeh, I think pretty much everyone was using Spencer's code back then |
| 00:49:25 | × | merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 248 seconds) |
| 00:51:03 | × | sprotte24 quits (~sprotte24@p200300d16f33ea00547a79769710f53f.dip0.t-ipconnect.de) (Quit: Leaving) |
| 00:53:34 | → | peterbecich joins (~Thunderbi@syn-047-229-123-186.res.spectrum.com) |
| 00:56:13 | × | xff0x quits (~xff0x@2405:6580:b080:900:3152:bac6:3fc:3eb6) (Ping timeout: 252 seconds) |
| 00:56:47 | → | alfiee joins (~alfiee@user/alfiee) |
| 01:00:15 | → | merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl) |
| 01:01:00 | × | alfiee quits (~alfiee@user/alfiee) (Ping timeout: 252 seconds) |
| 01:02:13 | × | zungi quits (~tory@user/andrewchawk) (Remote host closed the connection) |
| 01:04:40 | × | merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds) |
| 01:06:47 | → | zungi joins (~tory@user/andrewchawk) |
| 01:07:36 | × | JuanDaugherty quits (~juan@user/JuanDaugherty) (Quit: praxis.meansofproduction.biz (juan@acm.org)) |
| 01:08:19 | × | takuan quits (~takuan@d8D86B601.access.telenet.be) (Ping timeout: 252 seconds) |
| 01:15:39 | → | merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl) |
| 01:16:05 | × | machinedgod quits (~machinedg@d108-173-18-100.abhsia.telus.net) (Ping timeout: 248 seconds) |
| 01:17:25 | <cheater> | i'm still dismayed that no one extended regex to include negative matches |
| 01:17:41 | <cheater> | since they can always be compiled down to a finite amount of positive matches |
| 01:18:01 | <cheater> | just that negative matches are human readable and the positive version isn't |
| 01:18:37 | <geekosaur> | actual perl REs have negative matches |
| 01:18:52 | <cheater> | as in, "matching this rejects the match"? |
| 01:18:57 | <geekosaur> | or at least negative lookahead |
| 01:19:01 | <geekosaur> | yes |
| 01:19:11 | <cheater> | how would you match for hat, but not within the word what? |
| 01:19:28 | → | yegorc joins (~yegorc@user/yegorc) |
| 01:19:42 | × | peterbecich quits (~Thunderbi@syn-047-229-123-186.res.spectrum.com) (Ping timeout: 252 seconds) |
| 01:19:53 | <Square> | If I have a project that contains .cabal files it seems newer versions of cabal tries to use all these files to resolve dependencies. Is there a way to neglect other .cabal files in a project? |
| 01:20:07 | <Square> | s/contains/contains several/ |
| 01:20:38 | <cheater> | idk but maybe cabal.project |
| 01:20:44 | <geekosaur> | --ignore-project |
| 01:21:24 | <geekosaur> | this isn't usually what you actually want, though, as it can lead to mutually incompatible project components |
| 01:21:48 | <geekosaur> | which is why cabal solves for the whole project |
| 01:22:16 | × | merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds) |
| 01:23:07 | <Square> | thanks. I'm migrating a project - sub-project by sub-project. |
| 01:23:32 | <Square> | ...so during that phase it might help me to work on them individually first |
| 01:27:01 | × | alp quits (~alp@2001:861:8ca0:4940:d9b2:488b:3c7b:5f95) (Ping timeout: 252 seconds) |
| 01:33:42 | → | merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl) |
| 01:38:41 | × | merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 268 seconds) |
| 01:42:30 | → | alfiee joins (~alfiee@user/alfiee) |
| 01:42:55 | <geekosaur> | you might do better making a temporary project file containing only the parts you need, because eventually you'll hit dependencies within the project and will need them to be visible |
| 01:43:48 | ← | yegorc parts (~yegorc@user/yegorc) (Leaving) |
| 01:44:18 | <Square> | gotcha. I'll keep that in mind if I run into problems |
| 01:44:25 | → | bitdex joins (~bitdex@gateway/tor-sasl/bitdex) |
| 01:45:23 | × | Tuplanolla quits (~Tuplanoll@91-159-69-59.elisa-laajakaista.fi) (Ping timeout: 245 seconds) |
| 01:47:12 | × | alfiee quits (~alfiee@user/alfiee) (Ping timeout: 272 seconds) |
| 01:47:26 | → | messewix joins (~jmc@user/messewix) |
| 01:47:57 | <mauke> | cheater: (?<!w)hat |
| 01:48:42 | <cheater> | nice |
| 01:48:46 | <cheater> | does this work in any greps? |
| 01:48:57 | <mauke> | the positive version is (?:^|[^w])hat |
| 01:49:04 | → | merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl) |
| 01:49:56 | <mauke> | should work in GNU grep -P |
| 01:50:04 | <mauke> | and ack, if you count that as a grep |
| 01:50:12 | → | xff0x joins (~xff0x@fsb6a9491c.tkyc517.ap.nuro.jp) |
| 01:53:25 | × | merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds) |
| 01:54:49 | × | acidjnk_new quits (~acidjnk@p200300d6e7283f3800c9913f6d25b0a5.dip0.t-ipconnect.de) (Ping timeout: 260 seconds) |
| 02:04:27 | → | merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl) |
| 02:04:31 | × | olivial_ quits (~benjaminl@2601:1c0:847f:9c70:223:24ff:fe66:4370) (Read error: Connection reset by peer) |
| 02:04:45 | → | olivial joins (~benjaminl@user/benjaminl) |
| 02:08:53 | × | merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 248 seconds) |
| 02:12:04 | × | vanishingideal quits (~vanishing@user/vanishingideal) (Ping timeout: 244 seconds) |
| 02:13:59 | → | vanishingideal joins (~vanishing@user/vanishingideal) |
| 02:19:51 | → | merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl) |
| 02:20:22 | <cheater> | mauke: fantastic |
| 02:20:29 | <cheater> | i guess rg doesn't do it though? |
| 02:20:42 | <cheater> | rg... sigh... |
| 02:21:51 | <mauke> | needs --pcre2, apparently |
| 02:24:02 | → | weary-traveler joins (~user@user/user363627) |
| 02:24:14 | × | merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds) |
| 02:28:55 | → | alfiee joins (~alfiee@user/alfiee) |
| 02:31:00 | × | Smiles quits (uid551636@id-551636.lymington.irccloud.com) (Quit: Connection closed for inactivity) |
| 02:31:09 | <haskellbridge> | <Bowuigi> cheater both structural regular expressions (Bell Labs, some time ago) and PEG have negative matches IIRC |
| 02:31:32 | <cheater> | hmmmm |
| 02:31:33 | <cheater> | thank you |
| 02:31:34 | <haskellbridge> | <Bowuigi> Structural regex seems to be more powerful. It's definitely more practical for interactive usage |
| 02:31:46 | <cheater> | what's structural |
| 02:33:02 | × | alfiee quits (~alfiee@user/alfiee) (Ping timeout: 252 seconds) |
| 02:35:15 | → | merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl) |
| 02:39:40 | × | merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 244 seconds) |
| 02:40:07 | <haskellbridge> | <Bowuigi> Instead of operating in lines, it operates in selections. It can do things like "select all strings matching this pattern, even if spread across multiple lines", "replace using this pattern on these selections", "invert selected" and more |
| 02:41:37 | <haskellbridge> | <Bowuigi> So SRE is for interactive usage (that was what it was designed for, based on Bell Labs' documentation), and PEG is like CFG but more language parsing oriented |
| 02:44:02 | × | pointlessslippe1 quits (~pointless@62.106.85.17) (Read error: Connection reset by peer) |
| 02:44:34 | <mauke> | not very structured if it doesn't handle nesting |
| 02:45:06 | <mauke> | e.g. you can't easily say "select the current block of code" |
| 02:50:31 | × | bitdex quits (~bitdex@gateway/tor-sasl/bitdex) (Remote host closed the connection) |
| 02:50:37 | → | merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl) |
| 02:51:17 | → | bilegeek joins (~bilegeek@2600:1008:b06e:701b:8c92:bcff:3789:c22c) |
| 02:51:37 | → | pointlessslippe1 joins (~pointless@62.106.85.17) |
| 02:51:50 | → | peterbecich joins (~Thunderbi@syn-047-229-123-186.res.spectrum.com) |
| 02:52:14 | lol_ | is now known as jcarpenter2 |
| 02:52:53 | × | L29Ah quits (~L29Ah@wikipedia/L29Ah) (Ping timeout: 244 seconds) |
| 02:57:14 | × | merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds) |
| 03:08:39 | → | merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl) |
| 03:12:53 | × | merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 248 seconds) |
| 03:14:59 | → | alfiee joins (~alfiee@user/alfiee) |
| 03:19:14 | × | alfiee quits (~alfiee@user/alfiee) (Ping timeout: 252 seconds) |
| 03:24:02 | → | merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl) |
| 03:27:59 | → | tromp joins (~textual@2a02:a210:cba:8500:b949:287e:6bbd:873b) |
| 03:28:36 | × | tromp quits (~textual@2a02:a210:cba:8500:b949:287e:6bbd:873b) (Client Quit) |
| 03:29:03 | <Square> | Template haskell has changed a bit between GHC 8.6 and 9.6. I cant wrap my head on the new signature for DataInstD |
| 03:29:04 | × | merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 268 seconds) |
| 03:29:17 | <Square> | Was: DataInstD Cxt Name [Type] (Maybe Kind) [Con] [DerivClause] |
| 03:29:33 | <Square> | Now: DataInstD Cxt (Maybe [TyVarBndr ()]) Type (Maybe Kind) [Con] [DerivClause] |
| 03:31:18 | <Square> | so for "class MyClass a b where ; data MyData a b" I declared an instance with... |
| 03:32:09 | <Square> | DataInstD [] (mkName "MyData") [aType,bType] (Nothing) constructors [deriveClause] |
| 03:32:48 | <Square> | I'm not sure how to migrate that to 9.6 |
| 03:35:39 | × | peterbecich quits (~Thunderbi@syn-047-229-123-186.res.spectrum.com) (Ping timeout: 252 seconds) |
| 03:36:21 | × | plitter quits (~plitter@user/plitter) (Ping timeout: 248 seconds) |
| 03:39:23 | → | merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl) |
| 03:40:58 | × | ljdarj quits (~Thunderbi@user/ljdarj) (Ping timeout: 265 seconds) |
| 03:43:54 | × | merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 260 seconds) |
| 03:51:45 | → | bitdex joins (~bitdex@gateway/tor-sasl/bitdex) |
| 03:53:54 | × | PHO` quits (~pho@akari.cielonegro.org) (Ping timeout: 248 seconds) |
| 03:54:03 | → | PHO` joins (~pho@akari.cielonegro.org) |
| 03:54:46 | → | merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl) |
| 03:59:12 | × | merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds) |
| 04:00:20 | × | sp1ff quits (~user@c-67-160-173-55.hsd1.wa.comcast.net) (Remote host closed the connection) |
| 04:01:43 | → | alfiee joins (~alfiee@user/alfiee) |
| 04:03:36 | × | vanishingideal quits (~vanishing@user/vanishingideal) (Ping timeout: 252 seconds) |
| 04:06:01 | × | pointlessslippe1 quits (~pointless@62.106.85.17) (Read error: Connection reset by peer) |
| 04:06:10 | × | alfiee quits (~alfiee@user/alfiee) (Ping timeout: 252 seconds) |
| 04:07:10 | × | kaskal quits (~kaskal@2a02:8388:15bf:c200:69b8:13b6:b9c5:a489) (Ping timeout: 272 seconds) |
| 04:09:46 | → | pointlessslippe1 joins (~pointless@62.106.85.17) |
| 04:10:07 | → | merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl) |
| 04:14:31 | × | merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 244 seconds) |
| 04:24:11 | → | ensyde joins (~ensyde@2601:5c6:c200:6dc0::46e1) |
| 04:25:35 | → | merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl) |
| 04:30:01 | × | foul_owl quits (~kerry@174-21-138-88.tukw.qwest.net) (Ping timeout: 244 seconds) |
| 04:31:49 | × | Square quits (~Square4@user/square) (Ping timeout: 248 seconds) |
| 04:32:12 | × | merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds) |
| 04:41:45 | → | kyoshiblood joins (~kyoshiblo@45.236.190.129) |
| 04:42:44 | × | kyoshiblood quits (~kyoshiblo@45.236.190.129) (Client Quit) |
| 04:42:53 | → | foul_owl joins (~kerry@94.156.149.97) |
| 04:43:38 | → | merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl) |
| 04:47:48 | → | alfiee joins (~alfiee@user/alfiee) |
| 04:48:21 | × | merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 248 seconds) |
| 04:48:45 | → | michalz joins (~michalz@185.246.207.203) |
| 04:49:42 | × | hgolden quits (~hgolden@2603:8000:9d00:3ed1:6ff3:8389:b901:6363) (Remote host closed the connection) |
| 04:52:01 | × | alfiee quits (~alfiee@user/alfiee) (Ping timeout: 248 seconds) |
| 04:54:13 | × | euphores quits (~SASL_euph@user/euphores) (Quit: Leaving.) |
| 04:58:15 | → | merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl) |
| 05:01:06 | → | peterbecich joins (~Thunderbi@syn-047-229-123-186.res.spectrum.com) |
| 05:02:41 | × | merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 248 seconds) |
| 05:07:25 | → | robobub joins (uid248673@id-248673.uxbridge.irccloud.com) |
| 05:13:40 | → | merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl) |
| 05:15:12 | → | euphores joins (~SASL_euph@user/euphores) |
| 05:17:41 | × | messewix quits (~jmc@user/messewix) (Quit: Konversation terminated!) |
| 05:18:02 | × | merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds) |
| 05:24:12 | → | kaskal joins (~kaskal@84-115-238-56.cable.dynamic.surfer.at) |
| 05:29:31 | → | merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl) |
| 05:33:51 | → | alfiee joins (~alfiee@user/alfiee) |
| 05:34:10 | × | merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds) |
| 05:37:53 | × | peterbecich quits (~Thunderbi@syn-047-229-123-186.res.spectrum.com) (Ping timeout: 248 seconds) |
| 05:38:12 | × | alfiee quits (~alfiee@user/alfiee) (Ping timeout: 252 seconds) |
| 05:39:48 | × | bitdex quits (~bitdex@gateway/tor-sasl/bitdex) (Ping timeout: 264 seconds) |
| 05:41:32 | → | bitdex joins (~bitdex@gateway/tor-sasl/bitdex) |
| 05:42:05 | → | peterbecich joins (~Thunderbi@syn-047-229-123-186.res.spectrum.com) |
| 05:44:52 | → | merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl) |
| 05:45:27 | × | kaskal quits (~kaskal@84-115-238-56.cable.dynamic.surfer.at) (Ping timeout: 244 seconds) |
| 05:47:04 | → | Unicorn_Princess joins (~Unicorn_P@user/Unicorn-Princess/x-3540542) |
| 05:49:19 | × | merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 260 seconds) |
| 06:00:16 | → | merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl) |
| 06:07:10 | × | merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds) |
| 06:16:44 | × | peterbecich quits (~Thunderbi@syn-047-229-123-186.res.spectrum.com) (Ping timeout: 260 seconds) |
| 06:18:19 | → | merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl) |
| 06:18:31 | → | takuan joins (~takuan@d8D86B601.access.telenet.be) |
| 06:19:35 | → | alfiee joins (~alfiee@user/alfiee) |
| 06:20:14 | → | jle` joins (~jle`@2603:8001:3b00:11:8847:ede:a8ef:d8cd) |
| 06:22:52 | × | merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 244 seconds) |
| 06:23:43 | × | alfiee quits (~alfiee@user/alfiee) (Ping timeout: 245 seconds) |
| 06:33:39 | → | fp joins (~Thunderbi@130.233.70.89) |
| 06:33:41 | → | merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl) |
| 06:38:13 | × | merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 248 seconds) |
| 06:40:21 | × | jle` quits (~jle`@2603:8001:3b00:11:8847:ede:a8ef:d8cd) (Ping timeout: 248 seconds) |
| 06:41:28 | → | jle` joins (~jle`@2603:8001:3b00:11:240e:f2a:571:e822) |
| 06:43:16 | → | tabaqui1 joins (~root@87.200.129.102) |
| 06:48:25 | × | jongkook90 quits (~jongkook9@user/jongkook90) (Remote host closed the connection) |
| 06:49:05 | → | merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl) |
| 06:49:47 | × | ensyde quits (~ensyde@2601:5c6:c200:6dc0::46e1) (Quit: WeeChat 4.5.1) |
| 06:54:19 | × | merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 265 seconds) |
| 06:59:15 | → | merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl) |
| 07:03:36 | × | merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 246 seconds) |
| 07:05:19 | → | alfiee joins (~alfiee@user/alfiee) |
| 07:09:08 | × | j1n37- quits (~j1n37@user/j1n37) (Ping timeout: 252 seconds) |
| 07:09:08 | × | Lord_of_Life quits (~Lord@user/lord-of-life/x-2819915) (Ping timeout: 245 seconds) |
| 07:09:33 | × | alfiee quits (~alfiee@user/alfiee) (Ping timeout: 245 seconds) |
| 07:09:59 | → | Lord_of_Life joins (~Lord@user/lord-of-life/x-2819915) |
| 07:12:28 | → | j1n37 joins (~j1n37@user/j1n37) |
| 07:14:38 | → | merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl) |
| 07:15:16 | → | tromp joins (~textual@2a02:a210:cba:8500:b949:287e:6bbd:873b) |
| 07:18:07 | → | ash3en joins (~Thunderbi@2a03:7846:b6eb:101:93ac:a90a:da67:f207) |
| 07:19:42 | × | merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 276 seconds) |
| 07:21:42 | × | weary-traveler quits (~user@user/user363627) (Remote host closed the connection) |
| 07:27:25 | → | misterfish joins (~misterfis@84.53.85.146) |
| 07:29:06 | × | zungi quits (~tory@user/andrewchawk) (Remote host closed the connection) |
| 07:29:36 | → | zungi joins (~tory@user/andrewchawk) |
| 07:30:02 | → | merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl) |
| 07:31:29 | → | machinedgod joins (~machinedg@d108-173-18-100.abhsia.telus.net) |
| 07:34:41 | × | GdeVolpiano quits (~GdeVolpia@user/GdeVolpiano) (Ping timeout: 244 seconds) |
| 07:34:42 | × | merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 248 seconds) |
| 07:39:52 | → | vanishingideal joins (~vanishing@user/vanishingideal) |
| 07:41:33 | → | GdeVolpiano joins (~GdeVolpia@user/GdeVolpiano) |
| 07:45:24 | → | merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl) |
| 07:45:50 | × | euleritian quits (~euleritia@ip4d17fae8.dynamic.kabel-deutschland.de) (Remote host closed the connection) |
| 07:49:49 | × | jle` quits (~jle`@2603:8001:3b00:11:240e:f2a:571:e822) (Ping timeout: 252 seconds) |
| 07:51:24 | → | alfiee joins (~alfiee@user/alfiee) |
| 07:51:48 | → | jle` joins (~jle`@2603:8001:3b00:11:8ed8:2d9f:d44c:86d1) |
| 07:52:10 | → | euleritian joins (~euleritia@ip4d17fae8.dynamic.kabel-deutschland.de) |
| 07:52:15 | × | merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 244 seconds) |
| 07:52:40 | × | jle` quits (~jle`@2603:8001:3b00:11:8ed8:2d9f:d44c:86d1) (Client Quit) |
| 07:52:51 | × | ft quits (~ft@p3e9bc68d.dip0.t-ipconnect.de) (Quit: leaving) |
| 07:53:03 | → | jle` joins (~jle`@2603:8001:3b00:11:8ed8:2d9f:d44c:86d1) |
| 07:53:42 | → | alp joins (~alp@2001:861:8ca0:4940:de90:3201:9e0e:e126) |
| 07:55:39 | × | alfiee quits (~alfiee@user/alfiee) (Ping timeout: 244 seconds) |
| 07:58:13 | × | jle` quits (~jle`@2603:8001:3b00:11:8ed8:2d9f:d44c:86d1) (Ping timeout: 248 seconds) |
| 07:59:51 | → | sord937 joins (~sord937@gateway/tor-sasl/sord937) |
| 08:00:01 | × | caconym quits (~caconym@user/caconym) (Quit: bye) |
| 08:01:02 | → | caconym joins (~caconym@user/caconym) |
| 08:14:33 | × | ash3en quits (~Thunderbi@2a03:7846:b6eb:101:93ac:a90a:da67:f207) (Ping timeout: 245 seconds) |
| 08:14:54 | → | ash3en joins (~Thunderbi@146.70.124.222) |
| 08:28:34 | → | florida joins (~florida@2a02:ab88:7200:6a00:762b:62ff:fe83:1a1b) |
| 08:30:16 | × | Sgeo_ quits (~Sgeo@user/sgeo) (Read error: Connection reset by peer) |
| 08:30:41 | → | acidjnk_new joins (~acidjnk@p200300d6e7283f8044b147bcd5cee5e7.dip0.t-ipconnect.de) |
| 08:33:27 | × | ash3en quits (~Thunderbi@146.70.124.222) (Ping timeout: 252 seconds) |
| 08:34:05 | <tomsmeding> | @tell Square it seems the `Type [Name]` has moved into the `Type`: instead of `DataInstD _ n [t1,t2]` write `DataInstD _ Nothing (n `AppT` t1 `AppT` t2)` |
| 08:34:05 | <lambdabot> | Consider it noted. |
| 08:34:38 | <tomsmeding> | @tell Square trick: you can evaluate quotes in ghci and see what AST they produce, e.g. [d| data instance T [x] = A x | B (T x) |] |
| 08:34:38 | <lambdabot> | Consider it noted. |
| 08:36:44 | → | aforemny_ joins (~aforemny@2001:9e8:6cc7:1800:f602:cc4c:87fe:731d) |
| 08:37:08 | × | aforemny quits (~aforemny@i59F4C45F.versanet.de) (Ping timeout: 252 seconds) |
| 08:39:14 | → | CiaoSen joins (~Jura@2a02:8071:64e1:7180:4e50:ddff:fe9b:8922) |
| 08:42:01 | → | merijn joins (~merijn@77.242.116.146) |
| 08:43:43 | × | tromp quits (~textual@2a02:a210:cba:8500:b949:287e:6bbd:873b) (Quit: My iMac has gone to sleep. ZZZzzz…) |
| 08:43:48 | → | alfiee joins (~alfiee@user/alfiee) |
| 08:44:01 | → | laxmik joins (~laxmik@ip-109-40-48-158.web.vodafone.de) |
| 08:44:35 | × | petrichor quits (~znc-user@user/petrichor) (Quit: ZNC 1.8.2 - https://znc.in) |
| 08:44:50 | × | laxmik quits (~laxmik@ip-109-40-48-158.web.vodafone.de) (Client Quit) |
| 08:45:51 | → | petrichor joins (~znc-user@user/petrichor) |
| 08:48:24 | × | alfiee quits (~alfiee@user/alfiee) (Ping timeout: 260 seconds) |
| 08:51:24 | <dminuoso> | Hah, I had exactly the same stuff written into the input buffer, but I believed that this @tell thing surely did not survive the freenode libera crisis. :-) |
| 08:55:14 | <tomsmeding> | lambdabot transcends worlds! |
| 09:02:26 | → | LainExperiments joins (~LainExper@user/LainExperiments) |
| 09:06:31 | → | __monty__ joins (~toonn@user/toonn) |
| 09:07:10 | → | LainExperiments5 joins (~LainExper@user/LainExperiments) |
| 09:07:32 | → | LainExperiments6 joins (~LainExper@user/LainExperiments) |
| 09:08:03 | × | LainExperiments6 quits (~LainExper@user/LainExperiments) (Client Quit) |
| 09:09:10 | → | LainExperiments8 joins (~LainExper@user/LainExperiments) |
| 09:09:36 | × | LainExperiments8 quits (~LainExper@user/LainExperiments) (Write error: Broken pipe) |
| 09:10:40 | × | LainExperiments quits (~LainExper@user/LainExperiments) (Ping timeout: 240 seconds) |
| 09:11:09 | → | chele joins (~chele@user/chele) |
| 09:17:47 | <tomsmeding> | How are the components of a GHC version called? E.g. for 9.12.1, how do I call the "9", the "12" and the "1"? |
| 09:18:39 | <tomsmeding> | the GHC user guide ( https://downloads.haskell.org/ghc/latest/docs/users_guide/intro.html#ghc-version-numbering-policy ) seems to call the "1" the "patchlevel number", and uses the word "major release" for any abstract version x.y.z |
| 09:19:04 | <tomsmeding> | the HLS GHC version support page ( https://haskell-language-server.readthedocs.io/en/latest/support/ghc-version-support.html ) seems to use "minor" for "1" and "major" for "9.12", but it's a little bit unclear |
| 09:20:32 | <tomsmeding> | Stackage seems to use the same terminology as HLS ( https://github.com/commercialhaskell/stackage#frequently-asked-questions ) |
| 09:20:42 | <tomsmeding> | (but it's not specified, just implied) |
| 09:22:46 | × | GdeVolpiano quits (~GdeVolpia@user/GdeVolpiano) (Quit: WeeChat 4.4.3) |
| 09:24:20 | → | GdeVolpiano joins (~GdeVolpia@user/GdeVolpiano) |
| 09:25:30 | <tomsmeding> | ah, and the GHC wiki calls any N.M.1 a major release, and any N.M.{2,3,...} a minor release! https://gitlab.haskell.org/ghc/ghc/-/wikis/GHC-status#1-release-practices |
| 09:26:19 | × | bionade24 quits (~quassel@2a03:4000:33:45b::1) (Read error: Connection reset by peer) |
| 09:26:40 | → | bionade24 joins (~quassel@2a03:4000:33:45b::1) |
| 09:26:52 | → | Smiles joins (uid551636@id-551636.lymington.irccloud.com) |
| 09:29:13 | → | alfiee joins (~alfiee@user/alfiee) |
| 09:29:23 | × | merijn quits (~merijn@77.242.116.146) (Ping timeout: 244 seconds) |
| 09:29:53 | × | rvalue quits (~rvalue@user/rvalue) (Ping timeout: 248 seconds) |
| 09:31:10 | × | LainExperiments5 quits (~LainExper@user/LainExperiments) (Ping timeout: 240 seconds) |
| 09:32:12 | → | LainExperiments joins (~LainExper@user/LainExperiments) |
| 09:33:18 | × | alfiee quits (~alfiee@user/alfiee) (Ping timeout: 244 seconds) |
| 09:34:35 | × | tzh quits (~tzh@c-76-115-131-146.hsd1.or.comcast.net) (Quit: zzz) |
| 09:35:30 | → | rvalue joins (~rvalue@user/rvalue) |
| 09:35:34 | → | merijn joins (~merijn@77.242.116.146) |
| 09:35:35 | <cheater> | what do you call a pair of functions in mathematics f, g, f: X -> Y and g: Y -> X such that \A x \in X \E f(x) and \A y \in Y \E g(y)? |
| 09:36:04 | <tomsmeding> | what do you mean with "\E f(x)"? |
| 09:36:59 | → | lxsameer joins (~lxsameer@Serene/lxsameer) |
| 09:37:13 | <tomsmeding> | perhaps you meant "\A x \in X \E y (f(x) = y)"? |
| 09:37:22 | <tomsmeding> | or something |
| 09:39:43 | <Leary> | tomsmeding: In line with HLS: 9.12 ~ major (version (numbers)); 1 ~ minor (version (number)). At least that's the language I would use; I doubt there's an official decree. |
| 09:40:25 | <tomsmeding> | Leary: Well, then the GHC user guide disagrees, and the GHC wiki contests the nuance. :P |
| 09:40:32 | × | merijn quits (~merijn@77.242.116.146) (Ping timeout: 244 seconds) |
| 09:41:16 | <tomsmeding> | though actually the GHC wiki terminology is rather close to this |
| 09:41:56 | <cheater> | tomsmeding: yes. that's a shorthand. |
| 09:42:07 | <Leary> | Multiple terminologies can coexist. I also don't consider the language around /releases/ to conflict with the language for the version components. |
| 09:42:32 | <tomsmeding> | cheater: so then that first formula says that f is total? I.e. it returns a result for every x? |
| 09:42:37 | <cheater> | yes |
| 09:42:40 | → | swamp_ joins (~zmt00@user/zmt00) |
| 09:42:55 | <cheater> | a pair of total functions between two sets going in opposite directions |
| 09:42:56 | <tomsmeding> | I don't see any connection between f and g here |
| 09:43:04 | <tomsmeding> | those are just a pair of functions |
| 09:43:10 | <tomsmeding> | functions are total by default in mathematics |
| 09:43:31 | <tomsmeding> | it's the concept of a "partial function" that needs explicit note |
| 09:43:38 | → | kaskal joins (~kaskal@84-115-238-111.cable.dynamic.surfer.at) |
| 09:43:42 | <cheater> | they are total on their domains, but their domains don't have to line up like they do in my hypothesis |
| 09:43:42 | <tomsmeding> | (and that's usually modelled as a total function to Y + 1) |
| 09:44:02 | <tomsmeding> | Leary: That's fair |
| 09:44:34 | <cheater> | f and g are connected by the property i listed above: they are total on sets that contain each other's codomains |
| 09:45:02 | <tomsmeding> | cheater: if the functions have some equation relating them, then there may be appropriate terminology, but without any equation relating them, I don't think there's a word for this |
| 09:45:44 | <cheater> | the only property is that if you start in one set, you can infinitely go between the two sets using f and g. possibly ending at some limit element or not. |
| 09:45:48 | × | zmt01 quits (~zmt00@user/zmt00) (Ping timeout: 252 seconds) |
| 09:45:51 | <tomsmeding> | if f and g are continuous and bijective, then they are homeomorphisms, for example |
| 09:45:55 | <cheater> | i think that's interesting enough. |
| 09:46:18 | <cheater> | no, they have no such property as stated |
| 09:47:02 | → | tromp joins (~textual@2a02:a210:cba:8500:b949:287e:6bbd:873b) |
| 09:48:39 | <cheater> | if no such thing is described then i shall coin that as a speculative function pair (or tuple for a more complex graph) |
| 09:49:13 | <tomsmeding> | you can call it a "back-and-forth" |
| 09:51:04 | × | xff0x quits (~xff0x@fsb6a9491c.tkyc517.ap.nuro.jp) (Ping timeout: 272 seconds) |
| 09:51:20 | → | merijn joins (~merijn@77.242.116.146) |
| 09:52:11 | <cheater> | that sounds like something out of control theory. |
| 09:54:20 | <[exa]> | cheater: you can just say that compositions of f and g are total |
| 09:54:37 | <cheater> | i don't like puzzle definitions |
| 09:54:41 | <tomsmeding> | that's not quite the same statement, is it? |
| 09:55:40 | <[exa]> | the totality of the composition implies exactly the domain-is-a-superset property that was requested, and I just run it in both directions |
| 09:55:55 | <[exa]> | so I'd say it's the same |
| 09:55:59 | <tomsmeding> | depends on what compositions you mean when you say "compositions of f and g" |
| 09:56:17 | <tomsmeding> | if it's just "f . g", then it's weaker; if you also include "f . f", then it's stronger |
| 09:57:10 | <[exa]> | f.f doesn't type |
| 09:57:24 | <tomsmeding> | but if you already have the types of f and g, there's nothing more to specify! |
| 09:57:26 | <[exa]> | ah well okay in math that could cause issues, I see |
| 09:58:01 | <[exa]> | anyway yeah, I'd say the original definiton would need a bit more of a spirit to it to actually spawn a useful name |
| 09:59:04 | <Leary> | I'm still not sure what the original statement is supposed to be. f and g are partial functions with opposite co/domains and the property that each is total on the other's range? |
| 09:59:08 | <tomsmeding> | https://ncatlab.org/nlab/show/concept+with+an+attitude |
| 10:00:22 | × | bilegeek quits (~bilegeek@2600:1008:b06e:701b:8c92:bcff:3789:c22c) (Quit: Leaving) |
| 10:01:12 | × | acidjnk_new quits (~acidjnk@p200300d6e7283f8044b147bcd5cee5e7.dip0.t-ipconnect.de) (Ping timeout: 272 seconds) |
| 10:02:38 | <[exa]> | oh that's a nice site. |
| 10:04:00 | × | acidsys quits (~crameleon@openSUSE/member/crameleon) (Ping timeout: 244 seconds) |
| 10:04:44 | <cheater> | you don't know about ncatlab? |
| 10:04:59 | <cheater> | anyways i think the idea of being able to bounce back and forth an infinite amount of times is pretty interesting |
| 10:05:44 | <cheater> | it can easily create congruences, for example |
| 10:05:47 | <cheater> | and a topology |
| 10:06:11 | <cheater> | and can be continuated |
| 10:06:18 | <cheater> | even smoothly so |
| 10:09:10 | <tomsmeding> | I'd personally expect that as soon as that bouncing has any kind of _property_ (it converges, or you end up where you started, ...) then it _does_ have a name |
| 10:09:54 | <ames> | just don't listen to nlab when it comes to type theory |
| 10:10:29 | × | ski quits (~ski@remote11.chalmers.se) (Ping timeout: 248 seconds) |
| 10:10:40 | <ames> | it ranges from subtly incorrect and extra verbose to complete and utter bullshit |
| 10:12:40 | → | acidjnk_new joins (~acidjnk@p200300d6e7283f8044b147bcd5cee5e7.dip0.t-ipconnect.de) |
| 10:14:06 | → | ski joins (~ski@remote11.chalmers.se) |
| 10:14:57 | → | alfiee joins (~alfiee@user/alfiee) |
| 10:19:46 | × | alfiee quits (~alfiee@user/alfiee) (Ping timeout: 268 seconds) |
| 10:20:24 | → | acidsys joins (~crameleon@openSUSE/member/crameleon) |
| 10:23:28 | → | hattckory joins (~hattckory@149.102.242.103) |
| 10:36:54 | × | merijn quits (~merijn@77.242.116.146) (Ping timeout: 260 seconds) |
| 10:39:03 | <ncf> | cheater: it's just a pair of functions. all functions are total unless stated otherwise, in mathematics |
| 10:40:09 | → | merijn joins (~merijn@77.242.116.146) |
| 10:48:10 | → | xff0x joins (~xff0x@2405:6580:b080:900:17f4:b7d4:84ba:3a30) |
| 10:50:23 | × | acidjnk_new quits (~acidjnk@p200300d6e7283f8044b147bcd5cee5e7.dip0.t-ipconnect.de) (Ping timeout: 245 seconds) |
| 10:57:04 | <tomsmeding> | @tell Athas You may get better performance with 'ad' if you use Numeric.AD.Double _and_ enable the +ffi flag |
| 10:57:04 | <lambdabot> | Consider it noted. |
| 10:57:36 | <Athas> | tomsmeding: I do use Numeric.AD.Double, but what does +ffi do? |
| 10:57:52 | <tomsmeding> | Athas: it switches to taping in C, instead of in haskell |
| 10:58:40 | <Athas> | Well, that ought to make a difference. Now to see if I remember how to set cabal flags. |
| 10:59:21 | <tomsmeding> | `constraints: ad +ffi` in cabal.project |
| 10:59:40 | <tomsmeding> | I wonder why this flag is not enabled by default |
| 11:00:02 | <Athas> | Flags are the worst part of the Hackage ecosystem. |
| 11:00:25 | <Athas> | Well, let's see. |
| 11:01:02 | → | alfiee joins (~alfiee@user/alfiee) |
| 11:02:07 | → | LainExperiments2 joins (~LainExper@user/LainExperiments) |
| 11:02:56 | → | LainExperiments4 joins (~LainExper@user/LainExperiments) |
| 11:03:28 | → | Everything joins (~Everythin@46.211.65.235) |
| 11:04:40 | × | LainExperiments quits (~LainExper@user/LainExperiments) (Ping timeout: 240 seconds) |
| 11:06:01 | × | alfiee quits (~alfiee@user/alfiee) (Ping timeout: 268 seconds) |
| 11:08:40 | × | LainExperiments2 quits (~LainExper@user/LainExperiments) (Ping timeout: 240 seconds) |
| 11:12:53 | → | Digitteknohippie joins (~user@user/digit) |
| 11:15:23 | × | Digit quits (~user@user/digit) (Ping timeout: 245 seconds) |
| 11:20:17 | × | merijn quits (~merijn@77.242.116.146) (Ping timeout: 252 seconds) |
| 11:20:18 | → | LainExperiments joins (~LainExper@user/LainExperiments) |
| 11:23:10 | × | LainExperiments4 quits (~LainExper@user/LainExperiments) (Ping timeout: 240 seconds) |
| 11:27:28 | × | xff0x quits (~xff0x@2405:6580:b080:900:17f4:b7d4:84ba:3a30) (Ping timeout: 245 seconds) |
| 11:31:01 | × | Everything quits (~Everythin@46.211.65.235) (Ping timeout: 248 seconds) |
| 11:33:00 | → | merijn joins (~merijn@77.242.116.146) |
| 11:33:48 | → | plitter joins (~plitter@user/plitter) |
| 11:41:24 | → | LainExperiments3 joins (~LainExper@user/LainExperiments) |
| 11:43:10 | × | merijn quits (~merijn@77.242.116.146) (Ping timeout: 272 seconds) |
| 11:44:20 | → | LainExperiments2 joins (~LainExper@user/LainExperiments) |
| 11:44:40 | × | LainExperiments quits (~LainExper@user/LainExperiments) (Ping timeout: 240 seconds) |
| 11:46:27 | <Athas> | tomsmeding: I don't see any difference, but perhaps I am holding it wrong. |
| 11:46:39 | → | LainExperiments joins (~LainExper@user/LainExperiments) |
| 11:48:28 | → | alfiee joins (~alfiee@user/alfiee) |
| 11:49:40 | × | LainExperiments3 quits (~LainExper@user/LainExperiments) (Ping timeout: 240 seconds) |
| 11:50:21 | <tomsmeding> | Athas: if you `nm` your executable, does it reference `tape_backPropagate`? |
| 11:50:53 | <tomsmeding> | that distinguishes between an ad +ffi and an ad -ffi build for me |
| 11:51:19 | <Athas> | It does not. |
| 11:51:42 | <Athas> | I assume cabal's logic for recompiling dependencies on flag changes is sound, right? |
| 11:51:50 | <tomsmeding> | it worked for me! |
| 11:52:10 | × | LainExperiments2 quits (~LainExper@user/LainExperiments) (Ping timeout: 240 seconds) |
| 11:52:29 | <Athas> | And 'constraints: ad +ffi' in my cabal.project is enough? |
| 11:52:30 | × | alfiee quits (~alfiee@user/alfiee) (Ping timeout: 244 seconds) |
| 11:53:45 | <tomsmeding> | well, I put a newline and an indent after the `:`, but otherwise, yes, that's exactly what I did |
| 11:53:53 | <Athas> | Oh, this is interesting. I don't see tape_backPropagate when I use Numeric.AD.Double in my kmeans implementation, but I do see it when I use it for the dummy 'hello' benchmark. |
| 11:54:33 | <tomsmeding> | Athas: aren't you doing reverse-then-forward in kmeans? i.e. your reverse mode is not actually on Doubles, but on dual numbers? |
| 11:54:36 | × | Googulator78 quits (~Googulato@2a01-036d-0106-0c81-ad7c-ac56-196b-c9a2.pool6.digikabel.hu) (Quit: Client closed) |
| 11:54:44 | → | merijn joins (~merijn@77.242.116.146) |
| 11:54:51 | <Athas> | tomsmeding: yes, but I'm just using a single exported function from Numeric.AD.Double. |
| 11:54:58 | → | Googulator78 joins (~Googulato@2a01-036d-0106-0c81-ad7c-ac56-196b-c9a2.pool6.digikabel.hu) |
| 11:54:58 | <tomsmeding> | the whole point of Numeric.AD.Double is that it optimises the `Reverse s Double` case |
| 11:55:02 | <Athas> | But now I have an interesting result. Do you remember I had a version that "ought" to be faster, but wasn't? |
| 11:55:13 | <tomsmeding> | something something hessian jacobian product? |
| 11:55:14 | <Athas> | When I use that version, I do see significant speedup with +ffi. |
| 11:55:28 | <tomsmeding> | interesting! |
| 11:55:42 | <tomsmeding> | What function from Numeric.AD.Double aer you using in the version that doesn't get vaster? |
| 11:55:46 | <tomsmeding> | *faster |
| 11:55:49 | <Athas> | The commented-out code seems to perform quite OK now: https://github.com/gradbench/gradbench/blob/main/tools/haskell/src/GradBench/KMeans.hs#L78-L95 |
| 11:55:56 | <Athas> | We'll see if the memory issue has also been solved. |
| 11:56:26 | <tomsmeding> | oh I guess `hessian'` |
| 11:57:10 | <tomsmeding> | the FFI code is specifically for ReverseDouble; I guess `Reverse s SparseDouble` only benefits from being specialised to Double in Haskell-land, not fro mthe FFI code |
| 11:57:36 | <tomsmeding> | so this seems consistent, to me |
| 11:57:49 | <Athas> | Memory usage isn't promising. |
| 11:57:54 | <tomsmeding> | except that hessianProduct also doesn't use ReverseDouble! |
| 11:58:06 | <Athas> | Yeah, it OOM'ed again. |
| 11:58:16 | <Athas> | But it's certainly a lot faster. |
| 11:58:34 | <Athas> | A little more than 2x. |
| 11:59:57 | <Athas> | If gradbench handled the OOM a little more gracefully, then I'd prefer this solution. It looks nice. |
| 12:05:49 | <Hecate> | yo |
| 12:05:57 | <Hecate> | can hlint apply rules to type signatures? |
| 12:05:58 | <Hecate> | https://www.reddit.com/r/haskellquestions/comments/1iylzer/is_it_possible_to_make_hlint_rules_for_type/? |
| 12:08:20 | → | L29Ah joins (~L29Ah@wikipedia/L29Ah) |
| 12:08:36 | → | jespada joins (~jespada@2800:a4:2358:c700:f051:395a:5b5:8278) |
| 12:11:12 | × | zungi quits (~tory@user/andrewchawk) (Remote host closed the connection) |
| 12:11:38 | → | zungi joins (~tory@user/andrewchawk) |
| 12:13:21 | ← | L29Ah parts (~L29Ah@wikipedia/L29Ah) () |
| 12:15:53 | → | ash3en joins (~Thunderbi@146.70.124.222) |
| 12:17:03 | → | L29Ah joins (~L29Ah@wikipedia/L29Ah) |
| 12:17:04 | → | xff0x joins (~xff0x@2405:6580:b080:900:3aeb:7d91:ba3:21b4) |
| 12:26:58 | ← | L29Ah parts (~L29Ah@wikipedia/L29Ah) () |
| 12:27:20 | → | L29Ah joins (~L29Ah@wikipedia/L29Ah) |
| 12:27:44 | × | LainExperiments quits (~LainExper@user/LainExperiments) (Quit: Client closed) |
| 12:28:32 | → | LainExperiments joins (~LainExper@user/LainExperiments) |
| 12:30:40 | ← | L29Ah parts (~L29Ah@wikipedia/L29Ah) () |
| 12:30:56 | → | L29Ah joins (~L29Ah@wikipedia/L29Ah) |
| 12:31:42 | → | fp1 joins (~Thunderbi@2001:708:150:10::1d80) |
| 12:32:09 | × | fp quits (~Thunderbi@130.233.70.89) (Quit: fp) |
| 12:34:08 | × | mange quits (~user@user/mange) (Quit: Zzz...) |
| 12:34:12 | → | alfiee joins (~alfiee@user/alfiee) |
| 12:36:22 | × | fp1 quits (~Thunderbi@2001:708:150:10::1d80) (Ping timeout: 272 seconds) |
| 12:36:42 | → | fp joins (~Thunderbi@2001:708:20:1406::1370) |
| 12:38:41 | × | alfiee quits (~alfiee@user/alfiee) (Ping timeout: 248 seconds) |
| 12:42:25 | × | CiaoSen quits (~Jura@2a02:8071:64e1:7180:4e50:ddff:fe9b:8922) (Ping timeout: 248 seconds) |
| 12:42:44 | Digitteknohippie | is now known as Digit |
| 12:43:50 | × | florida quits (~florida@2a02:ab88:7200:6a00:762b:62ff:fe83:1a1b) (Remote host closed the connection) |
| 12:44:35 | → | SlackCoder joins (~SlackCode@64-94-63-8.ip.weststar.net.ky) |
| 12:46:50 | × | ash3en quits (~Thunderbi@146.70.124.222) (Quit: ash3en) |
| 12:53:55 | → | acidjnk_new joins (~acidjnk@p200300d6e7283f800515f6261b26a150.dip0.t-ipconnect.de) |
| 13:05:02 | × | dsrt^ quits (~dsrt@108.192.66.114) (Ping timeout: 268 seconds) |
| 13:05:09 | × | LainExperiments quits (~LainExper@user/LainExperiments) (Quit: Client closed) |
| 13:05:39 | × | off^ quits (~off@108.192.66.114) (Ping timeout: 260 seconds) |
| 13:06:11 | → | lortabac joins (~lortabac@2a01:e0a:541:b8f0:55ab:e185:7f81:54a4) |
| 13:08:10 | → | dsrt^ joins (~dsrt@108.192.66.114) |
| 13:08:30 | → | off^ joins (~off@108.192.66.114) |
| 13:09:50 | → | ash3en joins (~Thunderbi@146.70.124.222) |
| 13:10:18 | × | misterfish quits (~misterfis@84.53.85.146) (Ping timeout: 244 seconds) |
| 13:10:31 | × | ash3en quits (~Thunderbi@146.70.124.222) (Client Quit) |
| 13:17:33 | → | LainExperiments joins (~LainExper@user/LainExperiments) |
| 13:19:56 | → | alfiee joins (~alfiee@user/alfiee) |
| 13:23:24 | → | florida joins (~florida@2a02:ab88:7200:6a00:762b:62ff:fe83:1a1b) |
| 13:23:44 | × | florida quits (~florida@2a02:ab88:7200:6a00:762b:62ff:fe83:1a1b) (Remote host closed the connection) |
| 13:24:14 | × | alfiee quits (~alfiee@user/alfiee) (Ping timeout: 252 seconds) |
| 13:37:47 | × | acidjnk_new quits (~acidjnk@p200300d6e7283f800515f6261b26a150.dip0.t-ipconnect.de) (Ping timeout: 252 seconds) |
| 13:40:24 | × | zungi quits (~tory@user/andrewchawk) (Ping timeout: 264 seconds) |
| 13:42:52 | × | ystael quits (~ystael@user/ystael) (Ping timeout: 272 seconds) |
| 13:45:06 | → | zungi joins (~tory@user/andrewchawk) |
| 13:54:19 | → | weary-traveler joins (~user@user/user363627) |
| 14:02:45 | → | CiaoSen joins (~Jura@2a02:8071:64e1:7180:4e50:ddff:fe9b:8922) |
| 14:06:00 | → | alfiee joins (~alfiee@user/alfiee) |
| 14:09:02 | × | LainExperiments quits (~LainExper@user/LainExperiments) (Quit: Client closed) |
| 14:10:25 | × | alfiee quits (~alfiee@user/alfiee) (Ping timeout: 252 seconds) |
| 14:15:08 | → | LainExperiments joins (~LainExper@user/LainExperiments) |
| 14:16:49 | → | LainExperiments9 joins (~LainExper@user/LainExperiments) |
| 14:21:40 | × | LainExperiments quits (~LainExper@user/LainExperiments) (Ping timeout: 240 seconds) |
| 14:32:10 | × | LainExperiments9 quits (~LainExper@user/LainExperiments) (Ping timeout: 240 seconds) |
| 14:33:53 | × | Miroboru quits (~myrvoll@178-164-114.82.3p.ntebredband.no) (Quit: Lost terminal) |
| 14:34:05 | × | L29Ah quits (~L29Ah@wikipedia/L29Ah) (Read error: Connection reset by peer) |
| 14:35:55 | → | LainExperiments joins (~LainExper@user/LainExperiments) |
| 14:41:28 | × | pavonia quits (~user@user/siracusa) (Quit: Bye!) |
| 14:41:51 | × | alp quits (~alp@2001:861:8ca0:4940:de90:3201:9e0e:e126) (Ping timeout: 268 seconds) |
| 14:51:26 | → | ystael joins (~ystael@user/ystael) |
| 14:55:04 | → | alfiee joins (~alfiee@user/alfiee) |
| 14:55:23 | × | SlackCoder quits (~SlackCode@64-94-63-8.ip.weststar.net.ky) (Quit: Leaving) |
| 14:59:08 | × | alfiee quits (~alfiee@user/alfiee) (Ping timeout: 245 seconds) |
| 15:19:10 | × | vanishingideal quits (~vanishing@user/vanishingideal) (Ping timeout: 244 seconds) |
| 15:19:46 | → | L29Ah joins (~L29Ah@wikipedia/L29Ah) |
| 15:21:09 | → | vanishingideal joins (~vanishing@user/vanishingideal) |
| 15:21:10 | × | LainExperiments quits (~LainExper@user/LainExperiments) (Ping timeout: 240 seconds) |
| 15:21:19 | → | eL_Bart0 joins (eL_Bart0@dietunichtguten.org) |
| 15:25:57 | × | CiaoSen quits (~Jura@2a02:8071:64e1:7180:4e50:ddff:fe9b:8922) (Ping timeout: 252 seconds) |
| 15:27:53 | → | misterfish joins (~misterfis@84.53.85.146) |
| 15:36:37 | × | bitdex quits (~bitdex@gateway/tor-sasl/bitdex) (Quit: = "") |
| 15:38:32 | × | gmg quits (~user@user/gehmehgeh) (Remote host closed the connection) |
| 15:39:16 | → | gmg joins (~user@user/gehmehgeh) |
| 15:39:25 | → | littlecow96 joins (~littlecow@2a09:bac3:311:105::1a:d0) |
| 15:40:27 | × | littlecow96 quits (~littlecow@2a09:bac3:311:105::1a:d0) (Client Quit) |
| 15:40:33 | × | vanishingideal quits (~vanishing@user/vanishingideal) (Ping timeout: 248 seconds) |
| 15:40:44 | → | littlecoww joins (~littlecow@2a09:bac3:311:105::1a:d0) |
| 15:41:04 | → | Digitteknohippie joins (~user@user/digit) |
| 15:42:13 | × | Digit quits (~user@user/digit) (Ping timeout: 248 seconds) |
| 15:42:13 | → | vanishingideal joins (~vanishing@user/vanishingideal) |
| 15:43:08 | → | alfiee joins (~alfiee@user/alfiee) |
| 15:45:40 | → | ephilalethes joins (~noumenon@2001:d08:1a00:bc0:aa7e:eaff:fede:ff94) |
| 15:47:49 | × | alfiee quits (~alfiee@user/alfiee) (Ping timeout: 260 seconds) |
| 15:52:00 | → | acidjnk_new joins (~acidjnk@p200300d6e7283f80c89649a85ed7ab43.dip0.t-ipconnect.de) |
| 15:55:58 | × | littlecoww quits (~littlecow@2a09:bac3:311:105::1a:d0) (Quit: Client closed) |
| 16:08:23 | × | chele quits (~chele@user/chele) (Remote host closed the connection) |
| 16:27:36 | <ski> | cheater : "they are total on sets that contain each other's codomains" -- no. `Y' *is* the codomain of `f', and `X' *is* the codomain of `g'. doesn't matter whether every element of those sets are "hit" by the respective functions |
| 16:28:06 | <cheater> | huh? |
| 16:28:44 | <ski> | if you say `f : X -> Y', then `Y' is the codomain of `f' |
| 16:29:12 | × | lortabac quits (~lortabac@2a01:e0a:541:b8f0:55ab:e185:7f81:54a4) (Quit: WeeChat 4.5.1) |
| 16:29:38 | <ski> | so, claiming that `g : Y -> X' is total on a set that contains the codomain of `f' means that `g' is total on a set which contains `Y'. iow, `g' is just a total function, no need to complicate the phrasing |
| 16:30:33 | → | alfiee joins (~alfiee@user/alfiee) |
| 16:30:42 | × | acidjnk_new quits (~acidjnk@p200300d6e7283f80c89649a85ed7ab43.dip0.t-ipconnect.de) (Ping timeout: 272 seconds) |
| 16:31:07 | <ski> | but presumably you didn't mean it like that, and so you likely meant to say "range" or "image", instead of "codomain". the range of `f' (or the image of `f' (on `X')) is the subset of the codomain `Y', that is actually "hit" by `f', the subset of values that you can actually obtain as outputs |
| 16:31:39 | <cheater> | ok, yeah |
| 16:32:42 | × | jespada quits (~jespada@2800:a4:2358:c700:f051:395a:5b5:8278) (Ping timeout: 246 seconds) |
| 16:32:43 | <ski> | and then you meant to claim that the partial function `g : Y -> X' was total on this subset of `Y' (which can be written `Img(f)', or `f[X]', or `exists_f X') |
| 16:33:23 | tomsmeding | would prefer a symbol other than `->' for a partial function |
| 16:35:08 | × | alfiee quits (~alfiee@user/alfiee) (Ping timeout: 272 seconds) |
| 16:35:14 | → | acidjnk_new joins (~acidjnk@p200300d6e7283f8040a776c2da6f4573.dip0.t-ipconnect.de) |
| 16:35:41 | → | jespada joins (~jespada@2800:a4:230f:300:5891:d568:1db3:6726) |
| 16:37:20 | → | alp joins (~alp@2001:861:8ca0:4940:b08e:d43c:4f53:7730) |
| 16:40:11 | → | j1n37- joins (~j1n37@user/j1n37) |
| 16:40:48 | × | j1n37 quits (~j1n37@user/j1n37) (Ping timeout: 245 seconds) |
| 16:42:14 | → | Square joins (~Square@user/square) |
| 16:43:29 | → | Square2 joins (~Square4@user/square) |
| 16:43:57 | Digitteknohippie | is now known as Digit |
| 16:48:24 | → | florida joins (~florida@2a02:ab88:7200:6a00:762b:62ff:fe83:1a1b) |
| 16:54:46 | × | fp quits (~Thunderbi@2001:708:20:1406::1370) (Ping timeout: 272 seconds) |
| 16:56:37 | × | euphores quits (~SASL_euph@user/euphores) (Quit: Leaving.) |
| 17:01:33 | → | euphores joins (~SASL_euph@user/euphores) |
| 17:01:54 | × | merijn quits (~merijn@77.242.116.146) (Ping timeout: 260 seconds) |
| 17:05:04 | → | hgolden joins (~hgolden@2603:8000:9d00:3ed1:6ff3:8389:b901:6363) |
| 17:11:12 | × | ystael quits (~ystael@user/ystael) (Ping timeout: 246 seconds) |
| 17:16:51 | × | euleritian quits (~euleritia@ip4d17fae8.dynamic.kabel-deutschland.de) (Ping timeout: 265 seconds) |
| 17:17:28 | → | alfiee joins (~alfiee@user/alfiee) |
| 17:18:12 | × | zungi quits (~tory@user/andrewchawk) (Ping timeout: 264 seconds) |
| 17:19:54 | → | zungi joins (~tory@user/andrewchawk) |
| 17:20:16 | → | califax_ joins (~califax@user/califx) |
| 17:20:36 | × | califax quits (~califax@user/califx) (Ping timeout: 264 seconds) |
| 17:21:28 | califax_ | is now known as califax |
| 17:21:49 | × | alfiee quits (~alfiee@user/alfiee) (Ping timeout: 252 seconds) |
| 17:25:49 | → | econo_ joins (uid147250@id-147250.tinside.irccloud.com) |
| 17:28:43 | → | target_i joins (~target_i@user/target-i/x-6023099) |
| 17:37:31 | × | Katarushisu quits (~Katarushi@finc-20-b2-v4wan-169598-cust1799.vm7.cable.virginm.net) (Quit: The Lounge - https://thelounge.chat) |
| 17:38:22 | → | Katarushisu joins (~Katarushi@finc-20-b2-v4wan-169598-cust1799.vm7.cable.virginm.net) |
| 17:40:24 | × | florida quits (~florida@2a02:ab88:7200:6a00:762b:62ff:fe83:1a1b) (Quit: Leaving) |
| 17:40:33 | × | ephilalethes quits (~noumenon@2001:d08:1a00:bc0:aa7e:eaff:fede:ff94) (Quit: Leaving) |
| 17:46:12 | → | driib318 joins (~driib@vmi931078.contaboserver.net) |
| 17:47:19 | × | driib318 quits (~driib@vmi931078.contaboserver.net) (Client Quit) |
| 17:48:20 | × | zungi quits (~tory@user/andrewchawk) (Remote host closed the connection) |
| 17:48:57 | → | zungi joins (~tory@user/andrewchawk) |
| 17:52:24 | × | acidjnk_new quits (~acidjnk@p200300d6e7283f8040a776c2da6f4573.dip0.t-ipconnect.de) (Ping timeout: 272 seconds) |
| 17:53:00 | → | acidjnk_new joins (~acidjnk@p200300d6e7283f80fcc6edffa39079b3.dip0.t-ipconnect.de) |
| 17:57:46 | × | Square2 quits (~Square4@user/square) (Ping timeout: 252 seconds) |
| 17:59:06 | → | hseg joins (~gesh@46.120.20.40) |
| 18:01:02 | <hseg> | I'm working on https://github.com/simonmichael/hledger/issues/2332, and the folks at #linux tell me the correct fallback to a missing terminfo entry in my case is to explicitly call ioctl. Other than https://hackage.haskell.org/package/ioctl which seems pretty much abandoned, is there another package wrapping the ioctl system call? |
| 18:03:13 | → | alfiee joins (~alfiee@user/alfiee) |
| 18:04:51 | → | tzh joins (~tzh@c-76-115-131-146.hsd1.or.comcast.net) |
| 18:06:48 | → | peterbecich joins (~Thunderbi@syn-047-229-123-186.res.spectrum.com) |
| 18:07:23 | × | alfiee quits (~alfiee@user/alfiee) (Ping timeout: 244 seconds) |
| 18:07:55 | <haskellbridge> | <sm> Thanks for looking at that @hseg. I don't know the answer, but it would need to be installable on windows also to avoid complicating packaging. |
| 18:08:36 | <haskellbridge> | <sm> Are you considering something more fancy than just catching the setupTermFromEnv error ? |
| 18:09:15 | <hseg> | Was going to just catch and work with TERM=dumb, but was worrying that was standards-incorrect |
| 18:09:45 | <hseg> | People on #linux recommended using the TIOCGWINSZ ioctl as a fallback instead |
| 18:10:02 | <hseg> | https://hackage.haskell.org/package/terminal-size appears to be the most recent package supporting this, and it supports windows! |
| 18:10:14 | × | lxsameer quits (~lxsameer@Serene/lxsameer) (Ping timeout: 252 seconds) |
| 18:10:19 | <geekosaur> | ioctl is kind of a nightmare to work with, you really want to wrap the POSIX higher level routines — but the terminal width and height appear to not be POSIX |
| 18:10:42 | <EvanR> | tomsmeding, right arrow but it fades out from black ink to nothing as you go right |
| 18:12:06 | <EvanR> | right arrow with a hazard badge |
| 18:12:08 | <dolio> | Often it's an arrow with only the top point. |
| 18:12:22 | → | Everything joins (~Everythin@46-133-48-141.mobile.vf-ua.net) |
| 18:12:41 | <EvanR> | ⇀ |
| 18:12:42 | <tomsmeding> | Y 15-14> X |
| 18:12:50 | → | ljdarj joins (~Thunderbi@user/ljdarj) |
| 18:13:23 | <dolio> | ⇀ |
| 18:13:30 | <tomsmeding> | (for best effect, view on a dark terminal) |
| 18:13:43 | <EvanR> | a right arrow that forks, one way goes to the target type, the other way doesn't |
| 18:14:15 | <hseg> | geekosaur: Right -- if you look at the ticket I'm working on, this is a fallback for if the terminfo entry is absent |
| 18:14:41 | <geekosaur> | yes, I started from the ticket |
| 18:15:08 | <mauke> | terminfo size entries are kinda useless unless you're dealing with an actual terminal, which no one does |
| 18:15:38 | <geekosaur> | I was commenting on the recommendation to use `ioctl`; if you do that, you should FFI to it directly because a generalized ioctl binding is pretty much impossible (the third type depends on the value of the second parameter) |
| 18:16:24 | × | califax quits (~califax@user/califx) (Ping timeout: 264 seconds) |
| 18:16:45 | <hseg> | right -- the code I'm considering including FFIs to it and only exposes it already partially applied in its second parameter |
| 18:16:51 | <hseg> | https://github.com/biegunka/terminal-size/blob/master/src/System/Console/Terminal/Posix.hsc |
| 18:17:18 | <hseg> | AFAICT, it looks sensible |
| 18:17:59 | × | sord937 quits (~sord937@gateway/tor-sasl/sord937) (Quit: sord937) |
| 18:18:40 | <mauke> | yeah, needs capi if you don't want to write a C wrapper |
| 18:19:05 | <mauke> | oh hey, that's my alignment macro! I invented that |
| 18:19:15 | <hseg> | I see the package is used by darcs and idris, loos like a safe dependency |
| 18:19:32 | <hseg> | what does that alignment macro do? |
| 18:20:08 | <mauke> | computes the required alignment of a given type (by asking the C compiler) |
| 18:20:17 | <mauke> | nowadays it's built into hsc2hs, I believe |
| 18:20:51 | <hseg> | yeah, the #alignment macro, looking at the hsc2hs docs |
| 18:22:32 | <mauke> | the idea is to declare a struct with a char as its first member (which throws off the alignment of the second member) and then check how much padding the C compiler inserted before the second member |
| 18:22:32 | × | tv quits (~tv@user/tv) (Read error: Connection reset by peer) |
| 18:23:46 | <c_wraith> | I thought compilers were allowed to re-order members |
| 18:23:54 | <mauke> | nope |
| 18:24:37 | → | califax joins (~califax@user/califx) |
| 18:24:37 | <mauke> | C++ compilers are allowed to re-order segments separated by visibility markers, but that's it |
| 18:24:43 | <c_wraith> | ah. Silly language. Make no guarantees about their relative offsets, but require them to be in order. |
| 18:24:51 | <mauke> | (public:, private:, protected:) |
| 18:25:33 | <dolio> | They need to be in order because you're allowed to do a rudimentary sort of subtyping on structs, I think. |
| 18:25:44 | <mauke> | yes, the "common prefix" hack |
| 18:26:22 | × | peterbecich quits (~Thunderbi@syn-047-229-123-186.res.spectrum.com) (Ping timeout: 252 seconds) |
| 18:26:47 | <dolio> | I guess it's possible you could accomplish that while doing some reordering, but it'd be pretty complicated to pull off. |
| 18:28:47 | × | acidjnk_new quits (~acidjnk@p200300d6e7283f80fcc6edffa39079b3.dip0.t-ipconnect.de) (Ping timeout: 268 seconds) |
| 18:29:01 | × | Unicorn_Princess quits (~Unicorn_P@user/Unicorn-Princess/x-3540542) (Remote host closed the connection) |
| 18:35:30 | × | Everything quits (~Everythin@46-133-48-141.mobile.vf-ua.net) (Quit: leaving) |
| 18:37:28 | → | Everything joins (~Everythin@46-133-48-141.mobile.vf-ua.net) |
| 18:39:24 | × | L29Ah quits (~L29Ah@wikipedia/L29Ah) (Read error: Connection reset by peer) |
| 18:40:58 | → | L29Ah joins (~L29Ah@wikipedia/L29Ah) |
| 18:41:35 | × | fun-safe-math quits (~fun-safe-@2601:1c2:1b7f:801f:6422:3799:4fbd:4a99) (Quit: No Ping reply in 180 seconds.) |
| 18:42:23 | × | zungi quits (~tory@user/andrewchawk) (Remote host closed the connection) |
| 18:42:45 | → | zungi joins (~tory@user/andrewchawk) |
| 18:42:50 | → | fun-safe-math joins (~fun-safe-@2601:1c2:1b7f:801f:26d6:a094:aa3b:66cd) |
| 18:49:17 | → | alfiee joins (~alfiee@user/alfiee) |
| 18:50:58 | → | tv joins (~tv@user/tv) |
| 18:53:22 | × | alfiee quits (~alfiee@user/alfiee) (Ping timeout: 244 seconds) |
| 18:53:47 | → | lxsameer joins (~lxsameer@Serene/lxsameer) |
| 18:54:06 | × | jespada quits (~jespada@2800:a4:230f:300:5891:d568:1db3:6726) (Quit: My Mac has gone to sleep. ZZZzzz…) |
| 18:54:10 | × | haskellbridge quits (~hackager@syn-024-093-192-219.res.spectrum.com) (Read error: Connection reset by peer) |
| 18:54:57 | → | jespada joins (~jespada@2800:a4:230f:300:5891:d568:1db3:6726) |
| 18:56:56 | <tomsmeding> | dolio: surely you could use all possible prefixes of a struct? Then the ordering ends up fixed |
| 18:57:28 | <dolio> | I don't know. |
| 18:59:06 | → | haskellbridge joins (~hackager@syn-024-093-192-219.res.spectrum.com) |
| 18:59:06 | ChanServ | sets mode +v haskellbridge |
| 18:59:38 | <dolio> | Certainly if you don't do something else tricky, that's true. |
| 18:59:42 | × | ljdarj quits (~Thunderbi@user/ljdarj) (Ping timeout: 246 seconds) |
| 19:01:07 | <dolio> | I once read about an OCaml implementation using the statically available type information to calculate flat array representations of every 'object' type, even though you can use them as arbitrary subtypes. |
| 19:01:26 | <tomsmeding> | that would need to be a full-program transformation |
| 19:01:33 | <dolio> | Yeah. |
| 19:01:45 | <tomsmeding> | C compilers are conventionally very translation-unit-oriented :) |
| 19:01:49 | <dolio> | I didn't say it was easy. :þ |
| 19:01:53 | <tomsmeding> | though LTO exists |
| 19:02:01 | → | ljdarj joins (~Thunderbi@user/ljdarj) |
| 19:02:47 | → | euleritian joins (~euleritia@ip4d17fae8.dynamic.kabel-deutschland.de) |
| 19:03:03 | <tomsmeding> | if you can see all code, then you can indeed pull such tricks. But given that this is C, as soon as you pull in other (already-compiled) libraries and give them references to your structs _somehow_, or if you include some assembly code, or if you muck with pointers in the right way, I'd expect it gets very hard to change the encoding of structs |
| 19:03:30 | <tomsmeding> | it's expected that you can compile some code to a shared library with compiler X, then link that into some other C code also compiled with X, and have the structs be compatible |
| 19:03:53 | <tomsmeding> | so if the compiler reorders things, it'll have to do so deterministically and based only (I think?) on the struct definition itself |
| 19:04:17 | <tomsmeding> | and perhaps that other code in the shared library can use prefixes of _your_ structs! |
| 19:04:55 | <tomsmeding> | Maybe some of this is not possible in "standard C" and only in conventional C. |
| 19:05:27 | <dolio> | Well, yeah, I'm not exactly sure what all you can get away with within the standard. |
| 19:05:58 | <tomsmeding> | if things are as usual in C land, then probably very little |
| 19:06:10 | <tomsmeding> | and simultaneously more than you'd like. :P |
| 19:06:30 | <geekosaur> | there is also what is exposed in object files and include files, which is not all that the original compiler knows and in particular doesn't reveal reorderings very well |
| 19:06:53 | <geekosaur> | (GHC gets around this by carrying extra information in `.hi` files) |
| 19:07:16 | <tomsmeding> | (in fact it doesn't reveal reorderings _at all_. :P) |
| 19:09:13 | <geekosaur> | I think it can be inferred from pointers, presuming such exist |
| 19:09:27 | <geekosaur> | but that means the inker needs to be a lot smarter |
| 19:10:33 | <TMA> | C standard leaves many things unspecified. A conforming implementation must make the same struct that is used in different compilation units translate in a way that makes both compilation units able to access it. |
| 19:10:40 | <geekosaur> | in fact, there's a decent number of restrictions in Haskell (GHC or otherwise) which come from "we can't teach the linker how Haskell works" |
| 19:13:13 | <TMA> | It also needs to make two structs that share some prefix of the fields be compatible. (So struct A { int * p; char c; int i; double d; } and struct B { int * p; char c; int i; char * s; } need to share the memory locations od p, c and i;) |
| 19:13:54 | <tomsmeding> | by induction, that second requirement fixes the ordering completely |
| 19:14:34 | <TMA> | C standard does not prescribe the conforming implementation ("compiler") to be interoperable with any other compiler, or even with itself with a different set of flags/options. |
| 19:15:59 | × | Smiles quits (uid551636@id-551636.lymington.irccloud.com) (Quit: Connection closed for inactivity) |
| 19:17:06 | <monochrom> | I am too lazy to check the C standard. But I want to point out that there is one x86 ABI standard and one x64 ABI standard that C compilers targetting those platforms will comply to, and the two ABI standards are very specific about structs, function call arguments, etc., so that various C compilers, nay, various languages, can interoperate when they are on the same platform. |
| 19:17:39 | <tomsmeding> | those ABIs say something about _structs_? |
| 19:17:59 | <TMA> | for example a struct S { char c1; int i; char c2; } s; might be organized such that offsetof(struct S, c1) == 0, offsetof(struct S, i) == 4, offsetof(struct S, c2) == 1 |
| 19:18:19 | <TMA> | or it might be offsetof(struct S, c1) == 0, offsetof(struct S, i) == 4, offsetof(struct S, c2) == 8 |
| 19:18:41 | <tomsmeding> | oh fair |
| 19:19:06 | <TMA> | or even offsetof(struct S, c1) == 0, offsetof(struct S, i) == 1, offsetof(struct S, c2) == 5 |
| 19:19:44 | <TMA> | the requirement says only "be consistent when there are multiple compilation units" |
| 19:19:45 | → | Smiles joins (uid551636@id-551636.lymington.irccloud.com) |
| 19:21:41 | <TMA> | tomsmeding: some ABI prescribe layout of structs. others don't |
| 19:23:11 | <TMA> | monochrom: if only that was so straightforward. there are multiple ABI standards for x86 and x86_64 |
| 19:23:40 | <monochrom> | yikes oh well heh |
| 19:23:49 | <monochrom> | I guess there is an xkcd for that. |
| 19:24:05 | <TMA> | on linux they use a derivative of the Itanium ABI |
| 19:24:19 | <TMA> | on Windows Microsoft uses its own |
| 19:24:47 | <TMA> | clang and gcc use somewhat different ABI for C++ |
| 19:24:57 | <TMA> | and the list goes on and on and on |
| 19:26:24 | <EvanR> | dolio, the rudimentary subtyping with structs isn't actually guaranteed to work if all you have is a C standard |
| 19:26:35 | <EvanR> | it's a folk practice |
| 19:26:43 | <dolio> | No, that part is in there, I'm pretty sure. |
| 19:26:57 | <EvanR> | I was also pretty sure xD |
| 19:27:03 | × | ljdarj quits (~Thunderbi@user/ljdarj) (Ping timeout: 245 seconds) |
| 19:27:15 | <dolio> | I don't really feel like finding it, though. |
| 19:28:03 | <EvanR> | casting a pointer to an incompatible type is undefined behavior |
| 19:28:43 | <EvanR> | it might seem intuitive that structs which differ by being a prefix of another is compatible but its not |
| 19:29:33 | <monochrom> | Yeah I think I saw the Linux Itanium-based one. |
| 19:33:11 | → | Tuplanolla joins (~Tuplanoll@91-159-69-59.elisa-laajakaista.fi) |
| 19:35:41 | → | alfiee joins (~alfiee@user/alfiee) |
| 19:36:21 | → | sprotte24 joins (~sprotte24@p200300d16f39ea0090c1360b4b7260ad.dip0.t-ipconnect.de) |
| 19:37:21 | × | misterfish quits (~misterfis@84.53.85.146) (Ping timeout: 248 seconds) |
| 19:39:19 | → | misterfish joins (~misterfis@84.53.85.146) |
| 19:40:24 | × | alfiee quits (~alfiee@user/alfiee) (Ping timeout: 265 seconds) |
| 19:44:46 | <dolio> | I don't know if you can do it with pointers. But you can put all the structs with the same prefix in a union, and access the members of the prefix via any of the union disjuncts. |
| 19:45:37 | <dolio> | Normally if you access the portion of a union that wasn't used to build it, it's undefined behavior, but there's special dispensation for structs. |
| 19:47:29 | × | tccq quits (~user@user/tccq) (Remote host closed the connection) |
| 19:50:28 | <EvanR> | yes unions work |
| 19:51:46 | <EvanR> | I thought this was this "hope my struct defined the same way for the first 16 bytes" will work if pointer to it is casted, which is use in the sockets API |
| 19:52:29 | <dolio> | Yeah, I can't find that, so I guess that doesn't work. You have to put all your structures in a union. |
| 19:53:52 | <dolio> | Or use the variable length array at the end of a struct or something. |
| 19:53:55 | × | weary-traveler quits (~user@user/user363627) (Remote host closed the connection) |
| 19:53:58 | → | pavonia joins (~user@user/siracusa) |
| 19:54:34 | → | acidjnk_new joins (~acidjnk@p200300d6e7283f80fcc6edffa39079b3.dip0.t-ipconnect.de) |
| 19:54:48 | × | zungi quits (~tory@user/andrewchawk) (Ping timeout: 264 seconds) |
| 19:55:51 | → | peterbecich joins (~Thunderbi@syn-047-229-123-186.res.spectrum.com) |
| 19:58:10 | × | chiselfuse quits (~chiselfus@user/chiselfuse) (Remote host closed the connection) |
| 19:59:30 | × | vanishingideal quits (~vanishing@user/vanishingideal) (Remote host closed the connection) |
| 20:00:02 | × | caconym quits (~caconym@user/caconym) (Quit: bye) |
| 20:00:39 | → | ljdarj joins (~Thunderbi@user/ljdarj) |
| 20:00:43 | → | caconym joins (~caconym@user/caconym) |
| 20:01:16 | × | misterfish quits (~misterfis@84.53.85.146) (Ping timeout: 244 seconds) |
| 20:01:50 | → | chiselfuse joins (~chiselfus@user/chiselfuse) |
| 20:04:18 | × | hgolden quits (~hgolden@2603:8000:9d00:3ed1:6ff3:8389:b901:6363) (Remote host closed the connection) |
| 20:05:24 | × | hseg quits (~gesh@46.120.20.40) (Ping timeout: 272 seconds) |
| 20:09:01 | × | lxsameer quits (~lxsameer@Serene/lxsameer) (Ping timeout: 244 seconds) |
| 20:10:28 | × | peterbecich quits (~Thunderbi@syn-047-229-123-186.res.spectrum.com) (Ping timeout: 272 seconds) |
| 20:12:05 | → | hgolden joins (~hgolden@2603:8000:9d00:3ed1:6ff3:8389:b901:6363) |
| 20:12:20 | → | weary-traveler joins (~user@user/user363627) |
| 20:17:10 | → | justsomeguy joins (~justsomeg@user/justsomeguy) |
| 20:21:45 | → | alfiee joins (~alfiee@user/alfiee) |
| 20:22:03 | → | merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl) |
| 20:25:54 | × | alfiee quits (~alfiee@user/alfiee) (Ping timeout: 252 seconds) |
| 20:31:34 | → | ash3en joins (~Thunderbi@2a03:7846:b6eb:101:93ac:a90a:da67:f207) |
| 20:33:00 | → | ft joins (~ft@p3e9bc68d.dip0.t-ipconnect.de) |
| 20:37:27 | → | misterfish joins (~misterfis@84.53.85.146) |
| 20:38:49 | → | Guest0 joins (~Guest0@2a00:20:0:8685:7afd:8c7b:235a:df44) |
| 20:39:20 | × | Guest0 quits (~Guest0@2a00:20:0:8685:7afd:8c7b:235a:df44) (Client Quit) |
| 20:40:56 | → | todi joins (~todi@p57803331.dip0.t-ipconnect.de) |
| 20:57:15 | × | Everything quits (~Everythin@46-133-48-141.mobile.vf-ua.net) (Quit: leaving) |
| 20:58:24 | × | merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 244 seconds) |
| 20:59:15 | × | misterfish quits (~misterfis@84.53.85.146) (Ping timeout: 252 seconds) |
| 21:07:49 | → | alfiee joins (~alfiee@user/alfiee) |
| 21:09:57 | → | merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl) |
| 21:11:52 | × | meooow quits (~meooow@2400:6180:100:d0::ad9:e001) (Quit: q) |
| 21:12:03 | × | alfiee quits (~alfiee@user/alfiee) (Ping timeout: 244 seconds) |
| 21:12:59 | → | codolio joins (~dolio@130.44.140.168) |
| 21:13:11 | × | ash3en quits (~Thunderbi@2a03:7846:b6eb:101:93ac:a90a:da67:f207) (Quit: ash3en) |
| 21:14:07 | → | meooow joins (~meooow@2400:6180:100:d0::ad9:e001) |
| 21:14:49 | × | dolio quits (~dolio@130.44.140.168) (Read error: Connection reset by peer) |
| 21:16:16 | × | remedan quits (~remedan@ip-62-245-108-153.bb.vodafone.cz) (Quit: Bye!) |
| 21:16:44 | → | ash3en joins (~Thunderbi@2a03:7846:b6eb:101:93ac:a90a:da67:f207) |
| 21:17:08 | × | merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 268 seconds) |
| 21:17:40 | → | zungi joins (~tory@user/andrewchawk) |
| 21:20:00 | → | remedan joins (~remedan@ip-62-245-108-153.bb.vodafone.cz) |
| 21:25:41 | × | jespada quits (~jespada@2800:a4:230f:300:5891:d568:1db3:6726) (Quit: My Mac has gone to sleep. ZZZzzz…) |
| 21:28:00 | → | merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl) |
| 21:32:05 | × | michalz quits (~michalz@185.246.207.203) (Remote host closed the connection) |
| 21:32:28 | × | merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 245 seconds) |
| 21:40:24 | × | ChaiTRex quits (~ChaiTRex@user/chaitrex) (Ping timeout: 264 seconds) |
| 21:41:32 | → | yegorc joins (~yegorc@user/yegorc) |
| 21:42:04 | → | ChaiTRex joins (~ChaiTRex@user/chaitrex) |
| 21:43:36 | → | merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl) |
| 21:43:39 | × | forell quits (~forell@user/forell) (Ping timeout: 268 seconds) |
| 21:48:01 | × | merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds) |
| 21:49:41 | × | ash3en quits (~Thunderbi@2a03:7846:b6eb:101:93ac:a90a:da67:f207) (Quit: ash3en) |
| 21:50:34 | → | Digitteknohippie joins (~user@user/digit) |
| 21:51:06 | × | Digit quits (~user@user/digit) (Ping timeout: 244 seconds) |
| 21:54:13 | → | alfiee joins (~alfiee@user/alfiee) |
| 21:58:20 | × | alfiee quits (~alfiee@user/alfiee) (Ping timeout: 244 seconds) |
| 21:58:58 | → | merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl) |
| 22:03:30 | × | merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 244 seconds) |
| 22:05:08 | Digitteknohippie | is now known as Digit |
| 22:10:20 | → | Square2 joins (~Square4@user/square) |
| 22:13:05 | × | Square quits (~Square@user/square) (Ping timeout: 248 seconds) |
| 22:13:14 | × | machinedgod quits (~machinedg@d108-173-18-100.abhsia.telus.net) (Ping timeout: 260 seconds) |
| 22:14:21 | → | merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl) |
| 22:19:02 | × | merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 272 seconds) |
| 22:24:55 | × | justsomeguy quits (~justsomeg@user/justsomeguy) (Quit: WeeChat 3.6) |
| 22:29:42 | → | merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl) |
| 22:34:14 | × | merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds) |
| 22:35:42 | × | tabaqui1 quits (~root@87.200.129.102) (Ping timeout: 252 seconds) |
| 22:35:59 | × | Smiles quits (uid551636@id-551636.lymington.irccloud.com) (Quit: Connection closed for inactivity) |
| 22:40:57 | → | alfiee joins (~alfiee@user/alfiee) |
| 22:41:25 | × | xff0x quits (~xff0x@2405:6580:b080:900:3aeb:7d91:ba3:21b4) (Ping timeout: 248 seconds) |
| 22:42:26 | → | xff0x joins (~xff0x@2405:6580:b080:900:9a9a:b8fb:ffdf:8c19) |
| 22:43:36 | × | takuan quits (~takuan@d8D86B601.access.telenet.be) (Remote host closed the connection) |
| 22:45:07 | → | merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl) |
| 22:45:09 | × | alfiee quits (~alfiee@user/alfiee) (Ping timeout: 248 seconds) |
| 22:47:04 | × | remedan quits (~remedan@ip-62-245-108-153.bb.vodafone.cz) (Ping timeout: 260 seconds) |
| 22:51:49 | × | merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds) |
| 22:55:50 | → | merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl) |
| 23:00:16 | × | merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds) |
| 23:00:29 | → | Digitteknohippie joins (~user@user/digit) |
| 23:01:41 | × | Digit quits (~user@user/digit) (Ping timeout: 248 seconds) |
| 23:02:30 | → | machinedgod joins (~machinedg@d108-173-18-100.abhsia.telus.net) |
| 23:02:39 | → | user363627 joins (~user@user/user363627) |
| 23:06:54 | × | weary-traveler quits (~user@user/user363627) (Ping timeout: 260 seconds) |
| 23:08:08 | × | pounce quits (~pounce@user/cute/pounce) (Ping timeout: 268 seconds) |
| 23:11:12 | → | merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl) |
| 23:13:54 | → | pounce joins (~pounce@user/cute/pounce) |
| 23:14:18 | → | tdsyyyyyyyyyyyyl joins (~tdsyyyyyy@108.192.66.114) |
| 23:15:32 | × | merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 244 seconds) |
| 23:15:59 | × | target_i quits (~target_i@user/target-i/x-6023099) (Quit: leaving) |
| 23:17:21 | × | tremon quits (~tremon@83.80.159.219) (Remote host closed the connection) |
| 23:26:35 | → | merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl) |
| 23:27:02 | → | alfiee joins (~alfiee@user/alfiee) |
| 23:28:05 | → | Sgeo joins (~Sgeo@user/sgeo) |
| 23:30:32 | × | __monty__ quits (~toonn@user/toonn) (Quit: leaving) |
| 23:31:14 | × | merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 272 seconds) |
| 23:31:52 | × | alfiee quits (~alfiee@user/alfiee) (Ping timeout: 272 seconds) |
| 23:37:55 | → | merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl) |
| 23:42:29 | × | merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 260 seconds) |
| 23:47:31 | × | ljdarj quits (~Thunderbi@user/ljdarj) (Quit: ljdarj) |
| 23:50:49 | → | merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl) |
| 23:54:31 | × | myme quits (~myme@40.51-175-185.customer.lyse.net) (Ping timeout: 252 seconds) |
| 23:55:16 | × | merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds) |
All times are in UTC on 2025-02-26.