Home liberachat/#haskell: Logs Calendar

Logs on 2025-04-08 (liberachat/#haskell)

00:04:06 × jespada quits (~jespada@r190-133-49-11.dialup.adsl.anteldata.net.uy) (Ping timeout: 252 seconds)
00:08:47 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
00:09:24 × emojelly quits (~eselber_p@user/endojelly) (Ping timeout: 260 seconds)
00:09:42 emojelly joins (~eselber_p@user/endojelly)
00:12:56 × anpad quits (~pandeyan@user/anpad) (Quit: ZNC 1.8.2 - https://znc.in)
00:13:33 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds)
00:13:48 anpad joins (~pandeyan@user/anpad)
00:13:55 × nurupo quits (~nurupo.ga@user/nurupo) (Quit: nurupo.ga)
00:14:30 nurupo joins (~nurupo.ga@user/nurupo)
00:16:21 notdabs joins (~Owner@2600:1700:69cf:9000:20c6:7b0d:8034:a6ce)
00:20:03 × j1n37- quits (~j1n37@user/j1n37) (Ping timeout: 265 seconds)
00:21:34 j1n37 joins (~j1n37@user/j1n37)
00:24:18 × ezzieyguywuf quits (~Unknown@user/ezzieyguywuf) (Quit: Lost terminal)
00:24:35 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
00:25:35 × acidjnk_new3 quits (~acidjnk@p200300d6e71c4f1839a5a90aae0b2850.dip0.t-ipconnect.de) (Ping timeout: 268 seconds)
00:29:33 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 245 seconds)
00:40:21 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
00:47:21 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 244 seconds)
00:54:52 <emojelly> I have a question about profiling. So according to +RTS -pa, most of the time is spent in the following cost center:
00:54:54 <emojelly> gettingrun SigTest tests/SigTest.hs:101:175-177 1760 24025 64.3 45.8 81.5 58.5 865788 24019809720
00:54:56 <emojelly> resume Control.Monad.Coroutine Control/Monad/Coroutine.hs:88:4-9 1803 57732070 0.0 0.0 0.0 0.0 0 0
00:55:04 <emojelly> the first one, which I named "gettingrun", here:
00:55:40 <emojelly> combineEx (Right (Left (Request i1 nextco1))) (Right (Left (Request i2 nextco2))) = let
00:55:42 <emojelly> nextCombined c o = combineRe (unwrapEx ({-# SCC runningco1 #-}(nextco1 o))) (unwrapEx ({-# SCC runningco2 #-}(nextco2 o))) c
00:55:44 <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
00:56:31 <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.
00:56:36 × user363627 quits (~user@user/user363627) (Quit: Konversation terminated!)
00:56:53 user363627 joins (~user@user/user363627)
00:56:54 <emojelly> So I guess it's really what's getting evaluated within runIdentityT. But why don't I see any cost centers for that?
00:57:17 <emojelly> Is my suspicion correct, that this time is spent in other modules, that are somehow not built for profiling?
00:58:25 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
00:59:21 <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?
01:01:00 × otto_s quits (~user@p5de2f09d.dip0.t-ipconnect.de) (Ping timeout: 244 seconds)
01:02:37 otto_s joins (~user@p5b044d5e.dip0.t-ipconnect.de)
01:03:04 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 260 seconds)
01:06:00 × Pixi quits (~Pixi@user/pixi) (Quit: Leaving)
01:06:54 Pixi joins (~Pixi@user/pixi)
01:08:44 ljdarj1 joins (~Thunderbi@user/ljdarj)
01:12:20 × xff0x quits (~xff0x@ai066236.d.east.v6connect.net) (Ping timeout: 272 seconds)
01:12:21 × ljdarj quits (~Thunderbi@user/ljdarj) (Ping timeout: 248 seconds)
01:12:21 ljdarj1 is now known as ljdarj
01:13:47 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
01:16:38 <EvanR> emojelly, to be serious about profiling you have to have all your dependencies built for profiling
01:18:45 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 248 seconds)
01:20:37 <monochrom> I think cabal does that automatically once you enable profiling.
01:22:39 peterbecich joins (~Thunderbi@syn-047-229-123-186.res.spectrum.com)
01:29:18 × exarkun quits (~exarkun@user/exarkun) (Excess Flood)
01:29:31 × machinedgod quits (~machinedg@d108-173-18-100.abhsia.telus.net) (Ping timeout: 252 seconds)
01:29:33 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
01:30:39 × s4msung quits (DQyKc40dMf@user/s4msung) (Ping timeout: 260 seconds)
01:31:03 s4msung joins (HpS7xJgsJj@user/s4msung)
01:31:41 exarkun joins (~exarkun@user/exarkun)
01:34:58 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 265 seconds)
01:36:55 <geekosaur> yes
01:37:02 <geekosaur> so does stack
01:37:23 <emojelly> I've used cabal...
01:37:27 <emojelly> --enable-profiling
01:37:50 <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.
01:38:06 × szkl quits (uid110435@id-110435.uxbridge.irccloud.com) (Quit: Connection closed for inactivity)
01:38:15 <geekosaur> also remember laziness: if something gets forced inside a profiled function/etc., it'll be accrued to that
01:38:16 <emojelly> It's this expression: (({-# SCC gettingrun #-}run) . {-# SCC runcombined #-}nextCombined c)))
01:38:21 <emojelly> I don't know where to go from there.
01:38:27 <emojelly> geekosaur: I know, yeah
01:38:38 <emojelly> but how do I find out what that is?
01:40:39 <emojelly> Cleaned up, the expression is just "run . nextCombined c"
01:40:54 <emojelly> and run, as said, should just be "runIdentityT", I doubt there's any time spent in that
01:41:38 <emojelly> "nextCombine c" has 17% cumulative. That's also a lot, but nearly near the 64%/81% of the whole expression
01:44:24 <emojelly> not nearly I mean
01:44:39 <emojelly> So to summarize:
01:45:03 <emojelly> (run . nextCombined c): 64% direct, 81% inherited
01:45:19 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
01:46:14 × yin quits (~z@user/zero) (Ping timeout: 260 seconds)
01:46:20 <emojelly> nextCombined c: 0% direct, 17% inherited
01:46:43 <emojelly> that leaves 64% that are unaccounted for, and that I have no idea on how to find out where it's spent
01:47:21 yin joins (~z@user/zero)
01:48:01 × ljdarj quits (~Thunderbi@user/ljdarj) (Ping timeout: 244 seconds)
01:48:39 <chiselfuse> https://www.haskell.org/onlinereport/classes.gif
01:48:57 <chiselfuse> what's the strange symbol between brackets under Eq here?
01:49:10 <chiselfuse> "All except IO, (??)"
01:49:47 <geekosaur> same as under the others on that line, it just got mangled worse by pixelation. (->)
01:49:55 <EvanR> wow that picture has no aged well
01:49:58 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 245 seconds)
01:50:15 <geekosaur> meaning, functions
01:50:22 <EvanR> I think it is outdated too
01:50:51 <geekosaur> well outdated, yes
01:51:10 <geekosaur> missing AMP, missing Num losing Eq and Show "superclasses"
01:51:18 <geekosaur> to say nothing of FTP
01:51:38 <geekosaur> but then, that's the Haskell 98 report
01:52:42 <geekosaur> (you may want https://www.haskell.org/onlinereport/haskell2010, but it'll still be missing those changes
01:52:59 × peterbecich quits (~Thunderbi@syn-047-229-123-186.res.spectrum.com) (Ping timeout: 252 seconds)
01:54:45 <EvanR> .oO( all (what) have an Eq instance except IO and ->)
02:01:06 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
02:03:33 xff0x joins (~xff0x@fsb6a9491c.tkyc517.ap.nuro.jp)
02:03:50 <chiselfuse> geekosaur: so the changes are post 2010 spec? if so is there a website with the new draft?
02:05:15 <geekosaur> no, the committee got "stuck" some time back and no new / updated draft is in sight, just what ghc's `base` currently implements
02:05:51 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 246 seconds)
02:06:33 <chiselfuse> hm
02:06:45 <chiselfuse> geekosaur: can you link me this `base` thing? i don't know what you're referring to
02:07:12 bitdex joins (~bitdex@gateway/tor-sasl/bitdex)
02:07:28 <geekosaur> https://hackage.haskell.org/package/base-4.21.0.0
02:10:20 <EvanR> all your base are belong to us
02:10:24 <chiselfuse> geekosaur: is this a fully updated one? https://cs.lmu.edu/~ray/images/haskell-typeclasses.png
02:11:34 <geekosaur> looks closer, at least. I think what you really want is https://wiki.haskell.org/index.php?title=Typeclassopedia
02:14:21 <chiselfuse> geekosaur: why does the graph there not have Num and many others?
02:16:54 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
02:18:21 <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
02:18:25 <emojelly> How do I rebuild all dependencies of my cabal project with different flags?
02:18:39 <geekosaur> Num, Eq, etc. are trivial.
02:20:33 <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
02:21:45 <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
02:23:49 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 248 seconds)
02:24:27 <emojelly> geekosaur: thanks, I found exactly that in the cabal documentation in the meantime, and it seems to work!
02:24:27 <EvanR> if you type :info Num in ghci you will get the details
02:24:43 <emojelly> package *
02:24:45 <emojelly> profiling: true
02:24:47 <emojelly> optimization: 0
02:24:49 <EvanR> if you look in the base haddocks, there is documentation there for Num, Eq, Ord, etc
02:24:49 <emojelly> flags: -rtsopts -O0 -fprof-auto
02:24:56 <emojelly> let's see if profiling will be more helpful...
02:25:20 <EvanR> :i Eq
02:25:26 <EvanR> % :i Eq
02:25:26 <yahb2> type Eq :: * -> Constraint ; class Eq a where ; (==) :: a -> a -> Bool ; (/=) :: a -> a -> Bool ; {-# MINIMAL (==) | (/=) #-} ; -- Defined in ‘GHC.Classes’ ; instance [safe] Eq Nat -- Defi...
02:25:56 <EvanR> provides the == and /= (doesn't equal) operations
02:26:02 <geekosaur> use %% instead, it'll use a pastebin
02:26:09 × chiselfuse quits (~chiselfus@user/chiselfuse) (Remote host closed the connection)
02:26:14 <EvanR> %% :i Num
02:26:14 <yahb2> https://paste.tomsmeding.com/eh7HAAXo
02:26:21 <EvanR> snazzy
02:26:44 <monochrom> "eh7" eh? :)
02:26:48 chiselfuse joins (~chiselfus@user/chiselfuse)
02:27:29 <monochrom> But I am not sure of the value of profiling unoptimized code.
02:28:04 <geekosaur> that example doesn't know about `profiling-detail: late` (IIRC that's the option)
02:31:14 <chiselfuse> EvanR: can you help me read some of that output? `instance Eq a => Eq [a] -- Defined in ‘GHC.Classes’` what does this mean?
02:31:57 <geekosaur> if some type a has an Eq instance, then the type "list of a" has an Eq instance
02:32:17 <EvanR> ^
02:32:27 <emojelly> aaah, much better I think
02:33:12 <EvanR> the list Eq instance uses the Eq instance of the element type
02:33:34 <EvanR> > [1,2,3] == [1,2,4]
02:33:35 <lambdabot> False
02:34:25 <chiselfuse> so it's just `instance <type signature> -- defined in ...` where anything of type `<type signature>` is an instance of the typeclass `:i <typeclass>`
02:34:42 <EvanR> instance definitions have their own syntax
02:34:47 <EvanR> not just any type signature works there
02:34:55 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
02:35:12 <ski> `instance Int where ...' does not work
02:35:18 <chiselfuse> is it a subset of type signatures or something completely different?
02:35:28 <chiselfuse> yea i just found `instance Eq Integer -- Defined in ‘GHC.Num.Integer’`. how do i read it?
02:35:29 <monochrom> Completely different.
02:37:34 <EvanR> as in "and now for something"
02:38:08 <chiselfuse> i don't understand
02:38:18 <chiselfuse> oh i get the joke
02:38:58 × notdabs quits (~Owner@2600:1700:69cf:9000:20c6:7b0d:8034:a6ce) (Read error: Connection reset by peer)
02:40:04 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 260 seconds)
02:41:16 <chiselfuse> how do i read what comes after `instance`? i don't trust chatgpt i think it's telling me nonsense
02:42:46 <monochrom> All good textbooks and tutorials explain classes and instances and their syntax.
02:43:06 × chiselfuse quits (~chiselfus@user/chiselfuse) (Remote host closed the connection)
02:43:40 chiselfuse joins (~chiselfus@user/chiselfuse)
02:46:32 <EvanR> that may be true
02:46:53 <EvanR> disclaimer good textbooks and tutorials aren't guaranteed to exist
02:48:06 <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"
02:50:38 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
02:51:18 <emojelly> This is driving me crazy...
02:52:54 <monochrom> It is a full-time job to understand performance issues.
02:53:00 <emojelly> combineTestSignals 35.2 37.0 35.3 37.1 6745 19387990040
02:53:02 <emojelly> resume 0.0 0.0 0.0 0.0 0 0
02:53:04 <emojelly> combineTestSignals' 0.0 0.0 0.0 0.1 0 2640
02:53:19 <emojelly> combineTestSignals is literally just: combineTestSignals = combineTestSignals' (,)
02:53:29 <emojelly> how can this eat up all the cycles, but combineTestCycles' doesn't
02:54:08 <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)
02:54:26 × gorignak quits (~gorignak@user/gorignak) (Quit: quit)
02:54:46 gorignak joins (~gorignak@user/gorignak)
02:54:51 <EvanR> similar to the truth table for modus ponens when the hypothesis is false
02:55:07 <EvanR> s/modus ponens/material implication/
02:55:19 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds)
02:55:48 <geekosaur> emojelly, don't forget `(,)`, which may be causing boxing/unboxing depending on how things are being optimized
02:56:16 <emojelly> hmm... I said -O0 so it doesn't get in the way
02:56:21 <monochrom> That is an interesting way to look at it. Continue wording it as "if then" but framing "if then" as material implication...
02:57:07 <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?
02:58:12 <geekosaur> combineTestSignals' produces a thunk, combineTestSignals (or whatever consumes its result) forces it
02:58:52 <emojelly> ah, that makes sense.
02:59:02 <emojelly> So how do I know what's expensive?
02:59:54 <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)
03:00:31 <geekosaur> this is part of why understanding performance issues is a full time job
03:01:01 <geekosaur> boxing and unboxing is another thing that costs cycles and won't be profiled, because it's too primitive for profiling
03:03:25 peterbecich joins (~Thunderbi@syn-047-229-123-186.res.spectrum.com)
03:03:28 <emojelly> Hmm. So how do I proceed?
03:03:59 × gorignak quits (~gorignak@user/gorignak) (Ping timeout: 260 seconds)
03:04:35 <emojelly> Make my own strict (,)?
03:04:36 j1n37- joins (~j1n37@user/j1n37)
03:05:35 × j1n37 quits (~j1n37@user/j1n37) (Ping timeout: 252 seconds)
03:05:42 <geekosaur> I'm not sure tbh
03:06:02 <emojelly> let f !a !b = (a,b) in combineTestSignals' f
03:06:09 <emojelly> let's see if that helps me get more information
03:06:24 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
03:07:01 <EvanR> eh
03:07:09 × forell quits (~forell@user/forell) (Ping timeout: 268 seconds)
03:07:32 <emojelly> sadly, no difference
03:08:02 <EvanR> a strict tuple is actually a handy thing to have sometimes
03:08:32 <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
03:10:12 <ski> a tuple that didn't force until a component got actually forced, would potentially be nice (in order to have a categorical product)
03:10:13 <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"
03:10:19 <emojelly> no time is spent in combineTestSignals'
03:10:57 <EvanR> just sounds like a bad report, or bad reading of the available data
03:11:05 <emojelly> I just don't know where to go from here... how do I figure out which part of my program is expensive?
03:11:34 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 260 seconds)
03:11:44 <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
03:11:48 <EvanR> and how
03:12:07 <emojelly> EvanR: do I read this wrong? https://paste.tomsmeding.com/DWrhtBvL
03:12:09 <EvanR> if it would matter then combineTestSignals could've done it
03:12:18 <EvanR> prime*
03:13:33 <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
03:13:36 <Axman6> I feel like you need to use a different profiling mode, maybe the one that automatically adds cost centres
03:13:47 <EvanR> and you use -O0 so whatever you eventually learn becomes irrelevant when you put the optimization back
03:13:47 <emojelly> Axman6: I used -fprof-auto
03:13:55 <Axman6> Hmm, ok
03:14:07 <emojelly> profiling: true
03:14:09 <emojelly> optimization: 0
03:14:11 <emojelly> flags: -rtsopts -O0 -fprof-auto
03:14:15 <emojelly> cabal run --enable-profiling --profiling-detail=all-functions --ghc-options="-rtsopts -O0 -fprof-auto" test-library -- -p "/sendBytes'/" +RTS -pa
03:14:44 <EvanR> it could be that constructing that tuple is really most of the work and memory?
03:14:54 <EvanR> in which case I'd say turn optimizations back on
03:15:28 <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?
03:16:20 <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
03:16:28 <emojelly> of combineTestSignals' I mean
03:17:31 <emojelly> Axman6: yeah I don't mind sharing all of it. Not sure sharing all is super enlightening, maybe I can find a subset?
03:17:41 <emojelly> But as it is I don't even know which part of it is the slow one...
03:18:13 <EvanR> emojelly, building a tuple and taking it apart are ridiculously cheap either way, if they aren't optimized out
03:18:58 × hughjfchen quits (~hughjfche@vmi2417424.contaboserver.net) (Quit: WeeChat 4.4.3)
03:19:08 <emojelly> EvanR: yeah, I'd be surprised...
03:19:34 <emojelly> Okay it's never that, but is it per-chance possible that the profiling code *does* have a bug?
03:19:44 <EvanR> and that's the only things a tuple can do
03:20:03 <emojelly> And as said, I still don't quite understand why "entries" and "time%" don't correlate
03:20:12 hughjfchen joins (~hughjfche@vmi2417424.contaboserver.net)
03:20:14 <Axman6> We'd need to see the code, we're speculating about (,) because there's nothing else to go off
03:20:16 <emojelly> it's always the cost center *under* the %time-heavy one that has a lot of "entries"
03:21:13 <emojelly> https://paste.tomsmeding.com/hq7JjRY1
03:21:40 <emojelly> but it's absolutely not a given that that is the slow code, it's intertwined with Clash and my own test library
03:22:12 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
03:22:15 <Axman6> Yeah I wondered if this was clash stuff
03:22:28 <EvanR> stupid question does the program actually do anything
03:23:23 <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
03:23:37 <emojelly> let me paste the example I'm testing here
03:24:07 <emojelly> https://paste.tomsmeding.com/PEspnrWh
03:24:40 gorignak joins (~gorignak@user/gorignak)
03:24:59 <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
03:25:17 <emojelly> the whole thing is based on Coroutines, and it works, does exactly what it should
03:25:57 <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
03:26:00 <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
03:26:01 <emojelly> and it takes like... 10 seconds
03:26:42 <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?
03:26:43 <EvanR> there might also be space leaks going on, which slows things down
03:26:55 <EvanR> which a different kind of profile might reveal
03:27:05 <emojelly> That's the "individual" %time, the one that does *not* also include time for the cost centers hierarchically below
03:27:14 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds)
03:27:27 <emojelly> EvanR: heap grows to about ~40M and then garbage collection cleans it up
03:27:43 <emojelly> it's weird, yeah, but weird enough for being that slow?
03:27:49 <EvanR> 40M is nothing
03:27:53 <emojelly> exactly
03:27:55 <emojelly> also, again
03:28:22 <Axman6> what sort of productivity does it say you're getting? how much time is spent in GC?
03:29:06 <emojelly> combineTestSignals 0 38.0 34.4 38.0 34.4 7688 19398555176
03:29:08 <emojelly> resume 24035 0.0 0.0 0.0 0.0 0 0
03:29:15 <emojelly> look at this, isn't this nonsensical by itself?
03:29:27 <emojelly> 38% of time spent in combineTestSignals, but 0 entries?
03:29:35 <emojelly> and resume has 24035 entries but 0% time?
03:29:47 <Axman6> use a paste site please
03:30:08 <emojelly> https://paste.tomsmeding.com/DWrhtBvL
03:30:16 <emojelly> not the same run, but very similar, exhibiting the same weirdness
03:30:18 <EvanR> zero time could just be a failure to measure it properly
03:30:38 <emojelly> how does the report go from 0 entries to 38% individual (i.e. non-inherited) time?
03:31:08 <EvanR> I don't see 0 entries
03:31:12 <emojelly> "The number of times this particular point in the call tree was entered."
03:31:18 <emojelly> you don't?
03:32:00 <Axman6> jesus, I didn't realise the code goes all the way off the screen...
03:32:38 <emojelly> ah, I guess if it's how often it's "entered", not how often the profiler saw it...
03:32:49 <emojelly> then it isn't nonsensical per se
03:33:19 <emojelly> well, the 0 is... unless the 0 means the profiler never caught in "entering"?
03:33:23 <emojelly> still weird
03:33:30 <EvanR> clearly this data is not helping
03:33:36 <emojelly> it clearly isn't
03:36:49 <emojelly> let's see what happens if I downgrade ghc two minor versions.
03:37:53 <emojelly> I wonder if clash is hiding some unsafePerformIO somewhere... maybe I should also trace system calls.
03:37:59 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
03:39:35 <Axman6> man, I cannot follow that code. It's crying out for some do-notation or something.
03:40:22 <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...
03:41:04 <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.)
03:41:37 <emojelly> It's also Coroutine-code, directly manipulating the Coroutines. That kind of code can seem convoluted to begin with.
03:42:43 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 244 seconds)
03:45:41 Noir joins (~Noir@2607:ac80:411:a:dc3c:8e7b:ab32:5495)
03:46:42 × Noir quits (~Noir@2607:ac80:411:a:dc3c:8e7b:ab32:5495) (Remote host closed the connection)
03:49:30 halloy2596 joins (~halloy259@2607:ac80:411:a:dc3c:8e7b:ab32:5495)
03:50:04 <emojelly> flame graph: https://eniac.digital/fkdlvmiy/pbimage.uBoiIi.s.png
03:50:26 <emojelly> I know laziness and all, but it really makes it look like combineTestSignals is spending a whole lot of time not doing anything.
03:53:03 <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
03:53:48 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
03:56:07 <EvanR> it's getting late here, you might have shown up in a dead time
03:56:26 <jackdk> The Aussies have the night watch
03:56:50 <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
03:57:48 <ski> halloy2596 : most important advice : stick around, preferably at least for a couple of hours, to allow people to respond
03:58:03 × Fijxu quits (~Fijxu@user/fijxu) (Quit: XD!!)
03:58:29 <jackdk> halloy2596: I'd recommend some web searches; a few minutes on DDG turned up https://summer.haskell.org/ideas.html
03:59:31 <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)
03:59:36 × chexum quits (~quassel@gateway/tor-sasl/chexum) (Ping timeout: 264 seconds)
03:59:58 chexum joins (~quassel@gateway/tor-sasl/chexum)
04:01:09 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 260 seconds)
04:04:08 <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.
04:04:39 × amadaluzia_ quits (~amadaluzi@2a00:23c7:ed8b:6701:e287:4eed:50df:f686) (Ping timeout: 260 seconds)
04:04:42 <halloy2596> ski: understood
04:06:48 halloy2596 is now known as Noir
04:07:32 <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)
04:08:15 <EvanR> and leave usually 2.7 minutes before I'm about to respond
04:08:22 <EvanR> ime
04:08:24 <ski> indeed
04:08:30 <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.
04:08:53 Fijxu joins (~Fijxu@user/fijxu)
04:09:35 JuanDaugherty joins (~juan@user/JuanDaugherty)
04:11:38 <ski> hm, wasn't there a liquid-haskell channel or something ?
04:11:51 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
04:12:21 <jackdk> Oh possibly, but I never heard about it
04:13:22 <ski> perhaps it was only on Freenode
04:13:32 <JuanDaugherty> cause quickcheck an stuff just isn enuf
04:14:26 <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 :(
04:14:26 <ski> ah, yes, #liquidhaskell used to exist !
04:14:28 <JuanDaugherty> why liquid haskell ftw
04:15:34 <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>
04:15:44 <Noir> jackdk: Alright, I'll look into getting in contact with Facundo. Appreciate the tip!
04:16:21 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds)
04:16:21 <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)
04:17:01 <Noir> ski: I'd seen "Don't Ask to Ask", but not the other two. Thanks
04:17:31 <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)
04:17:50 <Noir> I see
04:18:01 <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
04:18:01 <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)
04:18:25 <EvanR> lol
04:18:39 <EvanR> you can easily circumvent it though
04:18:45 <EvanR> nohello evasion
04:18:50 tavare joins (~tavare@user/tavare)
04:19:18 michalz joins (~michalz@185.246.207.205)
04:21:27 <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 ... }
04:21:58 <EvanR> 2017, libera didn't exist
04:22:05 <ski> indeed
04:27:14 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
04:28:23 <ski> @quote answer.to.answer
04:28:23 <lambdabot> monochrom says: ... in other words: Don't answer to answer, just don't answer. >:)
04:30:03 <monochrom> I'm great at duality >:)
04:30:31 <monochrom> Another one: Cocartes says: Coproduct ergo sum.
04:30:35 <ski> apparently i said "my answer to that is : don't deduce, denote!" in response to something .. no idea what, though
04:30:51 <monochrom> (Cocartes was the evil twin of Descartes!)
04:31:06 <ski> not Cocortez, then ?
04:31:22 <monochrom> No.
04:31:24 <ski> or maybe that's just Rtez
04:32:18 <ski> @quote ergo.sum
04:32:18 <lambdabot> No quotes match. Are you on drugs?
04:32:21 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 248 seconds)
04:32:34 <monochrom> We're OK with hello though. Empirically no chain reaction has occurred, despite the theory.
04:32:36 <EvanR> rude
04:32:44 <ski> @remember monochrom Cocartes says: Coproduct ergo sum.
04:32:44 <lambdabot> I will never forget.
04:33:24 <ski> i'm not on drugs yet .. haven't made morning tea
04:34:29 × peterbecich quits (~Thunderbi@syn-047-229-123-186.res.spectrum.com) (Ping timeout: 248 seconds)
04:35:18 <monochrom> There is one more layer of pun there. Infinite coproduct becomes the existential quantifer --- ergo sum!
04:36:51 <ski> why infinite ?
04:37:12 <monochrom> OK doesn't have to be always infinite.
04:37:44 <monochrom> Alternatively, the infinite case includes the finite case too!
04:38:21 <ski> reminds me of lexicographic well-ordering
04:38:45 <ski> hm .. and maybe wreath product on groups, or something ?
04:43:01 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
04:44:50 <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.
04:45:14 <Noir> Who should I try reaching out to next?
04:47:54 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds)
04:49:05 <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
04:50:54 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
04:50:55 <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.
04:55:44 <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!
04:55:52 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 244 seconds)
05:06:10 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
05:06:56 × Noir quits (~halloy259@2607:ac80:411:a:dc3c:8e7b:ab32:5495) (Read error: Connection reset by peer)
05:11:00 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds)
05:13:17 × JuanDaugherty quits (~juan@user/JuanDaugherty) (Quit: praxis.meansofproduction.biz (juan@acm.org))
05:18:49 halloy2596 joins (~halloy259@2607:ac80:411:a:dc3c:8e7b:ab32:5495)
05:21:57 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
05:25:22 peterbecich joins (~Thunderbi@syn-047-229-123-186.res.spectrum.com)
05:26:45 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 248 seconds)
05:37:44 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
05:44:33 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 245 seconds)
05:45:59 × peterbecich quits (~Thunderbi@syn-047-229-123-186.res.spectrum.com) (Ping timeout: 244 seconds)
05:55:48 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
05:57:35 <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
06:00:42 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 246 seconds)
06:04:56 <emojelly> 7,994,380,248 bytes copied during GC
06:04:58 <emojelly> Alloc rate 5,171,993,593 bytes per MUT second
06:05:05 <emojelly> you think that could be my problem?
06:05:18 <emojelly> that's a lot of copying bytes around for not a lot of work...
06:06:59 × halloy2596 quits (~halloy259@2607:ac80:411:a:dc3c:8e7b:ab32:5495) (Read error: Connection reset by peer)
06:11:25 × jmcantrell quits (~weechat@user/jmcantrell) (Quit: WeeChat 4.6.0)
06:11:25 jmcantrell_ is now known as jmcantrell
06:11:35 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
06:12:56 <Axman6> yeah, that's why I asked about productivity earlier. what productivity % do you get?
06:14:15 thuna` joins (~thuna`@user/thuna/x-1480069)
06:14:21 <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.
06:14:52 <Axman6> Do you have the cod ein a github repo somewhere? I'm curious
06:16:28 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 244 seconds)
06:17:42 <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
06:17:56 <emojelly> I don't think gc is so much the issue, as more that I'm somehow generating/moving *a lot* of data
06:18:00 <emojelly> and that data does not get retained
06:18:34 <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...
06:18:59 <emojelly> don't have the code in a repo right now, will eventually put it
06:19:21 <Axman6> lmk when you do and I'll take a look
06:19:49 <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
06:20:23 <emojelly> What does that mean? That there is a lot of really shortlived data?
06:20:47 <Axman6> seems likely
06:21:51 <emojelly> I wish I could figure out what and why...
06:22:28 <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
06:23:39 <emojelly> Ah, do you happen to know which one?
06:25:02 fp1 joins (~Thunderbi@wireless-86-50-140-125.open.aalto.fi)
06:27:23 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
06:30:39 sord937 joins (~sord937@gateway/tor-sasl/sord937)
06:32:23 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds)
06:34:18 CiaoSen joins (~Jura@2a02:8071:64e1:da0:5a47:caff:fe78:33db)
06:38:28 halloy2596 joins (~halloy259@2607:ac80:411:a:dc3c:8e7b:ab32:5495)
06:38:57 × halloy2596 quits (~halloy259@2607:ac80:411:a:dc3c:8e7b:ab32:5495) (Client Quit)
06:41:12 <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
06:41:33 × ft quits (~ft@p508db463.dip0.t-ipconnect.de) (Quit: leaving)
06:41:47 <Axman6> part of me really wants to replace so much of that code with coerce
06:41:58 <Axman6> (your coroutine code)_
06:42:45 <Axman6> I have a feeling that rewrapCo f = Coroutine $ ReaderT (\c -> ExceptT (Identity (f c))) can become rewrapCo f = coerce f
06:43:11 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
06:43:40 <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
06:44:43 <Axman6> See https://accidentallyquadratic.tumblr.com/tagged/haskell for some examples
06:44:51 tromp joins (~textual@2001:1c00:3487:1b00:1419:ab0:498a:2d0c)
06:45:34 × tromp quits (~textual@2001:1c00:3487:1b00:1419:ab0:498a:2d0c) (Client Quit)
06:48:10 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 265 seconds)
06:49:58 × Sgeo quits (~Sgeo@user/sgeo) (Read error: Connection reset by peer)
06:51:52 tromp joins (~textual@2001:1c00:3487:1b00:1419:ab0:498a:2d0c)
06:54:06 × foul_owl quits (~kerry@94.156.149.96) (Read error: Connection reset by peer)
06:58:58 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
07:00:01 × caconym quits (~caconym@user/caconym) (Quit: bye)
07:01:03 caconym joins (~caconym@user/caconym)
07:03:11 lortabac joins (~lortabac@2a01:e0a:541:b8f0:55ab:e185:7f81:54a4)
07:03:56 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds)
07:10:51 foul_owl joins (~kerry@94.156.149.99)
07:16:07 × tavare quits (~tavare@user/tavare) (Remote host closed the connection)
07:17:29 Lord_of_Life_ joins (~Lord@user/lord-of-life/x-2819915)
07:17:29 × Lord_of_Life quits (~Lord@user/lord-of-life/x-2819915) (Ping timeout: 252 seconds)
07:18:52 Lord_of_Life_ is now known as Lord_of_Life
07:23:57 × sord937 quits (~sord937@gateway/tor-sasl/sord937) (Remote host closed the connection)
07:24:56 sord937 joins (~sord937@gateway/tor-sasl/sord937)
07:33:33 × fp1 quits (~Thunderbi@wireless-86-50-140-125.open.aalto.fi) (Ping timeout: 268 seconds)
07:35:31 <jackdk> Axman6: if you had your way, everything would either be `coerce` or `id`
07:35:59 <Axman6> absolutely
07:36:25 acidjnk_new3 joins (~acidjnk@p200300d6e71c4f636055d0f69fb4dc8c.dip0.t-ipconnect.de)
07:40:24 lxsameer joins (~lxsameer@Serene/lxsameer)
07:43:08 × emmanuelux quits (~emmanuelu@user/emmanuelux) (Read error: Connection reset by peer)
07:53:20 merijn joins (~merijn@77.242.116.146)
07:53:50 polyphem joins (~rod@p4fc2cb32.dip0.t-ipconnect.de)
07:54:53 machinedgod joins (~machinedg@d108-173-18-100.abhsia.telus.net)
07:58:24 × sord937 quits (~sord937@gateway/tor-sasl/sord937) (Remote host closed the connection)
07:58:43 sord937 joins (~sord937@gateway/tor-sasl/sord937)
08:04:15 dhil joins (~dhil@2a0c:b381:52e:3600:103b:c63d:9624:f51b)
08:17:31 chele joins (~chele@user/chele)
08:18:41 × user363627 quits (~user@user/user363627) (Remote host closed the connection)
08:26:58 × tzh quits (~tzh@c-76-115-131-146.hsd1.or.comcast.net) (Quit: zzz)
08:41:19 <ski> sounds fun. getting that kind of eta-contraction is kinda what tail-calls are about
08:55:03 Unicorn_Princess joins (~Unicorn_P@user/Unicorn-Princess/x-3540542)
09:04:00 sprotte24 joins (~sprotte24@p200300d16f06b600a14bd9dc58a29dc6.dip0.t-ipconnect.de)
09:04:26 × gorignak quits (~gorignak@user/gorignak) (Read error: Connection reset by peer)
09:04:32 whez joins (uid470288@id-470288.lymington.irccloud.com)
09:04:55 gorignak joins (~gorignak@user/gorignak)
09:07:54 ubert joins (~Thunderbi@2a02:8109:ab8a:5a00:27cc:9672:1463:dd93)
09:25:08 jco joins (~jco@78-70-217-44-no600.tbcn.telia.com)
09:25:22 fkv24 joins (~fkv24@176.110.103.7)
09:26:13 × duckworld quits (~duckworld@user/duckworld) (Remote host closed the connection)
09:26:26 × fkv24 quits (~fkv24@176.110.103.7) (Client Quit)
09:26:47 duckworld joins (~duckworld@user/duckworld)
09:28:39 × duckworld quits (~duckworld@user/duckworld) (Remote host closed the connection)
09:28:57 duckworld joins (~duckworld@user/duckworld)
09:47:07 × tromp quits (~textual@2001:1c00:3487:1b00:1419:ab0:498a:2d0c) (Quit: My iMac has gone to sleep. ZZZzzz…)
09:48:06 tromp joins (~textual@2001:1c00:3487:1b00:1419:ab0:498a:2d0c)
09:50:06 bitdex_ joins (~bitdex@gateway/tor-sasl/bitdex)
09:51:48 × bitdex quits (~bitdex@gateway/tor-sasl/bitdex) (Ping timeout: 264 seconds)
09:54:10 j1n37 joins (~j1n37@user/j1n37)
09:55:14 × j1n37- quits (~j1n37@user/j1n37) (Ping timeout: 260 seconds)
09:59:12 forell joins (~forell@user/forell)
10:02:53 × hc quits (~hc@mail.hce.li) (Remote host closed the connection)
10:13:59 × glguy quits (glguy@libera/staff/glguy) (Read error: Connection reset by peer)
10:14:20 glguy joins (glguy@libera/staff/glguy)
10:17:24 Smiles joins (uid551636@id-551636.lymington.irccloud.com)
10:19:33 × lortabac quits (~lortabac@2a01:e0a:541:b8f0:55ab:e185:7f81:54a4) (Ping timeout: 248 seconds)
10:19:42 × xff0x quits (~xff0x@fsb6a9491c.tkyc517.ap.nuro.jp) (Ping timeout: 246 seconds)
10:20:24 tabaqui joins (~tabaqui@167.71.80.236)
10:28:05 × CiaoSen quits (~Jura@2a02:8071:64e1:da0:5a47:caff:fe78:33db) (Ping timeout: 265 seconds)
10:28:21 poxel joins (~lennart@user/poxel)
10:30:32 × poxel quits (~lennart@user/poxel) (Client Quit)
10:31:13 poxel joins (~lennart@user/poxel)
10:33:25 × poxel quits (~lennart@user/poxel) (Client Quit)
10:33:54 __monty__ joins (~toonn@user/toonn)
10:35:20 poxel joins (~lennart@user/poxel)
10:38:00 <[exa]> tomsmeding: btw after a few attempts trying to force massiv to do the histogram op sanely, I'm now with accelerate :D
10:40:51 CiaoSen joins (~Jura@2a02:8071:64e1:da0:5a47:caff:fe78:33db)
10:46:14 Guest87 joins (~Guest87@139.167.143.182)
10:46:58 <[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)
10:48:04 × Guest87 quits (~Guest87@139.167.143.182) (Client Quit)
10:48:58 Guest56 joins (~Guest38@2601:408:c181:12c0:fc6a:ec80:dcee:cbd5)
10:51:10 lortabac joins (~lortabac@2a01:e0a:541:b8f0:55ab:e185:7f81:54a4)
10:51:57 <[exa]> otoh any way to get accelerate working with ghc>9.2 ?
10:52:20 <[exa]> oh I mean, >=9
10:55:54 <srk> looks like git one has support https://github.com/AccelerateHS/accelerate/pulls?q=is%3Apr+is%3Aclosed
11:00:05 × caconym quits (~caconym@user/caconym) (Quit: bye)
11:02:09 caconym joins (~caconym@user/caconym)
11:02:25 jespada joins (~jespada@r190-133-49-11.dialup.adsl.anteldata.net.uy)
11:02:54 × thuna` quits (~thuna`@user/thuna/x-1480069) (Ping timeout: 260 seconds)
11:07:13 <[exa]> oh great
11:07:15 <[exa]> srk: thx
11:16:23 xff0x joins (~xff0x@2405:6580:b080:900:c071:5032:6468:f840)
11:31:22 Guest33 joins (~Guest33@2409:40c0:37:8c86:24db:abaa:17dd:df2b)
11:33:11 × jespada quits (~jespada@r190-133-49-11.dialup.adsl.anteldata.net.uy) (Ping timeout: 244 seconds)
11:33:37 Guest48 joins (~Guest33@2409:40c0:37:8c86:24db:abaa:17dd:df2b)
11:35:02 puke joins (~puke@user/puke)
11:35:33 × Guest48 quits (~Guest33@2409:40c0:37:8c86:24db:abaa:17dd:df2b) (Client Quit)
11:35:33 jespada joins (~jespada@r167-61-127-49.dialup.adsl.anteldata.net.uy)
11:36:12 <[exa]> hm are there any accelerate helpers for reading matrices from TSVs?
11:37:56 × sord937 quits (~sord937@gateway/tor-sasl/sord937) (Remote host closed the connection)
11:38:16 sord937 joins (~sord937@gateway/tor-sasl/sord937)
11:38:22 × TheCoffeMaker_ quits (~TheCoffeM@186.136.173.70) (Ping timeout: 268 seconds)
11:44:51 × tromp quits (~textual@2001:1c00:3487:1b00:1419:ab0:498a:2d0c) (Quit: My iMac has gone to sleep. ZZZzzz…)
11:45:33 × Guest33 quits (~Guest33@2409:40c0:37:8c86:24db:abaa:17dd:df2b) (Quit: Client closed)
11:48:14 × acidjnk_new3 quits (~acidjnk@p200300d6e71c4f636055d0f69fb4dc8c.dip0.t-ipconnect.de) (Ping timeout: 268 seconds)
11:57:06 weary-traveler joins (~user@user/user363627)
12:01:21 acidjnk_new3 joins (~acidjnk@p200300d6e71c4f63a07ba30a5b7d27a5.dip0.t-ipconnect.de)
12:08:14 <haskellbridge> <Liamzee> hey EvanR
12:09:55 <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.
12:11:02 <haskellbridge> <Liamzee> Oh, hi Hellwolf.
12:11:37 <hellwolf> hmm, hi?
12:12:09 <haskellbridge> <Liamzee> I'm just saying it's great, you're probably on chat.
12:14:41 <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.
12:15:54 <haskellbridge> <Liamzee> https://github.com/MercuryTechnologies/ada
12:20:54 × j1n37 quits (~j1n37@user/j1n37) (Ping timeout: 260 seconds)
12:21:55 j1n37 joins (~j1n37@user/j1n37)
12:22:27 <haskellbridge> <Liamzee> "Make more Haskell sh* mountains and create more jobs for Haskell"
12:24:57 <hellwolf> jobs4all?
12:27:03 × CiaoSen quits (~Jura@2a02:8071:64e1:da0:5a47:caff:fe78:33db) (Ping timeout: 245 seconds)
12:28:35 × bionade24 quits (~quassel@server2.oscloud.info) (Quit: Apocalypse Incoming!)
12:30:50 <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.
12:36:25 × Smiles quits (uid551636@id-551636.lymington.irccloud.com) (Quit: Connection closed for inactivity)
12:37:17 [exa] confused
12:39:07 × Guest56 quits (~Guest38@2601:408:c181:12c0:fc6a:ec80:dcee:cbd5) (Quit: Client closed)
12:42:52 <haskellbridge> <Liamzee> [exa]: why are you confused?
12:43:33 × acidjnk_new3 quits (~acidjnk@p200300d6e71c4f63a07ba30a5b7d27a5.dip0.t-ipconnect.de) (Ping timeout: 246 seconds)
12:45:07 <[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`
12:45:47 acidjnk_new3 joins (~acidjnk@p200300d6e71c4f631cbaa9c9535aaf6d.dip0.t-ipconnect.de)
12:47:15 <[exa]> uuuuuuuuh, got solved by annotating the indices with ::Int
12:47:50 <[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)
12:47:53 TheCoffeMaker joins (~TheCoffeM@user/thecoffemaker)
12:49:37 tromp joins (~textual@2001:1c00:3487:1b00:1419:ab0:498a:2d0c)
12:52:00 <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.
12:53:43 × TheCoffeMaker quits (~TheCoffeM@user/thecoffemaker) (Ping timeout: 252 seconds)
12:54:07 TheCoffeMaker joins (~TheCoffeM@user/thecoffemaker)
12:54:54 × bitdex_ quits (~bitdex@gateway/tor-sasl/bitdex) (Quit: = "")
12:55:10 <[exa]> ahhh OIC, I messed up the error message reading
12:56:10 <[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
12:56:12 <[exa]> all good
12:56:14 <[exa]> Leary: thanks :)
12:58:38 bionade24 joins (~quassel@2a03:4000:33:45b::1)
13:21:14 × TheCoffeMaker quits (~TheCoffeM@user/thecoffemaker) (Ping timeout: 252 seconds)
13:22:57 TheCoffeMaker joins (~TheCoffeM@user/thecoffemaker)
13:29:29 × ubert quits (~Thunderbi@2a02:8109:ab8a:5a00:27cc:9672:1463:dd93) (Quit: ubert)
13:32:22 Chai-T-Rex joins (~ChaiTRex@user/chaitrex)
13:33:48 <haskellbridge> <Liamzee> oh, btw, mercury is like, Haskell's #2 unicorn, right?
13:35:36 × ChaiTRex quits (~ChaiTRex@user/chaitrex) (Ping timeout: 264 seconds)
13:38:55 <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)
13:38:59 <haskellbridge> <Liamzee> dropped
13:42:09 × sord937 quits (~sord937@gateway/tor-sasl/sord937) (Remote host closed the connection)
13:42:12 × loonycyborg quits (loonycybor@wesnoth/developer/loonycyborg) (Ping timeout: 272 seconds)
13:43:08 sord937 joins (~sord937@gateway/tor-sasl/sord937)
13:43:28 loonycyborg joins (loonycybor@wesnoth/developer/loonycyborg)
13:47:13 × TheCoffeMaker quits (~TheCoffeM@user/thecoffemaker) (Ping timeout: 244 seconds)
13:51:53 <__monty__> Another weapons manufacturer? What a sad world.
14:02:55 <haskellbridge> <Liamzee> ???
14:03:00 <haskellbridge> <Liamzee> Mercury's a fintech company, a virtual bank
14:04:26 × bezik quits (~bezik@wikipedia/bezik) (Quit: bye/)
14:05:08 <haskellbridge> <Liamzee> they specialize in providing banking services to startups
14:07:26 × polyphem quits (~rod@p4fc2cb32.dip0.t-ipconnect.de) (Ping timeout: 252 seconds)
14:09:27 × sord937 quits (~sord937@gateway/tor-sasl/sord937) (Remote host closed the connection)
14:09:47 sord937 joins (~sord937@gateway/tor-sasl/sord937)
14:10:14 × vulpine quits (xfnw@user/meow/xfnw) (Quit: Connection reset by purr)
14:10:48 vulpine joins (xfnw@user/meow/xfnw)
14:10:54 <__monty__> Ah, that's slightly less overtly harmful.
14:11:13 × lortabac quits (~lortabac@2a01:e0a:541:b8f0:55ab:e185:7f81:54a4) (Quit: WeeChat 4.5.2)
14:13:59 <haskellbridge> <Liamzee> i don't see how that's harmful at all
14:17:48 × alinab quits (sid468903@id-468903.helmsley.irccloud.com) (Ping timeout: 276 seconds)
14:17:48 × gmc quits (sid58314@id-58314.ilkley.irccloud.com) (Ping timeout: 276 seconds)
14:18:02 × tapas quits (sid467876@id-467876.ilkley.irccloud.com) (Read error: Connection reset by peer)
14:18:05 × cbarrett quits (sid192934@id-192934.helmsley.irccloud.com) (Read error: Connection reset by peer)
14:18:05 × alanz quits (sid110616@id-110616.uxbridge.irccloud.com) (Read error: Connection reset by peer)
14:18:05 × sa quits (sid1055@id-1055.tinside.irccloud.com) (Read error: Connection reset by peer)
14:18:06 × rubin55 quits (sid666180@id-666180.ilkley.irccloud.com) (Read error: Connection reset by peer)
14:18:07 × unlucy quits (sid572875@user/unlucy) (Read error: Connection reset by peer)
14:18:11 alinab joins (sid468903@id-468903.helmsley.irccloud.com)
14:18:13 gmc joins (sid58314@id-58314.ilkley.irccloud.com)
14:18:14 tapas joins (sid467876@id-467876.ilkley.irccloud.com)
14:18:15 alanz joins (sid110616@id-110616.uxbridge.irccloud.com)
14:18:16 cbarrett joins (sid192934@id-192934.helmsley.irccloud.com)
14:18:21 × Pent quits (sid313808@id-313808.lymington.irccloud.com) (Ping timeout: 252 seconds)
14:18:22 × Kamuela quits (sid111576@id-111576.tinside.irccloud.com) (Ping timeout: 252 seconds)
14:18:22 rubin55 joins (sid666180@id-666180.ilkley.irccloud.com)
14:18:27 × gaze__ quits (sid387101@id-387101.helmsley.irccloud.com) (Read error: Connection reset by peer)
14:18:27 × shawwwn quits (sid6132@id-6132.helmsley.irccloud.com) (Read error: Connection reset by peer)
14:18:31 sa joins (sid1055@id-1055.tinside.irccloud.com)
14:18:36 × mustafa quits (sid502723@rockylinux/releng/mustafa) (Read error: Connection reset by peer)
14:18:37 unlucy joins (sid572875@user/unlucy)
14:18:39 gaze__ joins (sid387101@id-387101.helmsley.irccloud.com)
14:18:39 shawwwn joins (sid6132@id-6132.helmsley.irccloud.com)
14:18:42 × meinside quits (uid24933@id-24933.helmsley.irccloud.com) (Read error: Connection reset by peer)
14:18:42 × integral quits (sid296274@user/integral) (Read error: Connection reset by peer)
14:18:47 mustafa joins (sid502723@rockylinux/releng/mustafa)
14:18:54 meinside joins (uid24933@id-24933.helmsley.irccloud.com)
14:18:56 integral joins (sid296274@user/integral)
14:20:01 × taktoa[c] quits (sid282096@id-282096.tinside.irccloud.com) (Ping timeout: 248 seconds)
14:20:02 × Boarders_____ quits (sid425905@id-425905.lymington.irccloud.com) (Ping timeout: 248 seconds)
14:20:02 × caasih quits (sid13241@id-13241.ilkley.irccloud.com) (Ping timeout: 248 seconds)
14:20:05 × edm quits (sid147314@id-147314.hampstead.irccloud.com) (Ping timeout: 265 seconds)
14:20:11 Boarders_____ joins (sid425905@id-425905.lymington.irccloud.com)
14:20:34 taktoa[c] joins (sid282096@id-282096.tinside.irccloud.com)
14:22:25 caasih joins (sid13241@id-13241.ilkley.irccloud.com)
14:22:34 Kamuela joins (sid111576@id-111576.tinside.irccloud.com)
14:22:48 Pent joins (sid313808@id-313808.lymington.irccloud.com)
14:23:35 edm joins (sid147314@id-147314.hampstead.irccloud.com)
14:29:46 <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
14:30:04 <EvanR> and it actually cleaned up the code since I could put the other thing in there, failing early
14:30:55 <EvanR> I feel like it took less code than pulling in a "monad stack" for this purpose
14:34:30 <EvanR> maybe monads get unfairly disrespected!
14:37:58 × poxel quits (~lennart@user/poxel) (Ping timeout: 265 seconds)
14:39:33 amadaluzia joins (~amadaluzi@2a00:23c7:ed8b:6701:c483:4ce8:4c61:1453)
14:41:12 <ski> @unmtl StateT s Maybe a
14:41:12 <lambdabot> s -> Maybe (a, s)
14:42:28 <EvanR> it might be even less code to write the whole thing using s -> Maybe (a, s) but the code would be much noisier
14:44:03 Smiles joins (uid551636@id-551636.lymington.irccloud.com)
14:45:18 poxel joins (~lennart@user/poxel)
14:47:02 <ski> mm
14:49:11 <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 :(
14:50:57 × jespada quits (~jespada@r167-61-127-49.dialup.adsl.anteldata.net.uy) (Quit: My Mac has gone to sleep. ZZZzzz…)
14:51:41 <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
14:52:18 <EvanR> abstraction if done right is addictive!
14:52:21 <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
14:52:24 <EvanR> not everyone has seen the light
14:53:05 <EvanR> I disagree here because they could have reused the syntax for other things, e.g. early return, or whatever effects
14:53:12 <haskellbridge> <Liamzee> abstraction is only useful if other people understand the abstraction
14:53:16 <EvanR> they just would be guilty of using monads
14:53:27 <EvanR> I disagree with that
14:53:29 sprotte24_ joins (~sprotte24@p200300d16f06b600a14bd9dc58a29dc6.dip0.t-ipconnect.de)
14:53:35 <EvanR> as literally stated
14:53:58 <haskellbridge> <Liamzee> the same guy complaining was admitting to abusing C++ templates to make it hard for his end users to modify his code
14:53:58 <EvanR> since it diminishes the value of your individual understanding
14:54:50 <EvanR> then that's not abstraction but obfuscation
14:55:30 ouilemur joins (~jgmerritt@user/ouilemur)
14:55:43 <ouilemur> #haskell-beginners
14:56:27 <hellwolf> it's like dress code, but for code style, so that you exclude some people culturally?
15:00:44 <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
15:01:14 × gorignak quits (~gorignak@user/gorignak) (Quit: quit)
15:01:31 gorignak joins (~gorignak@user/gorignak)
15:02:53 × gorignak quits (~gorignak@user/gorignak) (Client Quit)
15:03:44 <EvanR> ski, and a new variable generator kind of doesn't need full state, since the counter could only increase. So a supply monad
15:05:56 <haskellbridge> <Liamzee> supply monad?
15:06:39 <haskellbridge> <Liamzee> https://hackage.haskell.org/package/transformers-supply-0.1.0/docs/Control-Monad-Supply.html
15:06:47 <EvanR> that is that
15:08:02 <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
15:09:25 hiecaq joins (~hiecaq@user/hiecaq)
15:10:03 <EvanR> sometimes you hear this argument that you shouldn't use something because someone might not have heard of it
15:10:18 <EvanR> which if serious would drastically curtail the number of things you can use
15:10:50 <EvanR> a lot of people have not heard of C++. Better avoid
15:12:36 <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
15:13:01 <EvanR> "eDSL disease" sounds like a non-starter already
15:14:09 <EvanR> lets talk about the pros and cons of C++ disease. I think I'd be laughed out of the room
15:16:40 <haskellbridge> <Liamzee> wait, are you working in C++ again?
15:17:51 <EvanR> that was a hypothetical to demonstrate the absurdity of "eDSL disease" as a token
15:18:04 × chexum quits (~quassel@gateway/tor-sasl/chexum) (Remote host closed the connection)
15:18:16 chexum joins (~quassel@gateway/tor-sasl/chexum)
15:19:08 <hellwolf> what is an eDSL disease?
15:19:12 jespada joins (~jespada@r167-61-127-49.dialup.adsl.anteldata.net.uy)
15:19:45 <EvanR> using an eDSL
15:20:13 <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
15:20:52 <EvanR> well bring someone in who feels that way and may we can show them the light
15:21:30 <haskellbridge> <Liamzee> so i guess your new position is "simple haskell is stupid"?
15:22:10 __jmcantrell__ joins (~weechat@user/jmcantrell)
15:22:28 jmcantrell is now known as Guest9294
15:22:28 × Guest9294 quits (644f1bed9a@user/jmcantrell) (Killed (molybdenum.libera.chat (Nickname regained by services)))
15:22:28 __jmcantrell__ is now known as jmcantrell
15:22:36 <haskellbridge> <Liamzee> my position isn't that abstraction is intrinsically bad either, it's that abstraction has tradeoffs
15:22:37 jmcantrell_ joins (644f1bed9a@user/jmcantrell)
15:23:03 <EvanR> you use abstractions at many levels and it's taken for granted
15:23:25 <EvanR> virtual memory is an abstraction, arithmetic is an abstraction, dynamically typed programming is a giant abstraction
15:23:50 <haskellbridge> <Liamzee> would you agree that abstraction increases onboarding time?
15:23:51 <EvanR> whatever the trade off is, people are taking it
15:24:18 <EvanR> being unfamiliar with something increases onboarding time
15:24:20 <EvanR> generally
15:24:39 <hellwolf> let's just use the actual turing machine with belt and boxes.
15:24:40 <EvanR> and there's a lot of examples of that besides an eDSL
15:24:53 <hellwolf> abstractions be damned.
15:25:06 <EvanR> hellwolf, turing machine is an abstraction. And would be unfamiliar to many, increasing onboarding time
15:25:54 Gadot is now known as gadot
15:26:14 <hellwolf> alright. shan't we all just use prompt engineering now. what you prompt is maybe what you get.
15:26:38 <EvanR> agreed that that would be highly non abstract
15:27:06 <haskellbridge> <Liamzee> hellwolf, did i offend you somehow?
15:27:08 <EvanR> but would be vaguely defined an unexplainable
15:27:09 × vanishingideal quits (~vanishing@user/vanishingideal) (Ping timeout: 260 seconds)
15:27:59 <hellwolf> no no, you haven't. I am just piling onto IRC water cooling conversations. Sorry, I go back to coding.
15:28:08 <haskellbridge> <Liamzee> love you man
15:28:11 <haskellbridge> <Liamzee> same to evanr
15:28:42 <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.
15:28:55 vanishingideal joins (~vanishing@user/vanishingideal)
15:29:05 <EvanR> have you ever used a C library
15:29:23 <hellwolf> The actual Haskell problem: "we build abstractions, so that you don't have to" -> "I left the project, so that you are stuck"
15:29:52 <EvanR> one that you weren't already familiar with
15:30:27 <EvanR> there's a lot of onboarding before you can use an arbitrary C library
15:30:51 <EvanR> since it can do anything and you need to play by their rules
15:30:58 <haskellbridge> <Liamzee> i see, i went through parts of gmp recentnly
15:31:17 <haskellbridge> <Liamzee> and i was also enjoying people discussing how tinyfiledialogs had "main.py energy"
15:32:07 <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
15:32:38 <EvanR> you might be able to get away with the name of the operator and the type signature
15:32:56 <EvanR> and get new diagrams from old
15:33:34 <haskellbridge> <Liamzee> well, thanks for the suggestion, seems fun
15:34:15 <EvanR> that diagrams uses abstraction is a good thing
15:34:41 <EvanR> that not everyone has already become familiar with it shouldn't count against it because that's absurd
15:35:30 <haskellbridge> <Liamzee> tbh to some extent this feels like a rehash of "type signatures are all the documentation you need"
15:37:39 <EvanR> it's not
15:38:20 <hellwolf> vectorOf :: Int -> Gen a -> Gen [a]
15:38:23 <hellwolf> do you trust this signature
15:38:45 <haskellbridge> <Liamzee> i mean, am i characterizing your position as "abstractions are always good" correctly?
15:39:16 <ski> <EvanR> sometimes you hear this argument that you shouldn't use something because someone might not have heard of it
15:39:21 ski . o O ( "Everyone knows that debugging is twice as hard as writing a program in the first place. So if you're as clever as you can be when you write it, how will you ever debug it?" -- "The Elements of Programming Style" by Brian W. Kernighan,P. J. Plauger in 1978 ; "Kernighan's lever" by Linus Åkesson in 2012-12-111 at <https://www.linusakesson.net/programming/kernighans-lever/index.php> )
15:40:02 <hellwolf> https://en.wikipedia.org/wiki/Not_invented_here <-- a variant of this. "not what I am used to"
15:40:57 <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
15:41:07 hellwolf duck, to get something done.
15:41:47 <EvanR> your version involves haskell libraries you don't yet know, while I use examples like virtual memory, or dynamic types (very popular)
15:41:58 ski also invokes monochrom on "intuitive", failing to find an appropriate quote
15:43:15 <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.
15:43:19 <haskellbridge> <Liamzee> It implies that the correct level of abstraction depends on the context.
15:43:54 <EvanR> you're making a distinction between abstract and non-abstract code, which I find dubious
15:44:07 <EvanR> it's really the distinction between code someone understands and code someone doesn't yet understand
15:44:35 <EvanR> which makes sense but blaming it on "abstraction" doesn't sound right
15:44:52 <ski> these abstractions vs. those abstractions ?
15:45:25 <haskellbridge> <Liamzee> abstractions most people know, abstractions most people should know, and abstractions that are idiosyncratic
15:45:34 <haskellbridge> <Liamzee> how about dividing things into those three categories?
15:46:03 <haskellbridge> <Liamzee> /s/people know/people already know
15:46:06 <EvanR> it will take me some time to find a charitable interpretation of "abstractions most people know"
15:46:39 <EvanR> quantifying over a given job market etc
15:46:49 <EvanR> might be too limiting
15:46:59 <EvanR> haskell would be mostly irrelevant
15:47:02 <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"
15:47:06 <EvanR> most people don't know any haskell whatever
15:47:20 <haskellbridge> <Liamzee> most people don't know any programming whatsoever
15:47:58 <EvanR> so the scope of this discussion is incredibly shrinking xD
15:48:26 <haskellbridge> <Liamzee> insert monochrom commenting that most arguments are a dispute over definitions or implicit assumptions, or something to that effect
15:48:53 <EvanR> logical argument begins with assumptions
15:49:01 <EvanR> rhetoric maybe not
15:49:48 <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
15:50:20 <EvanR> if somebody is working at an actual job with haskell, they're already somebody who learns things way outside the required things
15:50:48 × chele quits (~chele@user/chele) (Remote host closed the connection)
15:50:49 <EvanR> I see no reason to go easy on this person working at an actual job
15:50:57 <EvanR> esp if there are costs associated with the ease
15:51:11 × jespada quits (~jespada@r167-61-127-49.dialup.adsl.anteldata.net.uy) (Quit: My Mac has gone to sleep. ZZZzzz…)
15:52:24 <EvanR> for individual projects we can judge for ourselves how good the abstractions are and discriminate much easier
15:52:31 <haskellbridge> <Liamzee> Standard Chartered supposedly trained all their traders in Mu
15:57:11 <EvanR> is Mu related to ermine
15:57:54 × amadaluzia quits (~amadaluzi@2a00:23c7:ed8b:6701:c483:4ce8:4c61:1453) (Changing host)
15:57:54 amadaluzia joins (~amadaluzi@user/amadaluzia)
15:58:03 <haskellbridge> <Liamzee> Mu's a strict dialect of Haskell, so sort of
16:01:22 <EvanR> to complete your categories for what they're worth add: abstractions nobody knows
16:01:27 jespada joins (~jespada@r167-61-127-49.dialup.adsl.anteldata.net.uy)
16:01:41 ski idly ponders unknown knowns
16:02:54 <haskellbridge> <Liamzee> that's actually the best abstraction, tbh
16:03:22 <haskellbridge> <Liamzee> but only because ifinished reading ski's document, because there's an obvious implied contradiction in that essay
16:03:33 <haskellbridge> <Liamzee> programming at maximum known abstraction is good for developers because it pushes their ability
16:03:48 <haskellbridge> <Liamzee> however it's not necessarily good for the project, which is a contradiction
16:03:58 × euphores quits (~SASL_euph@user/euphores) (Quit: Leaving.)
16:04:45 × pavonia quits (~user@user/siracusa) (Quit: Bye!)
16:04:48 <ski> a trade-off
16:05:28 <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
16:06:58 <EvanR> if they're any good, they are also getting the project done on time and at cost
16:07:08 <EvanR> kind of a tautology
16:08:15 <haskellbridge> <Liamzee> not necessarily on budget / at the cheapest possible cost
16:09:00 <EvanR> because your salary is too high? reduce it? xD
16:09:17 <ski> cheapest possible, for a single project, or amortized ?
16:09:39 <haskellbridge> <Liamzee> yeah i guess amortized matters too :)
16:09:50 euphores joins (~SASL_euph@user/euphores)
16:09:56 <haskellbridge> <Liamzee> tbh why do i feel like you've had this argument before?
16:09:59 <EvanR> something about short term technical debt (valuable) and long term (broken forever and unfixable)
16:10:06 ski hasn't
16:10:35 <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
16:10:49 <EvanR> shit short term code tricks leading to long term pain and costs
16:12:17 <haskellbridge> <Liamzee> once again, depends on cost of labor, particular context, etc
16:12:40 <EvanR> it defending this or that code you could also devise objective metrics for how complex code is
16:13:02 <EvanR> instead of gut feeling it
16:13:27 ski ponders the difference between `not (A tensor B)' (aka `not A par not B') and `A par B'
16:14:33 <ski> (`A' and `B' being the two things felt to be in tension, like contradiction, or trade-off)
16:14:52 × hiecaq quits (~hiecaq@user/hiecaq) (Quit: ERC 5.6.0.30.1 (IRC client for GNU Emacs 30.0.92))
16:15:13 <EvanR> is that linear logic
16:15:15 <ski> yes
16:16:44 × machinedgod quits (~machinedg@d108-173-18-100.abhsia.telus.net) (Ping timeout: 272 seconds)
16:19:29 × merijn quits (~merijn@77.242.116.146) (Ping timeout: 248 seconds)
16:28:55 × jakesyl_____ quits (sid56879@id-56879.hampstead.irccloud.com) (Read error: Connection reset by peer)
16:29:21 × sa1 quits (sid7690@id-7690.ilkley.irccloud.com) (Read error: Connection reset by peer)
16:29:38 × sclv quits (sid39734@haskell/developer/sclv) (Read error: Connection reset by peer)
16:30:06 × jonrh quits (sid5185@id-5185.ilkley.irccloud.com) (Read error: Connection reset by peer)
16:30:08 × SanchayanMaity quits (sid478177@id-478177.hampstead.irccloud.com) (Read error: Connection reset by peer)
16:30:10 × bjs quits (sid190364@user/bjs) (Ping timeout: 248 seconds)
16:30:10 × bw quits (sid2730@user/betawaffle) (Ping timeout: 248 seconds)
16:30:13 × bradparker quits (sid262931@id-262931.uxbridge.irccloud.com) (Read error: Connection reset by peer)
16:30:13 × JSharp quits (sid4580@user/JSharp) (Read error: Connection reset by peer)
16:30:16 × SrPx quits (sid108780@id-108780.uxbridge.irccloud.com) (Read error: Connection reset by peer)
16:30:17 × NiKaN quits (sid385034@id-385034.helmsley.irccloud.com) (Read error: Connection reset by peer)
16:30:17 jonrh joins (sid5185@id-5185.ilkley.irccloud.com)
16:30:19 SanchayanMaity joins (sid478177@id-478177.hampstead.irccloud.com)
16:30:19 × Techcable quits (sid534393@user/Techcable) (Read error: Connection reset by peer)
16:30:34 tzh joins (~tzh@c-76-115-131-146.hsd1.or.comcast.net)
16:30:34 JSharp joins (sid4580@user/JSharp)
16:30:34 bjs joins (sid190364@user/bjs)
16:30:37 jakesyl_____ joins (sid56879@hampstead.irccloud.com)
16:30:51 Techcable joins (sid534393@user/Techcable)
16:30:53 sa1 joins (sid7690@ilkley.irccloud.com)
16:31:10 sclv joins (sid39734@haskell/developer/sclv)
16:31:40 NiKaN joins (sid385034@id-385034.helmsley.irccloud.com)
16:31:42 SrPx joins (sid108780@id-108780.uxbridge.irccloud.com)
16:31:47 bradparker joins (sid262931@uxbridge.irccloud.com)
16:31:58 bw joins (sid2730@user/betawaffle)
16:34:59 × lxsameer quits (~lxsameer@Serene/lxsameer) (Ping timeout: 268 seconds)
16:35:16 TheCoffeMaker joins (~TheCoffeM@user/thecoffemaker)
16:39:56 × tromp quits (~textual@2001:1c00:3487:1b00:1419:ab0:498a:2d0c) (Quit: My iMac has gone to sleep. ZZZzzz…)
16:46:29 peterbecich joins (~Thunderbi@syn-047-229-123-186.res.spectrum.com)
16:53:09 × Smiles quits (uid551636@id-551636.lymington.irccloud.com) (Quit: Connection closed for inactivity)
16:55:51 tromp joins (~textual@2001:1c00:3487:1b00:1419:ab0:498a:2d0c)
16:59:30 × TheCoffeMaker quits (~TheCoffeM@user/thecoffemaker) (Ping timeout: 252 seconds)
16:59:33 TheCoffeMaker_ joins (~TheCoffeM@186.136.173.186)
17:07:19 × peterbecich quits (~Thunderbi@syn-047-229-123-186.res.spectrum.com) (Ping timeout: 265 seconds)
17:17:17 × vanishingideal quits (~vanishing@user/vanishingideal) (Ping timeout: 244 seconds)
17:22:33 wootehfoot joins (~wootehfoo@user/wootehfoot)
17:24:29 vanishingideal joins (~vanishing@user/vanishingideal)
17:28:14 notdabs joins (~Owner@2600:1700:69cf:9000:1d8b:380b:ab0b:1fbd)
17:32:35 lxsameer joins (~lxsameer@Serene/lxsameer)
17:38:41 ft joins (~ft@p508db463.dip0.t-ipconnect.de)
17:42:20 <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
17:42:57 <EvanR> in a "sequence" of Plus, it doesn't put parentheses because "it's associative"
17:43:07 <EvanR> now I'm confused
17:46:25 × dhil quits (~dhil@2a0c:b381:52e:3600:103b:c63d:9624:f51b) (Ping timeout: 248 seconds)
17:55:26 <tuxillo> hi again, i'm coming back to the problem I saw last night: https://termbin.com/ybc7
18:09:15 × rvalue quits (~rvalue@user/rvalue) (Read error: Connection reset by peer)
18:09:48 rvalue joins (~rvalue@user/rvalue)
18:10:02 <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
18:10:02 <monochrom> reason, I don't count programming as even a profession (so nevermind engineering).
18:10:32 <monochrom> Right? Surgeons don't go like "OMG blood is so gory and scary let's never do surgery".
18:13:33 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
18:18:18 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 245 seconds)
18:22:15 <EvanR> you want people to be better at their job? what an elitist
18:22:49 ljdarj1 joins (~Thunderbi@user/ljdarj)
18:24:07 <EvanR> worse is better :tm:
18:25:06 ljdarj1 is now known as ljdarj
18:25:10 <mauke> programming is a profession because I get paid for it
18:25:41 <monochrom> Is scamming a profession? Tons of people get paid for it, too.
18:26:07 <monochrom> And next time I can talk about why I even view programming as a scam.
18:29:21 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
18:30:44 target_i joins (~target_i@user/target-i/x-6023099)
18:34:07 <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?
18:34:19 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 265 seconds)
18:34:21 × sprotte24_ quits (~sprotte24@p200300d16f06b600a14bd9dc58a29dc6.dip0.t-ipconnect.de) (Quit: Leaving)
18:35:06 <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".
18:35:16 <dolio> It is associative in the sense that they are isomorphic types.
18:35:28 <tuxillo> is it possible to enable IF_DEBUG() from a compiled program?
18:35:34 <dolio> Which is the correct notion for caring about equivalence of types.
18:35:40 <dolio> (Until you start doing HoTT.)
18:35:42 <tuxillo> so i can see the debug messages
18:35:46 <mauke> tuxillo: I don't know what that is, but it's all uppercase, so probably not
18:36:50 <EvanR> isomorphic things is one thing, but which thing is A * B * C * D ? A * (B * (C * D)) ?
18:37:18 <EvanR> seems like an inefficient way to implement that
18:37:21 <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. :)
18:37:28 <mauke> from what I recall from ocaml, A*B*C is weird and not a nested thing at all
18:37:59 <EvanR> A*B*C is not nested but if you put parentheses it is?
18:38:17 <monochrom> Oh likewise in Haskell, we just change the syntax to (A,B,C).
18:38:39 <EvanR> in haskell the syntax makes it clear "no, not associative"
18:39:02 <EvanR> maybe that was a good idea
18:39:04 <mauke> syntax schmyntax
18:39:13 <mauke> in perl, it is associative
18:39:28 × tromp quits (~textual@2001:1c00:3487:1b00:1419:ab0:498a:2d0c) (Quit: My iMac has gone to sleep. ZZZzzz…)
18:39:49 <mauke> (that is, in perl (A,(B,C)) == ((A,B),C) == (A,B,C))
18:40:10 <EvanR> what the heck
18:40:30 <EvanR> is it auto flattening
18:40:36 <haskellbridge> <Liamzee> hmmm, that's an interesting question
18:40:40 <mauke> it's not nesting in the first place
18:40:46 <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.
18:41:02 <monochrom> E.g., (x,y,z)#1 = x
18:41:06 <haskellbridge> <Liamzee> actually, it wouldn't make sense in a Haskell context
18:41:10 <mauke> EvanR: is (1+(2+3)) autoflattening?
18:41:22 <EvanR> and A * (B * C) is a different type?
18:41:46 <monochrom> Yes A*(B*C) is a different type IIRC.
18:41:49 <EvanR> mauke, is that a type in perl or a data structure
18:42:03 <mauke> expression, really
18:42:09 <mauke> we don't do "types" over there
18:42:24 × lxsameer quits (~lxsameer@Serene/lxsameer) (Ping timeout: 272 seconds)
18:42:33 <dolio> Even if it were technically `A * (B * (C * D))`, ML compilers are probably smart enough to optimize it.
18:42:37 <monochrom> Category theory is so much easier than Perl.
18:42:41 <haskellbridge> <Liamzee> tuples aren't really arity polymorphic in haskell, they're a family of types with a common syntax
18:43:02 <EvanR> the thing with A * (B * (C * D)) is that the fst and snd functions would act differently
18:43:13 <EvanR> does snd get you B or (B * (C * D))
18:44:05 <mauke> I expect B * (C * D) in the nested case
18:44:30 <haskellbridge> <Liamzee> so it's nonsensical to want (a,n) to be the type of both (a,b,c,d) and (a,b,c)
18:44:32 <EvanR> car and cdr
18:45:06 × wootehfoot quits (~wootehfoo@user/wootehfoot) (Ping timeout: 252 seconds)
18:45:06 <mauke> not so much a polymorphic type as a small collection of types flying in close formation
18:45:08 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
18:46:33 <EvanR> what happens in perl, for morbid curiosity's sake
18:46:43 <mauke> , is list concatenation
18:46:47 <mauke> the rest is smoke and mirrors
18:46:57 <EvanR> if you ask for the 2nd component
18:47:28 <mauke> (a ++ (b ++ c)) !! 1
18:47:54 <EvanR> > "a" ++ ("b" ++ "c") !! 1
18:47:55 <lambdabot> error:
18:47:55 <lambdabot> • Couldn't match expected type ‘[Char]’ with actual type ‘Char’
18:47:55 <lambdabot> • In the second argument of ‘(++)’, namely ‘("b" ++ "c") !! 1’
18:48:02 <EvanR> > ("a" ++ ("b" ++ "c")) !! 1
18:48:04 <lambdabot> 'b'
18:48:10 <EvanR> it's auto flattening!
18:48:13 <EvanR> smh
18:49:57 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 248 seconds)
18:51:34 <haskellbridge> <Liamzee> mauke: what does it mean that Perl's dynamic anyways?
18:51:39 <haskellbridge> <Liamzee> Or more specifically, how is Perl dynamic?
18:53:20 <mauke> uh ... it depends on who's speaking?
18:53:28 tromp joins (~textual@2001:1c00:3487:1b00:e513:bc03:349e:ac26)
18:53:53 <mauke> mainly, I think it means it's not C
18:53:57 <haskellbridge> <Liamzee> sorry, was just wondering if there was anything interesting about the specific way Perl is a dynamically-typed language
18:54:32 <dolio> Maybe it's dynamic like dynamic programming.
18:54:42 <mauke> you don't have a separate compilation step (unlike C)
18:54:48 <mauke> there is no static type system (unlike C)
18:55:06 <mauke> data structures don't have a fixed size and grow/shrink as needed (unlike C)
18:56:02 <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
18:56:23 <mauke> $foo is a scalar, but @foo is an array
18:56:48 <dolio> Are those the same variable? I forget.
18:57:43 <mauke> no, completely independent*
18:57:53 <mauke> * not actually completely independent
18:57:57 <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"
18:58:02 <EvanR> well then I'm convinced I need to put more parentheses for this to have a chance at getting parsed back in
18:58:03 <haskellbridge> <Bowuigi> No, some dialects of BASIC have sigils too
18:58:35 <haskellbridge> <Bowuigi> Sigils are hungarian notation but required and more noise
18:59:24 <mauke> apps hungarian or systems hungarian?
19:00:03 × caconym quits (~caconym@user/caconym) (Quit: bye)
19:00:25 × gmg quits (~user@user/gehmehgeh) (Quit: Leaving)
19:00:45 caconym joins (~caconym@user/caconym)
19:00:56 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
19:01:25 <haskellbridge> <Bowuigi> https://en.m.wikipedia.org/wiki/Hungarian_notation systems hungarian according to this
19:02:03 <haskellbridge> <Bowuigi> Apps hungarian is basically implicit newtypes but worse
19:02:09 <mauke> yes :-)
19:02:47 <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
19:03:01 <mauke> and those "logical types" should really just be actual types
19:03:19 <EvanR> smh they shoulda just used an IDE
19:03:28 prolic_ joins (~sasa@181.122.135.9)
19:04:33 <mauke> but sigils are not just names
19:04:55 <haskellbridge> <Liamzee> visual basic apparently was the first commercially successful IDE
19:04:56 × tromp quits (~textual@2001:1c00:3487:1b00:e513:bc03:349e:ac26) (Quit: My iMac has gone to sleep. ZZZzzz…)
19:05:16 <[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
19:05:18 <mauke> for example, $x[0] is a single element of @x, but @x[0, 3, 42] is a list of elements (an array slice)
19:05:33 <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) ?
19:05:48 machinedgod joins (~machinedg@d108-173-18-100.abhsia.telus.net)
19:05:56 <[exa]> (ah wait `snd` is actually in accelerate on itself, but let's think more generalized)
19:06:22 <mauke> https://wiki.haskell.org/Taking_over_a_package
19:06:28 <haskellbridge> <Liamzee> which maintainer are you talking about, prolic_
19:07:15 <prolic_> the author of the hsqml lib, I already tried to reach out via email
19:07:45 monochrom doesn't like Perl sigils or Lisp sigils.
19:07:51 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 246 seconds)
19:08:03 <EvanR> how hungarian is this type name I saw yesterday: struct CoreStruct
19:08:17 <haskellbridge> <Liamzee> wait, i don't understand
19:08:26 <haskellbridge> <Liamzee> oh, whoops, misunderstood
19:08:28 <EvanR> now you know the type is a struct... very much so
19:08:39 <prolic_> ok, so make an account on haskell discourse, post there, wait a month, then contact hackage admins?
19:08:42 <monochrom> It's postfix hungarian, no? hungarian would be StructCore. :)
19:08:59 <monochrom> Reverse Polish Hungarian = RPH \∩/
19:09:25 <mauke> reverse polish hungarian = s <-> sz
19:09:29 <EvanR> then to declare an object... struct CoreStruct structCoreStructMyCoreStruct;
19:09:53 <mauke> I have been struct to my core
19:10:18 <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?
19:10:24 gmg joins (~user@user/gehmehgeh)
19:10:34 <EvanR> I should make it an instance of class CoreClass
19:11:03 wootehfoot joins (~wootehfoo@user/wootehfoot)
19:11:08 <mauke> tuxillo: there is a #ghc channel
19:11:59 <mauke> but I feel opening a ghc issue wouldn't be wrong, either. it's what the message tells you to do, after all
19:12:34 <monochrom> Actually I think hugarian applies to variable names only, not type names..
19:12:45 <EvanR> ya I also think so
19:13:05 <EvanR> so class CoreClass and struct CoreStruct needs another moniker
19:13:35 <monochrom> I'm OK with "type-level hungarian" :)
19:14:15 <EvanR> data CoreDataSum = LeftConstructor A | RightConstructor B
19:14:35 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
19:14:55 <monochrom> How would you feel about hungarian for type names where you annotate the kind? E.g., data Star2StarMaybe a = ...
19:15:00 <haskellbridge> <Liamzee> prolic_, still here?
19:15:17 <prolic_> haskellbridge yes sir
19:15:33 <haskellbridge> <Liamzee> https://www.gekkou.co.uk/cvitae/
19:15:40 <haskellbridge> <Liamzee> his linked in is still active
19:15:45 <EvanR> OctothorpInt#
19:15:54 × jco quits (~jco@78-70-217-44-no600.tbcn.telia.com) (Ping timeout: 246 seconds)
19:15:58 tromp joins (~textual@2001:1c00:3487:1b00:e513:bc03:349e:ac26)
19:16:02 <EvanR> or DoubleOctothorp
19:16:18 <haskellbridge> <Liamzee> would it be rude to try contacting him there?
19:16:20 <prolic_> I wrote him emails twice already and explained I intend to take over the package or at help him maintain, no response
19:16:30 <haskellbridge> <Liamzee> you wrote him e-mails at which address?
19:16:57 × jespada quits (~jespada@r167-61-127-49.dialup.adsl.anteldata.net.uy) (Quit: My Mac has gone to sleep. ZZZzzz…)
19:18:00 <prolic_> to that exact email address
19:18:20 <mauke> https://www.gekkou.co.uk/cvitae/ is not an email address
19:18:25 <haskellbridge> <Liamzee> the gekkou site is no longer being maintained
19:18:40 <prolic_> Robin KAY <komadori@gekkou.co.uk>
19:19:14 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 248 seconds)
19:19:28 <haskellbridge> <Liamzee> i mean it'd be rude if he were deliberately ignoring your e-mails, but it's possible he simply disconnected himself from the gekkou website, since he's swapped sites
19:21:20 <tuxillo> mauke: i'll try luck there, thanks!
19:21:38 × j1n37 quits (~j1n37@user/j1n37) (Ping timeout: 245 seconds)
19:22:00 × vanishingideal quits (~vanishing@user/vanishingideal) (Ping timeout: 276 seconds)
19:22:29 <mauke> linkedin says he's at https://www.msci.com/ now, but that's not very helpful
19:23:48 <EvanR> the examples of systems hungarian on that page are so bad like, arru8NumberList and fnFunction, it's like... zero additional information beyond the type xD
19:24:13 <EvanR> if they would work it's like why even have named variables
19:24:35 <EvanR> de bruijn indices ftw
19:24:39 <haskellbridge> <Liamzee> prolic_: I'm probably wrong, but I'd suggest you try reaching him on linkedin and his github, give it a week or so, then post to discourse
19:25:22 <mauke> EvanR: the windows api is full of that nonsense
19:25:37 <prolic_> haskellbridge: I wrote him to Mr Kay on 01.07.2024 first time, second time on 27.07.2024, just telling him I am working on reviving his library. I got a response on 29.07.2024, where he wishes me best luck. on 30.07.2024 (next day) I wrote him again and ask about pushing changes to hackage. Again on 18.11.2024, both times no response at all. I have the emails.
19:25:48 <mauke> my favorite is probably lpFoo to indicate a "long pointer", which isn't even a thing in C++
19:26:03 <haskellbridge> <Liamzee> oh okay, so he's not responding yet, i guess, just go straight to discourse
19:27:25 <prolic_> who is Liamzee though?
19:27:36 <haskellbridge> <Liamzee> i'm just some random person
19:28:25 j1n37 joins (~j1n37@user/j1n37)
19:28:26 <prolic_> announcements category on discourse?
19:29:12 <haskellbridge> <Liamzee> actually, forget what i said, i forget the procedure for package takeovers (afaik, hackage won't even delete packages, and i think in the case where someone handling a core crypto library lost interest and walked off, the package was ultimately forked instead of being taken over)
19:29:28 <EvanR> the procedure was linked earlier
19:29:44 <EvanR> no need to remember
19:30:17 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
19:31:29 <geekosaur> it's also linked from the front page of the hackage website iirc
19:31:50 <[exa]> prolic_: there was a similar takeover recently for mustache, handled very well, you can copy from there
19:32:01 <prolic_> exa - what do I do?
19:33:02 <[exa]> https://discourse.haskell.org/t/taking-over-mustache/11752 (+ the linked github issue)
19:33:13 × tromp quits (~textual@2001:1c00:3487:1b00:e513:bc03:349e:ac26) (Quit: My iMac has gone to sleep. ZZZzzz…)
19:35:01 <prolic_> thank you
19:35:14 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 244 seconds)
19:37:33 jespada joins (~jespada@r167-61-127-49.dialup.adsl.anteldata.net.uy)
19:42:05 <[exa]> prolic_: the main exercise there is to politely&transparently test that maintainer responds to issues (which is the expected property of maintainers), and if not, make that implicitly visible publicly. I guess you can as well ask in #hackage for guidance.
19:42:33 <prolic_> well, not that easy, since https://hub.darcs.net/komadori/HsQML has no public issues.
19:42:43 <prolic_> I could only do on my own github
19:43:14 <[exa]> you need something that provably pings the maintainer
19:43:34 <[exa]> I guess sending a mail to maintainer+mailinglist would be another way, but please check with hackage folks
19:46:19 <prolic_> ok
19:46:28 tromp joins (~textual@2001:1c00:3487:1b00:e513:bc03:349e:ac26)
19:48:27 × tabemann quits (~tabemann@2600:1700:7990:24e0:abb4:3ad0:1d9:d299) (Ping timeout: 246 seconds)
19:48:40 pavonia joins (~user@user/siracusa)
19:52:06 tabemann joins (~tabemann@172-13-49-137.lightspeed.milwwi.sbcglobal.net)
19:55:34 tabemann_ joins (~tabemann@172-13-49-137.lightspeed.milwwi.sbcglobal.net)
19:57:09 × tabemann quits (~tabemann@172-13-49-137.lightspeed.milwwi.sbcglobal.net) (Ping timeout: 252 seconds)
20:01:53 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
20:05:19 × tromp quits (~textual@2001:1c00:3487:1b00:e513:bc03:349e:ac26) (Quit: My iMac has gone to sleep. ZZZzzz…)
20:06:45 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 244 seconds)
20:12:03 × poxel quits (~lennart@user/poxel) (Ping timeout: 276 seconds)
20:12:37 poxel joins (~lennart@user/poxel)
20:14:45 tromp joins (~textual@2001:1c00:3487:1b00:e513:bc03:349e:ac26)
20:15:03 <emojelly> Do we use mtl or transformers nowadays? Or both?
20:15:51 <haskellbridge> <magic_rb> Me personally effectful if i can help it
20:15:51 <EvanR> transformers is a dependency of mtl
20:15:57 <haskellbridge> <magic_rb> It composes better imo
20:17:03 <EvanR> mtl has generic classes while transformers has the basic implementations (it seems)
20:17:18 <monochrom> Yeah.
20:18:38 <[exa]> +1 for transformers unless monad stacking can be avoided
20:18:52 × wootehfoot quits (~wootehfoo@user/wootehfoot) (Read error: Connection reset by peer)
20:25:56 × michalz quits (~michalz@185.246.207.205) (Remote host closed the connection)
20:31:21 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
20:35:04 × tromp quits (~textual@2001:1c00:3487:1b00:e513:bc03:349e:ac26) (Quit: My iMac has gone to sleep. ZZZzzz…)
20:38:24 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds)
20:38:40 × j1n37 quits (~j1n37@user/j1n37) (Ping timeout: 252 seconds)
20:38:59 j1n37 joins (~j1n37@user/j1n37)
20:39:05 tromp joins (~textual@2001:1c00:3487:1b00:e513:bc03:349e:ac26)
20:40:22 lxsameer joins (~lxsameer@Serene/lxsameer)
20:40:59 × gmg quits (~user@user/gehmehgeh) (Quit: Leaving)
20:42:19 gmg joins (~user@user/gehmehgeh)
20:42:53 <EvanR> bespoke non-free monads prepped to order
20:45:20 <haskellbridge> <Liamzee> at O(n) bind cost where n is size of stack
20:49:24 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
20:49:45 <EvanR> (I don't know if O(n) is always an accurate estimate of the cost of "bind" in a "stack"... it would seem to depend on the details of the "stack")
20:50:17 <EvanR> (and how its associated run algorithm works)
20:53:45 × Unicorn_Princess quits (~Unicorn_P@user/Unicorn-Princess/x-3540542) (Remote host closed the connection)
20:54:13 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 248 seconds)
20:55:20 × tromp quits (~textual@2001:1c00:3487:1b00:e513:bc03:349e:ac26) (Quit: My iMac has gone to sleep. ZZZzzz…)
20:56:23 <haskellbridge> <Liamzee> EvanR: why use Supply over CPSWriter?
20:56:39 <EvanR> I guess you misunderstood, I wasn't using that library
20:58:23 <EvanR> I threw this together instead https://paste.tomsmeding.com/DI7hAOeQ
20:59:05 <EvanR> (could have derived the functor to save more space...)
20:59:41 <EvanR> CPSWriter seems to be the opposite of Supply?
21:00:24 <haskellbridge> <Liamzee> thanks for being polite to me, a bit sleep deprived lately
21:00:56 × weary-traveler quits (~user@user/user363627) (Remote host closed the connection)
21:03:53 <haskellbridge> <Liamzee> but yeah that is cool
21:04:48 peterbecich joins (~Thunderbi@syn-047-229-123-186.res.spectrum.com)
21:05:08 <haskellbridge> <Liamzee> EvanR: does the bind implementation actually work?
21:05:11 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
21:05:23 <EvanR> it seems to
21:05:43 <haskellbridge> <Liamzee> the recursion looks broken
21:06:03 <haskellbridge> <Liamzee> actually, no, it's not
21:06:58 <EvanR> no warranty
21:08:03 tromp joins (~textual@2001:1c00:3487:1b00:e513:bc03:349e:ac26)
21:10:12 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds)
21:12:49 <haskellbridge> <Liamzee> cool, so the recursion keeps on going until the condition returns a done or error message; on fail, the failure propagates, on f x, you run to the next step
21:14:21 <EvanR> on fail, the "and then" function is discarded
21:14:57 <EvanR> since it won't be needed, in fact, you can't use it without a proper 'a'
21:15:04 <EvanR> which is not available
21:16:33 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
21:16:54 × lxsameer quits (~lxsameer@Serene/lxsameer) (Ping timeout: 252 seconds)
21:17:59 <haskellbridge> <Liamzee> depending on the check function, you can still diverge, though
21:18:54 × peterbecich quits (~Thunderbi@syn-047-229-123-186.res.spectrum.com) (Ping timeout: 260 seconds)
21:21:18 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds)
21:21:25 <monochrom> But that is a free monad!
21:22:07 <monochrom> OK OK I don't really mean to argue and nitpick. It's nice code. :)
21:23:16 × tromp quits (~textual@2001:1c00:3487:1b00:e513:bc03:349e:ac26) (Quit: My iMac has gone to sleep. ZZZzzz…)
21:23:56 <monochrom> Ah perhaps you meant you didn't use the free package.
21:29:37 astra is now known as amish
21:30:19 Tuplanolla joins (~Tuplanoll@91-159-69-59.elisa-laajakaista.fi)
21:32:21 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
21:34:24 <haskellbridge> <Liamzee> and what functor would that be? sort of looks like either
21:35:05 tromp joins (~textual@2001:1c00:3487:1b00:e513:bc03:349e:ac26)
21:37:50 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 272 seconds)
21:40:05 <haskellbridge> <Liamzee> yeah, it's just either, whoops
21:42:44 <haskellbridge> <Liamzee> no, Free (ExceptT String (Reader Int) )?
21:45:09 peterbecich joins (~Thunderbi@syn-047-229-123-186.res.spectrum.com)
21:48:09 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
21:48:52 × __monty__ quits (~toonn@user/toonn) (Quit: leaving)
21:51:21 <haskellbridge> <Liamzee> has to be state, i guess, since reader can't mutate, but the counter behavior is pretty specific, bleh
21:52:49 × manwithluck quits (~manwithlu@2a09:bac5:5085:2dc::49:221) (Remote host closed the connection)
21:53:11 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 244 seconds)
21:55:15 × j1n37 quits (~j1n37@user/j1n37) (Ping timeout: 244 seconds)
21:56:17 ljdarj1 joins (~Thunderbi@user/ljdarj)
21:57:11 j1n37 joins (~j1n37@user/j1n37)
21:57:12 manwithluck joins (~manwithlu@2a09:bac5:5085:2dc::49:221)
22:00:04 × gmg quits (~user@user/gehmehgeh) (Remote host closed the connection)
22:00:13 Googulator joins (~Googulato@2a01-036d-0106-211a-f46d-c0c9-579b-1a24.pool6.digikabel.hu)
22:00:42 × ljdarj quits (~Thunderbi@user/ljdarj) (Ping timeout: 265 seconds)
22:00:42 ljdarj1 is now known as ljdarj
22:00:46 gmg joins (~user@user/gehmehgeh)
22:02:02 × target_i quits (~target_i@user/target-i/x-6023099) (Quit: leaving)
22:02:45 × sord937 quits (~sord937@gateway/tor-sasl/sord937) (Quit: sord937)
22:03:57 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
22:06:00 thuna` joins (~thuna`@user/thuna/x-1480069)
22:06:06 × peterbecich quits (~Thunderbi@syn-047-229-123-186.res.spectrum.com) (Ping timeout: 244 seconds)
22:08:55 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 265 seconds)
22:12:32 emmanuelux joins (~emmanuelu@user/emmanuelux)
22:15:27 × c_wraith quits (~c_wraith@adjoint.us) (Ping timeout: 252 seconds)
22:17:06 × Hecate quits (~mariposa@user/hecate) (Ping timeout: 272 seconds)
22:17:38 Hecate joins (~mariposa@user/hecate)
22:18:59 × tabaqui quits (~tabaqui@167.71.80.236) (Ping timeout: 260 seconds)
22:19:43 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
22:20:14 c_wraith joins (~c_wraith@adjoint.us)
22:22:23 × tromp quits (~textual@2001:1c00:3487:1b00:e513:bc03:349e:ac26) (Quit: My iMac has gone to sleep. ZZZzzz…)
22:27:06 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 268 seconds)
22:31:02 × califax quits (~califax@user/califx) (Remote host closed the connection)
22:31:21 califax joins (~califax@user/califx)
22:37:46 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
22:42:14 Feuermagier joins (~Feuermagi@user/feuermagier)
22:42:29 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 248 seconds)
22:42:29 × Feuermagier quits (~Feuermagi@user/feuermagier) (Remote host closed the connection)
22:43:07 Sgeo joins (~Sgeo@user/sgeo)
22:46:42 <EvanR> monochrom, if this were a free monad, then uh for all other monads there would be a unique monad morphism something or other from Check to it?
22:46:53 <EvanR> such that
22:46:59 <EvanR> some diagram xD
22:49:34 × thuna` quits (~thuna`@user/thuna/x-1480069) (Ping timeout: 252 seconds)
22:51:27 × sprout quits (~sprout@84-80-106-227.fixed.kpn.net) (Ping timeout: 265 seconds)
22:53:30 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
22:53:33 <EvanR> I lied, every other monad for this functor, which would be like ...
22:54:03 × sprotte24 quits (~sprotte24@p200300d16f06b600a14bd9dc58a29dc6.dip0.t-ipconnect.de) (Quit: Leaving)
22:58:33 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 268 seconds)
23:00:17 <EvanR> I lied that was the beginning of a universal property not a free thing
23:02:21 <monochrom> Your monad is Free C, where C is defined by "data C r = G (Int -> r) | F String".
23:03:03 × prolic_ quits (~sasa@181.122.135.9) (Ping timeout: 246 seconds)
23:04:28 <monochrom> There is a definition of free monad in terms of "left adjoint of the forgetful functor for monads" but I haven't really studied that.
23:04:46 weary-traveler joins (~user@user/user363627)
23:05:24 <monochrom> More precisely, Check is Free C. This is ignoring the special thing done by runCheck.
23:05:42 <monochrom> (to the Int part)
23:07:29 peterbecich joins (~Thunderbi@syn-047-229-123-186.res.spectrum.com)
23:07:34 <EvanR> turns out there is a connection between the free forgetful adjoint functors on one hand and initial algebras, which satisfy a universal property I think. If you just throw adjoint and universal at the wall you get a categorical theorem right
23:07:53 <monochrom> But here is the universal property you're looking for. Suppose a certain monad M supports two additional operations: gennum :: M Int, fail :: String -> M a. Then there is a unique monad morphism from Check to M.
23:08:08 <EvanR> such that
23:08:14 <EvanR> something factors through
23:09:18 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
23:11:41 <monochrom> Yeah it's an initial object in the category of monads like M.
23:12:26 <monochrom> I think you can go further for initial algebra if you're also into algebraic effects.
23:13:57 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 248 seconds)
23:16:33 <EvanR> ok but, the runCheck function which interprets the Check program in a certain way
23:17:50 <EvanR> is that specializing anything or orthogonal to the narrative
23:18:07 <monochrom> It is specializing.
23:18:15 <EvanR> would you not need it if you define the monad instance some other way
23:18:48 <monochrom> You are factoring a supply monad into a free monad plus an interpreter that kills the freeness.
23:19:55 <monochrom> Most useful monads are not free, but it is also useful to factor them into free monads and interpreters.
23:20:03 × j1n37 quits (~j1n37@user/j1n37) (Read error: Connection reset by peer)
23:20:14 × _xor quits (~xor@ip-66-42-132-175.dynamic.fuse.net) (Read error: Connection reset by peer)
23:20:33 <EvanR> trying to see how you would unfree it just by changing the monad instance
23:21:34 <haskellbridge> <Bowuigi> EvanR the factoring thing is "such that this unique morphism respects the Monad + M laws" IIRC
23:21:50 <monochrom> Or equivalently, in algebraic effects, factor into a free algebra and a handler.
23:22:49 _xor joins (~xor@ip-66-42-132-175.dynamic.fuse.net)
23:22:58 ljdarj1 joins (~Thunderbi@user/ljdarj)
23:24:15 j1n37 joins (~j1n37@user/j1n37)
23:25:04 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
23:25:17 <EvanR> a monad morphism automatically respects monad laws... but...
23:25:39 <haskellbridge> <Bowuigi> A nice corollary is that you can integrate any monad into an effect system that uses free monads and interpreters (which are a lot)
23:25:41 × ljdarj quits (~Thunderbi@user/ljdarj) (Ping timeout: 268 seconds)
23:25:41 ljdarj1 is now known as ljdarj
23:26:10 <monochrom> You can change to the Int->Either String (a,Int) monad and don't give users direct access, give them only "genNum = \s -> Right (s, s+1)" and "fail msg = \s -> Left msg".
23:27:17 <monochrom> That would be very unfree, and even more specialized than Int->Either String (a,Int).
23:27:28 <haskellbridge> <Bowuigi> EvanR yeah that's why I said morphism instead of monad morphism, to emphasize that it respects both the monad laws AND the M/Check/whatever laws
23:29:55 <emojelly> I wonder if I can (and should) rewrite my Coroutine-using framework with Pipes.
23:30:09 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 260 seconds)
23:31:07 × tremon quits (~tremon@83.80.159.219) (Quit: getting boxed in)
23:31:15 <emojelly> The pattern I have (and I wonder whether there's a name for it): I have a monad which both yields and awaits a value (types between input and output can differ), which feed into and feed back from another component, in my specific case a circuit.
23:32:42 <haskellbridge> <Bowuigi> You are describing Arrow and ArrowLoop, see if those abstractions make your program clearer first
23:32:55 <emojelly> So each monadic action gives (yields) input to the circuit, and returns (awaits) the output of the circuit.
23:33:18 <emojelly> I've used Arrows before, for CPU emulation, but that was an entirely different use case... wonder if Arrows can help here.
23:33:39 <emojelly> Monads seem to work fine?
23:33:53 <haskellbridge> <Bowuigi> If it is a monad it likely also supports ArrowApply too
23:34:19 <emojelly> My use case for CPU emulation was that I could do different things for "running" emulated instructions vs. "analyzing" them.
23:34:36 <haskellbridge> <Bowuigi> Why do you want to rewrite it if it works fine? Learning? Speed? Clarity?
23:34:42 <emojelly> It would be speed
23:35:18 <emojelly> I don't know if you followed the drama (technical drama, not human drama) yesterday, but my Coroutine-implementation is insanely slow for some reason, and profiling is not helping at all unfortunately.
23:35:59 <emojelly> It's pathologically slow. It looks like some accidental O(n^2) thing maybe, or something else... but I wasn't able to suss out what's taking so long in *any* way
23:36:54 <emojelly> only that for some reason a simple test is churning through 70GB/s of allocations for a relatively simple test, but it's not leaking it, so heap profiling didn't help either.
23:37:18 <haskellbridge> <Bowuigi> According to their own benchmarks, streamly is way faster than pipes, maybe try that?
23:37:34 <emojelly> I really like the Coroutines approach, but if pipes or something else helps...
23:37:45 <emojelly> I've looked at streamly, but I'm not sure it's better suited than pipes?
23:40:53 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
23:41:14 <emojelly> Pipes seems centered around yield/await that I need here, while streamly, ironically, looks more like unix pipes
23:41:22 <emojelly> but that's only after a very, very cursory look, so I might be wrong
23:42:35 <haskellbridge> <Bowuigi> I see
23:43:03 <haskellbridge> <Bowuigi> Do you have a repo link?
23:43:09 <emojelly> Not yet, no
23:43:17 <emojelly> I will!
23:43:52 × jespada quits (~jespada@r167-61-127-49.dialup.adsl.anteldata.net.uy) (Ping timeout: 272 seconds)
23:45:13 <haskellbridge> <Bowuigi> Just to make sure, did you check for space leaks and other laziness pitfalls? You probably did but just to make sure
23:45:39 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds)
23:45:42 <haskellbridge> <Bowuigi> For concurrency you have that actions may not run on the thread you wanted
23:46:21 <emojelly> I did. The heap is growing to an "okay" 40MB before gc brings it back down. Meanwhile, the *total* allocations are upwards of 70GB, with the program churning through 5-8GB/s for... nothing. But apparently those allocations are very short lived, because they don't really show up in the heap profile other than in those total statistics.
23:46:23 jespada joins (~jespada@r179-25-248-190.dialup.adsl.anteldata.net.uy)
23:46:31 <emojelly> There is no concurrency!
23:47:24 <geekosaur> most allocations are in the nursery (very fast) and most of those will disappear when it's GCd (anything still referenced moves to gen1, then the pointer is reset to the base of the nursery)
23:48:37 <emojelly> and the time profiling is (as far as I can tell myself) completely useless. The majority of the time is spent "in" this function, that's the full thing: "combineTestSignals = combineTestSignals (,)". Not in any of its children, this is not "inherited" time. No, profiling tells me *this* is where all CPU time goes.
23:48:56 <emojelly> sorry, it's "combineTestSignals = combineTestSignals' ()", missed the ' there
23:49:00 <emojelly> sigh
23:49:08 <emojelly> combineTestSignals = combineTestSignals' (,)
23:49:10 <emojelly> now it's right
23:49:34 × peterbecich quits (~Thunderbi@syn-047-229-123-186.res.spectrum.com) (Ping timeout: 272 seconds)
23:49:46 <emojelly> geekosaur: I wish there was a way to tell me what allocations were in the nursery, i.e. what type, who produced them... maybe that would give me one hint of what's wrong...
23:50:49 <geekosaur> I think there's a heap visualizer somewhere, but I'm not sure if it also handles the nursery or if it's only gen1+
23:51:12 <emojelly> Do you mean the heap visualizer that is processing the event log through HTML? That's what I used, yeah
23:51:16 <geekosaur> https://hackage.haskell.org/package/ghc-heap-view
23:51:19 <emojelly> ah
23:51:32 <emojelly> this seems different
23:52:32 <emojelly> But it might still not help. If I stop the program at any point, there's probably not a lot of allocations live. It seems the program does not *retain* an extreme amount of allocations for long, it just *churns* through them
23:52:44 <geekosaur> weirdly, it claims to only support ghc 8.8, but it was last updated at the beginning of this year
23:52:59 <emojelly> This results in total statistics of "74GB total allocations" while the heap profile looks fine, otherwise.
23:53:37 × potatoespotatoes quits (~quassel@user/potatoespotatoes) ()
23:54:34 <emojelly> All in all, I don't think I have a space leak (or maybe just a "very local one"), it's just that the allocations *might* help me understand why "combineTestSignals = combineTestSignals' (,)" takes an extreme amount of time entirely *by itself*. I.e. all its children in the profiling tree spend much less, it doesn't sum up.
23:54:49 potatoespotatoes joins (~quassel@130.44.147.204)
23:54:49 × potatoespotatoes quits (~quassel@130.44.147.204) (Changing host)
23:54:49 potatoespotatoes joins (~quassel@user/potatoespotatoes)
23:55:06 <emojelly> one thing I've done is actually using the OS to sample the process
23:55:19 <emojelly> which gave me weird symbols, which I can look up in the GHC Core file that is generated
23:55:56 <emojelly> so far however I find the Core code very hard to understand, and knowing which executable symbol the system spends most time in did not really help me much in knowing why.
23:56:41 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
23:56:44 <emojelly> But in theory, it's better than "all the time in nonsensically spent in this function which literally just applies another function, and nothing else"
23:57:22 <emojelly> by the way, if I remove that function and directly type "combineTestSignals' (,) ..." in the caller, the "lost" time predictably just wanders to the caller.
23:57:46 <emojelly> I thought I understood laziness and thunks, but this expression does nothing. It does not force any evaluation or anything.
23:58:14 <geekosaur> that really sounds to me like something is getting forced in `combineTestSignals` or whatever else consumes the result of `combineTestSignals'`
23:58:25 <geekosaur> but yeh, I don't see why
23:58:43 <emojelly> Yeah. And, sure, something will eventually force it. But the point of profiling is to tell me where the actual work is happening, no?
23:59:13 × Tuplanolla quits (~Tuplanoll@91-159-69-59.elisa-laajakaista.fi) (Quit: Leaving.)
23:59:22 peterbecich joins (~Thunderbi@syn-047-229-123-186.res.spectrum.com)
23:59:54 × acidjnk_new3 quits (~acidjnk@p200300d6e71c4f631cbaa9c9535aaf6d.dip0.t-ipconnect.de) (Ping timeout: 260 seconds)

All times are in UTC on 2025-04-08.