2025/05/08

Newest at the top

2025-05-08 12:08:14 +0200euleritian(~euleritia@dynamic-176-006-143-223.176.6.pool.telefonica.de) (Read error: Connection reset by peer)
2025-05-08 12:08:12 +0200 <tomsmeding> it is
2025-05-08 12:08:08 +0200 <hellwolf> darn it. typing in IRC is hard.
2025-05-08 12:08:01 +0200 <hellwolf> *losing of
2025-05-08 12:07:55 +0200 <hellwolf> "losign"
2025-05-08 12:07:45 +0200 <hellwolf> tom, do you think there is something in linear arrows to address the sharing issue? Although it might sound like "solving issue by not solving it", since the trade-off is the loosing the ergonomics of being able to copy variables however many times you wanted.
2025-05-08 12:06:59 +0200tromp(~textual@2001:1c00:3487:1b00:f14f:b20f:416b:87c6)
2025-05-08 12:05:52 +0200tromp(~textual@2001:1c00:3487:1b00:f14f:b20f:416b:87c6) (Quit: My iMac has gone to sleep. ZZZzzz…)
2025-05-08 12:02:01 +0200 <hellwolf> I was suspecting some sort of indexed monad, but I just didn't know what it's called.
2025-05-08 12:01:41 +0200 <hellwolf> It looks similar indeed. LVM itself is kinda trivial. It's good to know that there is a name for the general version of it.
2025-05-08 12:01:09 +0200 <hellwolf> Oh, I have never heard of the Atkey thing.
2025-05-08 11:51:47 +0200Typedfern(~Typedfern@213.red-83-37-26.dynamicip.rima-tde.net)
2025-05-08 11:46:11 +0200 <Lears> hellwolf: Not sure if this is helpful, but your `LVM` appears to be linear state transformed by the Atkey indexed writer monad: https://paste.tomsmeding.com/EOqwUoJZ
2025-05-08 11:45:31 +0200Typedfern(~Typedfern@213.red-83-37-26.dynamicip.rima-tde.net) (Remote host closed the connection)
2025-05-08 11:44:19 +0200 <hellwolf> :D code is better than paper?
2025-05-08 11:38:17 +0200Typedfern(~Typedfern@213.red-83-37-26.dynamicip.rima-tde.net) typedfern
2025-05-08 11:37:28 +0200Typedfern(~Typedfern@213.red-83-37-26.dynamicip.rima-tde.net) (Remote host closed the connection)
2025-05-08 11:36:44 +0200Typedfern(~Typedfern@213.red-83-37-26.dynamicip.rima-tde.net) typedfern
2025-05-08 11:32:46 +0200euleritian(~euleritia@dynamic-176-006-143-223.176.6.pool.telefonica.de)
2025-05-08 11:29:59 +0200euleritian(~euleritia@ip4d17f864.dynamic.kabel-deutschland.de) (Ping timeout: 245 seconds)
2025-05-08 11:29:43 +0200 <tomsmeding> but the documentation part never happened, lol
2025-05-08 11:29:37 +0200 <tomsmeding> that's part of the reason I wanted to make an implementation: to then proceed to document that well so that it can serve as a better explanation for haskellers
2025-05-08 11:29:14 +0200 <tomsmeding> I find the presentation in the McDonell paper to be hard to understand personally
2025-05-08 11:28:34 +0200 <hellwolf> thanks, printed. will read to enrich my knowledge here. it seems relevant to what I do.
2025-05-08 11:26:15 +0200 <tomsmeding> The McDonell et al paper presents an algorithm that does sharing recovery on an AST indexed by the type of the expression that it represents
2025-05-08 11:25:46 +0200 <tomsmeding> but the expression it creates is untyped
2025-05-08 11:25:38 +0200 <tomsmeding> the pitch is: https://ku-fpg.github.io/files/Gill-09-TypeSafeReification.pdf does sharing recovery just fine, and it's implemented in https://hackage.haskell.org/package/data-reify
2025-05-08 11:25:13 +0200 <tomsmeding> hellwolf: yeah only the sharing recovery part of it
2025-05-08 11:19:49 +0200rvalue-rvalue
2025-05-08 11:13:25 +0200rvalue(~rvalue@user/rvalue) (Ping timeout: 248 seconds)
2025-05-08 11:13:21 +0200fp(~Thunderbi@2001:708:20:1406::10c5) fp
2025-05-08 11:13:13 +0200rvalue-(~rvalue@user/rvalue) rvalue
2025-05-08 11:11:49 +0200j1n37-(~j1n37@user/j1n37) (Ping timeout: 248 seconds)
2025-05-08 11:11:32 +0200j1n37(~j1n37@user/j1n37) j1n37
2025-05-08 11:08:55 +0200 <hellwolf> | This is an attempt at implementing "Optimising Purely Functional GPU Programs" by McDonell et al. (ICFP 2013) in a generic fashion.
2025-05-08 11:08:26 +0200 <hellwolf> let me read your project: one-liner README :)
2025-05-08 11:07:42 +0200 <tomsmeding> because my partial-order thing doesn't (easily?) work
2025-05-08 11:07:32 +0200 <tomsmeding> but in your case it may not solve anything because you require the linear types for versioning too
2025-05-08 11:06:52 +0200 <tomsmeding> (the core function there is sharingRecovery at the bottom of this file https://git.tomsmeding.com/sharing-recovery/tree/src/Data/Expr/SharingRecovery/Internal.hs#n454 )
2025-05-08 11:05:17 +0200 <hellwolf> I am all ears to hear feedback and criticism on my whole LVM approach
2025-05-08 11:05:06 +0200 <tomsmeding> I'd like someone to use https://git.tomsmeding.com/sharing-recovery/about/ in anger :p
2025-05-08 11:04:43 +0200 <hellwolf> (we talk about variable labeling another time, when I get to that; I am okay with what I have now for that.)
2025-05-08 11:04:42 +0200 <tomsmeding> the unsafePerformIO ID generation trick is sucessfully implemented by horde-ad (a library a collaborator of mine is working on)
2025-05-08 11:04:20 +0200 <hellwolf> ah, okay, I didn't fully understand that
2025-05-08 11:04:20 +0200 <tomsmeding> variable labeling is implemented successfully by accelerate
2025-05-08 11:04:04 +0200 <tomsmeding> no, the "use (v, exists w. w) instead of (v, v+1)"
2025-05-08 11:03:56 +0200 <hellwolf> using unsafe io?
2025-05-08 11:03:48 +0200 <hellwolf> your idea of the variable labeling?
2025-05-08 11:03:42 +0200 <tomsmeding> and using the continuation monad to achieve said CPS is insufficient because we're doing it not for the runtime CPS behaviour, but for being able to _type-restrict_ the continuation
2025-05-08 11:02:51 +0200 <tomsmeding> you end up having to CPS all code to express what I described