2025-04-08 00:00:48 +0200 | <mauke> | https://gitlab.haskell.org/ghc/ghc/-/issues/21132 ? |
2025-04-08 00:01:16 +0200 | <tuxillo> | it's x86_64 but let me see if it could be related |
2025-04-08 00:01:55 +0200 | <mauke> | I mean, it is talking about a 2Gb barrier |
2025-04-08 00:02:03 +0200 | <int-e> | EvanR: ah hugs disagrees on that one too and allows -1 - -1 (evaluates to 0) |
2025-04-08 00:02:21 +0200 | <EvanR> | you got hugs |
2025-04-08 00:02:22 +0200 | <EvanR> | damn |
2025-04-08 00:02:39 +0200 | <int-e> | it turns out debian still has it |
2025-04-08 00:02:53 +0200 | <int-e> | I did not have it installed before this discussion :) |
2025-04-08 00:03:39 +0200 | <tuxillo> | in that link it's talking about adjustorpool which I assume it is enabled for all x86_64 platforms? |
2025-04-08 00:04:56 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn |
2025-04-08 00:07:29 +0200 | inca | (~inca@pool-96-255-212-224.washdc.fios.verizon.net) (Ping timeout: 260 seconds) |
2025-04-08 00:07:43 +0200 | rawles | (~rawles@user/rawles) rawles |
2025-04-08 00:09:59 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 244 seconds) |
2025-04-08 00:14:37 +0200 | <int-e> | EvanR: The Haskell 2010 report explicitly states that a + -b is illegal. In the Haskell 98 report you have to carefully track a grammar that's annotated with precedences to come to the same conclusion. The language about sections is the same; (-1+) is a valid left section because -1+x and (-1)+x parse to the same expression |
2025-04-08 00:14:45 +0200 | Sgeo | (~Sgeo@user/sgeo) Sgeo |
2025-04-08 00:15:23 +0200 | <tuxillo> | i'm wondering if i should report this as a bug in haskell or not |
2025-04-08 00:15:26 +0200 | <int-e> | IOW, hugs got this wrong. But that behavior may predate the Haskell report language :) |
2025-04-08 00:20:27 +0200 | <tuxillo> | whut? |
2025-04-08 00:20:42 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn |
2025-04-08 00:21:17 +0200 | <int-e> | tuxillo: that was a different discussion from your adjustor issue |
2025-04-08 00:21:27 +0200 | <tuxillo> | ah ok |
2025-04-08 00:22:30 +0200 | <EvanR> | if it's a bug in GHC there are more appropriate places to report it |
2025-04-08 00:23:25 +0200 | <int-e> | wait what "Could not open /proc/self/maps" is not the same issue as #21132 |
2025-04-08 00:24:20 +0200 | <int-e> | though I guess that's only used for diagnostics? |
2025-04-08 00:24:21 +0200 | <tuxillo> | no, that's dfly specific and as far as I know it's just that it can't read proc maps which is unrelated to the error itself |
2025-04-08 00:24:32 +0200 | <tuxillo> | /proc/self/maps is a linux thing iirc |
2025-04-08 00:24:44 +0200 | <tuxillo> | 799282:4 0 simplex-chat 1744064469.180127 CALL mmap(0x40000000,0x1000,0x3<PROT_READ|PROT_WRITE>,0x1002<MAP_PRIVATE|MAP_ANON>,0xffffffff,0,0) |
2025-04-08 00:24:44 +0200 | <tuxillo> | 799282:4 0 simplex-chat 1744064469.180130 RET mmap 34440683520/0x804d32000 |
2025-04-08 00:24:48 +0200 | <int-e> | oh |
2025-04-08 00:24:53 +0200 | <tuxillo> | i can see the mmap returning a valid address |
2025-04-08 00:25:47 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 244 seconds) |
2025-04-08 00:25:51 +0200 | <tuxillo> | but it's definitiely not below 2Gb |
2025-04-08 00:25:59 +0200 | <int-e> | yeah it's way too high for the purpose |
2025-04-08 00:27:06 +0200 | inca | (~inca@pool-96-255-212-224.washdc.fios.verizon.net) |
2025-04-08 00:29:56 +0200 | <yin> | chiselfuse: yes. it's a shame but that's the way it is. also, -- is a comment |
2025-04-08 00:31:27 +0200 | <yin> | i *think* LexicalNegation is standard with the latest language versions (?) |
2025-04-08 00:31:31 +0200 | <yin> | chiselfuse: https://ghc.gitlab.haskell.org/ghc/doc/users_guide/exts/lexical_negation.html |
2025-04-08 00:32:05 +0200 | user363627 | (~user@user/user363627) user363627 |
2025-04-08 00:35:00 +0200 | <yin> | nope, it seems like it's being discussed for GHC2024? i'm not sure, trying to find out these things is always a mess |
2025-04-08 00:35:20 +0200 | emmanuelux | (~emmanuelu@user/emmanuelux) emmanuelux |
2025-04-08 00:36:14 +0200 | weary-traveler | (~user@user/user363627) (Ping timeout: 260 seconds) |
2025-04-08 00:36:30 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn |
2025-04-08 00:36:33 +0200 | <yin> | is GHC2024 already defined but GHC2021 still the default? |
2025-04-08 00:36:39 +0200 | <geekosaur> | it didn't get into GHC2024, which was finalized with ghc 9.12.1 |
2025-04-08 00:36:59 +0200 | <geekosaur> | and yes, GHC2021 is still the default if you use ghc directly |
2025-04-08 00:37:11 +0200 | <geekosaur> | note that cabal and I think stack still default to Haskell2010 |
2025-04-08 00:37:12 +0200 | <yin> | ty |
2025-04-08 00:37:21 +0200 | <yin> | wait no way |
2025-04-08 00:39:08 +0200 | rawles | (~rawles@user/rawles) (WeeChat 3.8) |
2025-04-08 00:41:14 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds) |
2025-04-08 00:42:04 +0200 | tromp | (~textual@2001:1c00:3487:1b00:1419:ab0:498a:2d0c) (Quit: My iMac has gone to sleep. ZZZzzz…) |
2025-04-08 00:45:56 +0200 | <yin> | bah... |
2025-04-08 00:45:59 +0200 | <yin> | what a mess |
2025-04-08 00:46:12 +0200 | <geekosaur> | LexicalNegation didn't get in but PostfixOperators did? also, aren't we well past the deprecation point for StarIsType? |
2025-04-08 00:46:31 +0200 | <yin> | my thoughts exactly |
2025-04-08 00:46:37 +0200 | <yin> | i don't like GHC2024 at all |
2025-04-08 00:47:52 +0200 | <yin> | also what's with defaultSignatures? |
2025-04-08 00:47:57 +0200 | dibblego | (~dibblego@haskell/developer/dibblego) (Read error: Connection reset by peer) |
2025-04-08 00:48:16 +0200 | dibblego | (~dibblego@116-255-1-119.ip4.superloop.au) |
2025-04-08 00:48:16 +0200 | dibblego | (~dibblego@116-255-1-119.ip4.superloop.au) (Changing host) |
2025-04-08 00:48:16 +0200 | dibblego | (~dibblego@haskell/developer/dibblego) dibblego |
2025-04-08 00:49:08 +0200 | ph88 | (~ph88@2a02:8109:9e26:c800:7176:23ec:c36b:f7da) (Remote host closed the connection) |
2025-04-08 00:49:08 +0200 | __monty__ | (~toonn@user/toonn) (Quit: leaving) |
2025-04-08 00:52:17 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn |
2025-04-08 00:59:04 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 244 seconds) |
2025-04-08 01:03:00 +0200 | peterbecich | (~Thunderbi@syn-047-229-123-186.res.spectrum.com) peterbecich |
2025-04-08 01:06:51 +0200 | peterbecich | (~Thunderbi@syn-047-229-123-186.res.spectrum.com) (Client Quit) |
2025-04-08 01:07:19 +0200 | peterbecich | (~Thunderbi@syn-047-229-123-186.res.spectrum.com) peterbecich |
2025-04-08 01:10:20 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn |
2025-04-08 01:15:20 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds) |
2025-04-08 01:21:38 +0200 | jespada | (~jespada@r179-25-210-114.dialup.adsl.anteldata.net.uy) (Ping timeout: 245 seconds) |
2025-04-08 01:25:16 +0200 | jespada | (~jespada@r190-133-49-11.dialup.adsl.anteldata.net.uy) jespada |
2025-04-08 01:26:06 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn |
2025-04-08 01:26:42 +0200 | polyphem | (~rod@pd9fbf91a.dip0.t-ipconnect.de) (Ping timeout: 252 seconds) |
2025-04-08 01:28:44 +0200 | szkl | (uid110435@id-110435.uxbridge.irccloud.com) szkl |
2025-04-08 01:30:48 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 245 seconds) |
2025-04-08 01:36:38 +0200 | peterbecich | (~Thunderbi@syn-047-229-123-186.res.spectrum.com) (Ping timeout: 245 seconds) |
2025-04-08 01:41:54 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn |
2025-04-08 01:43:28 +0200 | Tuplanolla | (~Tuplanoll@91-159-69-59.elisa-laajakaista.fi) (Quit: Leaving.) |
2025-04-08 01:46:11 +0200 | sprotte24 | (~sprotte24@p200300d16f30f50054794865c50a74ee.dip0.t-ipconnect.de) (Read error: Connection reset by peer) |
2025-04-08 01:46:29 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 248 seconds) |
2025-04-08 01:53:07 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn |
2025-04-08 01:57:54 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 260 seconds) |
2025-04-08 02:04:06 +0200 | jespada | (~jespada@r190-133-49-11.dialup.adsl.anteldata.net.uy) (Ping timeout: 252 seconds) |
2025-04-08 02:08:47 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn |
2025-04-08 02:09:24 +0200 | emojelly | (~eselber_p@user/endojelly) (Ping timeout: 260 seconds) |
2025-04-08 02:09:42 +0200 | emojelly | (~eselber_p@user/endojelly) endojelly |
2025-04-08 02:12:56 +0200 | anpad | (~pandeyan@user/anpad) (Quit: ZNC 1.8.2 - https://znc.in) |
2025-04-08 02:13:33 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds) |
2025-04-08 02:13:48 +0200 | anpad | (~pandeyan@user/anpad) anpad |
2025-04-08 02:13:55 +0200 | nurupo | (~nurupo.ga@user/nurupo) (Quit: nurupo.ga) |
2025-04-08 02:14:30 +0200 | nurupo | (~nurupo.ga@user/nurupo) nurupo |
2025-04-08 02:16:21 +0200 | notdabs | (~Owner@2600:1700:69cf:9000:20c6:7b0d:8034:a6ce) |
2025-04-08 02:20:03 +0200 | j1n37- | (~j1n37@user/j1n37) (Ping timeout: 265 seconds) |
2025-04-08 02:21:34 +0200 | j1n37 | (~j1n37@user/j1n37) j1n37 |
2025-04-08 02:24:18 +0200 | ezzieyguywuf | (~Unknown@user/ezzieyguywuf) (Quit: Lost terminal) |
2025-04-08 02:24:35 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn |
2025-04-08 02:25:35 +0200 | acidjnk_new3 | (~acidjnk@p200300d6e71c4f1839a5a90aae0b2850.dip0.t-ipconnect.de) (Ping timeout: 268 seconds) |
2025-04-08 02:29:33 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 245 seconds) |
2025-04-08 02:40:21 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn |
2025-04-08 02:47:21 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 244 seconds) |
2025-04-08 02:54:52 +0200 | <emojelly> | I have a question about profiling. So according to +RTS -pa, most of the time is spent in the following cost center: |
2025-04-08 02:54:54 +0200 | <emojelly> | gettingrun SigTest tests/SigTest.hs:101:175-177 1760 24025 64.3 45.8 81.5 58.5 865788 24019809720 |
2025-04-08 02:54:56 +0200 | <emojelly> | resume Control.Monad.Coroutine Control/Monad/Coroutine.hs:88:4-9 1803 57732070 0.0 0.0 0.0 0.0 0 0 |
2025-04-08 02:55:04 +0200 | <emojelly> | the first one, which I named "gettingrun", here: |
2025-04-08 02:55:40 +0200 | <emojelly> | combineEx (Right (Left (Request i1 nextco1))) (Right (Left (Request i2 nextco2))) = let |
2025-04-08 02:55:42 +0200 | <emojelly> | nextCombined c o = combineRe (unwrapEx ({-# SCC runningco1 #-}(nextco1 o))) (unwrapEx ({-# SCC runningco2 #-}(nextco2 o))) c |
2025-04-08 02:55:44 +0200 | <emojelly> | in (liftWith (\(!run) -> {-# SCC rewrapping #-}rewrapCo $ \c -> Right $ Left $ Request ({-# SCC pasting #-}(i1 `paste` i2)) ({-# SCC running #-}(({-# SCC gettingrun #-}run) . {-# SCC runcombined #-}nextCombined c)))) >>= ({-# SCC restoring #-}restoreT) . {-# SCC returning #-}return |
2025-04-08 02:56:31 +0200 | <emojelly> | Now "run" itself should in my minimal test case just be "runIdentityT", I doubt we can spend all the time (or really any time) in there. |
2025-04-08 02:56:36 +0200 | user363627 | (~user@user/user363627) (Quit: Konversation terminated!) |
2025-04-08 02:56:53 +0200 | user363627 | (~user@user/user363627) user363627 |
2025-04-08 02:56:54 +0200 | <emojelly> | So I guess it's really what's getting evaluated within runIdentityT. But why don't I see any cost centers for that? |
2025-04-08 02:57:17 +0200 | <emojelly> | Is my suspicion correct, that this time is spent in other modules, that are somehow not built for profiling? |
2025-04-08 02:58:25 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn |
2025-04-08 02:59:21 +0200 | <emojelly> | Also, the first entry below "gettingrun", which is "resume", somehow has 57732070 ticks (which is a looot) but is 0.0 / 0.0 in execution time. I noticed this pattern throughout the profiling report, that often/always the first cost center hierarchically under the large ones have a lot of ticks? |
2025-04-08 03:01:00 +0200 | otto_s | (~user@p5de2f09d.dip0.t-ipconnect.de) (Ping timeout: 244 seconds) |
2025-04-08 03:02:37 +0200 | otto_s | (~user@p5b044d5e.dip0.t-ipconnect.de) |
2025-04-08 03:03:04 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 260 seconds) |
2025-04-08 03:06:00 +0200 | Pixi | (~Pixi@user/pixi) (Quit: Leaving) |
2025-04-08 03:06:54 +0200 | Pixi | (~Pixi@user/pixi) Pixi |
2025-04-08 03:08:44 +0200 | ljdarj1 | (~Thunderbi@user/ljdarj) ljdarj |
2025-04-08 03:12:20 +0200 | xff0x | (~xff0x@ai066236.d.east.v6connect.net) (Ping timeout: 272 seconds) |
2025-04-08 03:12:21 +0200 | ljdarj | (~Thunderbi@user/ljdarj) (Ping timeout: 248 seconds) |
2025-04-08 03:12:21 +0200 | ljdarj1 | ljdarj |
2025-04-08 03:13:47 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn |
2025-04-08 03:16:38 +0200 | <EvanR> | emojelly, to be serious about profiling you have to have all your dependencies built for profiling |
2025-04-08 03:18:45 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 248 seconds) |
2025-04-08 03:20:37 +0200 | <monochrom> | I think cabal does that automatically once you enable profiling. |
2025-04-08 03:22:39 +0200 | peterbecich | (~Thunderbi@syn-047-229-123-186.res.spectrum.com) peterbecich |
2025-04-08 03:29:18 +0200 | exarkun | (~exarkun@user/exarkun) (Excess Flood) |
2025-04-08 03:29:31 +0200 | machinedgod | (~machinedg@d108-173-18-100.abhsia.telus.net) (Ping timeout: 252 seconds) |
2025-04-08 03:29:33 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn |
2025-04-08 03:30:39 +0200 | s4msung | (DQyKc40dMf@user/s4msung) (Ping timeout: 260 seconds) |
2025-04-08 03:31:03 +0200 | s4msung | (HpS7xJgsJj@user/s4msung) s4msung |
2025-04-08 03:31:41 +0200 | exarkun | (~exarkun@user/exarkun) exarkun |
2025-04-08 03:34:58 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 265 seconds) |
2025-04-08 03:36:55 +0200 | <geekosaur> | yes |
2025-04-08 03:37:02 +0200 | <geekosaur> | so does stack |
2025-04-08 03:37:23 +0200 | <emojelly> | I've used cabal... |
2025-04-08 03:37:27 +0200 | <emojelly> | --enable-profiling |
2025-04-08 03:37:50 +0200 | <emojelly> | It's weird now. I have this cost center where it claims that 64.3% of the time is spent in, but there is no further breakdown. |
2025-04-08 03:38:06 +0200 | szkl | (uid110435@id-110435.uxbridge.irccloud.com) (Quit: Connection closed for inactivity) |
2025-04-08 03:38:15 +0200 | <geekosaur> | also remember laziness: if something gets forced inside a profiled function/etc., it'll be accrued to that |
2025-04-08 03:38:16 +0200 | <emojelly> | It's this expression: (({-# SCC gettingrun #-}run) . {-# SCC runcombined #-}nextCombined c))) |
2025-04-08 03:38:21 +0200 | <emojelly> | I don't know where to go from there. |
2025-04-08 03:38:27 +0200 | <emojelly> | geekosaur: I know, yeah |
2025-04-08 03:38:38 +0200 | <emojelly> | but how do I find out what that is? |
2025-04-08 03:40:39 +0200 | <emojelly> | Cleaned up, the expression is just "run . nextCombined c" |
2025-04-08 03:40:54 +0200 | <emojelly> | and run, as said, should just be "runIdentityT", I doubt there's any time spent in that |
2025-04-08 03:41:38 +0200 | <emojelly> | "nextCombine c" has 17% cumulative. That's also a lot, but nearly near the 64%/81% of the whole expression |
2025-04-08 03:44:24 +0200 | <emojelly> | not nearly I mean |
2025-04-08 03:44:39 +0200 | <emojelly> | So to summarize: |
2025-04-08 03:45:03 +0200 | <emojelly> | (run . nextCombined c): 64% direct, 81% inherited |
2025-04-08 03:45:19 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn |
2025-04-08 03:46:14 +0200 | yin | (~z@user/zero) (Ping timeout: 260 seconds) |
2025-04-08 03:46:20 +0200 | <emojelly> | nextCombined c: 0% direct, 17% inherited |
2025-04-08 03:46:43 +0200 | <emojelly> | that leaves 64% that are unaccounted for, and that I have no idea on how to find out where it's spent |
2025-04-08 03:47:21 +0200 | yin | (~z@user/zero) zero |
2025-04-08 03:48:01 +0200 | ljdarj | (~Thunderbi@user/ljdarj) (Ping timeout: 244 seconds) |
2025-04-08 03:48:39 +0200 | <chiselfuse> | https://www.haskell.org/onlinereport/classes.gif |
2025-04-08 03:48:57 +0200 | <chiselfuse> | what's the strange symbol between brackets under Eq here? |
2025-04-08 03:49:10 +0200 | <chiselfuse> | "All except IO, (??)" |
2025-04-08 03:49:47 +0200 | <geekosaur> | same as under the others on that line, it just got mangled worse by pixelation. (->) |
2025-04-08 03:49:55 +0200 | <EvanR> | wow that picture has no aged well |
2025-04-08 03:49:58 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 245 seconds) |
2025-04-08 03:50:15 +0200 | <geekosaur> | meaning, functions |
2025-04-08 03:50:22 +0200 | <EvanR> | I think it is outdated too |
2025-04-08 03:50:51 +0200 | <geekosaur> | well outdated, yes |
2025-04-08 03:51:10 +0200 | <geekosaur> | missing AMP, missing Num losing Eq and Show "superclasses" |
2025-04-08 03:51:18 +0200 | <geekosaur> | to say nothing of FTP |
2025-04-08 03:51:38 +0200 | <geekosaur> | but then, that's the Haskell 98 report |
2025-04-08 03:52:42 +0200 | <geekosaur> | (you may want https://www.haskell.org/onlinereport/haskell2010, but it'll still be missing those changes |
2025-04-08 03:52:59 +0200 | peterbecich | (~Thunderbi@syn-047-229-123-186.res.spectrum.com) (Ping timeout: 252 seconds) |
2025-04-08 03:54:45 +0200 | <EvanR> | .oO( all (what) have an Eq instance except IO and ->) |
2025-04-08 04:01:06 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn |
2025-04-08 04:03:33 +0200 | xff0x | (~xff0x@fsb6a9491c.tkyc517.ap.nuro.jp) |
2025-04-08 04:03:50 +0200 | <chiselfuse> | geekosaur: so the changes are post 2010 spec? if so is there a website with the new draft? |
2025-04-08 04:05:15 +0200 | <geekosaur> | no, the committee got "stuck" some time back and no new / updated draft is in sight, just what ghc's `base` currently implements |
2025-04-08 04:05:51 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 246 seconds) |
2025-04-08 04:06:33 +0200 | <chiselfuse> | hm |
2025-04-08 04:06:45 +0200 | <chiselfuse> | geekosaur: can you link me this `base` thing? i don't know what you're referring to |
2025-04-08 04:07:12 +0200 | bitdex | (~bitdex@gateway/tor-sasl/bitdex) bitdex |
2025-04-08 04:07:28 +0200 | <geekosaur> | https://hackage.haskell.org/package/base-4.21.0.0 |
2025-04-08 04:10:20 +0200 | <EvanR> | all your base are belong to us |
2025-04-08 04:10:24 +0200 | <chiselfuse> | geekosaur: is this a fully updated one? https://cs.lmu.edu/~ray/images/haskell-typeclasses.png |
2025-04-08 04:11:34 +0200 | <geekosaur> | looks closer, at least. I think what you really want is https://wiki.haskell.org/index.php?title=Typeclassopedia |
2025-04-08 04:14:21 +0200 | <chiselfuse> | geekosaur: why does the graph there not have Num and many others? |
2025-04-08 04:16:54 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn |
2025-04-08 04:18:21 +0200 | <geekosaur> | because it focuses on the ones that aren't reasonably obvious to newcommers, which are the ones that come from abstract algebra or category theory |
2025-04-08 04:18:25 +0200 | <emojelly> | How do I rebuild all dependencies of my cabal project with different flags? |
2025-04-08 04:18:39 +0200 | <geekosaur> | Num, Eq, etc. are trivial. |
2025-04-08 04:20:33 +0200 | <geekosaur> | emojelly, typically you add something to cabal.project or cabal.project.local (preferred) like https://paste.tomsmeding.com/o6Cbtvr5 (you can include most cabal declarations in the package block |
2025-04-08 04:21:45 +0200 | <chiselfuse> | that's nice but i'm kind of looking for an updated one of the basic ones (Num, Eq, ...) because i'm still newb |
2025-04-08 04:23:49 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 248 seconds) |
2025-04-08 04:24:27 +0200 | <emojelly> | geekosaur: thanks, I found exactly that in the cabal documentation in the meantime, and it seems to work! |
2025-04-08 04:24:27 +0200 | <EvanR> | if you type :info Num in ghci you will get the details |
2025-04-08 04:24:43 +0200 | <emojelly> | package * |
2025-04-08 04:24:45 +0200 | <emojelly> | profiling: true |
2025-04-08 04:24:47 +0200 | <emojelly> | optimization: 0 |
2025-04-08 04:24:49 +0200 | <EvanR> | if you look in the base haddocks, there is documentation there for Num, Eq, Ord, etc |
2025-04-08 04:24:49 +0200 | <emojelly> | flags: -rtsopts -O0 -fprof-auto |
2025-04-08 04:24:56 +0200 | <emojelly> | let's see if profiling will be more helpful... |
2025-04-08 04:25:20 +0200 | <EvanR> | :i Eq |
2025-04-08 04:25:26 +0200 | <EvanR> | % :i Eq |
2025-04-08 04:25:26 +0200 | <yahb2> | type Eq :: * -> Constraint ; class Eq a where ; (==) :: a -> a -> Bool ; (/=) :: a -> a -> Bool ; {-# MINIMAL (==) | (/=) #-} ; -- Defined in ‘GHC.Classes’ ; instance [safe] Eq Nat -- Defi... |
2025-04-08 04:25:56 +0200 | <EvanR> | provides the == and /= (doesn't equal) operations |
2025-04-08 04:26:02 +0200 | <geekosaur> | use %% instead, it'll use a pastebin |
2025-04-08 04:26:09 +0200 | chiselfuse | (~chiselfus@user/chiselfuse) (Remote host closed the connection) |
2025-04-08 04:26:14 +0200 | <EvanR> | %% :i Num |
2025-04-08 04:26:14 +0200 | <yahb2> | https://paste.tomsmeding.com/eh7HAAXo |
2025-04-08 04:26:21 +0200 | <EvanR> | snazzy |
2025-04-08 04:26:44 +0200 | <monochrom> | "eh7" eh? :) |
2025-04-08 04:26:48 +0200 | chiselfuse | (~chiselfus@user/chiselfuse) chiselfuse |
2025-04-08 04:27:29 +0200 | <monochrom> | But I am not sure of the value of profiling unoptimized code. |
2025-04-08 04:28:04 +0200 | <geekosaur> | that example doesn't know about `profiling-detail: late` (IIRC that's the option) |
2025-04-08 04:31:14 +0200 | <chiselfuse> | EvanR: can you help me read some of that output? `instance Eq a => Eq [a] -- Defined in ‘GHC.Classes’` what does this mean? |
2025-04-08 04:31:57 +0200 | <geekosaur> | if some type a has an Eq instance, then the type "list of a" has an Eq instance |
2025-04-08 04:32:17 +0200 | <EvanR> | ^ |
2025-04-08 04:32:27 +0200 | <emojelly> | aaah, much better I think |
2025-04-08 04:33:12 +0200 | <EvanR> | the list Eq instance uses the Eq instance of the element type |
2025-04-08 04:33:34 +0200 | <EvanR> | > [1,2,3] == [1,2,4] |
2025-04-08 04:33:35 +0200 | <lambdabot> | False |
2025-04-08 04:34:25 +0200 | <chiselfuse> | so it's just `instance <type signature> -- defined in ...` where anything of type `<type signature>` is an instance of the typeclass `:i <typeclass>` |
2025-04-08 04:34:42 +0200 | <EvanR> | instance definitions have their own syntax |
2025-04-08 04:34:47 +0200 | <EvanR> | not just any type signature works there |
2025-04-08 04:34:55 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn |
2025-04-08 04:35:12 +0200 | <ski> | `instance Int where ...' does not work |
2025-04-08 04:35:18 +0200 | <chiselfuse> | is it a subset of type signatures or something completely different? |
2025-04-08 04:35:28 +0200 | <chiselfuse> | yea i just found `instance Eq Integer -- Defined in ‘GHC.Num.Integer’`. how do i read it? |
2025-04-08 04:35:29 +0200 | <monochrom> | Completely different. |
2025-04-08 04:37:34 +0200 | <EvanR> | as in "and now for something" |
2025-04-08 04:38:08 +0200 | <chiselfuse> | i don't understand |
2025-04-08 04:38:18 +0200 | <chiselfuse> | oh i get the joke |
2025-04-08 04:38:58 +0200 | notdabs | (~Owner@2600:1700:69cf:9000:20c6:7b0d:8034:a6ce) (Read error: Connection reset by peer) |
2025-04-08 04:40:04 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 260 seconds) |
2025-04-08 04:41:16 +0200 | <chiselfuse> | how do i read what comes after `instance`? i don't trust chatgpt i think it's telling me nonsense |
2025-04-08 04:42:46 +0200 | <monochrom> | All good textbooks and tutorials explain classes and instances and their syntax. |
2025-04-08 04:43:06 +0200 | chiselfuse | (~chiselfus@user/chiselfuse) (Remote host closed the connection) |
2025-04-08 04:43:40 +0200 | chiselfuse | (~chiselfus@user/chiselfuse) chiselfuse |
2025-04-08 04:46:32 +0200 | <EvanR> | that may be true |
2025-04-08 04:46:53 +0200 | <EvanR> | disclaimer good textbooks and tutorials aren't guaranteed to exist |
2025-04-08 04:48:06 +0200 | <jackdk> | If you want to read left-to-right, "there is an instance of Eq for Integer"; if you want something that sounds a bit more natural, "Integer has an Eq instance" |
2025-04-08 04:50:38 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn |
2025-04-08 04:51:18 +0200 | <emojelly> | This is driving me crazy... |
2025-04-08 04:52:54 +0200 | <monochrom> | It is a full-time job to understand performance issues. |
2025-04-08 04:53:00 +0200 | <emojelly> | combineTestSignals 35.2 37.0 35.3 37.1 6745 19387990040 |
2025-04-08 04:53:02 +0200 | <emojelly> | resume 0.0 0.0 0.0 0.0 0 0 |
2025-04-08 04:53:04 +0200 | <emojelly> | combineTestSignals' 0.0 0.0 0.0 0.1 0 2640 |
2025-04-08 04:53:19 +0200 | <emojelly> | combineTestSignals is literally just: combineTestSignals = combineTestSignals' (,) |
2025-04-08 04:53:29 +0200 | <emojelly> | how can this eat up all the cycles, but combineTestCycles' doesn't |
2025-04-08 04:54:08 +0200 | <EvanR> | and in instance Eq a => Eq [a] where ... it says "[a] has an Eq instance" (the context doesn't matter when looking for instances! xD) |
2025-04-08 04:54:26 +0200 | gorignak | (~gorignak@user/gorignak) (Quit: quit) |
2025-04-08 04:54:46 +0200 | gorignak | (~gorignak@user/gorignak) gorignak |
2025-04-08 04:54:51 +0200 | <EvanR> | similar to the truth table for modus ponens when the hypothesis is false |
2025-04-08 04:55:07 +0200 | <EvanR> | s/modus ponens/material implication/ |
2025-04-08 04:55:19 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds) |
2025-04-08 04:55:48 +0200 | <geekosaur> | emojelly, don't forget `(,)`, which may be causing boxing/unboxing depending on how things are being optimized |
2025-04-08 04:56:16 +0200 | <emojelly> | hmm... I said -O0 so it doesn't get in the way |
2025-04-08 04:56:21 +0200 | <monochrom> | That is an interesting way to look at it. Continue wording it as "if then" but framing "if then" as material implication... |
2025-04-08 04:57:07 +0200 | <emojelly> | geekosaur: but (,) is just passed to combineTestSignals'... I have a hard time wrapping my head around how that would cause combineTestSignals (without ') to be so expensive? |
2025-04-08 04:58:12 +0200 | <geekosaur> | combineTestSignals' produces a thunk, combineTestSignals (or whatever consumes its result) forces it |
2025-04-08 04:58:52 +0200 | <emojelly> | ah, that makes sense. |
2025-04-08 04:59:02 +0200 | <emojelly> | So how do I know what's expensive? |
2025-04-08 04:59:54 +0200 | <geekosaur> | and (,) is a constructor so I don't know if it's profiled (actually I suspect it just isn't, you get a thunk possibly containing two more thunks) |
2025-04-08 05:00:31 +0200 | <geekosaur> | this is part of why understanding performance issues is a full time job |
2025-04-08 05:01:01 +0200 | <geekosaur> | boxing and unboxing is another thing that costs cycles and won't be profiled, because it's too primitive for profiling |
2025-04-08 05:03:25 +0200 | peterbecich | (~Thunderbi@syn-047-229-123-186.res.spectrum.com) peterbecich |
2025-04-08 05:03:28 +0200 | <emojelly> | Hmm. So how do I proceed? |
2025-04-08 05:03:59 +0200 | gorignak | (~gorignak@user/gorignak) (Ping timeout: 260 seconds) |
2025-04-08 05:04:35 +0200 | <emojelly> | Make my own strict (,)? |
2025-04-08 05:04:36 +0200 | j1n37- | (~j1n37@user/j1n37) j1n37 |
2025-04-08 05:05:35 +0200 | j1n37 | (~j1n37@user/j1n37) (Ping timeout: 252 seconds) |
2025-04-08 05:05:42 +0200 | <geekosaur> | I'm not sure tbh |
2025-04-08 05:06:02 +0200 | <emojelly> | let f !a !b = (a,b) in combineTestSignals' f |
2025-04-08 05:06:09 +0200 | <emojelly> | let's see if that helps me get more information |
2025-04-08 05:06:24 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn |
2025-04-08 05:07:01 +0200 | <EvanR> | eh |
2025-04-08 05:07:09 +0200 | forell | (~forell@user/forell) (Ping timeout: 268 seconds) |
2025-04-08 05:07:32 +0200 | <emojelly> | sadly, no difference |
2025-04-08 05:08:02 +0200 | <EvanR> | a strict tuple is actually a handy thing to have sometimes |
2025-04-08 05:08:32 +0200 | <EvanR> | but it's not strictly (lol) necessary, since you can accomplish the same thing by only construct a tuple from things that you have evaluated |
2025-04-08 05:10:12 +0200 | <ski> | a tuple that didn't force until a component got actually forced, would potentially be nice (in order to have a categorical product) |
2025-04-08 05:10:13 +0200 | <emojelly> | it didn't help, all time is still spent in combineTestSignals, which is now literally just "let f !a !b = (a,b) in combineTestSignals' f" |
2025-04-08 05:10:19 +0200 | <emojelly> | no time is spent in combineTestSignals' |
2025-04-08 05:10:57 +0200 | <EvanR> | just sounds like a bad report, or bad reading of the available data |
2025-04-08 05:11:05 +0200 | <emojelly> | I just don't know where to go from here... how do I figure out which part of my program is expensive? |
2025-04-08 05:11:34 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 260 seconds) |
2025-04-08 05:11:44 +0200 | <EvanR> | that code has a good chance of doing nothing special with the bangs, since it depends on what combineTestSignals' does and who uses the result |
2025-04-08 05:11:48 +0200 | <EvanR> | and how |
2025-04-08 05:12:07 +0200 | <emojelly> | EvanR: do I read this wrong? https://paste.tomsmeding.com/DWrhtBvL |
2025-04-08 05:12:09 +0200 | <EvanR> | if it would matter then combineTestSignals could've done it |
2025-04-08 05:12:18 +0200 | <EvanR> | prime* |
2025-04-08 05:13:33 +0200 | <emojelly> | I also still don't quite understand why the cost centers with the large individual counts have a small value in the entries column, while usually the cost center immediately under it has a large "entries" value, but a tiny/0 non-inherited %time |
2025-04-08 05:13:36 +0200 | <Axman6> | I feel like you need to use a different profiling mode, maybe the one that automatically adds cost centres |
2025-04-08 05:13:47 +0200 | <EvanR> | and you use -O0 so whatever you eventually learn becomes irrelevant when you put the optimization back |
2025-04-08 05:13:47 +0200 | <emojelly> | Axman6: I used -fprof-auto |
2025-04-08 05:13:55 +0200 | <Axman6> | Hmm, ok |
2025-04-08 05:14:07 +0200 | <emojelly> | profiling: true |
2025-04-08 05:14:09 +0200 | <emojelly> | optimization: 0 |
2025-04-08 05:14:11 +0200 | <emojelly> | flags: -rtsopts -O0 -fprof-auto |
2025-04-08 05:14:15 +0200 | <emojelly> | cabal run --enable-profiling --profiling-detail=all-functions --ghc-options="-rtsopts -O0 -fprof-auto" test-library -- -p "/sendBytes'/" +RTS -pa |
2025-04-08 05:14:44 +0200 | <EvanR> | it could be that constructing that tuple is really most of the work and memory? |
2025-04-08 05:14:54 +0200 | <EvanR> | in which case I'd say turn optimizations back on |
2025-04-08 05:15:28 +0200 | <Axman6> | yeah I'm not sure that turning off optimisations tells you all that much. it does seem like a strange profile - care you share any of the code? |
2025-04-08 05:16:20 +0200 | <emojelly> | EvanR: but shouldn't the expensive cost center then be where (,) actually gets *used*? It's passed down deeply into the bowels of combineTestSignals |
2025-04-08 05:16:28 +0200 | <emojelly> | of combineTestSignals' I mean |
2025-04-08 05:17:31 +0200 | <emojelly> | Axman6: yeah I don't mind sharing all of it. Not sure sharing all is super enlightening, maybe I can find a subset? |
2025-04-08 05:17:41 +0200 | <emojelly> | But as it is I don't even know which part of it is the slow one... |
2025-04-08 05:18:13 +0200 | <EvanR> | emojelly, building a tuple and taking it apart are ridiculously cheap either way, if they aren't optimized out |
2025-04-08 05:18:58 +0200 | hughjfchen | (~hughjfche@vmi2417424.contaboserver.net) (Quit: WeeChat 4.4.3) |
2025-04-08 05:19:08 +0200 | <emojelly> | EvanR: yeah, I'd be surprised... |
2025-04-08 05:19:34 +0200 | <emojelly> | Okay it's never that, but is it per-chance possible that the profiling code *does* have a bug? |
2025-04-08 05:19:44 +0200 | <EvanR> | and that's the only things a tuple can do |
2025-04-08 05:20:03 +0200 | <emojelly> | And as said, I still don't quite understand why "entries" and "time%" don't correlate |
2025-04-08 05:20:12 +0200 | hughjfchen | (~hughjfche@vmi2417424.contaboserver.net) hughjfchen |
2025-04-08 05:20:14 +0200 | <Axman6> | We'd need to see the code, we're speculating about (,) because there's nothing else to go off |
2025-04-08 05:20:16 +0200 | <emojelly> | it's always the cost center *under* the %time-heavy one that has a lot of "entries" |
2025-04-08 05:21:13 +0200 | <emojelly> | https://paste.tomsmeding.com/hq7JjRY1 |
2025-04-08 05:21:40 +0200 | <emojelly> | but it's absolutely not a given that that is the slow code, it's intertwined with Clash and my own test library |
2025-04-08 05:22:12 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn |
2025-04-08 05:22:15 +0200 | <Axman6> | Yeah I wondered if this was clash stuff |
2025-04-08 05:22:28 +0200 | <EvanR> | stupid question does the program actually do anything |
2025-04-08 05:23:23 +0200 | <emojelly> | yeah, it's my own coroutine based test library that allows you to imperatively test clash simulations... it's awesome, it's just very, very slow |
2025-04-08 05:23:37 +0200 | <emojelly> | let me paste the example I'm testing here |
2025-04-08 05:24:07 +0200 | <emojelly> | https://paste.tomsmeding.com/PEspnrWh |
2025-04-08 05:24:40 +0200 | gorignak | (~gorignak@user/gorignak) gorignak |
2025-04-08 05:24:59 +0200 | <emojelly> | combineTestSignals "splits off" the test into two parts that basically run in parallel, the input signals that they produce get pasted back together (that's what the (,)) is for to be fed into the circuit as input |
2025-04-08 05:25:17 +0200 | <emojelly> | the whole thing is based on Coroutines, and it works, does exactly what it should |
2025-04-08 05:25:57 +0200 | <emojelly> | but my test circuit runs for ~5000 cycles under the test ends, so 5000 (small) input tuples produced by the test code I pasted, and the same number of (small) output tuples produced by the circuit |
2025-04-08 05:26:00 +0200 | <Axman6> | I would try splitting those long lines using let if possible, then it's a bit clearer what the SCC's are attached to (and might make it clearer to us what the code is actually doing, there's a lot going on there |
2025-04-08 05:26:01 +0200 | <emojelly> | and it takes like... 10 seconds |
2025-04-08 05:26:42 +0200 | <emojelly> | Axman6: but how does that help, when profiling already tells me all the time is spent in combineTestSignals, which is just "combineTestSignals' ()" and nothing more? |
2025-04-08 05:26:43 +0200 | <EvanR> | there might also be space leaks going on, which slows things down |
2025-04-08 05:26:55 +0200 | <EvanR> | which a different kind of profile might reveal |
2025-04-08 05:27:05 +0200 | <emojelly> | That's the "individual" %time, the one that does *not* also include time for the cost centers hierarchically below |
2025-04-08 05:27:14 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds) |
2025-04-08 05:27:27 +0200 | <emojelly> | EvanR: heap grows to about ~40M and then garbage collection cleans it up |
2025-04-08 05:27:43 +0200 | <emojelly> | it's weird, yeah, but weird enough for being that slow? |
2025-04-08 05:27:49 +0200 | <EvanR> | 40M is nothing |
2025-04-08 05:27:53 +0200 | <emojelly> | exactly |
2025-04-08 05:27:55 +0200 | <emojelly> | also, again |
2025-04-08 05:28:22 +0200 | <Axman6> | what sort of productivity does it say you're getting? how much time is spent in GC? |
2025-04-08 05:29:06 +0200 | <emojelly> | combineTestSignals 0 38.0 34.4 38.0 34.4 7688 19398555176 |
2025-04-08 05:29:08 +0200 | <emojelly> | resume 24035 0.0 0.0 0.0 0.0 0 0 |
2025-04-08 05:29:15 +0200 | <emojelly> | look at this, isn't this nonsensical by itself? |
2025-04-08 05:29:27 +0200 | <emojelly> | 38% of time spent in combineTestSignals, but 0 entries? |
2025-04-08 05:29:35 +0200 | <emojelly> | and resume has 24035 entries but 0% time? |
2025-04-08 05:29:47 +0200 | <Axman6> | use a paste site please |
2025-04-08 05:30:08 +0200 | <emojelly> | https://paste.tomsmeding.com/DWrhtBvL |
2025-04-08 05:30:16 +0200 | <emojelly> | not the same run, but very similar, exhibiting the same weirdness |
2025-04-08 05:30:18 +0200 | <EvanR> | zero time could just be a failure to measure it properly |
2025-04-08 05:30:38 +0200 | <emojelly> | how does the report go from 0 entries to 38% individual (i.e. non-inherited) time? |
2025-04-08 05:31:08 +0200 | <EvanR> | I don't see 0 entries |
2025-04-08 05:31:12 +0200 | <emojelly> | "The number of times this particular point in the call tree was entered." |
2025-04-08 05:31:18 +0200 | <emojelly> | you don't? |
2025-04-08 05:32:00 +0200 | <Axman6> | jesus, I didn't realise the code goes all the way off the screen... |
2025-04-08 05:32:38 +0200 | <emojelly> | ah, I guess if it's how often it's "entered", not how often the profiler saw it... |
2025-04-08 05:32:49 +0200 | <emojelly> | then it isn't nonsensical per se |
2025-04-08 05:33:19 +0200 | <emojelly> | well, the 0 is... unless the 0 means the profiler never caught in "entering"? |
2025-04-08 05:33:23 +0200 | <emojelly> | still weird |
2025-04-08 05:33:30 +0200 | <EvanR> | clearly this data is not helping |
2025-04-08 05:33:36 +0200 | <emojelly> | it clearly isn't |
2025-04-08 05:36:49 +0200 | <emojelly> | let's see what happens if I downgrade ghc two minor versions. |
2025-04-08 05:37:53 +0200 | <emojelly> | I wonder if clash is hiding some unsafePerformIO somewhere... maybe I should also trace system calls. |
2025-04-08 05:37:59 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn |
2025-04-08 05:39:35 +0200 | <Axman6> | man, I cannot follow that code. It's crying out for some do-notation or something. |
2025-04-08 05:40:22 +0200 | <emojelly> | Axman6: hard do add do notation. Most of this code is just wrapping and unwrapping monads and monad transformers. That's just how this kind of thing goes... |
2025-04-08 05:41:04 +0200 | <emojelly> | but the many {-# SCC ... #-} I added thinking they would help profiling don't help for readability. (That's why it scrolls of the screen.) |
2025-04-08 05:41:37 +0200 | <emojelly> | It's also Coroutine-code, directly manipulating the Coroutines. That kind of code can seem convoluted to begin with. |
2025-04-08 05:42:43 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 244 seconds) |
2025-04-08 05:45:41 +0200 | Noir | (~Noir@2607:ac80:411:a:dc3c:8e7b:ab32:5495) |
2025-04-08 05:46:42 +0200 | Noir | (~Noir@2607:ac80:411:a:dc3c:8e7b:ab32:5495) (Remote host closed the connection) |
2025-04-08 05:49:30 +0200 | halloy2596 | (~halloy259@2607:ac80:411:a:dc3c:8e7b:ab32:5495) |
2025-04-08 05:50:04 +0200 | <emojelly> | flame graph: https://eniac.digital/fkdlvmiy/pbimage.uBoiIi.s.png |
2025-04-08 05:50:26 +0200 | <emojelly> | I know laziness and all, but it really makes it look like combineTestSignals is spending a whole lot of time not doing anything. |
2025-04-08 05:53:03 +0200 | <halloy2596> | Hi guys, I'm looking for more information regarding Google Summer of Code. I'm new to IRC, and so not very familiar with how to navigate haha |
2025-04-08 05:53:48 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn |
2025-04-08 05:56:07 +0200 | <EvanR> | it's getting late here, you might have shown up in a dead time |
2025-04-08 05:56:26 +0200 | <jackdk> | The Aussies have the night watch |
2025-04-08 05:56:50 +0200 | <jackdk> | I assume you mean Haskell projects for GSoC and not the scheme as a whole? I would expect an organisation like the Haskell Foundation to maintain pages with proposed projects, but I've never been involved |
2025-04-08 05:57:48 +0200 | <ski> | halloy2596 : most important advice : stick around, preferably at least for a couple of hours, to allow people to respond |
2025-04-08 05:58:03 +0200 | Fijxu | (~Fijxu@user/fijxu) (Quit: XD!!) |
2025-04-08 05:58:29 +0200 | <jackdk> | halloy2596: I'd recommend some web searches; a few minutes on DDG turned up https://summer.haskell.org/ideas.html |
2025-04-08 05:59:31 +0200 | <jackdk> | (prefixing a message with a name and a colon is like addressing it to that user; most clients will alert you if they see a message addressed to you. This convention predates @-ing people) |
2025-04-08 05:59:36 +0200 | chexum | (~quassel@gateway/tor-sasl/chexum) (Ping timeout: 264 seconds) |
2025-04-08 05:59:58 +0200 | chexum | (~quassel@gateway/tor-sasl/chexum) chexum |
2025-04-08 06:01:09 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 260 seconds) |
2025-04-08 06:04:08 +0200 | <halloy2596> | jackdk: Yep, I meant the Haskell projects for GSoC. I'd already looked at the project ideas, and specifically wanted to learn more about Liquid Haskell project. |
2025-04-08 06:04:39 +0200 | amadaluzia_ | (~amadaluzi@2a00:23c7:ed8b:6701:e287:4eed:50df:f686) (Ping timeout: 260 seconds) |
2025-04-08 06:04:42 +0200 | <halloy2596> | ski: understood |
2025-04-08 06:06:48 +0200 | halloy2596 | Noir |
2025-04-08 06:07:32 +0200 | <ski> | (that's the most common mistake IRC newbies seem to make : assume that if noone responds within five minutes (at best), then the channel must be dead) |
2025-04-08 06:08:15 +0200 | <EvanR> | and leave usually 2.7 minutes before I'm about to respond |
2025-04-08 06:08:22 +0200 | <EvanR> | ime |
2025-04-08 06:08:24 +0200 | <ski> | indeed |
2025-04-08 06:08:30 +0200 | <jackdk> | I've spoken to Facundo a couple of times, but I don't think he's on IRC. He's definitely keen to get more people using Liquid Haskell though. I'd see if you can turn up his email or DM him on discourse.haskell.org or something. General advice: put your specific questions into your opening email, because that shows you've done some homework and saves an email round-trip before getting stuck into the nitty-gritty. |
2025-04-08 06:08:53 +0200 | Fijxu | (~Fijxu@user/fijxu) fijxu |
2025-04-08 06:09:35 +0200 | JuanDaugherty | (~juan@user/JuanDaugherty) JuanDaugherty |
2025-04-08 06:11:38 +0200 | <ski> | hm, wasn't there a liquid-haskell channel or something ? |
2025-04-08 06:11:51 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn |
2025-04-08 06:12:21 +0200 | <jackdk> | Oh possibly, but I never heard about it |
2025-04-08 06:13:22 +0200 | <ski> | perhaps it was only on Freenode |
2025-04-08 06:13:32 +0200 | <JuanDaugherty> | cause quickcheck an stuff just isn enuf |
2025-04-08 06:14:26 +0200 | <Noir> | ski: I can't afford to leave lol. Applications close April 8 18:00 UTC, and since I forgot to put the GSoC's timeline in my calendar, I only got reminded an hour ago :( |
2025-04-08 06:14:26 +0200 | <ski> | ah, yes, #liquidhaskell used to exist ! |
2025-04-08 06:14:28 +0200 | <JuanDaugherty> | why liquid haskell ftw |
2025-04-08 06:15:34 +0200 | <ski> | Noir : here's a few things which might be useful to be aware of : "Don't Ask to Ask" <https://solhsa.com/dontask.html> (also <https://dontasktoask.com/>),"No Hello" in 2013-01-16 at <https://www.nohello.com/>,"How To Ask Questions The Smart Way" by Eric S. Raymond in 2001 - 2014 at <http://www.catb.org/esr/faqs/smart-questions.html> |
2025-04-08 06:15:44 +0200 | <Noir> | jackdk: Alright, I'll look into getting in contact with Facundo. Appreciate the tip! |
2025-04-08 06:16:21 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds) |
2025-04-08 06:16:21 +0200 | <ski> | (btw, not all people on IRC agree with all the points in those .. but some do, so it's good to know about, still) |
2025-04-08 06:17:01 +0200 | <Noir> | ski: I'd seen "Don't Ask to Ask", but not the other two. Thanks |
2025-04-08 06:17:31 +0200 | <ski> | (different channels can have a bit different atmosphere, culture, be more or less strict about off-topic chatter, and other things. it's a good idea to lay a bit low, when joining a new channel) |
2025-04-08 06:17:50 +0200 | <Noir> | I see |
2025-04-08 06:18:01 +0200 | <jackdk> | I strongly agree with most of the _content_ of those links (though nohello is more for DM/IM, IMHO) but wish the _framing_ was nicer |
2025-04-08 06:18:01 +0200 | <ski> | (i know of at least one channel here, where you can get kicked, if you insist on greeting, without stating any question or opening a conversation topic) |
2025-04-08 06:18:25 +0200 | <EvanR> | lol |
2025-04-08 06:18:39 +0200 | <EvanR> | you can easily circumvent it though |
2025-04-08 06:18:45 +0200 | <EvanR> | nohello evasion |
2025-04-08 06:18:50 +0200 | tavare | (~tavare@user/tavare) tavare |
2025-04-08 06:19:18 +0200 | michalz | (~michalz@185.246.207.205) |
2025-04-08 06:21:27 +0200 | <ski> | 2017-01-17 <wonder91:#liquidhaskell> ski: because it appears that, when the first Int is in { } brackets, i.e. {pIn : Int | x <= 255}, I couldn't use it later in the constraint {pOut : Int | pIn <= pOut ... } |
2025-04-08 06:21:58 +0200 | <EvanR> | 2017, libera didn't exist |
2025-04-08 06:22:05 +0200 | <ski> | indeed |
2025-04-08 06:27:14 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn |
2025-04-08 06:28:23 +0200 | <ski> | @quote answer.to.answer |
2025-04-08 06:28:23 +0200 | <lambdabot> | monochrom says: ... in other words: Don't answer to answer, just don't answer. >:) |
2025-04-08 06:30:03 +0200 | <monochrom> | I'm great at duality >:) |
2025-04-08 06:30:31 +0200 | <monochrom> | Another one: Cocartes says: Coproduct ergo sum. |
2025-04-08 06:30:35 +0200 | <ski> | apparently i said "my answer to that is : don't deduce, denote!" in response to something .. no idea what, though |
2025-04-08 06:30:51 +0200 | <monochrom> | (Cocartes was the evil twin of Descartes!) |
2025-04-08 06:31:06 +0200 | <ski> | not Cocortez, then ? |
2025-04-08 06:31:22 +0200 | <monochrom> | No. |
2025-04-08 06:31:24 +0200 | <ski> | or maybe that's just Rtez |
2025-04-08 06:32:18 +0200 | <ski> | @quote ergo.sum |
2025-04-08 06:32:18 +0200 | <lambdabot> | No quotes match. Are you on drugs? |
2025-04-08 06:32:21 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 248 seconds) |
2025-04-08 06:32:34 +0200 | <monochrom> | We're OK with hello though. Empirically no chain reaction has occurred, despite the theory. |
2025-04-08 06:32:36 +0200 | <EvanR> | rude |
2025-04-08 06:32:44 +0200 | <ski> | @remember monochrom Cocartes says: Coproduct ergo sum. |
2025-04-08 06:32:44 +0200 | <lambdabot> | I will never forget. |
2025-04-08 06:33:24 +0200 | <ski> | i'm not on drugs yet .. haven't made morning tea |
2025-04-08 06:34:29 +0200 | peterbecich | (~Thunderbi@syn-047-229-123-186.res.spectrum.com) (Ping timeout: 248 seconds) |
2025-04-08 06:35:18 +0200 | <monochrom> | There is one more layer of pun there. Infinite coproduct becomes the existential quantifer --- ergo sum! |
2025-04-08 06:36:51 +0200 | <ski> | why infinite ? |
2025-04-08 06:37:12 +0200 | <monochrom> | OK doesn't have to be always infinite. |
2025-04-08 06:37:44 +0200 | <monochrom> | Alternatively, the infinite case includes the finite case too! |
2025-04-08 06:38:21 +0200 | <ski> | reminds me of lexicographic well-ordering |
2025-04-08 06:38:45 +0200 | <ski> | hm .. and maybe wreath product on groups, or something ? |
2025-04-08 06:43:01 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn |
2025-04-08 06:44:50 +0200 | <Noir> | I reached out to Facundo (who's also the officially listed mentor for the Liquid Haskell project), but I got an automatic reply saying he'll be available from April 21st. |
2025-04-08 06:45:14 +0200 | <Noir> | Who should I try reaching out to next? |
2025-04-08 06:47:54 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds) |
2025-04-08 06:49:05 +0200 | <kqr> | EvanR, I did also have the idea of indexing in stages and running a query in between, but for this use case the complexity seems a tad too large |
2025-04-08 06:50:54 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn |
2025-04-08 06:50:55 +0200 | <kqr> | [exa], I already had -O2. I tried adding -fspecialise-aggressively and -fexpose-all-unfoldings but they did not make any difference in this case. |
2025-04-08 06:55:44 +0200 | <kqr> | EvanR, [exa]: Thanks for your engagement though. The sum of all the changes I've made since I started on this let me build an index for the full dataset in something like 10 minutes, using 20 GB of process memory (9 GB of active heap). That is good enough for my purposes and I will move on from this particular optimisation quest! |
2025-04-08 06:55:52 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 244 seconds) |
2025-04-08 07:06:10 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn |
2025-04-08 07:06:56 +0200 | Noir | (~halloy259@2607:ac80:411:a:dc3c:8e7b:ab32:5495) (Read error: Connection reset by peer) |
2025-04-08 07:11:00 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds) |
2025-04-08 07:13:17 +0200 | JuanDaugherty | (~juan@user/JuanDaugherty) (Quit: praxis.meansofproduction.biz (juan@acm.org)) |
2025-04-08 07:18:49 +0200 | halloy2596 | (~halloy259@2607:ac80:411:a:dc3c:8e7b:ab32:5495) |
2025-04-08 07:21:57 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn |
2025-04-08 07:25:22 +0200 | peterbecich | (~Thunderbi@syn-047-229-123-186.res.spectrum.com) peterbecich |
2025-04-08 07:26:45 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 248 seconds) |
2025-04-08 07:37:44 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn |
2025-04-08 07:44:33 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 245 seconds) |
2025-04-08 07:45:59 +0200 | peterbecich | (~Thunderbi@syn-047-229-123-186.res.spectrum.com) (Ping timeout: 244 seconds) |
2025-04-08 07:55:48 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn |
2025-04-08 07:57:35 +0200 | <Axman6> | emojelly: I'm curious what happens if you add specialisable to those functions, it feels like at the very least there's a lot of type class stuff going on that isn't visible |
2025-04-08 08:00:42 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 246 seconds) |
2025-04-08 08:04:56 +0200 | <emojelly> | 7,994,380,248 bytes copied during GC |
2025-04-08 08:04:58 +0200 | <emojelly> | Alloc rate 5,171,993,593 bytes per MUT second |
2025-04-08 08:05:05 +0200 | <emojelly> | you think that could be my problem? |
2025-04-08 08:05:18 +0200 | <emojelly> | that's a lot of copying bytes around for not a lot of work... |
2025-04-08 08:06:59 +0200 | halloy2596 | (~halloy259@2607:ac80:411:a:dc3c:8e7b:ab32:5495) (Read error: Connection reset by peer) |
2025-04-08 08:11:25 +0200 | jmcantrell | (~weechat@user/jmcantrell) (Quit: WeeChat 4.6.0) |
2025-04-08 08:11:25 +0200 | jmcantrell_ | jmcantrell |
2025-04-08 08:11:35 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn |
2025-04-08 08:12:56 +0200 | <Axman6> | yeah, that's why I asked about productivity earlier. what productivity % do you get? |
2025-04-08 08:14:15 +0200 | thuna` | (~thuna`@user/thuna/x-1480069) thuna` |
2025-04-08 08:14:21 +0200 | <Axman6> | emojelly: Also, if you're not there already, the #clash channel on the functional programming slack (I can link you if needed) has most of the clash devs, and they're super helpful. |
2025-04-08 08:14:52 +0200 | <Axman6> | Do you have the cod ein a github repo somewhere? I'm curious |
2025-04-08 08:16:28 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 244 seconds) |
2025-04-08 08:17:42 +0200 | <emojelly> | Axman6: I still do get >70% productivity and not *that* much gc time. If I turn the GC "off" (-I0 -A100G), it spends no time in gc, but it's still at over 3 bytes per MUT second |
2025-04-08 08:17:56 +0200 | <emojelly> | I don't think gc is so much the issue, as more that I'm somehow generating/moving *a lot* of data |
2025-04-08 08:18:00 +0200 | <emojelly> | and that data does not get retained |
2025-04-08 08:18:34 +0200 | <emojelly> | I can't figure out anything with heap profiling so far, because the heap stays relatively small (~40MB) despite, apparently, generating GBs of data per second... |
2025-04-08 08:18:59 +0200 | <emojelly> | don't have the code in a repo right now, will eventually put it |
2025-04-08 08:19:21 +0200 | <Axman6> | lmk when you do and I'll take a look |
2025-04-08 08:19:49 +0200 | <emojelly> | what's weird is that it says "78,163,981,824 bytes allocated in the heap", but heap profiling maxes out at around 40MB |
2025-04-08 08:20:23 +0200 | <emojelly> | What does that mean? That there is a lot of really shortlived data? |
2025-04-08 08:20:47 +0200 | <Axman6> | seems likely |
2025-04-08 08:21:51 +0200 | <emojelly> | I wish I could figure out what and why... |
2025-04-08 08:22:28 +0200 | <Axman6> | There's some new flag that tags each allocation with its location IIRC. not sure exactly how helpful that'd be for short lived stuff |
2025-04-08 08:23:39 +0200 | <emojelly> | Ah, do you happen to know which one? |
2025-04-08 08:25:02 +0200 | fp1 | (~Thunderbi@wireless-86-50-140-125.open.aalto.fi) fp |
2025-04-08 08:27:23 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn |
2025-04-08 08:30:39 +0200 | sord937 | (~sord937@gateway/tor-sasl/sord937) sord937 |
2025-04-08 08:32:23 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds) |
2025-04-08 08:34:18 +0200 | CiaoSen | (~Jura@2a02:8071:64e1:da0:5a47:caff:fe78:33db) CiaoSen |
2025-04-08 08:38:28 +0200 | halloy2596 | (~halloy259@2607:ac80:411:a:dc3c:8e7b:ab32:5495) |
2025-04-08 08:38:57 +0200 | halloy2596 | (~halloy259@2607:ac80:411:a:dc3c:8e7b:ab32:5495) (Client Quit) |
2025-04-08 08:41:12 +0200 | <Axman6> | um, it might be https://downloads.haskell.org/ghc/latest/docs/users_guide/profiling.html#rts-flag-hm or -hi used with https://downloads.haskell.org/ghc/latest/docs/users_guide/debug-info.html#ghc-flag-finfo-table-map |
2025-04-08 08:41:33 +0200 | ft | (~ft@p508db463.dip0.t-ipconnect.de) (Quit: leaving) |
2025-04-08 08:41:47 +0200 | <Axman6> | part of me really wants to replace so much of that code with coerce |
2025-04-08 08:41:58 +0200 | <Axman6> | (your coroutine code)_ |
2025-04-08 08:42:45 +0200 | <Axman6> | I have a feeling that rewrapCo f = Coroutine $ ReaderT (\c -> ExceptT (Identity (f c))) can become rewrapCo f = coerce f |
2025-04-08 08:43:11 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn |
2025-04-08 08:43:40 +0200 | <Axman6> | where might be benefits to doing that too, as the explicit lambda might actually get allocated - reminds me of an accidentally quadratic bug in cabal years ago |
2025-04-08 08:44:43 +0200 | <Axman6> | See https://accidentallyquadratic.tumblr.com/tagged/haskell for some examples |
2025-04-08 08:44:51 +0200 | tromp | (~textual@2001:1c00:3487:1b00:1419:ab0:498a:2d0c) |
2025-04-08 08:45:34 +0200 | tromp | (~textual@2001:1c00:3487:1b00:1419:ab0:498a:2d0c) (Client Quit) |
2025-04-08 08:48:10 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 265 seconds) |
2025-04-08 08:49:58 +0200 | Sgeo | (~Sgeo@user/sgeo) (Read error: Connection reset by peer) |
2025-04-08 08:51:52 +0200 | tromp | (~textual@2001:1c00:3487:1b00:1419:ab0:498a:2d0c) |
2025-04-08 08:54:06 +0200 | foul_owl | (~kerry@94.156.149.96) (Read error: Connection reset by peer) |
2025-04-08 08:58:58 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn |
2025-04-08 09:00:01 +0200 | caconym | (~caconym@user/caconym) (Quit: bye) |
2025-04-08 09:01:03 +0200 | caconym | (~caconym@user/caconym) caconym |
2025-04-08 09:03:11 +0200 | lortabac | (~lortabac@2a01:e0a:541:b8f0:55ab:e185:7f81:54a4) |
2025-04-08 09:03:56 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds) |
2025-04-08 09:10:51 +0200 | foul_owl | (~kerry@94.156.149.99) foul_owl |
2025-04-08 09:16:07 +0200 | tavare | (~tavare@user/tavare) (Remote host closed the connection) |
2025-04-08 09:17:29 +0200 | Lord_of_Life_ | (~Lord@user/lord-of-life/x-2819915) Lord_of_Life |
2025-04-08 09:17:29 +0200 | Lord_of_Life | (~Lord@user/lord-of-life/x-2819915) (Ping timeout: 252 seconds) |
2025-04-08 09:18:52 +0200 | Lord_of_Life_ | Lord_of_Life |
2025-04-08 09:23:57 +0200 | sord937 | (~sord937@gateway/tor-sasl/sord937) (Remote host closed the connection) |
2025-04-08 09:24:56 +0200 | sord937 | (~sord937@gateway/tor-sasl/sord937) sord937 |
2025-04-08 09:33:33 +0200 | fp1 | (~Thunderbi@wireless-86-50-140-125.open.aalto.fi) (Ping timeout: 268 seconds) |
2025-04-08 09:35:31 +0200 | <jackdk> | Axman6: if you had your way, everything would either be `coerce` or `id` |
2025-04-08 09:35:59 +0200 | <Axman6> | absolutely |
2025-04-08 09:36:25 +0200 | acidjnk_new3 | (~acidjnk@p200300d6e71c4f636055d0f69fb4dc8c.dip0.t-ipconnect.de) acidjnk |
2025-04-08 09:40:24 +0200 | lxsameer | (~lxsameer@Serene/lxsameer) lxsameer |
2025-04-08 09:43:08 +0200 | emmanuelux | (~emmanuelu@user/emmanuelux) (Read error: Connection reset by peer) |
2025-04-08 09:53:20 +0200 | merijn | (~merijn@77.242.116.146) merijn |
2025-04-08 09:53:50 +0200 | polyphem | (~rod@p4fc2cb32.dip0.t-ipconnect.de) polyphem |
2025-04-08 09:54:53 +0200 | machinedgod | (~machinedg@d108-173-18-100.abhsia.telus.net) machinedgod |
2025-04-08 09:58:24 +0200 | sord937 | (~sord937@gateway/tor-sasl/sord937) (Remote host closed the connection) |
2025-04-08 09:58:43 +0200 | sord937 | (~sord937@gateway/tor-sasl/sord937) sord937 |
2025-04-08 10:04:15 +0200 | dhil | (~dhil@2a0c:b381:52e:3600:103b:c63d:9624:f51b) dhil |
2025-04-08 10:17:31 +0200 | chele | (~chele@user/chele) chele |
2025-04-08 10:18:41 +0200 | user363627 | (~user@user/user363627) (Remote host closed the connection) |
2025-04-08 10:26:58 +0200 | tzh | (~tzh@c-76-115-131-146.hsd1.or.comcast.net) (Quit: zzz) |
2025-04-08 10:41:19 +0200 | <ski> | sounds fun. getting that kind of eta-contraction is kinda what tail-calls are about |
2025-04-08 10:55:03 +0200 | Unicorn_Princess | (~Unicorn_P@user/Unicorn-Princess/x-3540542) Unicorn_Princess |
2025-04-08 11:04:00 +0200 | sprotte24 | (~sprotte24@p200300d16f06b600a14bd9dc58a29dc6.dip0.t-ipconnect.de) |
2025-04-08 11:04:26 +0200 | gorignak | (~gorignak@user/gorignak) (Read error: Connection reset by peer) |
2025-04-08 11:04:32 +0200 | whez | (uid470288@id-470288.lymington.irccloud.com) |
2025-04-08 11:04:55 +0200 | gorignak | (~gorignak@user/gorignak) gorignak |
2025-04-08 11:07:54 +0200 | ubert | (~Thunderbi@2a02:8109:ab8a:5a00:27cc:9672:1463:dd93) ubert |
2025-04-08 11:25:08 +0200 | jco | (~jco@78-70-217-44-no600.tbcn.telia.com) jco |
2025-04-08 11:25:22 +0200 | fkv24 | (~fkv24@176.110.103.7) |
2025-04-08 11:26:13 +0200 | duckworld | (~duckworld@user/duckworld) (Remote host closed the connection) |
2025-04-08 11:26:26 +0200 | fkv24 | (~fkv24@176.110.103.7) (Client Quit) |
2025-04-08 11:26:47 +0200 | duckworld | (~duckworld@user/duckworld) duckworld |
2025-04-08 11:28:39 +0200 | duckworld | (~duckworld@user/duckworld) (Remote host closed the connection) |
2025-04-08 11:28:57 +0200 | duckworld | (~duckworld@user/duckworld) duckworld |
2025-04-08 11:47:07 +0200 | tromp | (~textual@2001:1c00:3487:1b00:1419:ab0:498a:2d0c) (Quit: My iMac has gone to sleep. ZZZzzz…) |
2025-04-08 11:48:06 +0200 | tromp | (~textual@2001:1c00:3487:1b00:1419:ab0:498a:2d0c) |
2025-04-08 11:50:06 +0200 | bitdex_ | (~bitdex@gateway/tor-sasl/bitdex) bitdex |
2025-04-08 11:51:48 +0200 | bitdex | (~bitdex@gateway/tor-sasl/bitdex) (Ping timeout: 264 seconds) |
2025-04-08 11:54:10 +0200 | j1n37 | (~j1n37@user/j1n37) j1n37 |
2025-04-08 11:55:14 +0200 | j1n37- | (~j1n37@user/j1n37) (Ping timeout: 260 seconds) |
2025-04-08 11:59:12 +0200 | forell | (~forell@user/forell) forell |
2025-04-08 12:02:53 +0200 | hc | (~hc@mail.hce.li) (Remote host closed the connection) |
2025-04-08 12:13:59 +0200 | glguy | (glguy@libera/staff/glguy) (Read error: Connection reset by peer) |
2025-04-08 12:14:20 +0200 | glguy | (glguy@libera/staff/glguy) glguy |
2025-04-08 12:17:24 +0200 | Smiles | (uid551636@id-551636.lymington.irccloud.com) Smiles |
2025-04-08 12:19:33 +0200 | lortabac | (~lortabac@2a01:e0a:541:b8f0:55ab:e185:7f81:54a4) (Ping timeout: 248 seconds) |
2025-04-08 12:19:42 +0200 | xff0x | (~xff0x@fsb6a9491c.tkyc517.ap.nuro.jp) (Ping timeout: 246 seconds) |
2025-04-08 12:20:24 +0200 | tabaqui | (~tabaqui@167.71.80.236) tabaqui |
2025-04-08 12:28:05 +0200 | CiaoSen | (~Jura@2a02:8071:64e1:da0:5a47:caff:fe78:33db) (Ping timeout: 265 seconds) |
2025-04-08 12:28:21 +0200 | poxel | (~lennart@user/poxel) poxel |
2025-04-08 12:30:32 +0200 | poxel | (~lennart@user/poxel) (Client Quit) |
2025-04-08 12:31:13 +0200 | poxel | (~lennart@user/poxel) poxel |
2025-04-08 12:33:25 +0200 | poxel | (~lennart@user/poxel) (Client Quit) |
2025-04-08 12:33:54 +0200 | __monty__ | (~toonn@user/toonn) toonn |
2025-04-08 12:35:20 +0200 | poxel | (~lennart@user/poxel) poxel |
2025-04-08 12:38:00 +0200 | <[exa]> | tomsmeding: btw after a few attempts trying to force massiv to do the histogram op sanely, I'm now with accelerate :D |
2025-04-08 12:40:51 +0200 | CiaoSen | (~Jura@2a02:8071:64e1:da0:5a47:caff:fe78:33db) CiaoSen |
2025-04-08 12:46:14 +0200 | Guest87 | (~Guest87@139.167.143.182) |
2025-04-08 12:46:58 +0200 | <[exa]> | btw just curious, can the scatter work there in parallel somehow? (the typical implementation is to split the source array, make a few thread-private copies of the target array, and then quickly merge them on the end) |
2025-04-08 12:48:04 +0200 | Guest87 | (~Guest87@139.167.143.182) (Client Quit) |
2025-04-08 12:48:58 +0200 | Guest56 | (~Guest38@2601:408:c181:12c0:fc6a:ec80:dcee:cbd5) |
2025-04-08 12:51:10 +0200 | lortabac | (~lortabac@2a01:e0a:541:b8f0:55ab:e185:7f81:54a4) |
2025-04-08 12:51:57 +0200 | <[exa]> | otoh any way to get accelerate working with ghc>9.2 ? |
2025-04-08 12:52:20 +0200 | <[exa]> | oh I mean, >=9 |
2025-04-08 12:55:54 +0200 | <srk> | looks like git one has support https://github.com/AccelerateHS/accelerate/pulls?q=is%3Apr+is%3Aclosed |
2025-04-08 13:00:05 +0200 | caconym | (~caconym@user/caconym) (Quit: bye) |
2025-04-08 13:02:09 +0200 | caconym | (~caconym@user/caconym) caconym |
2025-04-08 13:02:25 +0200 | jespada | (~jespada@r190-133-49-11.dialup.adsl.anteldata.net.uy) jespada |
2025-04-08 13:02:54 +0200 | thuna` | (~thuna`@user/thuna/x-1480069) (Ping timeout: 260 seconds) |
2025-04-08 13:07:13 +0200 | <[exa]> | oh great |
2025-04-08 13:07:15 +0200 | <[exa]> | srk: thx |
2025-04-08 13:16:23 +0200 | xff0x | (~xff0x@2405:6580:b080:900:c071:5032:6468:f840) |
2025-04-08 13:31:22 +0200 | Guest33 | (~Guest33@2409:40c0:37:8c86:24db:abaa:17dd:df2b) |
2025-04-08 13:33:11 +0200 | jespada | (~jespada@r190-133-49-11.dialup.adsl.anteldata.net.uy) (Ping timeout: 244 seconds) |
2025-04-08 13:33:37 +0200 | Guest48 | (~Guest33@2409:40c0:37:8c86:24db:abaa:17dd:df2b) |
2025-04-08 13:35:02 +0200 | puke | (~puke@user/puke) puke |
2025-04-08 13:35:33 +0200 | Guest48 | (~Guest33@2409:40c0:37:8c86:24db:abaa:17dd:df2b) (Client Quit) |
2025-04-08 13:35:33 +0200 | jespada | (~jespada@r167-61-127-49.dialup.adsl.anteldata.net.uy) jespada |
2025-04-08 13:36:12 +0200 | <[exa]> | hm are there any accelerate helpers for reading matrices from TSVs? |
2025-04-08 13:37:56 +0200 | sord937 | (~sord937@gateway/tor-sasl/sord937) (Remote host closed the connection) |
2025-04-08 13:38:16 +0200 | sord937 | (~sord937@gateway/tor-sasl/sord937) sord937 |
2025-04-08 13:38:22 +0200 | TheCoffeMaker_ | (~TheCoffeM@186.136.173.70) (Ping timeout: 268 seconds) |
2025-04-08 13:44:51 +0200 | tromp | (~textual@2001:1c00:3487:1b00:1419:ab0:498a:2d0c) (Quit: My iMac has gone to sleep. ZZZzzz…) |
2025-04-08 13:45:33 +0200 | Guest33 | (~Guest33@2409:40c0:37:8c86:24db:abaa:17dd:df2b) (Quit: Client closed) |
2025-04-08 13:48:14 +0200 | acidjnk_new3 | (~acidjnk@p200300d6e71c4f636055d0f69fb4dc8c.dip0.t-ipconnect.de) (Ping timeout: 268 seconds) |
2025-04-08 13:57:06 +0200 | weary-traveler | (~user@user/user363627) user363627 |
2025-04-08 14:01:21 +0200 | acidjnk_new3 | (~acidjnk@p200300d6e71c4f63a07ba30a5b7d27a5.dip0.t-ipconnect.de) acidjnk |
2025-04-08 14:08:14 +0200 | <haskellbridge> | <Liamzee> hey EvanR |
2025-04-08 14:09:55 +0200 | <haskellbridge> | <Liamzee> Yup, here. Wechat Haskell is sort of wild, there's this Wally-esque guy going on about his Haskell "sh* mountain" repo, and worrying about the probability that his code will break within a year and he'll be unable to fix it, and other people are complimenting him on having obtained job security. |
2025-04-08 14:11:02 +0200 | <haskellbridge> | <Liamzee> Oh, hi Hellwolf. |
2025-04-08 14:11:37 +0200 | <hellwolf> | hmm, hi? |
2025-04-08 14:12:09 +0200 | <haskellbridge> | <Liamzee> I'm just saying it's great, you're probably on chat. |
2025-04-08 14:14:41 +0200 | <haskellbridge> | <Liamzee> Gossip-wise, I'd rather focus on just having discovered Mercury's Haskell-oriented AI assistant than's based on Senko from Senko the Helpful Fox. |
2025-04-08 14:15:54 +0200 | <haskellbridge> | <Liamzee> https://github.com/MercuryTechnologies/ada |
2025-04-08 14:20:54 +0200 | j1n37 | (~j1n37@user/j1n37) (Ping timeout: 260 seconds) |
2025-04-08 14:21:55 +0200 | j1n37 | (~j1n37@user/j1n37) j1n37 |
2025-04-08 14:22:27 +0200 | <haskellbridge> | <Liamzee> "Make more Haskell sh* mountains and create more jobs for Haskell" |
2025-04-08 14:24:57 +0200 | <hellwolf> | jobs4all? |
2025-04-08 14:27:03 +0200 | CiaoSen | (~Jura@2a02:8071:64e1:da0:5a47:caff:fe78:33db) (Ping timeout: 245 seconds) |
2025-04-08 14:28:35 +0200 | bionade24 | (~quassel@server2.oscloud.info) (Quit: Apocalypse Incoming!) |
2025-04-08 14:30:50 +0200 | <haskellbridge> | <Liamzee> And honestly that's why I care about Chinese Haskell so much, the Chinese Haskell community, what's left of it, is pragmatic to the point of cynicism, and that speaks to my heart. Monads are nice because they're useful, and over-abstracting your codebase leads to job security. |
2025-04-08 14:36:25 +0200 | Smiles | (uid551636@id-551636.lymington.irccloud.com) (Quit: Connection closed for inactivity) |
2025-04-08 14:37:17 +0200 | [exa] | confused |
2025-04-08 14:39:07 +0200 | Guest56 | (~Guest38@2601:408:c181:12c0:fc6a:ec80:dcee:cbd5) (Quit: Client closed) |
2025-04-08 14:42:52 +0200 | <haskellbridge> | <Liamzee> [exa]: why are you confused? |
2025-04-08 14:43:33 +0200 | acidjnk_new3 | (~acidjnk@p200300d6e71c4f63a07ba30a5b7d27a5.dip0.t-ipconnect.de) (Ping timeout: 246 seconds) |
2025-04-08 14:45:07 +0200 | <[exa]> | how does one use the FullShape from accelerate? I'm permanently getting errors that something wants e.g. `Couldn't match type: A.FullShape ((Z :. head0) :. head1) with with: `(Z :. Int) :. Int` |
2025-04-08 14:45:47 +0200 | acidjnk_new3 | (~acidjnk@p200300d6e71c4f631cbaa9c9535aaf6d.dip0.t-ipconnect.de) |
2025-04-08 14:47:15 +0200 | <[exa]> | uuuuuuuuh, got solved by annotating the indices with ::Int |
2025-04-08 14:47:50 +0200 | <[exa]> | so probably a type family inference issue I guess, yet still interesting (from the error message it seems to very well know that there's Int) |
2025-04-08 14:47:53 +0200 | TheCoffeMaker | (~TheCoffeM@user/thecoffemaker) TheCoffeMaker |
2025-04-08 14:49:37 +0200 | tromp | (~textual@2001:1c00:3487:1b00:1419:ab0:498a:2d0c) |
2025-04-08 14:52:00 +0200 | <Leary> | The compiler needs to know that `head0, head1 ~ Int` to select the right instance and resolve the type family, only then will it see that the types match. It can't work backwards from the RHS of a type family without injectivity annotations. |
2025-04-08 14:53:43 +0200 | TheCoffeMaker | (~TheCoffeM@user/thecoffemaker) (Ping timeout: 252 seconds) |
2025-04-08 14:54:07 +0200 | TheCoffeMaker | (~TheCoffeM@user/thecoffemaker) TheCoffeMaker |
2025-04-08 14:54:54 +0200 | bitdex_ | (~bitdex@gateway/tor-sasl/bitdex) (Quit: = "") |
2025-04-08 14:55:10 +0200 | <[exa]> | ahhh OIC, I messed up the error message reading |
2025-04-08 14:56:10 +0200 | <[exa]> | I was reading one on the array, which was expecting the FullShape with type variables, and got one with Ints. The one on the actual indices is complaining about CoSliceShape |
2025-04-08 14:56:12 +0200 | <[exa]> | all good |
2025-04-08 14:56:14 +0200 | <[exa]> | Leary: thanks :) |
2025-04-08 14:58:38 +0200 | bionade24 | (~quassel@2a03:4000:33:45b::1) bionade24 |
2025-04-08 15:21:14 +0200 | TheCoffeMaker | (~TheCoffeM@user/thecoffemaker) (Ping timeout: 252 seconds) |
2025-04-08 15:22:57 +0200 | TheCoffeMaker | (~TheCoffeM@user/thecoffemaker) TheCoffeMaker |
2025-04-08 15:29:29 +0200 | ubert | (~Thunderbi@2a02:8109:ab8a:5a00:27cc:9672:1463:dd93) (Quit: ubert) |
2025-04-08 15:32:22 +0200 | Chai-T-Rex | (~ChaiTRex@user/chaitrex) ChaiTRex |
2025-04-08 15:33:48 +0200 | <haskellbridge> | <Liamzee> oh, btw, mercury is like, Haskell's #2 unicorn, right? |
2025-04-08 15:35:36 +0200 | ChaiTRex | (~ChaiTRex@user/chaitrex) (Ping timeout: 264 seconds) |
2025-04-08 15:38:55 +0200 | <haskellbridge> | <Liamzee> well, no one's interested, but Mercury is now valued at 3.6 billion, and if Hasura is still growing, Mercury is likely in the same range. Revenue is half that of Anduril's (latter is estimated at over 1 billion, Mercury is around half a billion, but likely good profit margins due to their category) |
2025-04-08 15:38:59 +0200 | <haskellbridge> | <Liamzee> dropped |
2025-04-08 15:42:09 +0200 | sord937 | (~sord937@gateway/tor-sasl/sord937) (Remote host closed the connection) |
2025-04-08 15:42:12 +0200 | loonycyborg | (loonycybor@wesnoth/developer/loonycyborg) (Ping timeout: 272 seconds) |
2025-04-08 15:43:08 +0200 | sord937 | (~sord937@gateway/tor-sasl/sord937) sord937 |
2025-04-08 15:43:28 +0200 | loonycyborg | (loonycybor@wesnoth/developer/loonycyborg) loonycyborg |
2025-04-08 15:47:13 +0200 | TheCoffeMaker | (~TheCoffeM@user/thecoffemaker) (Ping timeout: 244 seconds) |
2025-04-08 15:51:53 +0200 | <__monty__> | Another weapons manufacturer? What a sad world. |
2025-04-08 16:02:55 +0200 | <haskellbridge> | <Liamzee> ??? |
2025-04-08 16:03:00 +0200 | <haskellbridge> | <Liamzee> Mercury's a fintech company, a virtual bank |
2025-04-08 16:04:26 +0200 | bezik | (~bezik@wikipedia/bezik) (Quit: bye/) |
2025-04-08 16:05:08 +0200 | <haskellbridge> | <Liamzee> they specialize in providing banking services to startups |
2025-04-08 16:07:26 +0200 | polyphem | (~rod@p4fc2cb32.dip0.t-ipconnect.de) (Ping timeout: 252 seconds) |
2025-04-08 16:09:27 +0200 | sord937 | (~sord937@gateway/tor-sasl/sord937) (Remote host closed the connection) |
2025-04-08 16:09:47 +0200 | sord937 | (~sord937@gateway/tor-sasl/sord937) sord937 |
2025-04-08 16:10:14 +0200 | vulpine | (xfnw@user/meow/xfnw) (Quit: Connection reset by purr) |
2025-04-08 16:10:48 +0200 | vulpine | (xfnw@user/meow/xfnw) xfnw |
2025-04-08 16:10:54 +0200 | <__monty__> | Ah, that's slightly less overtly harmful. |
2025-04-08 16:11:13 +0200 | lortabac | (~lortabac@2a01:e0a:541:b8f0:55ab:e185:7f81:54a4) (Quit: WeeChat 4.5.2) |
2025-04-08 16:13:59 +0200 | <haskellbridge> | <Liamzee> i don't see how that's harmful at all |
2025-04-08 16:17:48 +0200 | alinab | (sid468903@id-468903.helmsley.irccloud.com) (Ping timeout: 276 seconds) |
2025-04-08 16:17:48 +0200 | gmc | (sid58314@id-58314.ilkley.irccloud.com) (Ping timeout: 276 seconds) |
2025-04-08 16:18:02 +0200 | tapas | (sid467876@id-467876.ilkley.irccloud.com) (Read error: Connection reset by peer) |
2025-04-08 16:18:05 +0200 | cbarrett | (sid192934@id-192934.helmsley.irccloud.com) (Read error: Connection reset by peer) |
2025-04-08 16:18:05 +0200 | alanz | (sid110616@id-110616.uxbridge.irccloud.com) (Read error: Connection reset by peer) |
2025-04-08 16:18:05 +0200 | sa | (sid1055@id-1055.tinside.irccloud.com) (Read error: Connection reset by peer) |
2025-04-08 16:18:06 +0200 | rubin55 | (sid666180@id-666180.ilkley.irccloud.com) (Read error: Connection reset by peer) |
2025-04-08 16:18:07 +0200 | unlucy | (sid572875@user/unlucy) (Read error: Connection reset by peer) |
2025-04-08 16:18:11 +0200 | alinab | (sid468903@id-468903.helmsley.irccloud.com) |
2025-04-08 16:18:13 +0200 | gmc | (sid58314@id-58314.ilkley.irccloud.com) gmc |
2025-04-08 16:18:14 +0200 | tapas | (sid467876@id-467876.ilkley.irccloud.com) tapas |
2025-04-08 16:18:15 +0200 | alanz | (sid110616@id-110616.uxbridge.irccloud.com) alanz |
2025-04-08 16:18:16 +0200 | cbarrett | (sid192934@id-192934.helmsley.irccloud.com) cbarrett |
2025-04-08 16:18:21 +0200 | Pent | (sid313808@id-313808.lymington.irccloud.com) (Ping timeout: 252 seconds) |
2025-04-08 16:18:22 +0200 | Kamuela | (sid111576@id-111576.tinside.irccloud.com) (Ping timeout: 252 seconds) |
2025-04-08 16:18:22 +0200 | rubin55 | (sid666180@id-666180.ilkley.irccloud.com) rubin55 |
2025-04-08 16:18:27 +0200 | gaze__ | (sid387101@id-387101.helmsley.irccloud.com) (Read error: Connection reset by peer) |
2025-04-08 16:18:27 +0200 | shawwwn | (sid6132@id-6132.helmsley.irccloud.com) (Read error: Connection reset by peer) |
2025-04-08 16:18:31 +0200 | sa | (sid1055@id-1055.tinside.irccloud.com) sa |
2025-04-08 16:18:36 +0200 | mustafa | (sid502723@rockylinux/releng/mustafa) (Read error: Connection reset by peer) |
2025-04-08 16:18:37 +0200 | unlucy | (sid572875@user/unlucy) unlucy |
2025-04-08 16:18:39 +0200 | gaze__ | (sid387101@id-387101.helmsley.irccloud.com) gaze__ |
2025-04-08 16:18:39 +0200 | shawwwn | (sid6132@id-6132.helmsley.irccloud.com) shawwwn |
2025-04-08 16:18:42 +0200 | meinside | (uid24933@id-24933.helmsley.irccloud.com) (Read error: Connection reset by peer) |
2025-04-08 16:18:42 +0200 | integral | (sid296274@user/integral) (Read error: Connection reset by peer) |
2025-04-08 16:18:47 +0200 | mustafa | (sid502723@rockylinux/releng/mustafa) mustafa |
2025-04-08 16:18:54 +0200 | meinside | (uid24933@id-24933.helmsley.irccloud.com) meinside |
2025-04-08 16:18:56 +0200 | integral | (sid296274@user/integral) integral |
2025-04-08 16:20:01 +0200 | taktoa[c] | (sid282096@id-282096.tinside.irccloud.com) (Ping timeout: 248 seconds) |
2025-04-08 16:20:02 +0200 | Boarders_____ | (sid425905@id-425905.lymington.irccloud.com) (Ping timeout: 248 seconds) |
2025-04-08 16:20:02 +0200 | caasih | (sid13241@id-13241.ilkley.irccloud.com) (Ping timeout: 248 seconds) |
2025-04-08 16:20:05 +0200 | edm | (sid147314@id-147314.hampstead.irccloud.com) (Ping timeout: 265 seconds) |
2025-04-08 16:20:11 +0200 | Boarders_____ | (sid425905@id-425905.lymington.irccloud.com) |
2025-04-08 16:20:34 +0200 | taktoa[c] | (sid282096@id-282096.tinside.irccloud.com) taktoa[c] |
2025-04-08 16:22:25 +0200 | caasih | (sid13241@id-13241.ilkley.irccloud.com) caasih |
2025-04-08 16:22:34 +0200 | Kamuela | (sid111576@id-111576.tinside.irccloud.com) Kamuela |
2025-04-08 16:22:48 +0200 | Pent | (sid313808@id-313808.lymington.irccloud.com) Pent____ |
2025-04-08 16:23:35 +0200 | edm | (sid147314@id-147314.hampstead.irccloud.com) |
2025-04-08 16:29:46 +0200 | <EvanR> | Liamzee, about how monads = job security (as opposed to just being useful for coding), I was really surprised at my code yesterday. I needed a "fresh variable" at places in the algorithm, so instead of shoe horning a stateful generator into the recursion, I made a quick (non-free) monad for it |
2025-04-08 16:30:04 +0200 | <EvanR> | and it actually cleaned up the code since I could put the other thing in there, failing early |
2025-04-08 16:30:55 +0200 | <EvanR> | I feel like it took less code than pulling in a "monad stack" for this purpose |
2025-04-08 16:34:30 +0200 | <EvanR> | maybe monads get unfairly disrespected! |
2025-04-08 16:37:58 +0200 | poxel | (~lennart@user/poxel) (Ping timeout: 265 seconds) |
2025-04-08 16:39:33 +0200 | amadaluzia | (~amadaluzi@2a00:23c7:ed8b:6701:c483:4ce8:4c61:1453) |
2025-04-08 16:41:12 +0200 | <ski> | @unmtl StateT s Maybe a |
2025-04-08 16:41:12 +0200 | <lambdabot> | s -> Maybe (a, s) |
2025-04-08 16:42:28 +0200 | <EvanR> | it might be even less code to write the whole thing using s -> Maybe (a, s) but the code would be much noisier |
2025-04-08 16:44:03 +0200 | Smiles | (uid551636@id-551636.lymington.irccloud.com) Smiles |
2025-04-08 16:45:18 +0200 | poxel | (~lennart@user/poxel) poxel |
2025-04-08 16:47:02 +0200 | <ski> | mm |
2025-04-08 16:49:11 +0200 | <EvanR> | apparently in elixir they are living with threading the next state variables carefully through the computation after pattern matching on the return value. Which is why they proposed a dedicated state monad syntax, but without monads :( |
2025-04-08 16:50:57 +0200 | jespada | (~jespada@r167-61-127-49.dialup.adsl.anteldata.net.uy) (Quit: My Mac has gone to sleep. ZZZzzz…) |
2025-04-08 16:51:41 +0200 | <haskellbridge> | <Liamzee> well i didn't say they were for job security, i was just saying using excessive non-useful abstraction was good for job security, and i was half making fun of the cynicism in chinese haskell community |
2025-04-08 16:52:18 +0200 | <EvanR> | abstraction if done right is addictive! |
2025-04-08 16:52:21 +0200 | <haskellbridge> | <Liamzee> EvanR: dedicated syntax isn't a bad thing insofar as it'll be handled by the compiler instead of through lambda calculus with implied costs of bind |
2025-04-08 16:52:24 +0200 | <EvanR> | not everyone has seen the light |
2025-04-08 16:53:05 +0200 | <EvanR> | I disagree here because they could have reused the syntax for other things, e.g. early return, or whatever effects |
2025-04-08 16:53:12 +0200 | <haskellbridge> | <Liamzee> abstraction is only useful if other people understand the abstraction |
2025-04-08 16:53:16 +0200 | <EvanR> | they just would be guilty of using monads |
2025-04-08 16:53:27 +0200 | <EvanR> | I disagree with that |
2025-04-08 16:53:29 +0200 | sprotte24_ | (~sprotte24@p200300d16f06b600a14bd9dc58a29dc6.dip0.t-ipconnect.de) |
2025-04-08 16:53:35 +0200 | <EvanR> | as literally stated |
2025-04-08 16:53:58 +0200 | <haskellbridge> | <Liamzee> the same guy complaining was admitting to abusing C++ templates to make it hard for his end users to modify his code |
2025-04-08 16:53:58 +0200 | <EvanR> | since it diminishes the value of your individual understanding |
2025-04-08 16:54:50 +0200 | <EvanR> | then that's not abstraction but obfuscation |
2025-04-08 16:55:30 +0200 | ouilemur | (~jgmerritt@user/ouilemur) ouilemur |
2025-04-08 16:55:43 +0200 | <ouilemur> | #haskell-beginners |
2025-04-08 16:56:27 +0200 | <hellwolf> | it's like dress code, but for code style, so that you exclude some people culturally? |
2025-04-08 17:00:44 +0200 | <haskellbridge> | <Liamzee> But it's just standard use of C++ templates, it just ended up being that his customers were unlikely to have knowledge of C++ metaprogramming |
2025-04-08 17:01:14 +0200 | gorignak | (~gorignak@user/gorignak) (Quit: quit) |
2025-04-08 17:01:31 +0200 | gorignak | (~gorignak@user/gorignak) gorignak |
2025-04-08 17:02:53 +0200 | gorignak | (~gorignak@user/gorignak) (Client Quit) |
2025-04-08 17:03:44 +0200 | <EvanR> | ski, and a new variable generator kind of doesn't need full state, since the counter could only increase. So a supply monad |
2025-04-08 17:05:56 +0200 | <haskellbridge> | <Liamzee> supply monad? |
2025-04-08 17:06:39 +0200 | <haskellbridge> | <Liamzee> https://hackage.haskell.org/package/transformers-supply-0.1.0/docs/Control-Monad-Supply.html |
2025-04-08 17:06:47 +0200 | <EvanR> | that is that |
2025-04-08 17:08:02 +0200 | <haskellbridge> | <Liamzee> i think it's like a cultural thing with us, we like going "ooh, a new monad", but for someone unfamiliar with it, since it's rarer than standard RWS, it means 15-30 minutes grokking it when they might have other things to do |
2025-04-08 17:09:25 +0200 | hiecaq | (~hiecaq@user/hiecaq) hiecaq |
2025-04-08 17:10:03 +0200 | <EvanR> | sometimes you hear this argument that you shouldn't use something because someone might not have heard of it |
2025-04-08 17:10:18 +0200 | <EvanR> | which if serious would drastically curtail the number of things you can use |
2025-04-08 17:10:50 +0200 | <EvanR> | a lot of people have not heard of C++. Better avoid |
2025-04-08 17:12:36 +0200 | <haskellbridge> | <Liamzee> i mean you were asking about the complaints about Haskell and the Lisps producing eDSL disease; this is a component of eDSL disease, abstractions which are useful but require onboarding time |
2025-04-08 17:13:01 +0200 | <EvanR> | "eDSL disease" sounds like a non-starter already |
2025-04-08 17:14:09 +0200 | <EvanR> | lets talk about the pros and cons of C++ disease. I think I'd be laughed out of the room |
2025-04-08 17:16:40 +0200 | <haskellbridge> | <Liamzee> wait, are you working in C++ again? |
2025-04-08 17:17:51 +0200 | <EvanR> | that was a hypothetical to demonstrate the absurdity of "eDSL disease" as a token |
2025-04-08 17:18:04 +0200 | chexum | (~quassel@gateway/tor-sasl/chexum) (Remote host closed the connection) |
2025-04-08 17:18:16 +0200 | chexum | (~quassel@gateway/tor-sasl/chexum) chexum |
2025-04-08 17:19:08 +0200 | <hellwolf> | what is an eDSL disease? |
2025-04-08 17:19:12 +0200 | jespada | (~jespada@r167-61-127-49.dialup.adsl.anteldata.net.uy) jespada |
2025-04-08 17:19:45 +0200 | <EvanR> | using an eDSL |
2025-04-08 17:20:13 +0200 | <haskellbridge> | <Liamzee> i'm just characterizing it as a criticism of Haskell and the Lisps, i.e, the ability to create codebases that are hard to onboard because they're effectively obfuscated by overuse of macros or creation of a complex eDSL for the codebase |
2025-04-08 17:20:52 +0200 | <EvanR> | well bring someone in who feels that way and may we can show them the light |
2025-04-08 17:21:30 +0200 | <haskellbridge> | <Liamzee> so i guess your new position is "simple haskell is stupid"? |
2025-04-08 17:22:10 +0200 | __jmcantrell__ | (~weechat@user/jmcantrell) jmcantrell |
2025-04-08 17:22:28 +0200 | jmcantrell | Guest9294 |
2025-04-08 17:22:28 +0200 | Guest9294 | (644f1bed9a@user/jmcantrell) (Killed (molybdenum.libera.chat (Nickname regained by services))) |
2025-04-08 17:22:28 +0200 | __jmcantrell__ | jmcantrell |
2025-04-08 17:22:36 +0200 | <haskellbridge> | <Liamzee> my position isn't that abstraction is intrinsically bad either, it's that abstraction has tradeoffs |
2025-04-08 17:22:37 +0200 | jmcantrell_ | (644f1bed9a@user/jmcantrell) jmcantrell |
2025-04-08 17:23:03 +0200 | <EvanR> | you use abstractions at many levels and it's taken for granted |
2025-04-08 17:23:25 +0200 | <EvanR> | virtual memory is an abstraction, arithmetic is an abstraction, dynamically typed programming is a giant abstraction |
2025-04-08 17:23:50 +0200 | <haskellbridge> | <Liamzee> would you agree that abstraction increases onboarding time? |
2025-04-08 17:23:51 +0200 | <EvanR> | whatever the trade off is, people are taking it |
2025-04-08 17:24:18 +0200 | <EvanR> | being unfamiliar with something increases onboarding time |
2025-04-08 17:24:20 +0200 | <EvanR> | generally |
2025-04-08 17:24:39 +0200 | <hellwolf> | let's just use the actual turing machine with belt and boxes. |
2025-04-08 17:24:40 +0200 | <EvanR> | and there's a lot of examples of that besides an eDSL |
2025-04-08 17:24:53 +0200 | <hellwolf> | abstractions be damned. |
2025-04-08 17:25:06 +0200 | <EvanR> | hellwolf, turing machine is an abstraction. And would be unfamiliar to many, increasing onboarding time |
2025-04-08 17:25:54 +0200 | Gadot | gadot |
2025-04-08 17:26:14 +0200 | <hellwolf> | alright. shan't we all just use prompt engineering now. what you prompt is maybe what you get. |
2025-04-08 17:26:38 +0200 | <EvanR> | agreed that that would be highly non abstract |
2025-04-08 17:27:06 +0200 | <haskellbridge> | <Liamzee> hellwolf, did i offend you somehow? |
2025-04-08 17:27:08 +0200 | <EvanR> | but would be vaguely defined an unexplainable |
2025-04-08 17:27:09 +0200 | vanishingideal | (~vanishing@user/vanishingideal) (Ping timeout: 260 seconds) |
2025-04-08 17:27:59 +0200 | <hellwolf> | no no, you haven't. I am just piling onto IRC water cooling conversations. Sorry, I go back to coding. |
2025-04-08 17:28:08 +0200 | <haskellbridge> | <Liamzee> love you man |
2025-04-08 17:28:11 +0200 | <haskellbridge> | <Liamzee> same to evanr |
2025-04-08 17:28:42 +0200 | <haskellbridge> | <Liamzee> EvanR: That's sort of m y problem with Haskell library ecosystem; there are tons of unfamiliar abstractions, takes a while to get used to them. |
2025-04-08 17:28:55 +0200 | vanishingideal | (~vanishing@user/vanishingideal) vanishingideal |
2025-04-08 17:29:05 +0200 | <EvanR> | have you ever used a C library |
2025-04-08 17:29:23 +0200 | <hellwolf> | The actual Haskell problem: "we build abstractions, so that you don't have to" -> "I left the project, so that you are stuck" |
2025-04-08 17:29:52 +0200 | <EvanR> | one that you weren't already familiar with |
2025-04-08 17:30:27 +0200 | <EvanR> | there's a lot of onboarding before you can use an arbitrary C library |
2025-04-08 17:30:51 +0200 | <EvanR> | since it can do anything and you need to play by their rules |
2025-04-08 17:30:58 +0200 | <haskellbridge> | <Liamzee> i see, i went through parts of gmp recentnly |
2025-04-08 17:31:17 +0200 | <haskellbridge> | <Liamzee> and i was also enjoying people discussing how tinyfiledialogs had "main.py energy" |
2025-04-08 17:32:07 +0200 | <EvanR> | meanwhile if you load the diagrams haskell library, you can get started drawing diagrams pretty fast, because it's "domain specific" and the scope is way less |
2025-04-08 17:32:38 +0200 | <EvanR> | you might be able to get away with the name of the operator and the type signature |
2025-04-08 17:32:56 +0200 | <EvanR> | and get new diagrams from old |
2025-04-08 17:33:34 +0200 | <haskellbridge> | <Liamzee> well, thanks for the suggestion, seems fun |
2025-04-08 17:34:15 +0200 | <EvanR> | that diagrams uses abstraction is a good thing |
2025-04-08 17:34:41 +0200 | <EvanR> | that not everyone has already become familiar with it shouldn't count against it because that's absurd |
2025-04-08 17:35:30 +0200 | <haskellbridge> | <Liamzee> tbh to some extent this feels like a rehash of "type signatures are all the documentation you need" |
2025-04-08 17:37:39 +0200 | <EvanR> | it's not |
2025-04-08 17:38:20 +0200 | <hellwolf> | vectorOf :: Int -> Gen a -> Gen [a] |
2025-04-08 17:38:23 +0200 | <hellwolf> | do you trust this signature |
2025-04-08 17:38:45 +0200 | <haskellbridge> | <Liamzee> i mean, am i characterizing your position as "abstractions are always good" correctly? |
2025-04-08 17:39:16 +0200 | <ski> | <EvanR> sometimes you hear this argument that you shouldn't use something because someone might not have heard of it |
2025-04-08 17:39:21 +0200 | ski | . o O ( "Everyone knows that debugging is twice as hard as writing a program in the first place. So if you're as clever as you can be when you write it, how will you ever debug it?" -- "The Elements of Programming Style" by Brian W. Kernighan,P. J. Plauger in 1978 ; "Kernighan's lever" by Linus Åkesson in 2012-12-111 at <https://www.linusakesson.net/programming/kernighans-lever/index.php> ) |
2025-04-08 17:40:02 +0200 | <hellwolf> | https://en.wikipedia.org/wiki/Not_invented_here <-- a variant of this. "not what I am used to" |
2025-04-08 17:40:57 +0200 | <EvanR> | your characterization has problems taken out of context, or even in this context, since I don't even know if we think of "abstractions" as the same concept. What is "good", etc |
2025-04-08 17:41:07 +0200 | hellwolf | duck, to get something done. |
2025-04-08 17:41:47 +0200 | <EvanR> | your version involves haskell libraries you don't yet know, while I use examples like virtual memory, or dynamic types (very popular) |
2025-04-08 17:41:58 +0200 | ski | also invokes monochrom on "intuitive", failing to find an appropriate quote |
2025-04-08 17:43:15 +0200 | <haskellbridge> | <Liamzee> i'll state my purport: abstractions are double-edged, they take time to learn and might take so much time as to make them impractical for working with others. On the other hand, they make code easier to write, often to read, and often to understand once you know the abstraction. This is a trade-off. |
2025-04-08 17:43:19 +0200 | <haskellbridge> | <Liamzee> It implies that the correct level of abstraction depends on the context. |
2025-04-08 17:43:54 +0200 | <EvanR> | you're making a distinction between abstract and non-abstract code, which I find dubious |
2025-04-08 17:44:07 +0200 | <EvanR> | it's really the distinction between code someone understands and code someone doesn't yet understand |
2025-04-08 17:44:35 +0200 | <EvanR> | which makes sense but blaming it on "abstraction" doesn't sound right |
2025-04-08 17:44:52 +0200 | <ski> | these abstractions vs. those abstractions ? |
2025-04-08 17:45:25 +0200 | <haskellbridge> | <Liamzee> abstractions most people know, abstractions most people should know, and abstractions that are idiosyncratic |
2025-04-08 17:45:34 +0200 | <haskellbridge> | <Liamzee> how about dividing things into those three categories? |
2025-04-08 17:46:03 +0200 | <haskellbridge> | <Liamzee> /s/people know/people already know |
2025-04-08 17:46:06 +0200 | <EvanR> | it will take me some time to find a charitable interpretation of "abstractions most people know" |
2025-04-08 17:46:39 +0200 | <EvanR> | quantifying over a given job market etc |
2025-04-08 17:46:49 +0200 | <EvanR> | might be too limiting |
2025-04-08 17:46:59 +0200 | <EvanR> | haskell would be mostly irrelevant |
2025-04-08 17:47:02 +0200 | <haskellbridge> | <Liamzee> yeah and people is an imprecise statement, should be more clearly specified as "people who are likely to work on your project and whose understanding of your project matetrs" |
2025-04-08 17:47:06 +0200 | <EvanR> | most people don't know any haskell whatever |
2025-04-08 17:47:20 +0200 | <haskellbridge> | <Liamzee> most people don't know any programming whatsoever |
2025-04-08 17:47:58 +0200 | <EvanR> | so the scope of this discussion is incredibly shrinking xD |
2025-04-08 17:48:26 +0200 | <haskellbridge> | <Liamzee> insert monochrom commenting that most arguments are a dispute over definitions or implicit assumptions, or something to that effect |
2025-04-08 17:48:53 +0200 | <EvanR> | logical argument begins with assumptions |
2025-04-08 17:49:01 +0200 | <EvanR> | rhetoric maybe not |
2025-04-08 17:49:48 +0200 | <haskellbridge> | <Liamzee> and i suppose i could lampoon my own logic by stating that most people should try to clarify their assumptions and priors, but do not have a habit of doing so |
2025-04-08 17:50:20 +0200 | <EvanR> | if somebody is working at an actual job with haskell, they're already somebody who learns things way outside the required things |
2025-04-08 17:50:48 +0200 | chele | (~chele@user/chele) (Remote host closed the connection) |
2025-04-08 17:50:49 +0200 | <EvanR> | I see no reason to go easy on this person working at an actual job |
2025-04-08 17:50:57 +0200 | <EvanR> | esp if there are costs associated with the ease |
2025-04-08 17:51:11 +0200 | jespada | (~jespada@r167-61-127-49.dialup.adsl.anteldata.net.uy) (Quit: My Mac has gone to sleep. ZZZzzz…) |
2025-04-08 17:52:24 +0200 | <EvanR> | for individual projects we can judge for ourselves how good the abstractions are and discriminate much easier |
2025-04-08 17:52:31 +0200 | <haskellbridge> | <Liamzee> Standard Chartered supposedly trained all their traders in Mu |
2025-04-08 17:57:11 +0200 | <EvanR> | is Mu related to ermine |
2025-04-08 17:57:54 +0200 | amadaluzia | (~amadaluzi@2a00:23c7:ed8b:6701:c483:4ce8:4c61:1453) (Changing host) |
2025-04-08 17:57:54 +0200 | amadaluzia | (~amadaluzi@user/amadaluzia) amadaluzia |
2025-04-08 17:58:03 +0200 | <haskellbridge> | <Liamzee> Mu's a strict dialect of Haskell, so sort of |
2025-04-08 18:01:22 +0200 | <EvanR> | to complete your categories for what they're worth add: abstractions nobody knows |
2025-04-08 18:01:27 +0200 | jespada | (~jespada@r167-61-127-49.dialup.adsl.anteldata.net.uy) jespada |
2025-04-08 18:01:41 +0200 | ski | idly ponders unknown knowns |
2025-04-08 18:02:54 +0200 | <haskellbridge> | <Liamzee> that's actually the best abstraction, tbh |
2025-04-08 18:03:22 +0200 | <haskellbridge> | <Liamzee> but only because ifinished reading ski's document, because there's an obvious implied contradiction in that essay |
2025-04-08 18:03:33 +0200 | <haskellbridge> | <Liamzee> programming at maximum known abstraction is good for developers because it pushes their ability |
2025-04-08 18:03:48 +0200 | <haskellbridge> | <Liamzee> however it's not necessarily good for the project, which is a contradiction |
2025-04-08 18:03:58 +0200 | euphores | (~SASL_euph@user/euphores) (Quit: Leaving.) |
2025-04-08 18:04:45 +0200 | pavonia | (~user@user/siracusa) (Quit: Bye!) |
2025-04-08 18:04:48 +0200 | <ski> | a trade-off |
2025-04-08 18:05:28 +0200 | <haskellbridge> | <Liamzee> it's not, it's actually a contradiction between management (which wants the project done on time, and at cost), and individual developers, who if they're any good, are focused more toward improving their own skills |
2025-04-08 18:06:58 +0200 | <EvanR> | if they're any good, they are also getting the project done on time and at cost |
2025-04-08 18:07:08 +0200 | <EvanR> | kind of a tautology |
2025-04-08 18:08:15 +0200 | <haskellbridge> | <Liamzee> not necessarily on budget / at the cheapest possible cost |
2025-04-08 18:09:00 +0200 | <EvanR> | because your salary is too high? reduce it? xD |
2025-04-08 18:09:17 +0200 | <ski> | cheapest possible, for a single project, or amortized ? |
2025-04-08 18:09:39 +0200 | <haskellbridge> | <Liamzee> yeah i guess amortized matters too :) |
2025-04-08 18:09:50 +0200 | euphores | (~SASL_euph@user/euphores) euphores |
2025-04-08 18:09:56 +0200 | <haskellbridge> | <Liamzee> tbh why do i feel like you've had this argument before? |
2025-04-08 18:09:59 +0200 | <EvanR> | something about short term technical debt (valuable) and long term (broken forever and unfixable) |
2025-04-08 18:10:06 +0200 | ski | hasn't |
2025-04-08 18:10:35 +0200 | <haskellbridge> | <Liamzee> like someone's told you to cut the abstraction because of onboarding costs, and you had to defend your position to avoid a refactor or rewrite |
2025-04-08 18:10:49 +0200 | <EvanR> | shit short term code tricks leading to long term pain and costs |
2025-04-08 18:12:17 +0200 | <haskellbridge> | <Liamzee> once again, depends on cost of labor, particular context, etc |
2025-04-08 18:12:40 +0200 | <EvanR> | it defending this or that code you could also devise objective metrics for how complex code is |
2025-04-08 18:13:02 +0200 | <EvanR> | instead of gut feeling it |
2025-04-08 18:13:27 +0200 | ski | ponders the difference between `not (A tensor B)' (aka `not A par not B') and `A par B' |
2025-04-08 18:14:33 +0200 | <ski> | (`A' and `B' being the two things felt to be in tension, like contradiction, or trade-off) |
2025-04-08 18:14:52 +0200 | hiecaq | (~hiecaq@user/hiecaq) (Quit: ERC 5.6.0.30.1 (IRC client for GNU Emacs 30.0.92)) |
2025-04-08 18:15:13 +0200 | <EvanR> | is that linear logic |
2025-04-08 18:15:15 +0200 | <ski> | yes |
2025-04-08 18:16:44 +0200 | machinedgod | (~machinedg@d108-173-18-100.abhsia.telus.net) (Ping timeout: 272 seconds) |
2025-04-08 18:19:29 +0200 | merijn | (~merijn@77.242.116.146) (Ping timeout: 248 seconds) |
2025-04-08 18:28:55 +0200 | jakesyl_____ | (sid56879@id-56879.hampstead.irccloud.com) (Read error: Connection reset by peer) |
2025-04-08 18:29:21 +0200 | sa1 | (sid7690@id-7690.ilkley.irccloud.com) (Read error: Connection reset by peer) |
2025-04-08 18:29:38 +0200 | sclv | (sid39734@haskell/developer/sclv) (Read error: Connection reset by peer) |
2025-04-08 18:30:06 +0200 | jonrh | (sid5185@id-5185.ilkley.irccloud.com) (Read error: Connection reset by peer) |
2025-04-08 18:30:08 +0200 | SanchayanMaity | (sid478177@id-478177.hampstead.irccloud.com) (Read error: Connection reset by peer) |
2025-04-08 18:30:10 +0200 | bjs | (sid190364@user/bjs) (Ping timeout: 248 seconds) |
2025-04-08 18:30:10 +0200 | bw | (sid2730@user/betawaffle) (Ping timeout: 248 seconds) |
2025-04-08 18:30:13 +0200 | bradparker | (sid262931@id-262931.uxbridge.irccloud.com) (Read error: Connection reset by peer) |
2025-04-08 18:30:13 +0200 | JSharp | (sid4580@user/JSharp) (Read error: Connection reset by peer) |
2025-04-08 18:30:16 +0200 | SrPx | (sid108780@id-108780.uxbridge.irccloud.com) (Read error: Connection reset by peer) |
2025-04-08 18:30:17 +0200 | NiKaN | (sid385034@id-385034.helmsley.irccloud.com) (Read error: Connection reset by peer) |
2025-04-08 18:30:17 +0200 | jonrh | (sid5185@id-5185.ilkley.irccloud.com) jonrh |
2025-04-08 18:30:19 +0200 | SanchayanMaity | (sid478177@id-478177.hampstead.irccloud.com) SanchayanMaity |
2025-04-08 18:30:19 +0200 | Techcable | (sid534393@user/Techcable) (Read error: Connection reset by peer) |
2025-04-08 18:30:34 +0200 | tzh | (~tzh@c-76-115-131-146.hsd1.or.comcast.net) tzh |
2025-04-08 18:30:34 +0200 | JSharp | (sid4580@user/JSharp) JSharp |
2025-04-08 18:30:34 +0200 | bjs | (sid190364@user/bjs) bjs |
2025-04-08 18:30:37 +0200 | jakesyl_____ | (sid56879@hampstead.irccloud.com) |
2025-04-08 18:30:51 +0200 | Techcable | (sid534393@user/Techcable) Techcable |
2025-04-08 18:30:53 +0200 | sa1 | (sid7690@ilkley.irccloud.com) sa1 |
2025-04-08 18:31:10 +0200 | sclv | (sid39734@haskell/developer/sclv) sclv |
2025-04-08 18:31:40 +0200 | NiKaN | (sid385034@id-385034.helmsley.irccloud.com) NiKaN |
2025-04-08 18:31:42 +0200 | SrPx | (sid108780@id-108780.uxbridge.irccloud.com) SrPx |
2025-04-08 18:31:47 +0200 | bradparker | (sid262931@uxbridge.irccloud.com) bradparker |
2025-04-08 18:31:58 +0200 | bw | (sid2730@user/betawaffle) betawaffle |
2025-04-08 18:34:59 +0200 | lxsameer | (~lxsameer@Serene/lxsameer) (Ping timeout: 268 seconds) |
2025-04-08 18:35:16 +0200 | TheCoffeMaker | (~TheCoffeM@user/thecoffemaker) TheCoffeMaker |
2025-04-08 18:39:56 +0200 | tromp | (~textual@2001:1c00:3487:1b00:1419:ab0:498a:2d0c) (Quit: My iMac has gone to sleep. ZZZzzz…) |
2025-04-08 18:46:29 +0200 | peterbecich | (~Thunderbi@syn-047-229-123-186.res.spectrum.com) peterbecich |
2025-04-08 18:53:09 +0200 | Smiles | (uid551636@id-551636.lymington.irccloud.com) (Quit: Connection closed for inactivity) |
2025-04-08 18:55:51 +0200 | tromp | (~textual@2001:1c00:3487:1b00:1419:ab0:498a:2d0c) |
2025-04-08 18:59:30 +0200 | TheCoffeMaker | (~TheCoffeM@user/thecoffemaker) (Ping timeout: 252 seconds) |
2025-04-08 18:59:33 +0200 | TheCoffeMaker_ | (~TheCoffeM@186.136.173.186) |
2025-04-08 19:07:19 +0200 | peterbecich | (~Thunderbi@syn-047-229-123-186.res.spectrum.com) (Ping timeout: 265 seconds) |
2025-04-08 19:17:17 +0200 | vanishingideal | (~vanishing@user/vanishingideal) (Ping timeout: 244 seconds) |
2025-04-08 19:22:33 +0200 | wootehfoot | (~wootehfoo@user/wootehfoot) wootehfoot |
2025-04-08 19:24:29 +0200 | vanishingideal | (~vanishing@user/vanishingideal) vanishingideal |
2025-04-08 19:28:14 +0200 | notdabs | (~Owner@2600:1700:69cf:9000:1d8b:380b:ab0b:1fbd) |
2025-04-08 19:32:35 +0200 | lxsameer | (~lxsameer@Serene/lxsameer) lxsameer |
2025-04-08 19:38:41 +0200 | ft | (~ft@p508db463.dip0.t-ipconnect.de) ft |
2025-04-08 19:42:20 +0200 | <EvanR> | I wrote an unparser here which puts parentheses in such a way that it could be parsed... or did I https://paste.tomsmeding.com/4gCKDAAP |
2025-04-08 19:42:57 +0200 | <EvanR> | in a "sequence" of Plus, it doesn't put parentheses because "it's associative" |
2025-04-08 19:43:07 +0200 | <EvanR> | now I'm confused |
2025-04-08 19:46:25 +0200 | dhil | (~dhil@2a0c:b381:52e:3600:103b:c63d:9624:f51b) (Ping timeout: 248 seconds) |
2025-04-08 19:55:26 +0200 | <tuxillo> | hi again, i'm coming back to the problem I saw last night: https://termbin.com/ybc7 |
2025-04-08 20:09:15 +0200 | rvalue | (~rvalue@user/rvalue) (Read error: Connection reset by peer) |
2025-04-08 20:09:48 +0200 | rvalue | (~rvalue@user/rvalue) rvalue |
2025-04-08 20:10:02 +0200 | <monochrom> | Of the few professions I have had some impression (e.g., law, accounting, health care, construction, engineering, ...), my impression is that their people go like "here is a more correct and/or cheaper way to do things, let's do it; oh it's more difficult to learn? then we'll just ramp up training". Programming is the only occupation where people go the opposite direction, "OMG it's so hard to explain, let's just go back to the dark age". For this |
2025-04-08 20:10:02 +0200 | <monochrom> | reason, I don't count programming as even a profession (so nevermind engineering). |
2025-04-08 20:10:32 +0200 | <monochrom> | Right? Surgeons don't go like "OMG blood is so gory and scary let's never do surgery". |
2025-04-08 20:13:33 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn |
2025-04-08 20:18:18 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 245 seconds) |
2025-04-08 20:22:15 +0200 | <EvanR> | you want people to be better at their job? what an elitist |
2025-04-08 20:22:49 +0200 | ljdarj1 | (~Thunderbi@user/ljdarj) ljdarj |
2025-04-08 20:24:07 +0200 | <EvanR> | worse is better :tm: |
2025-04-08 20:25:06 +0200 | ljdarj1 | ljdarj |
2025-04-08 20:25:10 +0200 | <mauke> | programming is a profession because I get paid for it |
2025-04-08 20:25:41 +0200 | <monochrom> | Is scamming a profession? Tons of people get paid for it, too. |
2025-04-08 20:26:07 +0200 | <monochrom> | And next time I can talk about why I even view programming as a scam. |
2025-04-08 20:29:21 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn |
2025-04-08 20:30:44 +0200 | target_i | (~target_i@user/target-i/x-6023099) target_i |
2025-04-08 20:34:07 +0200 | <EvanR> | is product type associative? A * B * C * D is a type... but A * (B * C) * D seems to be a "different type" ? at least in ML? |
2025-04-08 20:34:19 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 265 seconds) |
2025-04-08 20:34:21 +0200 | sprotte24_ | (~sprotte24@p200300d16f06b600a14bd9dc58a29dc6.dip0.t-ipconnect.de) (Quit: Leaving) |
2025-04-08 20:35:06 +0200 | <monochrom> | Nominal typing says they're different. (So in the Haskell community, we just say "isomorphic" and gross over it.) Structural typing is the one that says "isomorphic therefore equal". |
2025-04-08 20:35:16 +0200 | <dolio> | It is associative in the sense that they are isomorphic types. |
2025-04-08 20:35:28 +0200 | <tuxillo> | is it possible to enable IF_DEBUG() from a compiled program? |
2025-04-08 20:35:34 +0200 | <dolio> | Which is the correct notion for caring about equivalence of types. |
2025-04-08 20:35:40 +0200 | <dolio> | (Until you start doing HoTT.) |
2025-04-08 20:35:42 +0200 | <tuxillo> | so i can see the debug messages |
2025-04-08 20:35:46 +0200 | <mauke> | tuxillo: I don't know what that is, but it's all uppercase, so probably not |
2025-04-08 20:36:50 +0200 | <EvanR> | isomorphic things is one thing, but which thing is A * B * C * D ? A * (B * (C * D)) ? |
2025-04-08 20:37:18 +0200 | <EvanR> | seems like an inefficient way to implement that |
2025-04-08 20:37:21 +0200 | <haskellbridge> | <Liamzee> monochrom: BYD got their start by figuring out how to replace expensive machines for battery manufacturing with people. Of course, Hasura tried the same thing with Haskell, and now they use Rust. :) |
2025-04-08 20:37:28 +0200 | <mauke> | from what I recall from ocaml, A*B*C is weird and not a nested thing at all |
2025-04-08 20:37:59 +0200 | <EvanR> | A*B*C is not nested but if you put parentheses it is? |
2025-04-08 20:38:17 +0200 | <monochrom> | Oh likewise in Haskell, we just change the syntax to (A,B,C). |
2025-04-08 20:38:39 +0200 | <EvanR> | in haskell the syntax makes it clear "no, not associative" |
2025-04-08 20:39:02 +0200 | <EvanR> | maybe that was a good idea |
2025-04-08 20:39:04 +0200 | <mauke> | syntax schmyntax |
2025-04-08 20:39:13 +0200 | <mauke> | in perl, it is associative |
2025-04-08 20:39:28 +0200 | tromp | (~textual@2001:1c00:3487:1b00:1419:ab0:498a:2d0c) (Quit: My iMac has gone to sleep. ZZZzzz…) |
2025-04-08 20:39:49 +0200 | <mauke> | (that is, in perl (A,(B,C)) == ((A,B),C) == (A,B,C)) |
2025-04-08 20:40:10 +0200 | <EvanR> | what the heck |
2025-04-08 20:40:30 +0200 | <EvanR> | is it auto flattening |
2025-04-08 20:40:36 +0200 | <haskellbridge> | <Liamzee> hmmm, that's an interesting question |
2025-04-08 20:40:40 +0200 | <mauke> | it's not nesting in the first place |
2025-04-08 20:40:46 +0200 | <monochrom> | A*B*C in ML also enjoys recordness, i.e., A*B*C is an anonymous record type with 3 fields names: 1, 2, 3. |
2025-04-08 20:41:02 +0200 | <monochrom> | E.g., (x,y,z)#1 = x |
2025-04-08 20:41:06 +0200 | <haskellbridge> | <Liamzee> actually, it wouldn't make sense in a Haskell context |
2025-04-08 20:41:10 +0200 | <mauke> | EvanR: is (1+(2+3)) autoflattening? |
2025-04-08 20:41:22 +0200 | <EvanR> | and A * (B * C) is a different type? |
2025-04-08 20:41:46 +0200 | <monochrom> | Yes A*(B*C) is a different type IIRC. |
2025-04-08 20:41:49 +0200 | <EvanR> | mauke, is that a type in perl or a data structure |
2025-04-08 20:42:03 +0200 | <mauke> | expression, really |
2025-04-08 20:42:09 +0200 | <mauke> | we don't do "types" over there |
2025-04-08 20:42:24 +0200 | lxsameer | (~lxsameer@Serene/lxsameer) (Ping timeout: 272 seconds) |
2025-04-08 20:42:33 +0200 | <dolio> | Even if it were technically `A * (B * (C * D))`, ML compilers are probably smart enough to optimize it. |
2025-04-08 20:42:37 +0200 | <monochrom> | Category theory is so much easier than Perl. |
2025-04-08 20:42:41 +0200 | <haskellbridge> | <Liamzee> tuples aren't really arity polymorphic in haskell, they're a family of types with a common syntax |
2025-04-08 20:43:02 +0200 | <EvanR> | the thing with A * (B * (C * D)) is that the fst and snd functions would act differently |
2025-04-08 20:43:13 +0200 | <EvanR> | does snd get you B or (B * (C * D)) |
2025-04-08 20:44:05 +0200 | <mauke> | I expect B * (C * D) in the nested case |
2025-04-08 20:44:30 +0200 | <haskellbridge> | <Liamzee> so it's nonsensical to want (a,n) to be the type of both (a,b,c,d) and (a,b,c) |
2025-04-08 20:44:32 +0200 | <EvanR> | car and cdr |
2025-04-08 20:45:06 +0200 | wootehfoot | (~wootehfoo@user/wootehfoot) (Ping timeout: 252 seconds) |
2025-04-08 20:45:06 +0200 | <mauke> | not so much a polymorphic type as a small collection of types flying in close formation |
2025-04-08 20:45:08 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn |
2025-04-08 20:46:33 +0200 | <EvanR> | what happens in perl, for morbid curiosity's sake |
2025-04-08 20:46:43 +0200 | <mauke> | , is list concatenation |
2025-04-08 20:46:47 +0200 | <mauke> | the rest is smoke and mirrors |
2025-04-08 20:46:57 +0200 | <EvanR> | if you ask for the 2nd component |
2025-04-08 20:47:28 +0200 | <mauke> | (a ++ (b ++ c)) !! 1 |
2025-04-08 20:47:54 +0200 | <EvanR> | > "a" ++ ("b" ++ "c") !! 1 |
2025-04-08 20:47:55 +0200 | <lambdabot> | error: |
2025-04-08 20:47:55 +0200 | <lambdabot> | • Couldn't match expected type ‘[Char]’ with actual type ‘Char’ |
2025-04-08 20:47:55 +0200 | <lambdabot> | • In the second argument of ‘(++)’, namely ‘("b" ++ "c") !! 1’ |
2025-04-08 20:48:02 +0200 | <EvanR> | > ("a" ++ ("b" ++ "c")) !! 1 |
2025-04-08 20:48:04 +0200 | <lambdabot> | 'b' |
2025-04-08 20:48:10 +0200 | <EvanR> | it's auto flattening! |
2025-04-08 20:48:13 +0200 | <EvanR> | smh |
2025-04-08 20:49:57 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 248 seconds) |
2025-04-08 20:51:34 +0200 | <haskellbridge> | <Liamzee> mauke: what does it mean that Perl's dynamic anyways? |
2025-04-08 20:51:39 +0200 | <haskellbridge> | <Liamzee> Or more specifically, how is Perl dynamic? |
2025-04-08 20:53:20 +0200 | <mauke> | uh ... it depends on who's speaking? |
2025-04-08 20:53:28 +0200 | tromp | (~textual@2001:1c00:3487:1b00:e513:bc03:349e:ac26) |
2025-04-08 20:53:53 +0200 | <mauke> | mainly, I think it means it's not C |
2025-04-08 20:53:57 +0200 | <haskellbridge> | <Liamzee> sorry, was just wondering if there was anything interesting about the specific way Perl is a dynamically-typed language |
2025-04-08 20:54:32 +0200 | <dolio> | Maybe it's dynamic like dynamic programming. |
2025-04-08 20:54:42 +0200 | <mauke> | you don't have a separate compilation step (unlike C) |
2025-04-08 20:54:48 +0200 | <mauke> | there is no static type system (unlike C) |
2025-04-08 20:55:06 +0200 | <mauke> | data structures don't have a fixed size and grow/shrink as needed (unlike C) |
2025-04-08 20:56:02 +0200 | <mauke> | on the other hand, I find it hard to articulate what exactly a "type" even is in the context of perl, since you could argue it has a form of syntactic typing |
2025-04-08 20:56:23 +0200 | <mauke> | $foo is a scalar, but @foo is an array |
2025-04-08 20:56:48 +0200 | <dolio> | Are those the same variable? I forget. |
2025-04-08 20:57:43 +0200 | <mauke> | no, completely independent* |
2025-04-08 20:57:53 +0200 | <mauke> | * not actually completely independent |
2025-04-08 20:57:57 +0200 | <haskellbridge> | <Liamzee> yeah i guess that was what i was really asking about, it seemed as though you suggested it wasn't as simple as to say "perl is dynamically typed" |
2025-04-08 20:58:02 +0200 | <EvanR> | well then I'm convinced I need to put more parentheses for this to have a chance at getting parsed back in |
2025-04-08 20:58:03 +0200 | <haskellbridge> | <Bowuigi> No, some dialects of BASIC have sigils too |
2025-04-08 20:58:35 +0200 | <haskellbridge> | <Bowuigi> Sigils are hungarian notation but required and more noise |
2025-04-08 20:59:24 +0200 | <mauke> | apps hungarian or systems hungarian? |
2025-04-08 21:00:03 +0200 | caconym | (~caconym@user/caconym) (Quit: bye) |
2025-04-08 21:00:25 +0200 | gmg | (~user@user/gehmehgeh) (Quit: Leaving) |
2025-04-08 21:00:45 +0200 | caconym | (~caconym@user/caconym) caconym |
2025-04-08 21:00:56 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn |
2025-04-08 21:01:25 +0200 | <haskellbridge> | <Bowuigi> https://en.m.wikipedia.org/wiki/Hungarian_notation systems hungarian according to this |
2025-04-08 21:02:03 +0200 | <haskellbridge> | <Bowuigi> Apps hungarian is basically implicit newtypes but worse |
2025-04-08 21:02:09 +0200 | <mauke> | yes :-) |
2025-04-08 21:02:47 +0200 | <mauke> | I remember when I first read the description of apps hungarian, I thought it was just constructing a type system in the mind of the programmer |
2025-04-08 21:03:01 +0200 | <mauke> | and those "logical types" should really just be actual types |
2025-04-08 21:03:19 +0200 | <EvanR> | smh they shoulda just used an IDE |
2025-04-08 21:03:28 +0200 | prolic_ | (~sasa@181.122.135.9) prolic_ |
2025-04-08 21:04:33 +0200 | <mauke> | but sigils are not just names |
2025-04-08 21:04:55 +0200 | <haskellbridge> | <Liamzee> visual basic apparently was the first commercially successful IDE |
2025-04-08 21:04:56 +0200 | tromp | (~textual@2001:1c00:3487:1b00:e513:bc03:349e:ac26) (Quit: My iMac has gone to sleep. ZZZzzz…) |
2025-04-08 21:05:16 +0200 | <[exa]> | Any good way to make a `snd` function that can be used in Accelerate.map? I basically need `Expr (Float,Int) -> Exp Int` but I don't see how to combine that with the stuff at hand... I thought `lift snd` would be The Way but turns out not really :D |
2025-04-08 21:05:18 +0200 | <mauke> | for example, $x[0] is a single element of @x, but @x[0, 3, 42] is a list of elements (an array slice) |
2025-04-08 21:05:33 +0200 | <prolic_> | hello friends. I forked https://hub.darcs.net/komadori/HsQML at https://github.com/prolic/HsQML and made some changes, so it runs with newer GHC/cabal as well as adding some small features. I would publish it on hackage, but the author/maintainer doesn't respond to emails. Apparently he's not intersted in mainating it anymore. What do I do now? Release under a different name (lib-hsqml) ? |
2025-04-08 21:05:48 +0200 | machinedgod | (~machinedg@d108-173-18-100.abhsia.telus.net) machinedgod |
2025-04-08 21:05:56 +0200 | <[exa]> | (ah wait `snd` is actually in accelerate on itself, but let's think more generalized) |
2025-04-08 21:06:22 +0200 | <mauke> | https://wiki.haskell.org/Taking_over_a_package |
2025-04-08 21:06:28 +0200 | <haskellbridge> | <Liamzee> which maintainer are you talking about, prolic_ |
2025-04-08 21:07:15 +0200 | <prolic_> | the author of the hsqml lib, I already tried to reach out via email |
2025-04-08 21:07:45 +0200 | monochrom | doesn't like Perl sigils or Lisp sigils. |
2025-04-08 21:07:51 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 246 seconds) |
2025-04-08 21:08:03 +0200 | <EvanR> | how hungarian is this type name I saw yesterday: struct CoreStruct |
2025-04-08 21:08:17 +0200 | <haskellbridge> | <Liamzee> wait, i don't understand |
2025-04-08 21:08:26 +0200 | <haskellbridge> | <Liamzee> oh, whoops, misunderstood |
2025-04-08 21:08:28 +0200 | <EvanR> | now you know the type is a struct... very much so |
2025-04-08 21:08:39 +0200 | <prolic_> | ok, so make an account on haskell discourse, post there, wait a month, then contact hackage admins? |
2025-04-08 21:08:42 +0200 | <monochrom> | It's postfix hungarian, no? hungarian would be StructCore. :) |
2025-04-08 21:08:59 +0200 | <monochrom> | Reverse Polish Hungarian = RPH \∩/ |
2025-04-08 21:09:25 +0200 | <mauke> | reverse polish hungarian = s <-> sz |
2025-04-08 21:09:29 +0200 | <EvanR> | then to declare an object... struct CoreStruct structCoreStructMyCoreStruct; |
2025-04-08 21:09:53 +0200 | <mauke> | I have been struct to my core |
2025-04-08 21:10:18 +0200 | <tuxillo> | should I open an issue in github to discuss low level stuff like this mmap problem or is there an IRC channel for this? |
2025-04-08 21:10:24 +0200 | gmg | (~user@user/gehmehgeh) gehmehgeh |
2025-04-08 21:10:34 +0200 | <EvanR> | I should make it an instance of class CoreClass |
2025-04-08 21:11:03 +0200 | wootehfoot | (~wootehfoo@user/wootehfoot) wootehfoot |
2025-04-08 21:11:08 +0200 | <mauke> | tuxillo: there is a #ghc channel |
2025-04-08 21:11:59 +0200 | <mauke> | but I feel opening a ghc issue wouldn't be wrong, either. it's what the message tells you to do, after all |
2025-04-08 21:12:34 +0200 | <monochrom> | Actually I think hugarian applies to variable names only, not type names.. |
2025-04-08 21:12:45 +0200 | <EvanR> | ya I also think so |
2025-04-08 21:13:05 +0200 | <EvanR> | so class CoreClass and struct CoreStruct needs another moniker |
2025-04-08 21:13:35 +0200 | <monochrom> | I'm OK with "type-level hungarian" :) |
2025-04-08 21:14:15 +0200 | <EvanR> | data CoreDataSum = LeftConstructor A | RightConstructor B |
2025-04-08 21:14:35 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn |