Home liberachat/#haskell: Logs Calendar

Logs on 2025-11-11 (liberachat/#haskell)

00:02:36 × Anarchos quits (~Anarchos@91-161-254-16.subs.proxad.net) (Quit: Vision[]: i've been blurred!)
00:03:36 malte joins (~malte@mal.tc)
00:05:35 × anselmschueler quits (~Thunderbi@user/schuelermine) (Remote host closed the connection)
00:05:40 Googulator30 joins (~Googulato@2a01-036d-0106-0180-8127-ba79-55a7-6f29.pool6.digikabel.hu)
00:05:44 × Googulator21 quits (~Googulato@2a01-036d-0106-0180-8127-ba79-55a7-6f29.pool6.digikabel.hu) (Quit: Client closed)
00:07:13 × hiredman quits (~hiredman@frontier1.downey.family) (Ping timeout: 264 seconds)
00:08:31 hiredman joins (~hiredman@frontier1.downey.family)
00:08:49 Sidney joins (~Sidney@2600:4040:2678:9600:b1c4:ced3:242d:1252)
00:10:07 <Sidney> Hi, I am trying to learn how to think in the Haskell way (I don't know the precise term), but I am having difficultly solving leetcode problem which require stateful operations such as problems which requires the two pointers technique. Is there pattern/mindset to solve inherently stateful problems elegantly and with good time complexity? I tried
00:10:07 <Sidney> recursion but I does not feel like the right tool. Thanks!
00:10:50 Googulator9 joins (~Googulato@2a01-036d-0106-0180-8127-ba79-55a7-6f29.pool6.digikabel.hu)
00:11:16 × Googulator30 quits (~Googulato@2a01-036d-0106-0180-8127-ba79-55a7-6f29.pool6.digikabel.hu) (Quit: Client closed)
00:15:27 <L29Ah> Sidney: there's ST if you find you want to have a state for efficiency in your black-boxable algorithm
00:18:18 sprout joins (~sprout@84-80-106-227.fixed.kpn.net)
00:29:25 × peterbecich quits (~Thunderbi@172.222.148.214) (Ping timeout: 240 seconds)
00:31:07 comonad joins (~comonad@2003:d0:2741:a000:c693:4c09:e8b4:6dfd)
00:35:07 <mange> While Haskell has ST and the like, if you're trying to think "in the Haskell way" then you probably don't want to be using ST.
00:37:18 × ttybitnik quits (~ttybitnik@user/wolper) (Quit: Fading out...)
00:40:42 × Googulator9 quits (~Googulato@2a01-036d-0106-0180-8127-ba79-55a7-6f29.pool6.digikabel.hu) (Quit: Client closed)
00:40:47 Googulator65 joins (~Googulato@2a01-036d-0106-0180-8127-ba79-55a7-6f29.pool6.digikabel.hu)
00:41:31 <EvanR> Sidney, if the algorithm specifically calls for something like an array of A and numerical indexes, you can pretty easily translate that to a Map Int A and some Ints
00:41:57 <EvanR> (or IntMap A)
00:43:04 <EvanR> for the stateful part, there are several ways to "keep the current state", whatever it is. E.g. pass the latest values to a recursive function which stands for the loop body
00:44:43 <EvanR> another way is to use a State monad, there are other ways
00:44:48 × gf3 quits (~gf3@user/gf3) (Ping timeout: 256 seconds)
00:47:40 × Tuplanolla quits (~Tuplanoll@91-159-187-167.elisa-laajakaista.fi) (Quit: Leaving.)
00:48:14 gf3 joins (~gf3@user/gf3)
00:49:18 <jreicher> Sidney: what do you need stateful operations for? (Really this is just a polite way for met to ask, are you really really sure you need stateful operations? You might be wrong, and if you're wrong, it's easier to do things without them.)
00:52:27 <mange> In general I would say "the Haskell way" is to avoid state, and to think about functional transformations/reductions instead. Even if it's possible to write programs with state in Haskell, you're usually going against the grain of the language.
00:59:57 <Sidney> I agree, I don't want to use stateful operations. I'm missing something because I don't see an alternate. For example `move zeros` (https://leetcode.com/problems/move-zeroes/description/) requires constant space complexity and I don't how `two sum` (https://leetcode.com/problems/two-sum/description/) could be solved with less than O(N^2) time
00:59:58 <Sidney> complexity without a for loop and a hash table.
01:00:18 × jle` quits (~jle`@2603:8001:3b00:11:5098:4041:9bc7:9b0d) (Ping timeout: 244 seconds)
01:00:31 × Googulator65 quits (~Googulato@2a01-036d-0106-0180-8127-ba79-55a7-6f29.pool6.digikabel.hu) (Quit: Client closed)
01:00:39 Googulator65 joins (~Googulato@2a01-036d-0106-0180-8127-ba79-55a7-6f29.pool6.digikabel.hu)
01:00:47 spew joins (~spew@user/spew)
01:01:30 jle` joins (~jle`@2603:8001:3b00:11:c2d0:7f27:fab9:22ae)
01:04:29 × xff0x quits (~xff0x@2405:6580:b080:900:2473:b259:8788:143a) (Ping timeout: 260 seconds)
01:05:43 × Googulator65 quits (~Googulato@2a01-036d-0106-0180-8127-ba79-55a7-6f29.pool6.digikabel.hu) (Quit: Client closed)
01:05:50 Googulator91 joins (~Googulato@2a01-036d-0106-0180-8127-ba79-55a7-6f29.pool6.digikabel.hu)
01:05:53 × Sidney quits (~Sidney@2600:4040:2678:9600:b1c4:ced3:242d:1252) (Ping timeout: 250 seconds)
01:07:16 Sidney joins (~Sidney@2600:4040:2678:9600:b1c4:ced3:242d:1252)
01:10:50 × Googulator91 quits (~Googulato@2a01-036d-0106-0180-8127-ba79-55a7-6f29.pool6.digikabel.hu) (Quit: Client closed)
01:10:59 Googulator91 joins (~Googulato@2a01-036d-0106-0180-8127-ba79-55a7-6f29.pool6.digikabel.hu)
01:15:37 × tabaqui quits (~tabaqui@167.71.80.236) (Ping timeout: 264 seconds)
01:15:42 Googulator83 joins (~Googulato@2a01-036d-0106-0180-8127-ba79-55a7-6f29.pool6.digikabel.hu)
01:16:09 × Googulator91 quits (~Googulato@2a01-036d-0106-0180-8127-ba79-55a7-6f29.pool6.digikabel.hu) (Quit: Client closed)
01:18:55 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
01:19:28 <mange> Sidney: You can use recursion, building up a hash table as you go. The two sum problem, for instance, could be like this: http://paste.debian.net/1405577/ (I'm using Map because it was easier, but you can see the idea).
01:20:26 <mange> The move zeros one you linked to is explicitly about mutating an array, so obviously you can't do that without mutation.
01:22:45 × DetourNetworkUK quits (DetourNetw@user/DetourNetworkUK) (Read error: Connection reset by peer)
01:22:47 DetourNe- joins (DetourNetw@user/DetourNetworkUK)
01:23:26 × Starving_Drummer quits (~berke@user/Starving-Drummer:76786) (Remote host closed the connection)
01:23:58 <mange> Oh, wait, sorry, I misread your message. You don't want to use a hash table. That makes sense.
01:24:49 × Googulator83 quits (~Googulato@2a01-036d-0106-0180-8127-ba79-55a7-6f29.pool6.digikabel.hu) (Quit: Client closed)
01:25:04 Googulator83 joins (~Googulato@2a01-036d-0106-0180-8127-ba79-55a7-6f29.pool6.digikabel.hu)
01:25:04 DetourNe- is now known as DetourNetworkUK
01:25:32 × Googulator83 quits (~Googulato@2a01-036d-0106-0180-8127-ba79-55a7-6f29.pool6.digikabel.hu) (Client Quit)
01:25:43 Googulator83 joins (~Googulato@2a01-036d-0106-0180-8127-ba79-55a7-6f29.pool6.digikabel.hu)
01:25:53 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 256 seconds)
01:28:17 <int-e> sorting can help with two-sum
01:30:36 <int-e> > let (xs,ys) = partition (/= 0) [0,1,0,3,12] in xs ++ ys -- yes it's not in-place, but whatever
01:30:37 <lambdabot> [1,3,12,0,0]
01:31:23 × spew quits (~spew@user/spew) (Quit: WeeChat 4.6.3)
01:37:42 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
01:40:27 <jreicher> two-sum doesn't have to be in-place I think. So you can ignore the "array" part and just think in terms of lists.
01:40:43 <monochrom> partition is probably still constant-space and linear-time.
01:40:58 <mange> Sidney: still not in-place (because it would require changing the input), but this should solve the two-sum problem by iterating through the list in both directions: http://paste.debian.net/1405581/
01:41:07 <mange> ... After sorting it, that is.
01:41:31 <int-e> jreicher: yes, but the code snippet was for move-zeroes
01:41:55 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 240 seconds)
01:41:57 × gorignak quits (~gorignak@user/gorignak) (Quit: quit)
01:42:04 <Sidney> Okay, thank you for the help.
01:42:05 <Sidney> Regarding two-pointer questions: is it possible to use recursion to get a single pass with the left and right pointers as function parameters?
01:42:05 <Sidney> I tried to solve the "Best Time to Buy and Sell Stock" problem (https://leetcode.com/problems/best-time-to-buy-and-sell-stock/description/) using a fold to calculate the profit each day, but that resulted in O(n²) complexity because I needed to calculate the maximum value for the remainder of the collection. Lastly I have heard some people say
01:42:06 <Sidney> that some things are 'inherently stateful' so functional programming is not capable of solving the problem elegantly. Is that true? It seems arbitrary that a `for loop` is the only tool that can solve these problems compared behaviors in mathematics such as recursion but I am ignorant and would like to know what you have to say.
01:42:13 gorignak joins (~gorignak@user/gorignak)
01:42:25 <monochrom> "in-place" is an over-specification. Externally you can only observe space growth or lack-of, not how it is achieved.
01:42:27 <EvanR> whether you are using explicit recursion or a folding combinator or whatever it's still stateful in spirit
01:42:51 <int-e> mange: well those indices are wrong, because sorting changes the order of things
01:42:52 <EvanR> actually "state" is heavily overloaded and can mean many things
01:43:11 <int-e> mange: reconstructing indices makes this a tad annoying
01:43:13 <jreicher> Sidney: coincidentally I recently watched this. https://youtu.be/QNM-njddhIw?t=970&si=tWEcEVmsr44nKlVs
01:43:19 <EvanR> Sidney, yeah, that's incorrect
01:43:27 <mange> Oh yeah, obviously! Thanks int-e. I'm not going to fix it, because I can't be bothered right now.
01:43:29 <jreicher> The middle of that section of the video covers something very similar to move-zeroes
01:43:45 <int-e> mange: That's okay :P
01:44:33 <int-e> mange: FWIW, I'd probably just search for the found elements in the original list.
01:44:56 <int-e> :t findIndex
01:44:57 <lambdabot> (a -> Bool) -> [a] -> Maybe Int
01:45:10 <int-e> :t elemIndex
01:45:12 <lambdabot> Eq a => a -> [a] -> Maybe Int
01:45:40 <EvanR> there's much less difference between mutating an array and updating a Map than you think there is. There much less difference between a recursive program and a for loop than you think there is
01:45:51 <jreicher> Sidney: In my opinion (and not everyone will agree with this I think) even if you write "statelessly", the computation is still stateful. That's never in doubt. A computer executes in the real world by changing state moment to moment. So the question is not whether you have state, but whether you have to write it explicitly or whether the language (Haskell) can figure it out for you. A lot of the time it can.
01:47:17 × gorignak quits (~gorignak@user/gorignak) (Quit: quit)
01:47:33 gorignak joins (~gorignak@user/gorignak)
01:47:38 <EvanR> folding over a list of things using "a state" accomplishes the same thing as looping over the things and mutating variables
01:47:52 <monochrom> I feel like "there is no royal road" applies. How to think in French? By immersing in French for weeks, months, years. How to think in Japanese? By immersing in Japanese for weeks, months, years. How to think in Haskell? By immersing... you get my point.
01:47:56 <EvanR> sometimes it's more convenient sometimes it's not
01:48:30 <EvanR> yes keep writing programs (and reading programs)
01:48:57 <monochrom> But I do tell my students: Think of Haskell functions as math functions, not C "functions". Think algebra.
01:50:05 <EvanR> ^ this very good advice has no effect on people who hate math
01:50:38 <monochrom> Oh if you hate math, there is nothing in Haskell for you.
01:50:45 <EvanR> though maybe subjecting them to enough haskell gives them a better appreciation for mathematical thinking
01:51:12 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
01:51:56 int-e wonders when he last used the term "procedure" for an imperative "function".
01:51:56 × synchromesh quits (~john@2406:5a00:2412:2c00:c5a6:321c:259:76f2) (Read error: Connection reset by peer)
01:52:17 <monochrom> We should do that more!
01:52:27 <int-e> (A Pascal remnant, though Pascal's distinction based on whether a function returns a value or not is odd too.)
01:52:37 × gorignak quits (~gorignak@user/gorignak) (Quit: quit)
01:52:51 <monochrom> If foo :: IO Int, what do you call foo, i.e., what is the name of the kind of things like foo? Answer: procedure.
01:52:52 synchromesh joins (~john@2406:5a00:2412:2c00:ed84:4ebe:de81:99a2)
01:52:54 gorignak joins (~gorignak@user/gorignak)
01:53:07 <int-e> And sorry, I believe "function" is too ingrained in my brain by now.
01:53:18 <int-e> It's an overloaded concept, one of many.
01:54:00 <monochrom> The Algol people got it wrong in the first place. They said "side-effecting functions" [sic], just because there is a "return value".
01:54:56 <EvanR> returning a value was undervalued all the way even until ruby
01:55:07 <monochrom> If the null pointer was a billion-dollar mistake, I invoke Sapir-Worf and call that a priceless mistake.
01:55:09 <EvanR> so many forms in ruby return nothing useful and so can't be combined
01:55:34 <int-e> EvanR: can't wait for the paper on the trillion-dollar mistake in about 50 years
01:55:53 <EvanR> the 1 TRILLION dollar mistake *crowd laughs*
01:56:30 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 256 seconds)
01:56:41 <int-e> (adjusted for inflation relative to 2025)
01:56:59 <int-e> (and possibly new currencies)
01:57:23 <EvanR> or old currencies, because the euro was abandoned
02:01:00 <jreicher> monochrom: I think Haskell functions are a third kind of function. Math functions are often (infinite) sets. Haskell functions describe a construction of the set, which is a little. But they do it declarative, which is why they're not like C functions.
02:01:11 <jreicher> ...a little different...
02:01:43 × otto_s quits (~user@p4ff2712e.dip0.t-ipconnect.de) (Ping timeout: 240 seconds)
02:01:46 <monochrom> About many ruby forms can't be combined. Yeah even the javascript community discovered long ago that if an object method returns the object itself, then you can write obj.method1().method2().method3(), it's pretty neat.
02:03:37 <int-e> jreicher: I think the point is that math functions are a better model for what Haskell functions are than C functions.
02:03:41 otto_s joins (~user@p4ff27119.dip0.t-ipconnect.de)
02:04:13 <int-e> (they do a decent job capturing purity)
02:05:20 <jreicher> No argument with that, but there are still problems with the math model. You can define a non-computable function mathematically.
02:05:43 <int-e> I didn't say that you're wrong (you aren't)
02:05:57 <monochrom> No worries. I say "think math functions, algebra" to students who are too used to imperative thinking. They already can't escaping thinking of recipes for explicit construction. So telling them "like algebra" will get the right result.
02:06:01 <int-e> monochrom's teaching this stuff
02:06:30 <jreicher> monochrom: do you teach Haskell, or some of the other languages and/or lambda calculus/semantics?
02:06:53 <int-e> And it's common that you use flawed analogies for new concepts when teaching.
02:06:56 <monochrom> For students who are too used to pure math, especially the non-constructive one, I will have to bias them towards more explicit construction, even constructivism, yeah.
02:07:14 <jreicher> It cheers me even that those words might enter the classroom.
02:08:41 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
02:09:31 xff0x joins (~xff0x@fsb6a9491c.tkyc517.ap.nuro.jp)
02:09:40 <monochrom> I teach basic Haskell and basic Curry. And some PL topics, e.g., grammars, parsing, type inference, parametricity.
02:10:04 <monochrom> Actually this! https://www.cs.utoronto.ca/~trebla/CSCC24-latest/
02:12:04 peterbecich joins (~Thunderbi@172.222.148.214)
02:12:55 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 240 seconds)
02:13:28 <jreicher> Thanks for the link!
02:15:42 Googulator53 joins (~Googulato@2a01-036d-0106-0180-8127-ba79-55a7-6f29.pool6.digikabel.hu)
02:15:46 × Googulator83 quits (~Googulato@2a01-036d-0106-0180-8127-ba79-55a7-6f29.pool6.digikabel.hu) (Quit: Client closed)
02:24:24 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
02:26:35 <jreicher> What's the current implementation of delimited continuations in Haskell? Is it CC-delcont?
02:28:24 <jreicher> I thought there were ghc primops for them now...
02:28:48 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 256 seconds)
02:30:20 × tabemann quits (~tabemann@172-13-49-137.lightspeed.milwwi.sbcglobal.net) (Remote host closed the connection)
02:30:54 tabemann joins (~travisb@172-13-49-137.lightspeed.milwwi.sbcglobal.net)
02:31:17 <geekosaur> there are, but they have some limitations (for example, they have to be used in IO)
02:32:32 <jreicher> Do you know what happens if there's a different prompt between a control and its matching prompt? I imagine that "foreign" prompt is captured, but I wouldn't mind finding an explicit discussion of that case.
02:32:53 <jreicher> (I should rewatch Alex King's talk, probably)
02:32:56 <jreicher> Alexis
02:33:25 <Leary> Of course, it's captured.
02:33:48 <monochrom> Captured in the middle. The control searches for the matching prompt, captures everything between now and that.
02:34:36 <EvanR> jreicher, a function is not always implemented as a set in math
02:35:13 <Leary> jreicher: You might be interested in my (as yet unpublished) https://github.com/LSLeary/native-cont library; it provides a safe non-IO interface to the primops.
02:35:14 <jreicher> monochrom: yeah, that's what I expected. Can't shake the feeling it deserves explicit discussion, but maybe not.
02:35:41 Googulator92 joins (~Googulato@2a01-036d-0106-0180-8127-ba79-55a7-6f29.pool6.digikabel.hu)
02:35:42 <EvanR> e.g. it could be implemented as a relation plus the functional condition, where relations are primitive
02:35:43 × Googulator53 quits (~Googulato@2a01-036d-0106-0180-8127-ba79-55a7-6f29.pool6.digikabel.hu) (Quit: Client closed)
02:35:45 <jreicher> Leary: yes, thank you.
02:35:58 <EvanR> it could even be abstractified using category theory
02:36:21 <jreicher> EvanR: true, but I think even for relations I've seen more set-theoretic presentations than not.
02:36:31 <EvanR> which gives haskell room to call functions functions
02:36:35 <monochrom> Oh, type theory says functions are primitive. :)
02:37:27 <jreicher> I'm tempted to say that's because the type theory doesn't need to know the details... ;)
02:37:42 <EvanR> the structural set theory with sets elements and relations gets closer to type theory by emphasizing the domain and codomain of functions (relations) as the important part
02:37:56 <EvanR> instead of the implementation
02:38:58 <EvanR> even in "normal math" you really rarely care about what a function "really is"
02:39:49 <EvanR> even in normal programming, you rarely care about what an array "really is", hence the big O 1 array myth
02:40:10 <monochrom> Hell, s/array/hash table/g
02:40:25 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
02:40:29 monochrom is looking at Python and Perl.
02:41:38 <EvanR> so perl and PHP were justified in calling their hashtable "array" xD
02:42:31 <geekosaur> perl didn't call it array, @x is not %x
02:42:42 <geekosaur> they called it list
02:43:32 humasect joins (~humasect@dyn-192-249-132-90.nexicom.net)
02:44:09 <EvanR> oh list is a hashtable?
02:44:20 <EvanR> even better
02:44:31 <monochrom> What have I done?! >:)
02:45:02 <geekosaur> you're still stuck somewhere insane
02:45:13 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 256 seconds)
02:45:15 <geekosaur> there are three types: scalar, list, hash
02:46:11 <geekosaur> you would not normally use a hash as a list unless it's sparse
02:47:00 <jreicher> I thought the original sin belonged to awk?
02:47:07 <geekosaur> yes
02:47:19 <jreicher> Personally I'm a fan of that bad boy.
02:47:37 <geekosaur> awk doesn't have arrays/lists, so you use its "associative arrays" as if they were
02:47:39 <monochrom> No no no, the original sin belonged to BASIC and Lisp. Yes I'm putting them on the same line.
02:48:03 <monochrom> Lisp: Every name has two independent bindings: value and function.
02:48:16 <monochrom> BASIC: Every name has two independent bindings: number and string.
02:48:17 <jreicher> That's Lisp-2. Lisp-1 is not like that
02:48:50 <monochrom> Criminals.
02:49:14 <EvanR> every [capitalized] name has two independent bindings, type and constructor
02:49:32 <geekosaur> module name/qualifier
02:49:33 <EvanR> shoot
02:49:46 <EvanR> up to three
02:50:11 <jreicher> The thing that really broke my brain when I looked at Lisp (after doing functional) is that there isn't an implicit eval of an expression in head possition.
02:50:14 <geekosaur> and patsyns
02:50:18 <jreicher> Took me ages to unlearn that expectation
02:50:21 <geekosaur> typeclasses
02:56:56 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
03:01:25 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 240 seconds)
03:02:09 × Sidney quits (~Sidney@2600:4040:2678:9600:b1c4:ced3:242d:1252) (Quit: Client closed)
03:02:30 <EvanR> also haskell has "infinite sets" (types with infinite inhabitants) so that's not a deal breaker
03:02:47 <jreicher> Are they only denumerable?
03:03:12 <EvanR> depends on your metatheory?
03:04:18 <EvanR> if you tried to form a list of all Sequence of Bool, you'd fail to list them all
03:05:08 <EvanR> diagonalization could be used to construct a missed sequence
03:05:32 <EvanR> I meant Stream of Bool
03:05:37 × Googulator92 quits (~Googulato@2a01-036d-0106-0180-8127-ba79-55a7-6f29.pool6.digikabel.hu) (Quit: Client closed)
03:05:42 Googulator68 joins (~Googulato@2a01-036d-0106-0180-8127-ba79-55a7-6f29.pool6.digikabel.hu)
03:06:19 <jreicher> That's why I was asking about what haskell is representing with these "infinite sets".
03:06:48 <EvanR> I saw a constructive notion of "uncountable" floating around called "sequence avoiding" set, maybe could be repurposed for types
03:07:41 <jreicher> It can be countable but still not recursive. That's the really surprising case IMO.
03:08:04 <EvanR> for all streams of A, say xs, there exists an x such that for all i, x "does not equal" xs !! i
03:08:30 Square2 joins (~Square4@user/square)
03:09:55 <EvanR> then A is sequence avoiding
03:10:28 bggd joins (~bgg@2a01:e0a:819:1510:c077:be4f:997f:e54a)
03:11:51 × Square3 quits (~Square@user/square) (Ping timeout: 256 seconds)
03:13:10 <EvanR> A = Stream Bool would satisfy this using diagonalization to prove the existence part, if you could somehow get the "does not equal" to make sense
03:31:25 × td_ quits (~td@i5387093B.versanet.de) (Ping timeout: 250 seconds)
03:33:12 td_ joins (~td@i53870938.versanet.de)
03:36:08 qqe joins (~qqq@185.54.21.203)
03:40:43 Googulator96 joins (~Googulato@2a01-036d-0106-0180-8127-ba79-55a7-6f29.pool6.digikabel.hu)
03:40:44 × Googulator68 quits (~Googulato@2a01-036d-0106-0180-8127-ba79-55a7-6f29.pool6.digikabel.hu) (Quit: Client closed)
03:45:38 × bionade24 quits (~quassel@server2.oscloud.info) (Quit: Apocalypse Incoming!)
03:45:49 bionade24 joins (~quassel@server2.oscloud.info)
03:46:23 deptype joins (~deptype@2406:b400:3a:73c2:87a5:b5f2:d68c:7c8)
03:54:50 bitdex joins (~bitdex@gateway/tor-sasl/bitdex)
03:54:56 × peterbecich quits (~Thunderbi@172.222.148.214) (Ping timeout: 256 seconds)
03:56:44 × sp1ff quits (~user@2601:1c2:4c00:6820::8bad) (Read error: Connection reset by peer)
04:00:36 × trickard quits (~trickard@cpe-62-98-47-163.wireline.com.au) (Read error: Connection reset by peer)
04:00:49 trickard_ joins (~trickard@cpe-62-98-47-163.wireline.com.au)
04:05:42 × haltingsolver quits (~cmo@2604:3d09:207f:8000::d1dc) (Ping timeout: 256 seconds)
04:14:25 × machinedgod quits (~machinedg@d75-159-126-101.abhsia.telus.net) (Ping timeout: 240 seconds)
04:14:27 sm parts (znc@plaintextaccounting/sm) ()
04:17:23 × trickard_ quits (~trickard@cpe-62-98-47-163.wireline.com.au) (Read error: Connection reset by peer)
04:17:36 trickard_ joins (~trickard@cpe-62-98-47-163.wireline.com.au)
04:25:33 polykernel_ joins (~polykerne@user/polykernel)
04:25:47 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
04:27:34 × polykernel quits (~polykerne@user/polykernel) (Ping timeout: 246 seconds)
04:27:35 polykernel_ is now known as polykernel
04:30:37 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 256 seconds)
04:32:21 <Square2> I'm going to give a talk at my company about Haskell to inspire some people to learn it, cause we'll be needing it for a DSL library. How would you pitch Haskell to middle age people that might not be you most curious programmers?
04:32:48 <Square2> be your*
04:33:21 <mange> What DSL library are you using that needs Haskell, if you're not already using Haskell?
04:34:22 <jreicher> Square2: what language(s) do they already know?
04:34:26 <Square2> It's a DSL written in Haskell. It's not in production yet.
04:34:34 <Square2> jreicher, java
04:34:46 <jreicher> "Impossible to have a null pointer exception"
04:35:00 <Square2> That's a good one!
04:35:20 <jreicher> This I would not repeat, but it's how I think about this stuff...
04:36:02 <jreicher> What garbage collection did for memory management, pure functional languages do for every aspect of data structure management. So the entire class of reference-management mistakes get eliminated. Null references is the most common of those.
04:37:20 spew joins (~spew@user/spew)
04:38:45 <jreicher> The type system SHOULD be a selling point for Haskell too, but I'm not sure it is.
04:39:03 × spew quits (~spew@user/spew) (Client Quit)
04:39:19 <Square2> Personally I feel learning Haskell was a milestone of my work life. Wo exaggerating. It made me better creating programs I wanted and also gave me a better sense of what is possible (and what's not) when it comes to modeling.
04:39:47 <Square2> But I guess that's a bit vague.
04:40:26 <jreicher> Does your audience care about being better at creating programs? (I know that's a cynical question.)
04:41:13 <geekosaur> "writing code with fewer bugs"
04:42:00 <Square2> It's not your worst devs, but some are definitely more interested in the daily coffee break than learning new things.
04:42:04 <jreicher> Not all programmers do, unfortunately. And even worse, not all jobs require it.
04:42:38 <Square2> geekosaur, good point. Sleep better. I actually already had that in my list.
04:42:56 <Square2> ...or less stress, imho.
04:43:24 <geekosaur> more time writing code, less time debugging
04:43:39 <geekosaur> (doesn't work if they can push debugging off onto the junior in the group…)
04:46:49 <jreicher> Square2: if you can find a way to describe the composability of Haskell then they might see how much more reuse you can get out of existing code. That appeals to lazy (in a good way) programmers.
04:48:08 geekosaur suddenly wonders f we could adopt or mangle lwall's triptych
04:52:13 × trickard_ quits (~trickard@cpe-62-98-47-163.wireline.com.au) (Read error: Connection reset by peer)
04:52:26 trickard_ joins (~trickard@cpe-62-98-47-163.wireline.com.au)
04:53:25 × deptype quits (~deptype@2406:b400:3a:73c2:87a5:b5f2:d68c:7c8) (Ping timeout: 240 seconds)
04:58:43 <Square2> jreicher, Great point. I semi had that in my list.
04:58:59 <Square2> thank you all for your input appreciated
04:59:58 deptype joins (~deptype@2406:b400:3a:73c2:5ccb:d911:3632:6880)
05:00:32 <Leary> Square2: See what you can steal from the OG: John Hughes's "Why Functional Programming Matters"
05:02:35 <Square2> Leary, this https://www.youtube.com/watch?v=FGQAP0GxlW8 ?
05:03:23 × jreicher quits (~user@user/jreicher) (Read error: Connection reset by peer)
05:04:22 jreicher joins (~user@user/jreicher)
05:05:01 <Leary> There's an old paper, and various versions of the talk. If you're going to watch one of the talks, best to pick the most recent you can find.
05:14:42 × Nachtgespenst quits (~user@user/siracusa) (Quit: Bye!)
05:15:41 Googulator63 joins (~Googulato@2a01-036d-0106-0180-8127-ba79-55a7-6f29.pool6.digikabel.hu)
05:15:45 × Googulator96 quits (~Googulato@2a01-036d-0106-0180-8127-ba79-55a7-6f29.pool6.digikabel.hu) (Quit: Client closed)
05:20:03 sp1ff joins (~user@2601:1c2:4c00:6820::8bad)
05:20:37 × Googulator63 quits (~Googulato@2a01-036d-0106-0180-8127-ba79-55a7-6f29.pool6.digikabel.hu) (Quit: Client closed)
05:20:53 Googulator63 joins (~Googulato@2a01-036d-0106-0180-8127-ba79-55a7-6f29.pool6.digikabel.hu)
05:22:37 <fgarcia> pitching haskell? :O one that could be nice is supporting both prefix and infix notation
05:22:58 <fgarcia> pattern matching is amazing as well
05:28:30 trickard_ is now known as trickard
05:30:27 <jreicher> Java is getting pattern matching. :)
05:32:42 × ec quits (~ec@gateway/tor-sasl/ec) (Remote host closed the connection)
05:32:42 × chexum_ quits (~quassel@gateway/tor-sasl/chexum) (Remote host closed the connection)
05:32:55 chexum joins (~quassel@gateway/tor-sasl/chexum)
05:33:04 ec joins (~ec@gateway/tor-sasl/ec)
05:35:38 × Googulator63 quits (~Googulato@2a01-036d-0106-0180-8127-ba79-55a7-6f29.pool6.digikabel.hu) (Quit: Client closed)
05:35:39 Googulator34 joins (~Googulato@2a01-036d-0106-0180-8127-ba79-55a7-6f29.pool6.digikabel.hu)
05:40:27 × mange quits (~mange@user/mange) (Remote host closed the connection)
05:42:31 <EvanR> I know, tell them how you can define arbitrary brand new operators
05:42:38 <EvanR> everybody loves that
05:48:36 <Square2> Everyone's nostalgic from learning C++? =D
05:50:12 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
05:50:20 <jreicher> I miss having a compiler I can crash
05:52:30 × jmcantrell quits (~weechat@user/jmcantrell) (Ping timeout: 256 seconds)
05:54:55 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 240 seconds)
05:56:14 × trickard quits (~trickard@cpe-62-98-47-163.wireline.com.au) (Read error: Connection reset by peer)
05:56:28 trickard_ joins (~trickard@cpe-62-98-47-163.wireline.com.au)
05:57:42 × chexum quits (~quassel@gateway/tor-sasl/chexum) (Remote host closed the connection)
05:57:50 chexum joins (~quassel@gateway/tor-sasl/chexum)
05:57:54 × Googulator34 quits (~Googulato@2a01-036d-0106-0180-8127-ba79-55a7-6f29.pool6.digikabel.hu) (Quit: Client closed)
05:58:12 Googulator34 joins (~Googulato@2a01-036d-0106-0180-8127-ba79-55a7-6f29.pool6.digikabel.hu)
06:00:16 × synchromesh quits (~john@2406:5a00:2412:2c00:ed84:4ebe:de81:99a2) (Read error: Connection reset by peer)
06:01:30 synchromesh joins (~john@2406:5a00:2412:2c00:ed84:4ebe:de81:99a2)
06:20:40 × Googulator34 quits (~Googulato@2a01-036d-0106-0180-8127-ba79-55a7-6f29.pool6.digikabel.hu) (Quit: Client closed)
06:20:43 Googulator33 joins (~Googulato@2a01-036d-0106-0180-8127-ba79-55a7-6f29.pool6.digikabel.hu)
06:22:01 × chexum quits (~quassel@gateway/tor-sasl/chexum) (Remote host closed the connection)
06:22:10 chexum joins (~quassel@gateway/tor-sasl/chexum)
06:22:58 sm joins (znc@plaintextaccounting/sm)
06:28:06 × jreicher quits (~user@user/jreicher) (Quit: Beer)
06:29:28 × humasect quits (~humasect@dyn-192-249-132-90.nexicom.net) (Quit: Leaving...)
06:30:00 takuan joins (~takuan@d8D86B9E9.access.telenet.be)
06:50:10 sord937 joins (~sord937@gateway/tor-sasl/sord937)
06:52:03 × sord937 quits (~sord937@gateway/tor-sasl/sord937) (Remote host closed the connection)
06:52:21 sord937 joins (~sord937@gateway/tor-sasl/sord937)
06:52:46 jreicher joins (~user@user/jreicher)
06:53:01 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
06:53:25 CiaoSen joins (~Jura@2a02:8071:64e1:da0:5a47:caff:fe78:33db)
06:56:37 × gmg quits (~user@user/gehmehgeh) (Remote host closed the connection)
06:57:17 gmg joins (~user@user/gehmehgeh)
06:57:55 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 240 seconds)
07:07:50 <dibblego> data X f a b = X (a, f b) -- what is X?
07:08:17 × trickard_ quits (~trickard@cpe-62-98-47-163.wireline.com.au) (Read error: Connection reset by peer)
07:08:31 trickard_ joins (~trickard@cpe-62-98-47-163.wireline.com.au)
07:09:46 × Lord_of_Life quits (~Lord@user/lord-of-life/x-2819915) (Quit: Laa shay'a waqi'un moutlaq bale kouloun moumkine)
07:11:10 Lord_of_Life joins (~Lord@user/lord-of-life/x-2819915)
07:20:23 xff0x_ joins (~xff0x@fsb6a9491c.tkyc517.ap.nuro.jp)
07:21:46 × xff0x quits (~xff0x@fsb6a9491c.tkyc517.ap.nuro.jp) (Ping timeout: 256 seconds)
07:27:59 × divlamir quits (~divlamir@user/divlamir) (Ping timeout: 256 seconds)
07:29:59 divlamir joins (~divlamir@user/divlamir)
07:32:36 × Sgeo quits (~Sgeo@user/sgeo) (Read error: Connection reset by peer)
07:34:25 <jreicher> I think this is what I was after earlier https://hackage.haskell.org/package/ghc-prim-0.13.0/docs/GHC-Prim.html#g:24
07:34:35 <jreicher> dibblego: what's the context for your question? Where did that snippet come from?
07:34:57 <dibblego> I made it up, I want the data type X from a library
07:38:11 × divlamir quits (~divlamir@user/divlamir) (Ping timeout: 256 seconds)
07:39:22 <jreicher> I think the answer might be X can be anything then? I'm not sure I understand the question...
07:42:18 divlamir joins (~divlamir@user/divlamir)
07:43:11 <dibblego> found it, https://hackage.haskell.org/package/comonad-5.0.9/docs/Control-Comonad-Trans-Env.html#t:EnvT
07:51:16 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
07:56:20 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 256 seconds)
07:56:45 peterbecich joins (~Thunderbi@172.222.148.214)
07:56:54 lucabtz joins (~lucabtz@user/lucabtz)
07:57:50 × jreicher quits (~user@user/jreicher) (Read error: Connection reset by peer)
08:00:20 jreicher joins (~user@user/jreicher)
08:02:22 tromp joins (~textual@2001:1c00:3487:1b00:bd50:5f58:be67:a48d)
08:02:35 × jreicher quits (~user@user/jreicher) (Read error: Connection reset by peer)
08:03:24 jreicher joins (~user@user/jreicher)
08:07:55 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
08:08:14 × peterbecich quits (~Thunderbi@172.222.148.214) (Ping timeout: 256 seconds)
08:12:25 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 240 seconds)
08:20:54 × trickard_ quits (~trickard@cpe-62-98-47-163.wireline.com.au) (Read error: Connection reset by peer)
08:26:31 × jreicher quits (~user@user/jreicher) (Read error: Connection reset by peer)
08:28:06 × qqe quits (~qqq@185.54.21.203) (Quit: Lost terminal)
08:30:59 jreicher joins (~user@user/jreicher)
08:32:36 × jreicher quits (~user@user/jreicher) (Read error: Connection reset by peer)
08:33:59 × haetsal quits (~quassel@221.138.168.192) (Remote host closed the connection)
08:36:42 jreicher joins (~user@user/jreicher)
08:39:31 haetsal joins (~quassel@221.138.168.192)
08:40:47 trickard_ joins (~trickard@cpe-62-98-47-163.wireline.com.au)
08:47:45 × ft quits (~ft@p4fc2aaeb.dip0.t-ipconnect.de) (Quit: leaving)
08:49:24 × olivial quits (~benjaminl@user/benjaminl) (Ping timeout: 260 seconds)
08:49:42 olivial joins (~benjaminl@user/benjaminl)
08:55:29 trickard_ is now known as trickard
09:00:45 merijn joins (~merijn@77.242.116.146)
09:05:28 × tessier quits (~tessier@ec2-184-72-149-67.compute-1.amazonaws.com) (Ping timeout: 246 seconds)
09:07:00 peterbecich joins (~Thunderbi@172.222.148.214)
09:11:42 × polykernel quits (~polykerne@user/polykernel) (Ping timeout: 256 seconds)
09:11:55 polykernel joins (~polykerne@user/polykernel)
09:12:23 × kmein quits (~weechat@user/kmein) (Quit: ciao kakao)
09:13:06 travisb_ joins (~travisb@172-13-49-137.lightspeed.milwwi.sbcglobal.net)
09:14:40 × gorignak quits (~gorignak@user/gorignak) (Remote host closed the connection)
09:14:40 × hiredman quits (~hiredman@frontier1.downey.family) (Ping timeout: 256 seconds)
09:14:40 × bcksl quits (~bcksl@user/bcksl) (Ping timeout: 256 seconds)
09:14:40 × haetsal quits (~quassel@221.138.168.192) (Ping timeout: 256 seconds)
09:14:40 × tabemann quits (~travisb@172-13-49-137.lightspeed.milwwi.sbcglobal.net) (Ping timeout: 256 seconds)
09:14:42 kmein joins (~weechat@user/kmein)
09:14:58 hiredman joins (~hiredman@frontier1.downey.family)
09:15:32 gorignak joins (~gorignak@user/gorignak)
09:15:40 kuribas joins (~user@2a02-1810-2825-6000-c59e-d8f1-aea0-564e.ip6.access.telenet.be)
09:16:11 haetsal joins (~quassel@221.138.168.192)
09:16:13 × jreicher quits (~user@user/jreicher) (Ping timeout: 256 seconds)
09:16:13 × takuan quits (~takuan@d8D86B9E9.access.telenet.be) (Ping timeout: 256 seconds)
09:16:26 takuan joins (~takuan@d8d86b9e9.access.telenet.be)
09:16:47 × sprout quits (~sprout@84-80-106-227.fixed.kpn.net) (Ping timeout: 256 seconds)
09:17:01 bcksl joins (~bcksl@user/bcksl)
09:17:13 jreicher joins (~user@user/jreicher)
09:17:17 sprout joins (~sprout@84-80-106-227.fixed.kpn.net)
09:20:17 × deptype quits (~deptype@2406:b400:3a:73c2:5ccb:d911:3632:6880) (Remote host closed the connection)
09:20:37 deptype joins (~deptype@2406:b400:3a:73c2:20ec:9ba6:a31e:71d2)
09:20:44 Square3 joins (~Square@user/square)
09:21:21 × trickard quits (~trickard@cpe-62-98-47-163.wireline.com.au) (Read error: Connection reset by peer)
09:21:34 trickard_ joins (~trickard@cpe-62-98-47-163.wireline.com.au)
09:23:56 trickard_ is now known as trickard
09:25:50 × tzh quits (~tzh@c-76-115-131-146.hsd1.or.comcast.net) (Quit: zzz)
09:28:25 × trickard quits (~trickard@cpe-62-98-47-163.wireline.com.au) (Ping timeout: 240 seconds)
09:32:12 tessier joins (~tessier@ec2-184-72-149-67.compute-1.amazonaws.com)
09:32:18 trickard_ joins (~trickard@cpe-62-98-47-163.wireline.com.au)
09:32:55 × merijn quits (~merijn@77.242.116.146) (Ping timeout: 240 seconds)
09:35:30 × Square3 quits (~Square@user/square) (Ping timeout: 256 seconds)
09:41:55 mreh joins (~matthew@host86-146-25-125.range86-146.btcentralplus.com)
09:43:19 × trickard_ quits (~trickard@cpe-62-98-47-163.wireline.com.au) (Read error: Connection reset by peer)
09:43:33 trickard_ joins (~trickard@cpe-62-98-47-163.wireline.com.au)
09:44:31 merijn joins (~merijn@77.242.116.146)
09:50:14 × merijn quits (~merijn@77.242.116.146) (Ping timeout: 256 seconds)
09:51:15 merijn joins (~merijn@77.242.116.146)
09:54:21 artix_live_1 joins (~loouom@109.166.130.42)
09:57:06 × jreicher quits (~user@user/jreicher) (Read error: Connection reset by peer)
10:01:00 × emmanuelux quits (~emmanuelu@user/emmanuelux) (Ping timeout: 256 seconds)
10:01:18 jreicher joins (~user@user/jreicher)
10:02:55 × merijn quits (~merijn@77.242.116.146) (Ping timeout: 240 seconds)
10:03:04 × jreicher quits (~user@user/jreicher) (Read error: Connection reset by peer)
10:04:23 × peterbecich quits (~Thunderbi@172.222.148.214) (Ping timeout: 256 seconds)
10:04:33 trickard_ is now known as trickard
10:05:22 jreicher joins (~user@user/jreicher)
10:09:35 × tromp quits (~textual@2001:1c00:3487:1b00:bd50:5f58:be67:a48d) (Quit: My iMac has gone to sleep. ZZZzzz…)
10:15:50 merijn joins (~merijn@77.242.116.146)
10:17:44 × kuribas quits (~user@2a02-1810-2825-6000-c59e-d8f1-aea0-564e.ip6.access.telenet.be) (Quit: ERC 5.5.0.29.1 (IRC client for GNU Emacs 29.3))
10:17:59 kuribas joins (~user@2a02-1810-2825-6000-c59e-d8f1-aea0-564e.ip6.access.telenet.be)
10:18:26 tromp joins (~textual@2001:1c00:3487:1b00:bd50:5f58:be67:a48d)
10:18:34 × xff0x_ quits (~xff0x@fsb6a9491c.tkyc517.ap.nuro.jp) (Ping timeout: 256 seconds)
10:19:54 × trickard quits (~trickard@cpe-62-98-47-163.wireline.com.au) (Read error: Connection reset by peer)
10:20:07 trickard_ joins (~trickard@cpe-62-98-47-163.wireline.com.au)
10:25:10 starving_drummer joins (~berke@user/Starving-Drummer:76786)
10:28:49 Jackneill joins (~Jackneill@188-143-82-32.pool.digikabel.hu)
10:32:10 × merijn quits (~merijn@77.242.116.146) (Ping timeout: 256 seconds)
10:33:48 × jreicher quits (~user@user/jreicher) (Quit: In transit)
10:34:00 merijn joins (~merijn@77.242.116.146)
10:46:44 <kuribas> Haskell typelevel is this weird combination of untyped prolog, intricacies of type classes, and ad hoc extensions (generics, TH).
10:47:14 <merijn> kuribas: I don't think TH really counts as type level?
10:48:27 <kuribas> merijn: generating types, freemonads, lenses.
10:49:00 <kuribas> Not necessarily type level, but usually there to avoid the boilerplate that comes with haskell type level stuff.
10:49:23 <kuribas> I usually go with generics, but they have a big compile time cost.
10:49:32 <kuribas> And possibly runtime as well.
10:51:43 <kuribas> Then again, type level programming in other languages is strictly worse.
10:51:44 deptype_ joins (~deptype@2406:b400:3a:73c2:96bb:43ff:fecb:477b)
10:51:50 <kuribas> Python, Typescript.
10:52:31 Nachtgespenst joins (~user@user/siracusa)
10:53:25 × deptype quits (~deptype@2406:b400:3a:73c2:20ec:9ba6:a31e:71d2) (Ping timeout: 240 seconds)
10:53:39 <kuribas> I just feel dependent types are the logical conclusion of any advanced type system.
11:00:37 jreicher joins (~user@user/jreicher)
11:03:17 <merijn> Those bring a lot of disadvantages too
11:03:25 <merijn> So I'm not yet convinced that's what I want
11:03:34 <merijn> You know what I do want?
11:03:52 <merijn> I want my damn rowtype polymorhpism in a production language! >.<
11:04:04 <merijn> Ideally one not as niche and obscure as Ur/Web
11:04:35 × trickard_ quits (~trickard@cpe-62-98-47-163.wireline.com.au) (Read error: Connection reset by peer)
11:04:49 trickard_ joins (~trickard@cpe-62-98-47-163.wireline.com.au)
11:05:42 <kuribas> merijn: typescript?
11:06:34 <merijn> typescript doesn't have row type polymorphism
11:06:56 <merijn> typescript just does structural subtyping
11:07:03 <merijn> Which is, like, the opposite of what I want
11:07:20 <merijn> The entire point of rowtype polymorphism is to have structural subtyping that doesn't suck
11:07:40 <merijn> So I don't have to think about covariance/contravariance
11:08:37 <kuribas> purescript then?
11:08:37 <merijn> Especially since subtyping ruins all good things
11:09:02 <arahael> I'd just be happy having sum types.
11:09:19 × poscat quits (~poscat@user/poscat) (Remote host closed the connection)
11:09:20 <arahael> Still annoyed I can't tell C# that the enums I have should only be defined for the values they're specified for.
11:09:34 <merijn> Purescript does have rowtype polymorphism, but compiling to JS means I can't practically use it
11:10:51 <jreicher> kuribas: I don't think there's any "logical conclusion" to a type system. A type system is whatever assertions you want the compiler to check for you, in which case you need to be able to express the assertions, and you need the system to be able to check them.
11:11:14 <jreicher> I think that will always be a moving target.
11:11:39 <kuribas> jreicher: yes, but they always explode in complexity.
11:11:49 <kuribas> Lookup at python types. And you don't even have hkts.
11:12:11 <kuribas> Which is somewhat mitigated with subtypes.
11:12:16 poscat joins (~poscat@user/poscat)
11:12:47 <mreh> Do associated types in a Constraint also imply their typeclass? I guess they would have to.
11:13:43 <mreh> e.g. `Enum (AssociatedType t) => ...`
11:14:04 <kuribas> mreh: yes
11:14:30 <kuribas> mreh: constraints, are only checked after resolving the instances.
11:15:15 <kuribas> in a class or instance definition I mean.
11:16:29 <kuribas> mreh: so "class Eq a => Ord a", means everytime you use "Ord a", it implies "Eq a".
11:16:55 × Ranhir quits (~Ranhir@157.97.53.139) (Ping timeout: 240 seconds)
11:17:36 <kuribas> mreh: "Eq a" isn't even checked when resolving the instance, if it resolves to "Ord a", then "Eq a" must be met, or it is a type error.
11:21:33 <mreh> I think you misunderstand.
11:22:19 × Googulator33 quits (~Googulato@2a01-036d-0106-0180-8127-ba79-55a7-6f29.pool6.digikabel.hu) (Quit: Client closed)
11:22:20 <kuribas> What do you mean then?
11:22:29 <mreh> I haven't told GHC to look for the typeclass that AssociatedType is from.
11:22:35 xff0x joins (~xff0x@2405:6580:b080:900:e7c9:4386:1015:3b04)
11:22:36 Googulator33 joins (~Googulato@2a01-036d-0106-0180-8127-ba79-55a7-6f29.pool6.digikabel.hu)
11:22:40 <mreh> But I guess it works it out.
11:22:53 <kuribas> mreh: You mean it's a type family inside a typeclass?
11:22:53 <mreh> Is that what you thought I meant?
11:23:06 <mreh> kuribas: yeah, isn't that called an "associated type"?
11:23:43 × merijn quits (~merijn@77.242.116.146) (Ping timeout: 256 seconds)
11:24:01 <kuribas> idk
11:24:31 <mreh> it was just a little unexpected,
11:24:36 <mreh> to see GHC do that
11:25:08 <kuribas> Well, if the type family is inside the class definition, the GHC will know it must be an instance.
11:25:53 <mreh> yup
11:26:20 <kuribas> Why would that be surprising?
11:26:33 Square3 joins (~Square@user/square)
11:26:37 <kuribas> Everything inside the class definition implies the class constraints.
11:26:46 × xff0x quits (~xff0x@2405:6580:b080:900:e7c9:4386:1015:3b04) (Client Quit)
11:27:07 <mreh> I guess because I'm used to supplying contraints when using type class methods
11:27:15 <mreh> but that's only when you have an exmplicit type signature
11:28:11 <mreh> the associated type is in the type signature already
11:28:25 <haskellbridge> <loonycyborg> Row polymorphism sounds like really unsafe idea. Because you can't be really sure that doing something on a subset of rows of ANY record just because they have particular types will do anything useful.
11:29:27 Ranhir joins (~Ranhir@157.97.53.139)
11:31:40 × Square3 quits (~Square@user/square) (Ping timeout: 256 seconds)
11:33:03 qqe joins (~qqq@185.54.21.203)
11:36:35 merijn joins (~merijn@77.242.116.146)
11:41:17 × merijn quits (~merijn@77.242.116.146) (Ping timeout: 256 seconds)
11:42:15 dlock23 joins (~dlock@user/dlock23)
11:43:50 <kuribas> loonycyborg: It's the same with putting type classes on every possible type.
11:44:06 <kuribas> It's easy to get wrong behaviour, since it picks the wrong instance.
11:44:14 <kuribas> For example Monad and Applicative on (->)
11:44:47 <kuribas> It should not exist, because the few times you need it, you can just wrap ReaderT, and it will be also easier to understand the code.
11:45:37 merijn joins (~merijn@77.242.116.146)
11:47:28 × kuribas quits (~user@2a02-1810-2825-6000-c59e-d8f1-aea0-564e.ip6.access.telenet.be) (Remote host closed the connection)
11:48:14 × trickard_ quits (~trickard@cpe-62-98-47-163.wireline.com.au) (Read error: Connection reset by peer)
11:48:28 trickard_ joins (~trickard@cpe-62-98-47-163.wireline.com.au)
11:49:55 × merijn quits (~merijn@77.242.116.146) (Ping timeout: 240 seconds)
11:50:32 × chiselfuse quits (~chiselfus@user/chiselfuse) (Remote host closed the connection)
11:51:07 chiselfuse joins (~chiselfus@user/chiselfuse)
11:52:25 __monty__ joins (~toonn@user/toonn)
11:58:40 × artix_live_1 quits (~loouom@109.166.130.42) (Remote host closed the connection)
12:00:01 merijn joins (~merijn@77.242.116.146)
12:01:33 fp joins (~Thunderbi@2001:708:20:1406::10c5)
12:10:29 xff0x joins (~xff0x@2405:6580:b080:900:d7c7:2664:9910:68b4)
12:11:49 wootehfoot joins (~wootehfoo@user/wootehfoot)
12:12:43 comerijn joins (~merijn@77.242.116.146)
12:15:18 × merijn quits (~merijn@77.242.116.146) (Ping timeout: 256 seconds)
12:15:55 × wootehfoot quits (~wootehfoo@user/wootehfoot) (Ping timeout: 240 seconds)
12:17:24 × DetourNetworkUK quits (DetourNetw@user/DetourNetworkUK) (Read error: Connection reset by peer)
12:18:11 DetourNetworkUK joins (~DetourNet@user/DetourNetworkUK)
12:27:39 fp1 joins (~Thunderbi@2001:708:150:10::7e06)
12:29:28 × fp quits (~Thunderbi@2001:708:20:1406::10c5) (Ping timeout: 256 seconds)
12:29:28 fp1 is now known as fp
12:35:32 × Googulator33 quits (~Googulato@2a01-036d-0106-0180-8127-ba79-55a7-6f29.pool6.digikabel.hu) (Quit: Client closed)
12:35:49 Googulator33 joins (~Googulato@2a01-036d-0106-0180-8127-ba79-55a7-6f29.pool6.digikabel.hu)
12:36:20 fp1 joins (~Thunderbi@2001:708:20:1406::10c5)
12:37:54 × fp quits (~Thunderbi@2001:708:150:10::7e06) (Ping timeout: 244 seconds)
12:37:54 fp1 is now known as fp
12:39:29 × tromp quits (~textual@2001:1c00:3487:1b00:bd50:5f58:be67:a48d) (Quit: My iMac has gone to sleep. ZZZzzz…)
12:42:33 × fp quits (~Thunderbi@2001:708:20:1406::10c5) (Ping timeout: 252 seconds)
12:44:27 fp joins (~Thunderbi@wireless-86-50-140-45.open.aalto.fi)
12:52:16 × Inline quits (~inlinE@2a02:3035:673:88a7:64a3:d94e:b8fb:c889) (Ping timeout: 244 seconds)
12:55:55 × annamalai quits (~annamalai@157.33.216.97) (Ping timeout: 240 seconds)
13:00:25 acarrico joins (~acarrico@pppoe-209-99-223-51.greenmountainaccess.net)
13:01:19 Lycurgus joins (~juan@user/Lycurgus)
13:05:42 × Googulator33 quits (~Googulato@2a01-036d-0106-0180-8127-ba79-55a7-6f29.pool6.digikabel.hu) (Quit: Client closed)
13:05:47 Googulator74 joins (~Googulato@2a01-036d-0106-0180-8127-ba79-55a7-6f29.pool6.digikabel.hu)
13:07:47 Inline joins (~inlinE@2001-4dd3-bded-0-719b-11b7-e341-7e20.ipv6dyn.netcologne.de)
13:09:44 × trickard_ quits (~trickard@cpe-62-98-47-163.wireline.com.au) (Read error: Connection reset by peer)
13:09:57 trickard_ joins (~trickard@cpe-62-98-47-163.wireline.com.au)
13:16:26 × fp quits (~Thunderbi@wireless-86-50-140-45.open.aalto.fi) (Remote host closed the connection)
13:19:07 × qqe quits (~qqq@185.54.21.203) (Quit: Lost terminal)
13:30:39 × Googulator74 quits (~Googulato@2a01-036d-0106-0180-8127-ba79-55a7-6f29.pool6.digikabel.hu) (Quit: Client closed)
13:30:43 Googulator37 joins (~Googulato@2a01-036d-0106-0180-8127-ba79-55a7-6f29.pool6.digikabel.hu)
13:51:14 Googulator70 joins (~Googulato@2a01-036d-0106-0180-8127-ba79-55a7-6f29.pool6.digikabel.hu)
13:51:31 × Googulator37 quits (~Googulato@2a01-036d-0106-0180-8127-ba79-55a7-6f29.pool6.digikabel.hu) (Quit: Client closed)
13:53:51 tromp joins (~textual@2001:1c00:3487:1b00:bd50:5f58:be67:a48d)
13:55:26 YaShhhh joins (~YaShhhh@103.247.7.15)
13:59:50 fp joins (~Thunderbi@130.233.70.206)
14:01:00 × bitdex quits (~bitdex@gateway/tor-sasl/bitdex) (Quit: = "")
14:01:54 ljdarj joins (~Thunderbi@user/ljdarj)
14:02:34 × fp quits (~Thunderbi@130.233.70.206) (Remote host closed the connection)
14:05:10 × weary-traveler quits (~user@user/user363627) (Remote host closed the connection)
14:07:33 annamalai joins (~annamalai@157.33.215.38)
14:09:15 × Lycurgus quits (~juan@user/Lycurgus) (Quit: alsoknownas.renjuan.org ( juan@acm.org ))
14:10:56 × YaShhhh quits (~YaShhhh@103.247.7.15) (Quit: Client closed)
14:13:09 × comerijn quits (~merijn@77.242.116.146) (Ping timeout: 256 seconds)
14:15:29 × Putonlalla quits (~Putonlall@it-cyan.it.jyu.fi) (Ping timeout: 260 seconds)
14:16:34 × acarrico quits (~acarrico@pppoe-209-99-223-51.greenmountainaccess.net) (Ping timeout: 256 seconds)
14:17:53 × synchromesh quits (~john@2406:5a00:2412:2c00:ed84:4ebe:de81:99a2) (Read error: Connection reset by peer)
14:18:32 fp joins (~Thunderbi@2001:708:20:1406::1370)
14:18:35 merijn joins (~merijn@77.242.116.146)
14:19:09 synchromesh joins (~john@2406:5a00:2412:2c00:ed84:4ebe:de81:99a2)
14:30:58 <haskellbridge> <Morj> I'm looking for excercises for learning and mastering haskell. I remembered two and I lost both
14:31:31 <haskellbridge> <sm> exercism is good
14:31:32 × fp quits (~Thunderbi@2001:708:20:1406::1370) (Remote host closed the connection)
14:31:47 Sidney joins (~Sidney@2600:4040:2678:9600:b1c4:ced3:242d:1252)
14:31:57 <haskellbridge> <Morj> There was a popular github repo with several very hard excercises, like «write function that when used with traverse will only go N steps deep into a tree», does anyone remember it?
14:32:32 <haskellbridge> <Morj> There was also a whole book for learning haskell, with similar tasks, but more for beginners, and I also forgot its name, would appreciate the guesses
14:33:11 <haskellbridge> <sm> https://github.com/l-Shane-l/haskell-katas
14:33:31 <haskellbridge> <sm> is another
14:34:48 <haskellbridge> <sm> https://joyful.com/Haskell+map#courses or https://joyful.com/Haskell+map#books might jog the memory
14:36:40 × orizuru quits (~orizuru@user/orizuru) (Ping timeout: 256 seconds)
14:37:05 fp joins (~Thunderbi@wireless-86-50-140-45.open.aalto.fi)
14:37:28 <Leary> Morj: Perhaps https://github.com/effectfully-ou/haskell-challenges
14:37:42 Putonlalla joins (~Putonlall@it-cyan.it.jyu.fi)
14:38:08 <haskellbridge> <Morj> Leary: Thanks, this is the challenges I was thinking about
14:39:16 <merijn> @where exercises
14:39:16 <lambdabot> http://www.haskell.org/haskellwiki/H-99:_Ninety-Nine_Haskell_Problems https://github.com/bitemyapp/learnhaskell http://www.reddit.com/r/dailyprogrammer/ http://www.reddit.com/r/programmingchallenges/
14:40:08 <haskellbridge> <Morj> sm: Those are the style I'm looking for, but the quality is not great
14:41:06 Zemyla joins (~Zemyla@72.178.108.235)
14:41:43 <Zemyla> So both covariant and contravariant Functors have notions of two different monoids.
14:43:29 <Zemyla> class Times f where { one :: f (); times :: f a -> f b -> f (a, b) }; class Plus f where { zero :: f Void; plus :: f a -> f b -> f (Either a b) }
14:44:20 <haskellbridge> <Morj> merijn: 99 problems are cool, I'll use them too. But they're lacking lazyness and other haskell-specific things
14:45:09 <Zemyla> You'd need a way to witness the isomorphisms ((), a) ~ a ~ (a, ()) and Either Void a ~ a ~ Either a Void, which is difficult to do with both covariant and contravariant functors.
14:46:47 <Zemyla> I don't know if this is useful at all, but I'm thinking class Isofunctor f where { isomap :: AnIso' a b -> f a -> f b; (<$>#) :: Coercible a b -> p a b -> f a -> f b; (<$>#) = isomap coerce }
14:54:04 × Zemy quits (~Zemy@72.178.108.235) (Read error: Connection reset by peer)
14:54:07 Zemy_ joins (~Zemy@72.178.108.235)
14:57:29 × ouilemur quits (~jgmerritt@user/ouilemur) (Quit: WeeChat 4.7.0)
14:57:38 × gorignak quits (~gorignak@user/gorignak) (Quit: quit)
14:57:55 gorignak joins (~gorignak@user/gorignak)
14:58:24 <Sidney> Hi, I asked a few questions here last night but my computer crashed and now I don't have access to the answers I received. They were really high quality, so is there a way I can get access to them? I checked the logs for last night but I did not see any of the conversation. Thanks!
14:59:12 emmanuelux joins (~emmanuelu@user/emmanuelux)
14:59:31 <merijn> Sidney: See the logs in the topic
14:59:52 <merijn> ah, you did >.>
15:00:23 <merijn> Are you sure you checked the right time?
15:00:49 <merijn> Note that the log timestamps are UTC+1, which might differ from wherever you are
15:01:38 <Sidney> Okay I will go back and check. Are you saying everything in the IRC is recorded so it should be there?
15:02:00 <merijn> Everything in this channel is
15:02:13 <merijn> Incidentally, I do see a question from you at 02:42
15:02:19 <merijn> Not sure if that's the one you meant
15:02:39 × gorignak quits (~gorignak@user/gorignak) (Client Quit)
15:02:54 <merijn> And one earlier at 1:00: https://ircbrowse.tomsmeding.com/browse/lchaskell?id=1693741#trid1693741
15:02:56 gorignak joins (~gorignak@user/gorignak)
15:03:39 <Sidney> Just found it! Thank you so much
15:05:25 × fp quits (~Thunderbi@wireless-86-50-140-45.open.aalto.fi) (Ping timeout: 240 seconds)
15:05:50 spew joins (~spew@user/spew)
15:07:25 × Zemyla quits (~Zemyla@72.178.108.235) (Ping timeout: 250 seconds)
15:08:25 × Square2 quits (~Square4@user/square) (Ping timeout: 240 seconds)
15:14:13 j1n37 joins (~j1n37@user/j1n37)
15:14:26 × lucabtz quits (~lucabtz@user/lucabtz) (Remote host closed the connection)
15:15:22 × ljdarj quits (~Thunderbi@user/ljdarj) (Quit: ljdarj)
15:15:38 ljdarj joins (~Thunderbi@user/ljdarj)
15:15:52 lucabtz joins (~lucabtz@user/lucabtz)
15:23:00 × gorignak quits (~gorignak@user/gorignak) (Quit: quit)
15:23:15 gorignak joins (~gorignak@user/gorignak)
15:26:52 ouilemur joins (~jgmerritt@user/ouilemur)
15:34:12 × merijn quits (~merijn@77.242.116.146) (Ping timeout: 256 seconds)
15:35:25 × emmanuelux quits (~emmanuelu@user/emmanuelux) (Ping timeout: 264 seconds)
15:37:50 acarrico joins (~acarrico@pppoe-209-99-223-51.greenmountainaccess.net)
15:40:17 × tromp quits (~textual@2001:1c00:3487:1b00:bd50:5f58:be67:a48d) (Quit: My iMac has gone to sleep. ZZZzzz…)
15:41:23 merijn joins (~merijn@77.242.116.146)
15:42:08 × CiaoSen quits (~Jura@2a02:8071:64e1:da0:5a47:caff:fe78:33db) (Ping timeout: 256 seconds)
15:49:13 karenw joins (~karenw@user/karenw)
15:54:22 <haskellbridge> <Morj> Thanks to links shared above and some googling, I found some really good exercises, but not really any that utilize lazyness meaningfully. Does anyone have tasks specifically for implementing algorithms using lazy evaluation?
15:56:44 × Googulator70 quits (~Googulato@2a01-036d-0106-0180-8127-ba79-55a7-6f29.pool6.digikabel.hu) (Quit: Client closed)
15:57:04 Googulator70 joins (~Googulato@80-95-87-101.pool.digikabel.hu)
15:57:37 tromp joins (~textual@2001:1c00:3487:1b00:bd50:5f58:be67:a48d)
16:02:02 <merijn> Morj: I'm not sure if there's any good exercises for that
16:02:03 <lucabtz> what does haskellbridge bridge to?
16:02:11 <merijn> lucabtz: matrix
16:02:13 <haskellbridge> <Morj> To matrix
16:02:21 <lucabtz> ah i see
16:03:19 <haskellbridge> <Morj> Ok, I guess I'll have to put a mental checknote to start gathering real life problems to create a set of such tasks...
16:03:41 <haskellbridge> <Morj> But I'm pretty sure I've seen a small set of such when I was studying myself. I just lost it now
16:05:37 Googulator joins (~Googulato@2a01-036d-0106-0180-8127-ba79-55a7-6f29.pool6.digikabel.hu)
16:05:37 × Googulator70 quits (~Googulato@80-95-87-101.pool.digikabel.hu) (Quit: Client closed)
16:06:32 Zemyla joins (~Zemyla@72.178.108.235)
16:07:15 <merijn> Morj: You can have a look at the reverse state monad and tardis monads to get your mind broken
16:07:36 jmcantrell joins (~weechat@user/jmcantrell)
16:12:24 Zemyla83 joins (~Zemyla@72.178.108.235)
16:13:57 tzh joins (~tzh@c-76-115-131-146.hsd1.or.comcast.net)
16:15:07 × trickard_ quits (~trickard@cpe-62-98-47-163.wireline.com.au) (Read error: Connection reset by peer)
16:15:20 trickard_ joins (~trickard@cpe-62-98-47-163.wireline.com.au)
16:15:53 × Zemyla quits (~Zemyla@72.178.108.235) (Ping timeout: 250 seconds)
16:22:59 × spew quits (~spew@user/spew) (Quit: WeeChat 4.6.3)
16:27:28 Lord_of_Life_ joins (~Lord@user/lord-of-life/x-2819915)
16:28:36 × Lord_of_Life quits (~Lord@user/lord-of-life/x-2819915) (Ping timeout: 256 seconds)
16:29:32 Lord_of_Life_ is now known as Lord_of_Life
16:30:35 comerijn joins (~merijn@77.242.116.146)
16:32:33 × merijn quits (~merijn@77.242.116.146) (Ping timeout: 256 seconds)
16:34:30 × Googulator quits (~Googulato@2a01-036d-0106-0180-8127-ba79-55a7-6f29.pool6.digikabel.hu) (Quit: Client closed)
16:35:06 Googulator joins (~Googulato@2a01-036d-0106-0180-8127-ba79-55a7-6f29.pool6.digikabel.hu)
16:35:19 ljdarj1 joins (~Thunderbi@user/ljdarj)
16:35:23 × comerijn quits (~merijn@77.242.116.146) (Ping timeout: 256 seconds)
16:36:25 × ljdarj quits (~Thunderbi@user/ljdarj) (Ping timeout: 240 seconds)
16:36:25 ljdarj1 is now known as ljdarj
16:43:58 × EvanR quits (~EvanR@user/evanr) (Remote host closed the connection)
16:44:18 EvanR joins (~EvanR@user/evanr)
16:45:45 × haritz quits (~hrtz@user/haritz) (Quit: ZNC 1.8.2+deb3.1+deb12u1 - https://znc.in)
16:47:53 × Sidney quits (~Sidney@2600:4040:2678:9600:b1c4:ced3:242d:1252) (Quit: Client closed)
16:50:53 euphores joins (~SASL_euph@user/euphores)
16:54:29 Zemyla83 is now known as Zemyla
16:55:21 <Zemyla> I've got a matrix.org account, but when I try to join the rooms, I can't find them. How do I join?
16:58:31 Jackneill_ joins (~Jackneill@188-143-82-63.pool.digikabel.hu)
16:59:47 × Googulator quits (~Googulato@2a01-036d-0106-0180-8127-ba79-55a7-6f29.pool6.digikabel.hu) (Quit: Client closed)
17:00:36 Googulator joins (~Googulato@2a01-036d-0106-0180-8127-ba79-55a7-6f29.pool6.digikabel.hu)
17:00:53 Zemyla9 joins (~Zemyla@72.178.108.235)
17:00:54 × jmcantrell quits (~weechat@user/jmcantrell) (Ping timeout: 256 seconds)
17:01:12 × Zemyla quits (~Zemyla@72.178.108.235) (Killed (NickServ (GHOST command used by Zemyla9)))
17:01:15 Zemyla9 is now known as Zemyla
17:01:27 × Jackneill quits (~Jackneill@188-143-82-32.pool.digikabel.hu) (Ping timeout: 256 seconds)
17:05:35 × Googulator quits (~Googulato@2a01-036d-0106-0180-8127-ba79-55a7-6f29.pool6.digikabel.hu) (Quit: Client closed)
17:05:38 <haskellbridge> <sm> Zemyla : all the haskell rooms can be found under https://matrix.to/#/#haskell-space:matrix.org
17:05:49 Googulator joins (~Googulato@2a01-036d-0106-0180-8127-ba79-55a7-6f29.pool6.digikabel.hu)
17:15:36 × Googulator quits (~Googulato@2a01-036d-0106-0180-8127-ba79-55a7-6f29.pool6.digikabel.hu) (Quit: Client closed)
17:15:38 Googulator77 joins (~Googulato@2a01-036d-0106-0180-8127-ba79-55a7-6f29.pool6.digikabel.hu)
17:20:56 Googulator28 joins (~Googulato@2a01-036d-0106-0180-8127-ba79-55a7-6f29.pool6.digikabel.hu)
17:21:26 × ec quits (~ec@gateway/tor-sasl/ec) (Ping timeout: 272 seconds)
17:22:43 × Googulator77 quits (~Googulato@2a01-036d-0106-0180-8127-ba79-55a7-6f29.pool6.digikabel.hu) (Quit: Client closed)
17:24:02 <haskellbridge> <Zemyla> Thanks!
17:25:32 × Googulator28 quits (~Googulato@2a01-036d-0106-0180-8127-ba79-55a7-6f29.pool6.digikabel.hu) (Client Quit)
17:25:39 Googulator28 joins (~Googulato@80-95-87-101.pool.digikabel.hu)
17:27:41 Googulator28 is now known as Googulator
17:30:05 <geekosaur> search is disabled on matrix.org still
17:30:49 <haskellbridge> <sm> the matrix.org room directory is still locked to a small subset of rooms, to be precise
17:30:51 × Googulator quits (~Googulato@80-95-87-101.pool.digikabel.hu) (Quit: Client closed)
17:30:52 Googulator39 joins (~Googulato@2a01-036d-0106-0180-8127-ba79-55a7-6f29.pool6.digikabel.hu)
17:39:43 × sord937 quits (~sord937@gateway/tor-sasl/sord937) (Quit: sord937)
17:40:13 fp joins (~Thunderbi@89-27-10-140.bb.dnainternet.fi)
17:40:50 Googulator26 joins (~Googulato@80-95-87-101.pool.digikabel.hu)
17:40:54 × Googulator39 quits (~Googulato@2a01-036d-0106-0180-8127-ba79-55a7-6f29.pool6.digikabel.hu) (Quit: Client closed)
17:45:01 <EvanR> trapped in the matrix
17:56:59 <haskellbridge> <sm> I hope they'll get it together and open the darn thing by 2026 >:/
17:57:17 × Zemyla quits (~Zemyla@72.178.108.235) (Ping timeout: 250 seconds)
18:05:09 Zemyla joins (~Zemyla@72.178.108.235)
18:06:11 ft joins (~ft@p4fc2aaeb.dip0.t-ipconnect.de)
18:10:43 Googulator75 joins (~Googulato@2a01-036d-0106-0180-8127-ba79-55a7-6f29.pool6.digikabel.hu)
18:11:46 × Googulator26 quits (~Googulato@80-95-87-101.pool.digikabel.hu) (Quit: Client closed)
18:16:13 × karenw quits (~karenw@user/karenw) (Ping timeout: 264 seconds)
18:26:42 wootehfoot joins (~wootehfoo@user/wootehfoot)
18:26:42 × synchromesh quits (~john@2406:5a00:2412:2c00:ed84:4ebe:de81:99a2) (Read error: Connection reset by peer)
18:27:47 synchromesh joins (~john@2406:5a00:2412:2c00:ed84:4ebe:de81:99a2)
18:30:39 × Googulator75 quits (~Googulato@2a01-036d-0106-0180-8127-ba79-55a7-6f29.pool6.digikabel.hu) (Quit: Client closed)
18:30:45 Googulator8 joins (~Googulato@2a01-036d-0106-0180-8127-ba79-55a7-6f29.pool6.digikabel.hu)
18:31:07 humasect joins (~humasect@dyn-192-249-132-90.nexicom.net)
18:33:58 <tomsmeding> should I expend the effort to have the logs be in UTC
18:34:20 <haskellbridge> <Zemyla> How much effort would it be to rewrite old logs?
18:36:14 target_i joins (~target_i@user/target-i/x-6023099)
18:38:55 × fp quits (~Thunderbi@89-27-10-140.bb.dnainternet.fi) (Ping timeout: 256 seconds)
18:40:26 <EvanR> what timezone are they in now?
18:48:18 × tromp quits (~textual@2001:1c00:3487:1b00:bd50:5f58:be67:a48d) (Quit: My iMac has gone to sleep. ZZZzzz…)
18:48:51 <tomsmeding> EvanR: whatever my VPS was already in, which is Europe/Amsterdam, which even has DST in summer
18:49:26 <EvanR> lovely
18:49:48 <EvanR> I vote to convert it to aztec calendar
18:50:15 <tomsmeding> and I now see that means that we lose one hour of logs every october?
18:50:22 <EvanR> what
18:50:37 × Googulator8 quits (~Googulato@2a01-036d-0106-0180-8127-ba79-55a7-6f29.pool6.digikabel.hu) (Quit: Client closed)
18:50:38 <EvanR> you mean if you convert to UTC?
18:50:42 <sm> no! atlantean calendar
18:50:48 Googulator8 joins (~Googulato@2a01-036d-0106-0180-8127-ba79-55a7-6f29.pool6.digikabel.hu)
18:50:49 <tomsmeding> anyway you can see the opposite jump here https://ircbrowse.tomsmeding.com/day/lchaskell/2025/03/30?id=1517022#trid1517022
18:51:00 <EvanR> we lost logs or we will lose logs
18:51:08 <tomsmeding> well the logs are still there in the plain znc logs
18:51:14 <tomsmeding> but the website drops them
18:51:18 <EvanR> nice
18:51:35 tomsmeding checks if they're in the database
18:51:48 <haskellbridge> <Zemyla> I'm pretty sure it's impossible, then.
18:51:52 <EvanR> how many haskell programmers does it take to get time and date right
18:52:25 <tomsmeding> well this is a combination of 1. the original author of ircbrowse creating this hideous postgres setup
18:52:31 <humasect> it will be evaluated when necessary
18:52:36 <tomsmeding> and apparently assuming that the server is in UTC
18:52:43 <tomsmeding> and 2. me not doing that
18:55:25 × Zemyla quits (~Zemyla@72.178.108.235) (Quit: Client closed)
18:56:19 <tomsmeding> ok so the logs are there in the znc log files but the import to postgres borks
18:56:41 <tomsmeding> the issue is this: the import to postgres assigns IDs to the events, and those IDs are not necessarily stable when you do a clean re-import of everything
18:56:55 <tomsmeding> and people might have bookmarks to specific events, which have the ID in the URL
18:57:14 <tomsmeding> I have wanted to rewrite this system for years but I never had the motivation to
18:57:33 <tomsmeding> Zemyla: so possible, but rather a nuisancve
18:58:57 × lucabtz quits (~lucabtz@user/lucabtz) (Remote host closed the connection)
18:59:50 <tomsmeding> another part of the problem is that on a system with system time with DST, znc logs are technically ambiguous since it just contains the HH:MM:SS time for every message
19:00:26 <EvanR> it would need a multi-part migration which does something to make a translation table of old IDs, reimports, then fixes all the IDs
19:00:27 <tomsmeding> so when you switch from summer time to winter time and the clock goes back an hour, you get times between 01:00 and 02:00 twice
19:01:04 <tomsmeding> if there are enough messages you can spot the jump and it's not ambiguous, but if there's, say, only one message in that two-hour slot, it's ambiguous where it is
19:01:11 <tomsmeding> EvanR: possibly
19:01:36 <EvanR> if there's only 1 message during the ambiguous period, may it's not that important what time it happened xD
19:01:40 <EvanR> flip a coin
19:01:45 <tomsmeding> that's a point
19:02:06 <haskellbridge> <Zemyla> Yeah, you just have to make sure the overlap isn't a problem.
19:02:36 <haskellbridge> <Zemyla> Very few people will care whether a message took place in the summer 1:30 or the winter 1:30.
19:02:37 tromp joins (~textual@2001:1c00:3487:1b00:bd50:5f58:be67:a48d)
19:03:26 <tomsmeding> it's whether it happened at 01:30 or 02:30 UTC
19:04:44 <tomsmeding> you know what? I'm going to think about this later and you guys will have to live with the current mess a while longer :p
19:05:23 <EvanR> the fascinating problems we put ourselves in
19:06:49 haltingsolver joins (~cmo@2604:3d09:207f:8000:d250:ea0c:366a:6e73)
19:07:15 <tomsmeding> DST should be abolished
19:08:10 <tomsmeding> without DST I could just leave everything as-is and translate on-the-fly when serving the web page
19:08:55 <tomsmeding> in a way it's weird in the first place that ircbrowse has the notion of "day", and that day is whatever matches the system timezone on the server it runs on
19:09:48 <tomsmeding> for me, being in UTC+1/UTC+2, the UTC day would match closely enough with my calendar day that it's intuitive, but if you're, say, in California or in New Zealand, the ircbrowse "day" is something completely weird
19:10:59 <tomsmeding> does anyone here remember what the old ircbrowse, when it was still hosted by its original creator (Chris Done), used as the timezone for events?
19:11:13 <EvanR> yeah day (unless you're talking NASA MJD stuff) is really a localization thing
19:13:23 <tomsmeding> EvanR: is this the authoritative reference on what the MJD is? https://core2.gsfc.nasa.gov/time/ Because it defines it as intrinsically linked to a _calendar_ day, with no timezone specified
19:14:00 <EvanR> wow nice css
19:14:16 <tomsmeding> "Last modified 17/3/00"
19:15:35 <EvanR> since MJD is a specific number that I've seen in relation to interplanetary objects I presume it's defined specifically enough to get within the day, otherwise what's the point of the decimals
19:15:49 Googulator7 joins (~Googulato@2a01-036d-0106-0180-8127-ba79-55a7-6f29.pool6.digikabel.hu)
19:15:57 <EvanR> now I'm going down a rabbit hole
19:16:28 × dlock23 quits (~dlock@user/dlock23) (Quit: Leaving)
19:18:07 × Googulator8 quits (~Googulato@2a01-036d-0106-0180-8127-ba79-55a7-6f29.pool6.digikabel.hu) (Quit: Client closed)
19:18:19 <tomsmeding> ok so this table https://en.wikipedia.org/wiki/Julian_day#Variants seems to interpret it as relative to UTC
19:18:25 <tomsmeding> (I just refreshed it)
19:18:59 <tomsmeding> > (floor (0.80278 * 24), floor ((0.80278 * 24 - 19) * 60))
19:19:01 <lambdabot> (19,16)
19:19:04 <EvanR> wikipedia page has references to noon = noon in UT
19:19:18 <tomsmeding> oh right
19:19:33 <tomsmeding> ok good, so it makes sense
19:27:30 <monochrom> Oh, time leaps in IRC logs? They are awesome, please don't kill them! >:)
19:27:31 <EvanR> (where UT is not exactly equal to UTC but close)
19:28:04 <tomsmeding> monochrom: are they? :P
19:28:55 <monochrom> We need to confuse future archaelogists by leaving around records that can be misinterpreted as evidence for we having figured out time travel!
19:29:29 × humasect quits (~humasect@dyn-192-249-132-90.nexicom.net) (Quit: Leaving...)
19:29:33 fp joins (~Thunderbi@89-27-10-140.bb.dnainternet.fi)
19:30:10 <tomsmeding> I don't think this is a particularly convincing exhibit to that end :p
19:31:04 <monochrom> OK OK, s/archaeologists/ufologists/ ! >:D
19:31:50 machinedgod joins (~machinedg@d75-159-126-101.abhsia.telus.net)
19:37:25 × trickard_ quits (~trickard@cpe-62-98-47-163.wireline.com.au) (Ping timeout: 240 seconds)
19:37:49 trickard_ joins (~trickard@cpe-62-98-47-163.wireline.com.au)
19:40:11 <gentauro> EvanR: define "get time and date right" ;)
19:40:17 <gentauro> it's actually not trivial
19:40:41 <sm> he knwos
19:40:46 <tomsmeding> so, many, apparently
19:41:00 <gentauro> sm: everybody does ;)
19:47:17 <gentauro> follow-up question, how many bits do you need to store `date` and `time` right? I vote for 96-bits (32 bits for date and 64 for time)
19:49:00 humasect joins (~humasect@dyn-192-249-132-90.nexicom.net)
19:56:21 <haskellbridge> <sm> that must be a trick question. The only right answer is to not answer :)
19:57:10 <monochrom> haha
19:57:24 × euphores quits (~SASL_euph@user/euphores) (Quit: Leaving.)
19:59:56 × ThePenguin quits (~ThePengui@cust-95-80-28-221.csbnet.se) (Remote host closed the connection)
20:00:41 × Digit quits (~user@user/digit) (Ping timeout: 244 seconds)
20:02:00 ThePenguin joins (~ThePengui@cust-95-80-28-221.csbnet.se)
20:07:45 <darkling> Number of Planck times since the Big Bang. :)
20:08:47 <darkling> Signed integer, of course. Just in case.
20:09:23 <tomsmeding> so how many bits? :P
20:10:17 peterbecich joins (~Thunderbi@172.222.148.214)
20:12:23 <darkling> Wikipedia says the Universe is about 8*10^60 Planck units old right now, so that's about 204 bits for present use.
20:13:06 <monochrom> I was hoping that 128 would b enough.
20:13:21 <monochrom> It's OK! We can go 512. :)
20:13:34 <darkling> Max number of bits would depend on your favourite theory on the fate of the universe.
20:14:08 <monochrom> Oh I just need a theory on the fate of this civilization.
20:14:29 darkling checks watch
20:14:34 <darkling> About 25 minutes?
20:15:06 <monochrom> You are so generous :)
20:15:12 <tomsmeding> monochrom: if you use planck time you already lose about 146 bits just describing one second
20:16:17 <tomsmeding> ok 144, more precisely
20:18:26 <haskellbridge> <Zemyla> In 10^200 years, all protons and neutrons in the universe will have likely decayed. Unless you plan on porting your data to diffuse electron-positron-photon clouds, I wouldn't worry about it.
20:18:39 × annamalai quits (~annamalai@157.33.215.38) (Ping timeout: 256 seconds)
20:20:30 × jreicher quits (~user@user/jreicher) (Quit: In transit)
20:20:36 × Googulator7 quits (~Googulato@2a01-036d-0106-0180-8127-ba79-55a7-6f29.pool6.digikabel.hu) (Quit: Client closed)
20:20:41 Googulator78 joins (~Googulato@2a01-036d-0106-0180-8127-ba79-55a7-6f29.pool6.digikabel.hu)
20:22:13 × ThePenguin quits (~ThePengui@cust-95-80-28-221.csbnet.se) (Remote host closed the connection)
20:24:09 ThePenguin joins (~ThePengui@cust-95-80-28-221.csbnet.se)
20:24:20 × haltingsolver quits (~cmo@2604:3d09:207f:8000:d250:ea0c:366a:6e73) (Ping timeout: 256 seconds)
20:25:52 × Googulator78 quits (~Googulato@2a01-036d-0106-0180-8127-ba79-55a7-6f29.pool6.digikabel.hu) (Quit: Client closed)
20:25:53 Googulator35 joins (~Googulato@2a01-036d-0106-0180-8127-ba79-55a7-6f29.pool6.digikabel.hu)
20:32:50 × peterbecich quits (~Thunderbi@172.222.148.214) (Ping timeout: 256 seconds)
20:33:37 emmanuelux joins (~emmanuelu@user/emmanuelux)
20:35:36 × Googulator35 quits (~Googulato@2a01-036d-0106-0180-8127-ba79-55a7-6f29.pool6.digikabel.hu) (Quit: Client closed)
20:35:41 Googulator19 joins (~Googulato@2a01-036d-0106-0180-8127-ba79-55a7-6f29.pool6.digikabel.hu)
20:40:55 haltingsolver joins (~cmo@2604:3d09:207f:8000::d1dc)
20:54:26 × deptype_ quits (~deptype@2406:b400:3a:73c2:96bb:43ff:fecb:477b) (Remote host closed the connection)
20:54:43 deptype_ joins (~deptype@2406:b400:3a:73c2:58f2:c14f:76a3:1328)
20:55:45 Googulator77 joins (~Googulato@2a01-036d-0106-0180-8127-ba79-55a7-6f29.pool6.digikabel.hu)
20:55:47 × Googulator19 quits (~Googulato@2a01-036d-0106-0180-8127-ba79-55a7-6f29.pool6.digikabel.hu) (Quit: Client closed)
21:05:51 <EvanR> gentauro, depends on the calendar
21:06:56 <EvanR> Zemyla, sounds like a job for plasma based lifeforms
21:10:16 <tomsmeding> > logBase 2 ((1e200 + 13.787e9) * (1/5.391e-44))
21:10:18 <lambdabot> 808.1199022429475
21:10:26 <tomsmeding> just 809 bits :)
21:10:56 <haskellbridge> <Zemyla> At that point, just use bignums.
21:11:13 <tomsmeding> > logBase 2 ((1e200 + 13.787e9) * 365.2425 * 24 * 3600 * (1/5.391e-44))
21:11:14 <lambdabot> 833.0313567732568
21:11:21 <tomsmeding> apologies, forgot to convert years to seconds
21:12:01 <haskellbridge> <Zemyla> And even then, the universe will keep going.
21:12:04 <EvanR> the apple core audio API uses 64-bit numbers measured in nanoseconds and is good enough for jazz
21:12:17 × target_i quits (~target_i@user/target-i/x-6023099) (Quit: leaving)
21:12:21 <haskellbridge> <Zemyla> Pun intended?
21:12:24 <tomsmeding> > 2 ^ 64 / 1e9 / 3600 / 24
21:12:26 <lambdabot> 213503.9823346013
21:12:35 <tomsmeding> I think 213503 days is enough for jazz, yes
21:13:11 <haskellbridge> <Zemyla> Not enough for Bull of Heaven, though.
21:13:21 <EvanR> good enough for government work
21:13:33 <tomsmeding> yes, because they don't last that long
21:15:02 × deptype_ quits (~deptype@2406:b400:3a:73c2:58f2:c14f:76a3:1328) (Remote host closed the connection)
21:15:15 deptype_ joins (~deptype@2406:b400:3a:73c2:ae9c:715:89d4:6e2a)
21:15:36 × wootehfoot quits (~wootehfoo@user/wootehfoot) (Read error: Connection reset by peer)
21:15:38 Googulator36 joins (~Googulato@2a01-036d-0106-0180-8127-ba79-55a7-6f29.pool6.digikabel.hu)
21:15:40 × Googulator77 quits (~Googulato@2a01-036d-0106-0180-8127-ba79-55a7-6f29.pool6.digikabel.hu) (Quit: Client closed)
21:17:35 <EvanR> > 213503 / 365.25
21:17:36 <lambdabot> 584.539356605065
21:30:13 jreicher joins (~user@user/jreicher)
21:35:04 × deptype_ quits (~deptype@2406:b400:3a:73c2:ae9c:715:89d4:6e2a) (Remote host closed the connection)
21:35:23 deptype_ joins (~deptype@2406:b400:3a:73c2:74f0:c0e8:2b79:8574)
21:35:39 × Googulator36 quits (~Googulato@2a01-036d-0106-0180-8127-ba79-55a7-6f29.pool6.digikabel.hu) (Quit: Client closed)
21:35:40 Googulator27 joins (~Googulato@2a01-036d-0106-0180-8127-ba79-55a7-6f29.pool6.digikabel.hu)
21:36:21 × humasect quits (~humasect@dyn-192-249-132-90.nexicom.net) (Remote host closed the connection)
21:38:25 × emmanuelux quits (~emmanuelu@user/emmanuelux) (Ping timeout: 264 seconds)
21:40:41 × Googulator27 quits (~Googulato@2a01-036d-0106-0180-8127-ba79-55a7-6f29.pool6.digikabel.hu) (Quit: Client closed)
21:40:49 Googulator85 joins (~Googulato@2a01-036d-0106-0180-8127-ba79-55a7-6f29.pool6.digikabel.hu)
21:51:49 L29Ah parts (~L29Ah@wikipedia/L29Ah) ()
21:53:02 jmcantrell joins (~weechat@user/jmcantrell)
22:00:25 × Googulator85 quits (~Googulato@2a01-036d-0106-0180-8127-ba79-55a7-6f29.pool6.digikabel.hu) (Quit: Client closed)
22:00:36 Googulator85 joins (~Googulato@2a01-036d-0106-0180-8127-ba79-55a7-6f29.pool6.digikabel.hu)
22:05:44 Googulator23 joins (~Googulato@2a01-036d-0106-0180-8127-ba79-55a7-6f29.pool6.digikabel.hu)
22:06:12 × Googulator85 quits (~Googulato@2a01-036d-0106-0180-8127-ba79-55a7-6f29.pool6.digikabel.hu) (Quit: Client closed)
22:13:24 mange joins (~mange@user/mange)
22:15:15 × takuan quits (~takuan@d8d86b9e9.access.telenet.be) (Remote host closed the connection)
22:15:25 × fp quits (~Thunderbi@89-27-10-140.bb.dnainternet.fi) (Ping timeout: 240 seconds)
22:21:03 × ljdarj quits (~Thunderbi@user/ljdarj) (Ping timeout: 256 seconds)
22:21:28 LainIwakura joins (~LainIwaku@user/LainIwakura)
22:23:30 trickard_ is now known as trickard
22:26:01 × Googulator23 quits (~Googulato@2a01-036d-0106-0180-8127-ba79-55a7-6f29.pool6.digikabel.hu) (Quit: Client closed)
22:26:09 Googulator94 joins (~Googulato@2a01-036d-0106-0180-8127-ba79-55a7-6f29.pool6.digikabel.hu)
22:28:22 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
22:30:00 Digit joins (~user@user/digit)
22:30:47 Googulator35 joins (~Googulato@2a01-036d-0106-0180-8127-ba79-55a7-6f29.pool6.digikabel.hu)
22:30:53 × Googulator94 quits (~Googulato@2a01-036d-0106-0180-8127-ba79-55a7-6f29.pool6.digikabel.hu) (Client Quit)
22:31:11 × tromp quits (~textual@2001:1c00:3487:1b00:bd50:5f58:be67:a48d) (Quit: My iMac has gone to sleep. ZZZzzz…)
22:33:31 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 256 seconds)
22:34:34 L29Ah joins (~L29Ah@wikipedia/L29Ah)
22:35:46 vanishingideal joins (~vanishing@user/vanishingideal)
22:37:06 × deptype_ quits (~deptype@2406:b400:3a:73c2:74f0:c0e8:2b79:8574) (Remote host closed the connection)
22:37:26 deptype_ joins (~deptype@2406:b400:3a:73c2:b260:b562:4d7c:996e)
22:38:16 fp joins (~Thunderbi@89-27-10-140.bb.dnainternet.fi)
22:38:48 × divlamir quits (~divlamir@user/divlamir) (Read error: Connection reset by peer)
22:38:56 divlamir joins (~divlamir@user/divlamir)
22:44:10 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
22:45:31 Zemyla joins (~Zemyla@72.178.108.235)
22:50:55 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 240 seconds)
22:51:03 × Googulator35 quits (~Googulato@2a01-036d-0106-0180-8127-ba79-55a7-6f29.pool6.digikabel.hu) (Quit: Client closed)
22:51:06 Googulator1 joins (~Googulato@2a01-036d-0106-0180-8127-ba79-55a7-6f29.pool6.digikabel.hu)
22:51:57 × Zemyla quits (~Zemyla@72.178.108.235) (Ping timeout: 250 seconds)
22:57:41 × deptype_ quits (~deptype@2406:b400:3a:73c2:b260:b562:4d7c:996e) (Remote host closed the connection)
22:57:54 deptype_ joins (~deptype@2406:b400:3a:73c2:25ef:e8:f835:b7ce)
23:00:06 Tuplanolla joins (~Tuplanoll@91-159-187-167.elisa-laajakaista.fi)
23:00:37 × Googulator1 quits (~Googulato@2a01-036d-0106-0180-8127-ba79-55a7-6f29.pool6.digikabel.hu) (Quit: Client closed)
23:00:43 Googulator34 joins (~Googulato@2a01-036d-0106-0180-8127-ba79-55a7-6f29.pool6.digikabel.hu)
23:02:13 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
23:03:37 weary-traveler joins (~user@user/user363627)
23:05:53 × __monty__ quits (~toonn@user/toonn) (Quit: leaving)
23:06:58 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 256 seconds)
23:15:30 × vanishingideal quits (~vanishing@user/vanishingideal) (Remote host closed the connection)
23:17:10 × mreh quits (~matthew@host86-146-25-125.range86-146.btcentralplus.com) (Ping timeout: 256 seconds)
23:17:43 × deptype_ quits (~deptype@2406:b400:3a:73c2:25ef:e8:f835:b7ce) (Remote host closed the connection)
23:17:59 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
23:18:04 deptype_ joins (~deptype@2406:b400:3a:73c2:7318:13e2:7262:b7a3)
23:18:14 orizuru joins (~orizuru@178-79-171-63.ip.linodeusercontent.com)
23:21:34 × xff0x quits (~xff0x@2405:6580:b080:900:d7c7:2664:9910:68b4) (Ping timeout: 244 seconds)
23:21:46 × fp quits (~Thunderbi@89-27-10-140.bb.dnainternet.fi) (Quit: fp)
23:22:40 xff0x joins (~xff0x@2405:6580:b080:900:fdd3:5259:ca0:eb5c)
23:23:55 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 240 seconds)
23:26:07 × LainIwakura quits (~LainIwaku@user/LainIwakura) (Quit: Client closed)
23:27:52 Sgeo joins (~Sgeo@user/sgeo)
23:31:43 × haltingsolver quits (~cmo@2604:3d09:207f:8000::d1dc) (Remote host closed the connection)
23:32:06 haltingsolver joins (~cmo@2604:3d09:207f:8000::d1dc)
23:34:51 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
23:35:17 × acarrico quits (~acarrico@pppoe-209-99-223-51.greenmountainaccess.net) (Ping timeout: 256 seconds)
23:39:25 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 240 seconds)
23:41:14 emmanuelux joins (~emmanuelu@user/emmanuelux)
23:49:26 × DetourNetworkUK quits (~DetourNet@user/DetourNetworkUK) (Read error: Connection reset by peer)
23:50:57 DetourNetworkUK joins (~DetourNet@user/DetourNetworkUK)
23:52:08 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
23:53:31 × xff0x quits (~xff0x@2405:6580:b080:900:fdd3:5259:ca0:eb5c) (Quit: xff0x)
23:55:50 × comonad quits (~comonad@2003:d0:2741:a000:c693:4c09:e8b4:6dfd) (Read error: Connection reset by peer)
23:56:07 xff0x joins (~xff0x@2405:6580:b080:900:1fdc:c04d:3012:9e4)
23:56:16 × EvanR quits (~EvanR@user/evanr) (Quit: Leaving)
23:56:25 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 240 seconds)

All times are in UTC on 2025-11-11.