2025/04/08

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 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn
2025-04-08 00:07:29 +0200inca(~inca@pool-96-255-212-224.washdc.fios.verizon.net) (Ping timeout: 260 seconds)
2025-04-08 00:07:43 +0200rawles(~rawles@user/rawles) rawles
2025-04-08 00:09:59 +0200merijn(~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 +0200Sgeo(~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 +0200merijn(~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 +0200merijn(~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 +0200inca(~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 +0200user363627(~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 +0200emmanuelux(~emmanuelu@user/emmanuelux) emmanuelux
2025-04-08 00:36:14 +0200weary-traveler(~user@user/user363627) (Ping timeout: 260 seconds)
2025-04-08 00:36:30 +0200merijn(~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 +0200rawles(~rawles@user/rawles) (WeeChat 3.8)
2025-04-08 00:41:14 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds)
2025-04-08 00:42:04 +0200tromp(~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 +0200dibblego(~dibblego@haskell/developer/dibblego) (Read error: Connection reset by peer)
2025-04-08 00:48:16 +0200dibblego(~dibblego@116-255-1-119.ip4.superloop.au)
2025-04-08 00:48:16 +0200dibblego(~dibblego@116-255-1-119.ip4.superloop.au) (Changing host)
2025-04-08 00:48:16 +0200dibblego(~dibblego@haskell/developer/dibblego) dibblego
2025-04-08 00:49:08 +0200ph88(~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 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn
2025-04-08 00:59:04 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 244 seconds)
2025-04-08 01:03:00 +0200peterbecich(~Thunderbi@syn-047-229-123-186.res.spectrum.com) peterbecich
2025-04-08 01:06:51 +0200peterbecich(~Thunderbi@syn-047-229-123-186.res.spectrum.com) (Client Quit)
2025-04-08 01:07:19 +0200peterbecich(~Thunderbi@syn-047-229-123-186.res.spectrum.com) peterbecich
2025-04-08 01:10:20 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn
2025-04-08 01:15:20 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds)
2025-04-08 01:21:38 +0200jespada(~jespada@r179-25-210-114.dialup.adsl.anteldata.net.uy) (Ping timeout: 245 seconds)
2025-04-08 01:25:16 +0200jespada(~jespada@r190-133-49-11.dialup.adsl.anteldata.net.uy) jespada
2025-04-08 01:26:06 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn
2025-04-08 01:26:42 +0200polyphem(~rod@pd9fbf91a.dip0.t-ipconnect.de) (Ping timeout: 252 seconds)
2025-04-08 01:28:44 +0200szkl(uid110435@id-110435.uxbridge.irccloud.com) szkl
2025-04-08 01:30:48 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 245 seconds)
2025-04-08 01:36:38 +0200peterbecich(~Thunderbi@syn-047-229-123-186.res.spectrum.com) (Ping timeout: 245 seconds)
2025-04-08 01:41:54 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn
2025-04-08 01:43:28 +0200Tuplanolla(~Tuplanoll@91-159-69-59.elisa-laajakaista.fi) (Quit: Leaving.)
2025-04-08 01:46:11 +0200sprotte24(~sprotte24@p200300d16f30f50054794865c50a74ee.dip0.t-ipconnect.de) (Read error: Connection reset by peer)
2025-04-08 01:46:29 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 248 seconds)
2025-04-08 01:53:07 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn
2025-04-08 01:57:54 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 260 seconds)
2025-04-08 02:04:06 +0200jespada(~jespada@r190-133-49-11.dialup.adsl.anteldata.net.uy) (Ping timeout: 252 seconds)
2025-04-08 02:08:47 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn
2025-04-08 02:09:24 +0200emojelly(~eselber_p@user/endojelly) (Ping timeout: 260 seconds)
2025-04-08 02:09:42 +0200emojelly(~eselber_p@user/endojelly) endojelly
2025-04-08 02:12:56 +0200anpad(~pandeyan@user/anpad) (Quit: ZNC 1.8.2 - https://znc.in)
2025-04-08 02:13:33 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds)
2025-04-08 02:13:48 +0200anpad(~pandeyan@user/anpad) anpad
2025-04-08 02:13:55 +0200nurupo(~nurupo.ga@user/nurupo) (Quit: nurupo.ga)
2025-04-08 02:14:30 +0200nurupo(~nurupo.ga@user/nurupo) nurupo
2025-04-08 02:16:21 +0200notdabs(~Owner@2600:1700:69cf:9000:20c6:7b0d:8034:a6ce)
2025-04-08 02:20:03 +0200j1n37-(~j1n37@user/j1n37) (Ping timeout: 265 seconds)
2025-04-08 02:21:34 +0200j1n37(~j1n37@user/j1n37) j1n37
2025-04-08 02:24:18 +0200ezzieyguywuf(~Unknown@user/ezzieyguywuf) (Quit: Lost terminal)
2025-04-08 02:24:35 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn
2025-04-08 02:25:35 +0200acidjnk_new3(~acidjnk@p200300d6e71c4f1839a5a90aae0b2850.dip0.t-ipconnect.de) (Ping timeout: 268 seconds)
2025-04-08 02:29:33 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 245 seconds)
2025-04-08 02:40:21 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn
2025-04-08 02:47:21 +0200merijn(~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 +0200user363627(~user@user/user363627) (Quit: Konversation terminated!)
2025-04-08 02:56:53 +0200user363627(~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 +0200merijn(~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 +0200otto_s(~user@p5de2f09d.dip0.t-ipconnect.de) (Ping timeout: 244 seconds)
2025-04-08 03:02:37 +0200otto_s(~user@p5b044d5e.dip0.t-ipconnect.de)
2025-04-08 03:03:04 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 260 seconds)
2025-04-08 03:06:00 +0200Pixi(~Pixi@user/pixi) (Quit: Leaving)
2025-04-08 03:06:54 +0200Pixi(~Pixi@user/pixi) Pixi
2025-04-08 03:08:44 +0200ljdarj1(~Thunderbi@user/ljdarj) ljdarj
2025-04-08 03:12:20 +0200xff0x(~xff0x@ai066236.d.east.v6connect.net) (Ping timeout: 272 seconds)
2025-04-08 03:12:21 +0200ljdarj(~Thunderbi@user/ljdarj) (Ping timeout: 248 seconds)
2025-04-08 03:12:21 +0200ljdarj1ljdarj
2025-04-08 03:13:47 +0200merijn(~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 +0200merijn(~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 +0200peterbecich(~Thunderbi@syn-047-229-123-186.res.spectrum.com) peterbecich
2025-04-08 03:29:18 +0200exarkun(~exarkun@user/exarkun) (Excess Flood)
2025-04-08 03:29:31 +0200machinedgod(~machinedg@d108-173-18-100.abhsia.telus.net) (Ping timeout: 252 seconds)
2025-04-08 03:29:33 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn
2025-04-08 03:30:39 +0200s4msung(DQyKc40dMf@user/s4msung) (Ping timeout: 260 seconds)
2025-04-08 03:31:03 +0200s4msung(HpS7xJgsJj@user/s4msung) s4msung
2025-04-08 03:31:41 +0200exarkun(~exarkun@user/exarkun) exarkun
2025-04-08 03:34:58 +0200merijn(~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 +0200szkl(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 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn
2025-04-08 03:46:14 +0200yin(~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 +0200yin(~z@user/zero) zero
2025-04-08 03:48:01 +0200ljdarj(~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 +0200merijn(~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 +0200peterbecich(~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 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn
2025-04-08 04:03:33 +0200xff0x(~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 +0200merijn(~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 +0200bitdex(~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 +0200merijn(~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 +0200merijn(~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 +0200chiselfuse(~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 +0200chiselfuse(~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 +0200merijn(~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 +0200notdabs(~Owner@2600:1700:69cf:9000:20c6:7b0d:8034:a6ce) (Read error: Connection reset by peer)
2025-04-08 04:40:04 +0200merijn(~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 +0200chiselfuse(~chiselfus@user/chiselfuse) (Remote host closed the connection)
2025-04-08 04:43:40 +0200chiselfuse(~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 +0200merijn(~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 +0200gorignak(~gorignak@user/gorignak) (Quit: quit)
2025-04-08 04:54:46 +0200gorignak(~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 +0200merijn(~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 +0200peterbecich(~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 +0200gorignak(~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 +0200j1n37-(~j1n37@user/j1n37) j1n37
2025-04-08 05:05:35 +0200j1n37(~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 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn
2025-04-08 05:07:01 +0200 <EvanR> eh
2025-04-08 05:07:09 +0200forell(~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 +0200merijn(~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 +0200hughjfchen(~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 +0200hughjfchen(~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 +0200merijn(~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 +0200gorignak(~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 +0200merijn(~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 +0200merijn(~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 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 244 seconds)
2025-04-08 05:45:41 +0200Noir(~Noir@2607:ac80:411:a:dc3c:8e7b:ab32:5495)
2025-04-08 05:46:42 +0200Noir(~Noir@2607:ac80:411:a:dc3c:8e7b:ab32:5495) (Remote host closed the connection)
2025-04-08 05:49:30 +0200halloy2596(~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 +0200merijn(~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 +0200Fijxu(~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 +0200chexum(~quassel@gateway/tor-sasl/chexum) (Ping timeout: 264 seconds)
2025-04-08 05:59:58 +0200chexum(~quassel@gateway/tor-sasl/chexum) chexum
2025-04-08 06:01:09 +0200merijn(~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 +0200amadaluzia_(~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 +0200halloy2596Noir
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 +0200Fijxu(~Fijxu@user/fijxu) fijxu
2025-04-08 06:09:35 +0200JuanDaugherty(~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 +0200merijn(~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 +0200merijn(~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 +0200tavare(~tavare@user/tavare) tavare
2025-04-08 06:19:18 +0200michalz(~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 +0200merijn(~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 +0200merijn(~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 +0200peterbecich(~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 +0200merijn(~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 +0200merijn(~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 +0200merijn(~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 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 244 seconds)
2025-04-08 07:06:10 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn
2025-04-08 07:06:56 +0200Noir(~halloy259@2607:ac80:411:a:dc3c:8e7b:ab32:5495) (Read error: Connection reset by peer)
2025-04-08 07:11:00 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds)
2025-04-08 07:13:17 +0200JuanDaugherty(~juan@user/JuanDaugherty) (Quit: praxis.meansofproduction.biz (juan@acm.org))
2025-04-08 07:18:49 +0200halloy2596(~halloy259@2607:ac80:411:a:dc3c:8e7b:ab32:5495)
2025-04-08 07:21:57 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn
2025-04-08 07:25:22 +0200peterbecich(~Thunderbi@syn-047-229-123-186.res.spectrum.com) peterbecich
2025-04-08 07:26:45 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 248 seconds)
2025-04-08 07:37:44 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn
2025-04-08 07:44:33 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 245 seconds)
2025-04-08 07:45:59 +0200peterbecich(~Thunderbi@syn-047-229-123-186.res.spectrum.com) (Ping timeout: 244 seconds)
2025-04-08 07:55:48 +0200merijn(~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 +0200merijn(~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 +0200halloy2596(~halloy259@2607:ac80:411:a:dc3c:8e7b:ab32:5495) (Read error: Connection reset by peer)
2025-04-08 08:11:25 +0200jmcantrell(~weechat@user/jmcantrell) (Quit: WeeChat 4.6.0)
2025-04-08 08:11:25 +0200jmcantrell_jmcantrell
2025-04-08 08:11:35 +0200merijn(~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 +0200thuna`(~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 +0200merijn(~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 +0200fp1(~Thunderbi@wireless-86-50-140-125.open.aalto.fi) fp
2025-04-08 08:27:23 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn
2025-04-08 08:30:39 +0200sord937(~sord937@gateway/tor-sasl/sord937) sord937
2025-04-08 08:32:23 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds)
2025-04-08 08:34:18 +0200CiaoSen(~Jura@2a02:8071:64e1:da0:5a47:caff:fe78:33db) CiaoSen
2025-04-08 08:38:28 +0200halloy2596(~halloy259@2607:ac80:411:a:dc3c:8e7b:ab32:5495)
2025-04-08 08:38:57 +0200halloy2596(~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 +0200ft(~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 +0200merijn(~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 +0200tromp(~textual@2001:1c00:3487:1b00:1419:ab0:498a:2d0c)
2025-04-08 08:45:34 +0200tromp(~textual@2001:1c00:3487:1b00:1419:ab0:498a:2d0c) (Client Quit)
2025-04-08 08:48:10 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 265 seconds)
2025-04-08 08:49:58 +0200Sgeo(~Sgeo@user/sgeo) (Read error: Connection reset by peer)
2025-04-08 08:51:52 +0200tromp(~textual@2001:1c00:3487:1b00:1419:ab0:498a:2d0c)
2025-04-08 08:54:06 +0200foul_owl(~kerry@94.156.149.96) (Read error: Connection reset by peer)
2025-04-08 08:58:58 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn
2025-04-08 09:00:01 +0200caconym(~caconym@user/caconym) (Quit: bye)
2025-04-08 09:01:03 +0200caconym(~caconym@user/caconym) caconym
2025-04-08 09:03:11 +0200lortabac(~lortabac@2a01:e0a:541:b8f0:55ab:e185:7f81:54a4)
2025-04-08 09:03:56 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds)
2025-04-08 09:10:51 +0200foul_owl(~kerry@94.156.149.99) foul_owl
2025-04-08 09:16:07 +0200tavare(~tavare@user/tavare) (Remote host closed the connection)
2025-04-08 09:17:29 +0200Lord_of_Life_(~Lord@user/lord-of-life/x-2819915) Lord_of_Life
2025-04-08 09:17:29 +0200Lord_of_Life(~Lord@user/lord-of-life/x-2819915) (Ping timeout: 252 seconds)
2025-04-08 09:18:52 +0200Lord_of_Life_Lord_of_Life
2025-04-08 09:23:57 +0200sord937(~sord937@gateway/tor-sasl/sord937) (Remote host closed the connection)
2025-04-08 09:24:56 +0200sord937(~sord937@gateway/tor-sasl/sord937) sord937
2025-04-08 09:33:33 +0200fp1(~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 +0200acidjnk_new3(~acidjnk@p200300d6e71c4f636055d0f69fb4dc8c.dip0.t-ipconnect.de) acidjnk
2025-04-08 09:40:24 +0200lxsameer(~lxsameer@Serene/lxsameer) lxsameer
2025-04-08 09:43:08 +0200emmanuelux(~emmanuelu@user/emmanuelux) (Read error: Connection reset by peer)
2025-04-08 09:53:20 +0200merijn(~merijn@77.242.116.146) merijn
2025-04-08 09:53:50 +0200polyphem(~rod@p4fc2cb32.dip0.t-ipconnect.de) polyphem
2025-04-08 09:54:53 +0200machinedgod(~machinedg@d108-173-18-100.abhsia.telus.net) machinedgod
2025-04-08 09:58:24 +0200sord937(~sord937@gateway/tor-sasl/sord937) (Remote host closed the connection)
2025-04-08 09:58:43 +0200sord937(~sord937@gateway/tor-sasl/sord937) sord937
2025-04-08 10:04:15 +0200dhil(~dhil@2a0c:b381:52e:3600:103b:c63d:9624:f51b) dhil
2025-04-08 10:17:31 +0200chele(~chele@user/chele) chele
2025-04-08 10:18:41 +0200user363627(~user@user/user363627) (Remote host closed the connection)
2025-04-08 10:26:58 +0200tzh(~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 +0200Unicorn_Princess(~Unicorn_P@user/Unicorn-Princess/x-3540542) Unicorn_Princess
2025-04-08 11:04:00 +0200sprotte24(~sprotte24@p200300d16f06b600a14bd9dc58a29dc6.dip0.t-ipconnect.de)
2025-04-08 11:04:26 +0200gorignak(~gorignak@user/gorignak) (Read error: Connection reset by peer)
2025-04-08 11:04:32 +0200whez(uid470288@id-470288.lymington.irccloud.com)
2025-04-08 11:04:55 +0200gorignak(~gorignak@user/gorignak) gorignak
2025-04-08 11:07:54 +0200ubert(~Thunderbi@2a02:8109:ab8a:5a00:27cc:9672:1463:dd93) ubert
2025-04-08 11:25:08 +0200jco(~jco@78-70-217-44-no600.tbcn.telia.com) jco
2025-04-08 11:25:22 +0200fkv24(~fkv24@176.110.103.7)
2025-04-08 11:26:13 +0200duckworld(~duckworld@user/duckworld) (Remote host closed the connection)
2025-04-08 11:26:26 +0200fkv24(~fkv24@176.110.103.7) (Client Quit)
2025-04-08 11:26:47 +0200duckworld(~duckworld@user/duckworld) duckworld
2025-04-08 11:28:39 +0200duckworld(~duckworld@user/duckworld) (Remote host closed the connection)
2025-04-08 11:28:57 +0200duckworld(~duckworld@user/duckworld) duckworld
2025-04-08 11:47:07 +0200tromp(~textual@2001:1c00:3487:1b00:1419:ab0:498a:2d0c) (Quit: My iMac has gone to sleep. ZZZzzz…)
2025-04-08 11:48:06 +0200tromp(~textual@2001:1c00:3487:1b00:1419:ab0:498a:2d0c)
2025-04-08 11:50:06 +0200bitdex_(~bitdex@gateway/tor-sasl/bitdex) bitdex
2025-04-08 11:51:48 +0200bitdex(~bitdex@gateway/tor-sasl/bitdex) (Ping timeout: 264 seconds)
2025-04-08 11:54:10 +0200j1n37(~j1n37@user/j1n37) j1n37
2025-04-08 11:55:14 +0200j1n37-(~j1n37@user/j1n37) (Ping timeout: 260 seconds)
2025-04-08 11:59:12 +0200forell(~forell@user/forell) forell
2025-04-08 12:02:53 +0200hc(~hc@mail.hce.li) (Remote host closed the connection)
2025-04-08 12:13:59 +0200glguy(glguy@libera/staff/glguy) (Read error: Connection reset by peer)
2025-04-08 12:14:20 +0200glguy(glguy@libera/staff/glguy) glguy
2025-04-08 12:17:24 +0200Smiles(uid551636@id-551636.lymington.irccloud.com) Smiles
2025-04-08 12:19:33 +0200lortabac(~lortabac@2a01:e0a:541:b8f0:55ab:e185:7f81:54a4) (Ping timeout: 248 seconds)
2025-04-08 12:19:42 +0200xff0x(~xff0x@fsb6a9491c.tkyc517.ap.nuro.jp) (Ping timeout: 246 seconds)
2025-04-08 12:20:24 +0200tabaqui(~tabaqui@167.71.80.236) tabaqui
2025-04-08 12:28:05 +0200CiaoSen(~Jura@2a02:8071:64e1:da0:5a47:caff:fe78:33db) (Ping timeout: 265 seconds)
2025-04-08 12:28:21 +0200poxel(~lennart@user/poxel) poxel
2025-04-08 12:30:32 +0200poxel(~lennart@user/poxel) (Client Quit)
2025-04-08 12:31:13 +0200poxel(~lennart@user/poxel) poxel
2025-04-08 12:33:25 +0200poxel(~lennart@user/poxel) (Client Quit)
2025-04-08 12:33:54 +0200__monty__(~toonn@user/toonn) toonn
2025-04-08 12:35:20 +0200poxel(~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 +0200CiaoSen(~Jura@2a02:8071:64e1:da0:5a47:caff:fe78:33db) CiaoSen
2025-04-08 12:46:14 +0200Guest87(~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 +0200Guest87(~Guest87@139.167.143.182) (Client Quit)
2025-04-08 12:48:58 +0200Guest56(~Guest38@2601:408:c181:12c0:fc6a:ec80:dcee:cbd5)
2025-04-08 12:51:10 +0200lortabac(~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 +0200caconym(~caconym@user/caconym) (Quit: bye)
2025-04-08 13:02:09 +0200caconym(~caconym@user/caconym) caconym
2025-04-08 13:02:25 +0200jespada(~jespada@r190-133-49-11.dialup.adsl.anteldata.net.uy) jespada
2025-04-08 13:02:54 +0200thuna`(~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 +0200xff0x(~xff0x@2405:6580:b080:900:c071:5032:6468:f840)
2025-04-08 13:31:22 +0200Guest33(~Guest33@2409:40c0:37:8c86:24db:abaa:17dd:df2b)
2025-04-08 13:33:11 +0200jespada(~jespada@r190-133-49-11.dialup.adsl.anteldata.net.uy) (Ping timeout: 244 seconds)
2025-04-08 13:33:37 +0200Guest48(~Guest33@2409:40c0:37:8c86:24db:abaa:17dd:df2b)
2025-04-08 13:35:02 +0200puke(~puke@user/puke) puke
2025-04-08 13:35:33 +0200Guest48(~Guest33@2409:40c0:37:8c86:24db:abaa:17dd:df2b) (Client Quit)
2025-04-08 13:35:33 +0200jespada(~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 +0200sord937(~sord937@gateway/tor-sasl/sord937) (Remote host closed the connection)
2025-04-08 13:38:16 +0200sord937(~sord937@gateway/tor-sasl/sord937) sord937
2025-04-08 13:38:22 +0200TheCoffeMaker_(~TheCoffeM@186.136.173.70) (Ping timeout: 268 seconds)
2025-04-08 13:44:51 +0200tromp(~textual@2001:1c00:3487:1b00:1419:ab0:498a:2d0c) (Quit: My iMac has gone to sleep. ZZZzzz…)
2025-04-08 13:45:33 +0200Guest33(~Guest33@2409:40c0:37:8c86:24db:abaa:17dd:df2b) (Quit: Client closed)
2025-04-08 13:48:14 +0200acidjnk_new3(~acidjnk@p200300d6e71c4f636055d0f69fb4dc8c.dip0.t-ipconnect.de) (Ping timeout: 268 seconds)
2025-04-08 13:57:06 +0200weary-traveler(~user@user/user363627) user363627
2025-04-08 14:01:21 +0200acidjnk_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 +0200j1n37(~j1n37@user/j1n37) (Ping timeout: 260 seconds)
2025-04-08 14:21:55 +0200j1n37(~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 +0200CiaoSen(~Jura@2a02:8071:64e1:da0:5a47:caff:fe78:33db) (Ping timeout: 245 seconds)
2025-04-08 14:28:35 +0200bionade24(~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 +0200Smiles(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 +0200Guest56(~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 +0200acidjnk_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 +0200acidjnk_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 +0200TheCoffeMaker(~TheCoffeM@user/thecoffemaker) TheCoffeMaker
2025-04-08 14:49:37 +0200tromp(~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 +0200TheCoffeMaker(~TheCoffeM@user/thecoffemaker) (Ping timeout: 252 seconds)
2025-04-08 14:54:07 +0200TheCoffeMaker(~TheCoffeM@user/thecoffemaker) TheCoffeMaker
2025-04-08 14:54:54 +0200bitdex_(~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 +0200bionade24(~quassel@2a03:4000:33:45b::1) bionade24
2025-04-08 15:21:14 +0200TheCoffeMaker(~TheCoffeM@user/thecoffemaker) (Ping timeout: 252 seconds)
2025-04-08 15:22:57 +0200TheCoffeMaker(~TheCoffeM@user/thecoffemaker) TheCoffeMaker
2025-04-08 15:29:29 +0200ubert(~Thunderbi@2a02:8109:ab8a:5a00:27cc:9672:1463:dd93) (Quit: ubert)
2025-04-08 15:32:22 +0200Chai-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 +0200ChaiTRex(~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 +0200sord937(~sord937@gateway/tor-sasl/sord937) (Remote host closed the connection)
2025-04-08 15:42:12 +0200loonycyborg(loonycybor@wesnoth/developer/loonycyborg) (Ping timeout: 272 seconds)
2025-04-08 15:43:08 +0200sord937(~sord937@gateway/tor-sasl/sord937) sord937
2025-04-08 15:43:28 +0200loonycyborg(loonycybor@wesnoth/developer/loonycyborg) loonycyborg
2025-04-08 15:47:13 +0200TheCoffeMaker(~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 +0200bezik(~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 +0200polyphem(~rod@p4fc2cb32.dip0.t-ipconnect.de) (Ping timeout: 252 seconds)
2025-04-08 16:09:27 +0200sord937(~sord937@gateway/tor-sasl/sord937) (Remote host closed the connection)
2025-04-08 16:09:47 +0200sord937(~sord937@gateway/tor-sasl/sord937) sord937
2025-04-08 16:10:14 +0200vulpine(xfnw@user/meow/xfnw) (Quit: Connection reset by purr)
2025-04-08 16:10:48 +0200vulpine(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 +0200lortabac(~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 +0200alinab(sid468903@id-468903.helmsley.irccloud.com) (Ping timeout: 276 seconds)
2025-04-08 16:17:48 +0200gmc(sid58314@id-58314.ilkley.irccloud.com) (Ping timeout: 276 seconds)
2025-04-08 16:18:02 +0200tapas(sid467876@id-467876.ilkley.irccloud.com) (Read error: Connection reset by peer)
2025-04-08 16:18:05 +0200cbarrett(sid192934@id-192934.helmsley.irccloud.com) (Read error: Connection reset by peer)
2025-04-08 16:18:05 +0200alanz(sid110616@id-110616.uxbridge.irccloud.com) (Read error: Connection reset by peer)
2025-04-08 16:18:05 +0200sa(sid1055@id-1055.tinside.irccloud.com) (Read error: Connection reset by peer)
2025-04-08 16:18:06 +0200rubin55(sid666180@id-666180.ilkley.irccloud.com) (Read error: Connection reset by peer)
2025-04-08 16:18:07 +0200unlucy(sid572875@user/unlucy) (Read error: Connection reset by peer)
2025-04-08 16:18:11 +0200alinab(sid468903@id-468903.helmsley.irccloud.com)
2025-04-08 16:18:13 +0200gmc(sid58314@id-58314.ilkley.irccloud.com) gmc
2025-04-08 16:18:14 +0200tapas(sid467876@id-467876.ilkley.irccloud.com) tapas
2025-04-08 16:18:15 +0200alanz(sid110616@id-110616.uxbridge.irccloud.com) alanz
2025-04-08 16:18:16 +0200cbarrett(sid192934@id-192934.helmsley.irccloud.com) cbarrett
2025-04-08 16:18:21 +0200Pent(sid313808@id-313808.lymington.irccloud.com) (Ping timeout: 252 seconds)
2025-04-08 16:18:22 +0200Kamuela(sid111576@id-111576.tinside.irccloud.com) (Ping timeout: 252 seconds)
2025-04-08 16:18:22 +0200rubin55(sid666180@id-666180.ilkley.irccloud.com) rubin55
2025-04-08 16:18:27 +0200gaze__(sid387101@id-387101.helmsley.irccloud.com) (Read error: Connection reset by peer)
2025-04-08 16:18:27 +0200shawwwn(sid6132@id-6132.helmsley.irccloud.com) (Read error: Connection reset by peer)
2025-04-08 16:18:31 +0200sa(sid1055@id-1055.tinside.irccloud.com) sa
2025-04-08 16:18:36 +0200mustafa(sid502723@rockylinux/releng/mustafa) (Read error: Connection reset by peer)
2025-04-08 16:18:37 +0200unlucy(sid572875@user/unlucy) unlucy
2025-04-08 16:18:39 +0200gaze__(sid387101@id-387101.helmsley.irccloud.com) gaze__
2025-04-08 16:18:39 +0200shawwwn(sid6132@id-6132.helmsley.irccloud.com) shawwwn
2025-04-08 16:18:42 +0200meinside(uid24933@id-24933.helmsley.irccloud.com) (Read error: Connection reset by peer)
2025-04-08 16:18:42 +0200integral(sid296274@user/integral) (Read error: Connection reset by peer)
2025-04-08 16:18:47 +0200mustafa(sid502723@rockylinux/releng/mustafa) mustafa
2025-04-08 16:18:54 +0200meinside(uid24933@id-24933.helmsley.irccloud.com) meinside
2025-04-08 16:18:56 +0200integral(sid296274@user/integral) integral
2025-04-08 16:20:01 +0200taktoa[c](sid282096@id-282096.tinside.irccloud.com) (Ping timeout: 248 seconds)
2025-04-08 16:20:02 +0200Boarders_____(sid425905@id-425905.lymington.irccloud.com) (Ping timeout: 248 seconds)
2025-04-08 16:20:02 +0200caasih(sid13241@id-13241.ilkley.irccloud.com) (Ping timeout: 248 seconds)
2025-04-08 16:20:05 +0200edm(sid147314@id-147314.hampstead.irccloud.com) (Ping timeout: 265 seconds)
2025-04-08 16:20:11 +0200Boarders_____(sid425905@id-425905.lymington.irccloud.com)
2025-04-08 16:20:34 +0200taktoa[c](sid282096@id-282096.tinside.irccloud.com) taktoa[c]
2025-04-08 16:22:25 +0200caasih(sid13241@id-13241.ilkley.irccloud.com) caasih
2025-04-08 16:22:34 +0200Kamuela(sid111576@id-111576.tinside.irccloud.com) Kamuela
2025-04-08 16:22:48 +0200Pent(sid313808@id-313808.lymington.irccloud.com) Pent____
2025-04-08 16:23:35 +0200edm(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 +0200poxel(~lennart@user/poxel) (Ping timeout: 265 seconds)
2025-04-08 16:39:33 +0200amadaluzia(~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 +0200Smiles(uid551636@id-551636.lymington.irccloud.com) Smiles
2025-04-08 16:45:18 +0200poxel(~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 +0200jespada(~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 +0200sprotte24_(~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 +0200ouilemur(~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 +0200gorignak(~gorignak@user/gorignak) (Quit: quit)
2025-04-08 17:01:31 +0200gorignak(~gorignak@user/gorignak) gorignak
2025-04-08 17:02:53 +0200gorignak(~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 +0200hiecaq(~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 +0200chexum(~quassel@gateway/tor-sasl/chexum) (Remote host closed the connection)
2025-04-08 17:18:16 +0200chexum(~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 +0200jespada(~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 +0200jmcantrellGuest9294
2025-04-08 17:22:28 +0200Guest9294(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 +0200jmcantrell_(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 +0200Gadotgadot
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 +0200vanishingideal(~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 +0200vanishingideal(~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 +0200ski. 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 +0200hellwolfduck, 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 +0200skialso 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 +0200chele(~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 +0200jespada(~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 +0200amadaluzia(~amadaluzi@2a00:23c7:ed8b:6701:c483:4ce8:4c61:1453) (Changing host)
2025-04-08 17:57:54 +0200amadaluzia(~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 +0200jespada(~jespada@r167-61-127-49.dialup.adsl.anteldata.net.uy) jespada
2025-04-08 18:01:41 +0200skiidly 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 +0200euphores(~SASL_euph@user/euphores) (Quit: Leaving.)
2025-04-08 18:04:45 +0200pavonia(~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 +0200euphores(~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 +0200skihasn'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 +0200skiponders 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 +0200hiecaq(~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 +0200machinedgod(~machinedg@d108-173-18-100.abhsia.telus.net) (Ping timeout: 272 seconds)
2025-04-08 18:19:29 +0200merijn(~merijn@77.242.116.146) (Ping timeout: 248 seconds)
2025-04-08 18:28:55 +0200jakesyl_____(sid56879@id-56879.hampstead.irccloud.com) (Read error: Connection reset by peer)
2025-04-08 18:29:21 +0200sa1(sid7690@id-7690.ilkley.irccloud.com) (Read error: Connection reset by peer)
2025-04-08 18:29:38 +0200sclv(sid39734@haskell/developer/sclv) (Read error: Connection reset by peer)
2025-04-08 18:30:06 +0200jonrh(sid5185@id-5185.ilkley.irccloud.com) (Read error: Connection reset by peer)
2025-04-08 18:30:08 +0200SanchayanMaity(sid478177@id-478177.hampstead.irccloud.com) (Read error: Connection reset by peer)
2025-04-08 18:30:10 +0200bjs(sid190364@user/bjs) (Ping timeout: 248 seconds)
2025-04-08 18:30:10 +0200bw(sid2730@user/betawaffle) (Ping timeout: 248 seconds)
2025-04-08 18:30:13 +0200bradparker(sid262931@id-262931.uxbridge.irccloud.com) (Read error: Connection reset by peer)
2025-04-08 18:30:13 +0200JSharp(sid4580@user/JSharp) (Read error: Connection reset by peer)
2025-04-08 18:30:16 +0200SrPx(sid108780@id-108780.uxbridge.irccloud.com) (Read error: Connection reset by peer)
2025-04-08 18:30:17 +0200NiKaN(sid385034@id-385034.helmsley.irccloud.com) (Read error: Connection reset by peer)
2025-04-08 18:30:17 +0200jonrh(sid5185@id-5185.ilkley.irccloud.com) jonrh
2025-04-08 18:30:19 +0200SanchayanMaity(sid478177@id-478177.hampstead.irccloud.com) SanchayanMaity
2025-04-08 18:30:19 +0200Techcable(sid534393@user/Techcable) (Read error: Connection reset by peer)
2025-04-08 18:30:34 +0200tzh(~tzh@c-76-115-131-146.hsd1.or.comcast.net) tzh
2025-04-08 18:30:34 +0200JSharp(sid4580@user/JSharp) JSharp
2025-04-08 18:30:34 +0200bjs(sid190364@user/bjs) bjs
2025-04-08 18:30:37 +0200jakesyl_____(sid56879@hampstead.irccloud.com)
2025-04-08 18:30:51 +0200Techcable(sid534393@user/Techcable) Techcable
2025-04-08 18:30:53 +0200sa1(sid7690@ilkley.irccloud.com) sa1
2025-04-08 18:31:10 +0200sclv(sid39734@haskell/developer/sclv) sclv
2025-04-08 18:31:40 +0200NiKaN(sid385034@id-385034.helmsley.irccloud.com) NiKaN
2025-04-08 18:31:42 +0200SrPx(sid108780@id-108780.uxbridge.irccloud.com) SrPx
2025-04-08 18:31:47 +0200bradparker(sid262931@uxbridge.irccloud.com) bradparker
2025-04-08 18:31:58 +0200bw(sid2730@user/betawaffle) betawaffle
2025-04-08 18:34:59 +0200lxsameer(~lxsameer@Serene/lxsameer) (Ping timeout: 268 seconds)
2025-04-08 18:35:16 +0200TheCoffeMaker(~TheCoffeM@user/thecoffemaker) TheCoffeMaker
2025-04-08 18:39:56 +0200tromp(~textual@2001:1c00:3487:1b00:1419:ab0:498a:2d0c) (Quit: My iMac has gone to sleep. ZZZzzz…)
2025-04-08 18:46:29 +0200peterbecich(~Thunderbi@syn-047-229-123-186.res.spectrum.com) peterbecich
2025-04-08 18:53:09 +0200Smiles(uid551636@id-551636.lymington.irccloud.com) (Quit: Connection closed for inactivity)
2025-04-08 18:55:51 +0200tromp(~textual@2001:1c00:3487:1b00:1419:ab0:498a:2d0c)
2025-04-08 18:59:30 +0200TheCoffeMaker(~TheCoffeM@user/thecoffemaker) (Ping timeout: 252 seconds)
2025-04-08 18:59:33 +0200TheCoffeMaker_(~TheCoffeM@186.136.173.186)
2025-04-08 19:07:19 +0200peterbecich(~Thunderbi@syn-047-229-123-186.res.spectrum.com) (Ping timeout: 265 seconds)
2025-04-08 19:17:17 +0200vanishingideal(~vanishing@user/vanishingideal) (Ping timeout: 244 seconds)
2025-04-08 19:22:33 +0200wootehfoot(~wootehfoo@user/wootehfoot) wootehfoot
2025-04-08 19:24:29 +0200vanishingideal(~vanishing@user/vanishingideal) vanishingideal
2025-04-08 19:28:14 +0200notdabs(~Owner@2600:1700:69cf:9000:1d8b:380b:ab0b:1fbd)
2025-04-08 19:32:35 +0200lxsameer(~lxsameer@Serene/lxsameer) lxsameer
2025-04-08 19:38:41 +0200ft(~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 +0200dhil(~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 +0200rvalue(~rvalue@user/rvalue) (Read error: Connection reset by peer)
2025-04-08 20:09:48 +0200rvalue(~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 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn
2025-04-08 20:18:18 +0200merijn(~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 +0200ljdarj1(~Thunderbi@user/ljdarj) ljdarj
2025-04-08 20:24:07 +0200 <EvanR> worse is better :tm:
2025-04-08 20:25:06 +0200ljdarj1ljdarj
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 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn
2025-04-08 20:30:44 +0200target_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 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 265 seconds)
2025-04-08 20:34:21 +0200sprotte24_(~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 +0200tromp(~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 +0200lxsameer(~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 +0200wootehfoot(~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 +0200merijn(~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 +0200merijn(~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 +0200tromp(~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 +0200caconym(~caconym@user/caconym) (Quit: bye)
2025-04-08 21:00:25 +0200gmg(~user@user/gehmehgeh) (Quit: Leaving)
2025-04-08 21:00:45 +0200caconym(~caconym@user/caconym) caconym
2025-04-08 21:00:56 +0200merijn(~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 +0200prolic_(~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 +0200tromp(~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 +0200machinedgod(~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 +0200monochromdoesn't like Perl sigils or Lisp sigils.
2025-04-08 21:07:51 +0200merijn(~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 +0200gmg(~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 +0200wootehfoot(~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 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn
2025-04-08 21:14:55 +0200 <monochrom> How would you feel about hungarian for type names where you annotate the kind? E.g., data Star2StarMaybe a = ...
2025-04-08 21:15:00 +0200 <haskellbridge> <Liamzee> prolic_, still here?
2025-04-08 21:15:17 +0200 <prolic_> haskellbridge yes sir
2025-04-08 21:15:33 +0200 <haskellbridge> <Liamzee> https://www.gekkou.co.uk/cvitae/
2025-04-08 21:15:40 +0200 <haskellbridge> <Liamzee> his linked in is still active
2025-04-08 21:15:45 +0200 <EvanR> OctothorpInt#
2025-04-08 21:15:54 +0200jco(~jco@78-70-217-44-no600.tbcn.telia.com) (Ping timeout: 246 seconds)
2025-04-08 21:15:58 +0200tromp(~textual@2001:1c00:3487:1b00:e513:bc03:349e:ac26)
2025-04-08 21:16:02 +0200 <EvanR> or DoubleOctothorp
2025-04-08 21:16:18 +0200 <haskellbridge> <Liamzee> would it be rude to try contacting him there?
2025-04-08 21:16:20 +0200 <prolic_> I wrote him emails twice already and explained I intend to take over the package or at help him maintain, no response
2025-04-08 21:16:30 +0200 <haskellbridge> <Liamzee> you wrote him e-mails at which address?
2025-04-08 21:16:57 +0200jespada(~jespada@r167-61-127-49.dialup.adsl.anteldata.net.uy) (Quit: My Mac has gone to sleep. ZZZzzz…)
2025-04-08 21:18:00 +0200 <prolic_> to that exact email address
2025-04-08 21:18:20 +0200 <mauke> https://www.gekkou.co.uk/cvitae/ is not an email address
2025-04-08 21:18:25 +0200 <haskellbridge> <Liamzee> the gekkou site is no longer being maintained
2025-04-08 21:18:40 +0200 <prolic_> Robin KAY <komadori@gekkou.co.uk>
2025-04-08 21:19:14 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 248 seconds)