2023/08/21

2023-08-21 00:00:51 +0000 <monochrom> This year I didn't teach Functor-Applicative-Monad. But I thought up a good exam question a while ago before I made that decision.
2023-08-21 00:01:24 +0000 <monochrom> One can prove from the Applicative laws that `liftA2 (&&)` must not do short-circuiting.
2023-08-21 00:02:00 +0000wroathe(~wroathe@207-153-38-140.fttp.usinternet.com)
2023-08-21 00:02:00 +0000wroathe(~wroathe@207-153-38-140.fttp.usinternet.com) (Changing host)
2023-08-21 00:02:00 +0000wroathe(~wroathe@user/wroathe)
2023-08-21 00:02:06 +0000califax(~califax@user/califx) (Remote host closed the connection)
2023-08-21 00:02:14 +0000 <wroathe> Back. Sorry. Damn public places and their so-called "hours of operation"
2023-08-21 00:03:27 +0000 <EvanR> you missed some stuff https://ircbrowse.tomsmeding.com/browse/lchaskell?id=1055666#trid1055666
2023-08-21 00:03:28 +0000 <int-e> wroathe: http://paste.debian.net/1289541/
2023-08-21 00:03:41 +0000 <int-e> hah, redundant again
2023-08-21 00:04:34 +0000 <wroathe> int-e: EvanR: thanks
2023-08-21 00:04:34 +0000califax(~califax@user/califx)
2023-08-21 00:04:39 +0000 <monochrom> Actually more essentially and easily, `fmap (False &&) foo` cannot short-ciruit to pure False.
2023-08-21 00:05:20 +0000 <int-e> > liftA2 (&&) (pure False) (pure undefined)
2023-08-21 00:05:21 +0000 <lambdabot> error:
2023-08-21 00:05:21 +0000 <lambdabot> • Ambiguous type variable ‘f0’ arising from a use of ‘show_M661397343980...
2023-08-21 00:05:21 +0000 <lambdabot> prevents the constraint ‘(Show (f0 Bool))’ from being solved.
2023-08-21 00:05:28 +0000 <int-e> > liftA2 (&&) (pure False) (pure undefined) :: [Bool]
2023-08-21 00:05:29 +0000 <lambdabot> [False]
2023-08-21 00:05:53 +0000 <monochrom> pure undefined /= undefined
2023-08-21 00:06:15 +0000xff0x(~xff0x@2405:6580:b080:900:9c64:3e23:a36:74a0)
2023-08-21 00:06:15 +0000 <int-e> monochrom: sure, I know what you're after, but I couldn't help pointing out that the short-cutting of && is still there
2023-08-21 00:06:57 +0000 <wroathe> Haha, I wasn't looking for another coffee shop. I decided to head home. They can't kick me out of my home (at least I don't think...)
2023-08-21 00:07:32 +0000 <int-e> this is pretty much the dividing line between applicatives and monads... with moands, you *can* short-circuit on the monad action level.
2023-08-21 00:08:05 +0000 <wroathe> int-e: EvanR: so what's the takeaway from that backscroll? int-e is that line you highlighted a major source of my allocation troublle?
2023-08-21 00:08:06 +0000 <int-e> "Computations depending on wrapped values" if you will. Which is really the essence of bind.
2023-08-21 00:08:45 +0000 <int-e> wroathe: I don't know... I didn't run any code. It /might/ be good for reducing allocations by 10-15%.
2023-08-21 00:09:08 +0000 <EvanR> it was something to try
2023-08-21 00:09:21 +0000 <EvanR> maybe a magic single ! that improves performance
2023-08-21 00:10:14 +0000 <int-e> wroathe: TBH I'm mostly questioning your approach... why would you go through the file in one go instead of using smaller chunks. But I got curious about that one allocation item.
2023-08-21 00:10:55 +0000 <wroathe> I'm gathering the haskell GC makes processing in smaller chunks advantageous, but conventional wisdom with other runtimes is that this is the better approach
2023-08-21 00:11:24 +0000 <wroathe> In general I don't care if this takes memory. I just don't want it to be taking memory that it doesn't need to.
2023-08-21 00:11:30 +0000 <int-e> sorry, not allocations
2023-08-21 00:11:34 +0000 <int-e> I mean resident size
2023-08-21 00:12:19 +0000hsxtrt(~hsxtrt@14-200-253-168.static.tpgi.com.au) (Quit: This computer has gone to sleep)
2023-08-21 00:12:57 +0000jero98772(~jero98772@2800:484:1d84:300::2) (Ping timeout: 260 seconds)
2023-08-21 00:13:24 +0000 <EvanR> 2 seconds is a really long time for that size of file. It's great that it works, but if we really don't care about performance, why all the hacking of parser state
2023-08-21 00:13:26 +0000 <wroathe> monochrom: So in total this results in 30209 "company" objects, 90627 "address" objects, and 30209 "submission" objects after parsing this file
2023-08-21 00:14:30 +0000 <wroathe> EvanR: Because the hacking of parser state is supposed to be a performance improvement. The point there is that I'm trying to remember field positions to allow for random access to give myself the freedom to parse a given row into multiple objects in a random access pattern like parseSubmission does
2023-08-21 00:14:43 +0000 <EvanR> I presumed you wanted high performance, like, does all this in like 2 milliseconds xD
2023-08-21 00:14:56 +0000 <wroathe> I'm quite happy with that API for what I'm doing. The advancing of the parser from one field separation to the next should in theory be "free"
2023-08-21 00:15:02 +0000 <wroathe> But this profile says it's 37% of my allocations
2023-08-21 00:15:14 +0000 <int-e> Nobody has said "premature optimization" yet... this really feels like one.
2023-08-21 00:15:16 +0000 <wroathe> EvanR: If I wanted that high of performance I'd just do this in C
2023-08-21 00:15:17 +0000hsxtrt(~hsxtrt@14-200-253-168.static.tpgi.com.au)
2023-08-21 00:15:24 +0000 <EvanR> no.
2023-08-21 00:15:26 +0000 <wroathe> int-e: It's a hobby program. If this were for work I'd agree with you
2023-08-21 00:15:35 +0000 <geekosaur> flatparse
2023-08-21 00:15:45 +0000 <EvanR> I think a point is being missed here about how haskell can be really fast, esp at simple stuff like this
2023-08-21 00:15:51 +0000 <wroathe> But since I'm doing this for fun I'm free to quibble about memory use and performance all I want :D
2023-08-21 00:15:55 +0000 <EvanR> but you're slow and complicated right now
2023-08-21 00:16:41 +0000 <wroathe> So the key to a fast haskell program is to find out what the perfect max residency size is to manipulate the GC into being performant?
2023-08-21 00:16:59 +0000 <wroathe> Or what's the fundamental difference here between my "slow and complicated" approach, and what I should be doing?
2023-08-21 00:17:18 +0000 <EvanR> I'm just saying it would be slow and simple by using megaparsec normally
2023-08-21 00:17:32 +0000 <int-e> geekosaur: argh, why is `char :: Char -> Q Exp`
2023-08-21 00:17:34 +0000 <EvanR> less code I believ
2023-08-21 00:18:55 +0000 <wroathe> EvanR: I'm not understanding how this isn't a normal use of megaparsec. There's nothing in the API documentation that says I'm not allowed to manipulate the parser state. In fact, he provides an API to do just that
2023-08-21 00:18:56 +0000 <EvanR> (maybe it would actually improve performance not trying to preempt the parser and search the string yourself)
2023-08-21 00:19:00 +0000 <int-e> It's mostly fine; I just didn't expect to see Template Haskell in the API.
2023-08-21 00:19:02 +0000logothesia(~logothesi@user/logothesia) (Ping timeout: 256 seconds)
2023-08-21 00:19:32 +0000 <EvanR> well you search but also use combinators like manyTill
2023-08-21 00:19:36 +0000 <wroathe> The reason I'm doing it this way is so I get nice parse errors as I'm trying to randomly access the current parsed row
2023-08-21 00:20:09 +0000 <EvanR> fair enough
2023-08-21 00:20:15 +0000 <wroathe> If I were to just read the current row into a [Text] I'd be able to do the random access thing, but the parse errors would suck
2023-08-21 00:20:29 +0000 <EvanR> sure
2023-08-21 00:20:52 +0000 <wroathe> And in that circumstance I'd be skeptical that I'm doing anything fundamentally different than what I'm doing now
2023-08-21 00:21:19 +0000 <wroathe> Because ultimately `drop` and takeWhileP would end up resulting in a new Text being created
2023-08-21 00:21:58 +0000 <EvanR> drop obviously creates a new Text, but it just points into the existing underlying array, which is great
2023-08-21 00:22:35 +0000 <wroathe> Also another thing that's weird about this...
2023-08-21 00:23:02 +0000ystael(~ystael@user/ystael) (Ping timeout: 252 seconds)
2023-08-21 00:23:04 +0000 <wroathe> Say what you will about the "random access" to a row's fields thing I'm trying to do, but advanceTo is only being called proportional to the number of fields in the underlying TSV file
2023-08-21 00:23:11 +0000 <geekosaur> int-e, it looks like they generate parsers for literals at compile time for speed
2023-08-21 00:23:14 +0000 <wroathe> That is, it should only be called once per \t or \n
2023-08-21 00:23:25 +0000 <EvanR> you also need to be careful about attributing "allocations" to particular functions
2023-08-21 00:23:40 +0000 <geekosaur> everything leads to https://hackage.haskell.org/package/flatparse-0.5.0.1/docs/src/FlatParse.Basic.Bytes.html#bytesUns…
2023-08-21 00:23:43 +0000 <wroathe> Yeah I'm just going off of what that profile says.
2023-08-21 00:23:45 +0000 <EvanR> I'm not sure how meaningful the profile is on that, since stuff happens at lazy times
2023-08-21 00:24:07 +0000 <wroathe> geekosaur: Haha, is this how I make a fast haskell parser? :)
2023-08-21 00:24:22 +0000 <geekosaur> yes
2023-08-21 00:24:45 +0000 <wroathe> EvanR: well there I ahve it
2023-08-21 00:24:47 +0000 <int-e> beautiful
2023-08-21 00:24:47 +0000 <wroathe> have* it
2023-08-21 00:25:04 +0000 <wroathe> Idk these parser combinator libraries are pretty heavily marketed in the haskell space
2023-08-21 00:25:06 +0000 <int-e> (there's a blinking sarcasm tag after that)
2023-08-21 00:25:16 +0000 <EvanR> code that is located within some function lexically could be evaluated as part of some other thing because laziness
2023-08-21 00:25:26 +0000 <wroathe> It's as if Attoparsec, Parsec, and Megaparsec are the only way you're supposed to parse in a functional context
2023-08-21 00:25:44 +0000 <wroathe> Nevermind a good old fashioned stack and switch iterative parser
2023-08-21 00:26:03 +0000 <EvanR> those do represent the haskell version of recursive descent
2023-08-21 00:26:03 +0000 <geekosaur> happy exists, it's just slower than megaparsec or attoparsec
2023-08-21 00:26:14 +0000 <probie> Some people still use happy (the Haskell version of yacc/bison)
2023-08-21 00:26:47 +0000 <geekosaur> flatparse is quite new so hasn't got a lot of market share yet, but it's been catching on
2023-08-21 00:27:50 +0000bratwurst(~blaadsfa@2604:3d09:207f:f650:216:3eff:fe5a:a1f8)
2023-08-21 00:28:16 +0000 <wroathe> Well thanks for the help guys (especially you, EvanR). I've got a lot to mull over here.
2023-08-21 00:28:39 +0000 <EvanR> wroathe, another avenue you might be barking down inappropriately, is the act of allocating is not as expensive as in C with malloc. Since the allocator is very simple (the GC does all the work later)
2023-08-21 00:29:32 +0000YuutaW(~YuutaW@mail.yuuta.moe) (Ping timeout: 245 seconds)
2023-08-21 00:29:35 +0000 <EvanR> so if some function really is doing 37% of the allocations, it might not be taking all the time
2023-08-21 00:29:48 +0000 <wroathe> EvanR: Yeah, but as you said, 2s is quite a long time. I've already made one performance improvement to this by fixing a place where I was using T.unpack to create small String objects whenever a field of my TSV held a time value I wanted to parse using parseTimeM from the time library
2023-08-21 00:29:58 +0000caryhartline(~caryhartl@168.182.58.169) (Quit: caryhartline)
2023-08-21 00:30:05 +0000 <wroathe> And it resulted in like a 30% reduction in allocations and an improvement of like 1.5 in running time
2023-08-21 00:30:23 +0000 <int-e> "Megaparsec [...] tries to find a nice balance between speed, flexibility, and quality of parse errors." -- reducing allocations doesn't even make the list
2023-08-21 00:30:26 +0000 <wroathe> So I figure if I can make one more big improvement like that I'll be cooking with fire
2023-08-21 00:30:47 +0000razetime(~quassel@117.254.37.152) (Ping timeout: 245 seconds)
2023-08-21 00:30:48 +0000 <EvanR> another metric to look at is how much time is spent in GC
2023-08-21 00:30:59 +0000 <EvanR> as a percent of runtime
2023-08-21 00:31:17 +0000int-eusually looks at residency and productivity
2023-08-21 00:31:31 +0000razetime(~quassel@117.254.36.54)
2023-08-21 00:32:12 +0000 <geekosaur> don't even need to profile for that, +RTS -s
2023-08-21 00:32:18 +0000YuutaW(~YuutaW@mail.yuuta.moe)
2023-08-21 00:32:23 +0000 <int-e> The amount of allocations matters, but temporary allocations are also the price of laziness. If I want full control over allocations I won't be using Haskell.
2023-08-21 00:32:47 +0000 <EvanR> you would use zig? xD
2023-08-21 00:33:09 +0000 <EvanR> comes with no less than 5 standard allocators
2023-08-21 00:34:14 +0000 <int-e> Rust or C or C++ most likely, in some order.
2023-08-21 00:34:48 +0000 <geekosaur> but if they're truly temporary allocations they cost ~nothing
2023-08-21 00:35:47 +0000 <wroathe> In a C context I'd mmap the file into memory, and then allocate a region for my objects. The string values would just be pointers into the original mmapped TSV file along with a length, or structs to hold the date objects or int for everything else
2023-08-21 00:35:51 +0000razetime(~quassel@117.254.36.54) (Ping timeout: 245 seconds)
2023-08-21 00:35:52 +0000 <EvanR> because they don't get traversed and then are lost all at once from the nursery
2023-08-21 00:36:13 +0000razetime(~quassel@117.254.37.27)
2023-08-21 00:36:27 +0000 <wroathe> All told like I said I'd be surprised if I went over 20MB residency for the whole parsed file with the structs
2023-08-21 00:36:33 +0000 <int-e> EvanR: yeah, it's cheap but it's not free (it comes at the cost of memory locality)
2023-08-21 00:39:41 +0000 <EvanR> I'm still curious about the possibly foldl' thunks corresponding to the 3rd thing in the profile, that might be eliminated with a single !, but meh
2023-08-21 00:40:16 +0000 <wroathe> I'll try int-e's suggestion in a bit here after I finish my dinner
2023-08-21 00:40:44 +0000bratwurst(~blaadsfa@2604:3d09:207f:f650:216:3eff:fe5a:a1f8) (Ping timeout: 248 seconds)
2023-08-21 00:43:04 +0000phma(~phma@host-67-44-208-38.hnremote.net) (Read error: Connection reset by peer)
2023-08-21 00:43:34 +0000phma(~phma@2001:5b0:2143:fba8:9b6b:196:6798:af5d)
2023-08-21 00:44:18 +0000mikoto-chan(~mikoto-ch@85-76-46-81-nat.elisa-mobile.fi) (Ping timeout: 246 seconds)
2023-08-21 00:45:24 +0000mvk(~mvk@2607:fea8:5c9a:a600::1c6d)
2023-08-21 00:45:54 +0000 <int-e> wroathe: Oh you also had that ghc-debug problem earlier... I think you have ghc < 9.4.2 but something in the build plan pulled in a later version of ghc-heap. (apparently ghc-heap-9.6.1 can be compiled on older ghc's, but does it actually work there?)
2023-08-21 00:49:14 +0000Tuplanolla(~Tuplanoll@91-159-68-236.elisa-laajakaista.fi) (Ping timeout: 244 seconds)
2023-08-21 00:49:38 +0000 <wroathe> int-e: 9.2.5. Good eye.
2023-08-21 00:49:42 +0000 <wroathe> I was wondering if that was the cause.
2023-08-21 00:51:11 +0000 <int-e> (I rather suspect that using a mismatched version of ghc-heap isn't okay... there's stuff in there that has to correspond directly with RTS internals like https://hackage.haskell.org/package/ghc-heap-9.6.1/docs/src/GHC.Exts.Heap.ClosureTypes.html )
2023-08-21 00:51:49 +0000 <wroathe> GHC releases new versions so quickly it's hard to keep up :P
2023-08-21 00:52:04 +0000 <int-e> and with the matching ghc-heap version you wouldn't run into this; compare https://gitlab.haskell.org/ghc/ghc-debug/-/blob/master/common/src/GHC/Debug/Decode/Convert.hs#L33-40
2023-08-21 00:52:14 +0000 <wroathe> And I only program in Haskell as a hobby, so it can be weeks or months at a time before I get back to little projects I'm working on
2023-08-21 00:52:29 +0000 <wroathe> int-e: Yeah, I was convinced when you initially said it
2023-08-21 00:52:38 +0000 <wroathe> I suspected that updating GHC would fix it when I posted the error earlier
2023-08-21 00:52:47 +0000 <wroathe> Although I didn't go into the detail you're going into to prove my assertion
2023-08-21 00:53:17 +0000 <int-e> wroathe: Yeah but I'm not saying that you should update GHC necessarily... at least at a glance, ghc-debug itself should be fine on older GHCs.
2023-08-21 00:53:40 +0000 <int-e> So I believe something else is pulling in a newer ghc-heap.
2023-08-21 00:55:15 +0000 <int-e> (And ideally, that package should have tighter dependencies so that this doesn't happen.)
2023-08-21 00:56:12 +0000 <wroathe> Well ghc-debug is still not fully baked
2023-08-21 00:56:23 +0000 <wroathe> It's only in version 0.5 at the moment
2023-08-21 00:57:24 +0000razetime(~quassel@117.254.37.27) (Ping timeout: 246 seconds)
2023-08-21 00:57:28 +0000 <int-e> hmm. I guess something like cabal install --constraint "ghc-heap=installed" would help to pinpoint the real culprit here. Assuming the installed version is the one bundled with the compiler.
2023-08-21 00:57:55 +0000razetime(~quassel@117.254.36.220)
2023-08-21 00:58:29 +0000azimut(~azimut@gateway/tor-sasl/azimut)
2023-08-21 00:58:56 +0000 <geekosaur> I think it's 'ghc-heap installed', not sure if the = works there
2023-08-21 00:59:06 +0000 <geekosaur> (double quotes also fine)
2023-08-21 00:59:06 +0000 <int-e> geekosaur: oh yes
2023-08-21 01:03:41 +0000szkl(uid110435@id-110435.uxbridge.irccloud.com) (Quit: Connection closed for inactivity)
2023-08-21 01:06:39 +0000artem(~artem@c-73-103-90-145.hsd1.in.comcast.net)
2023-08-21 01:06:40 +0000ulysses4ever(~artem@c-73-103-90-145.hsd1.in.comcast.net) (Read error: Connection reset by peer)
2023-08-21 01:10:35 +0000albet70(~xxx@2400:8902::f03c:92ff:fe60:98d8) (Remote host closed the connection)
2023-08-21 01:12:37 +0000 <wroathe> int-e: Only slightly better. 83,266,260 versus 89,793,936
2023-08-21 01:12:45 +0000 <wroathe> with that bang pattern
2023-08-21 01:14:20 +0000 <EvanR> 17% less 🎉
2023-08-21 01:15:16 +0000 <EvanR> 7.2% less wow I can't use a calculator!
2023-08-21 01:15:22 +0000 <wroathe> I was going to say
2023-08-21 01:15:37 +0000 <wroathe> You had me in the middle of whipping out my own calculator :D
2023-08-21 01:15:56 +0000 <int-e> better than nothing. does it change the https://i.imgur.com/aETjZ8g.png graph? (hmm is that allocations or residency...)
2023-08-21 01:16:05 +0000 <EvanR> tada emoji somewhat rescinded
2023-08-21 01:16:21 +0000 <wroathe> cabal run tallow -O2 --enable-profiling -- data/2023q2/sub.txt +RTS -pa -L120 -hd
2023-08-21 01:16:33 +0000 <wroathe> int-e: it's the result of -hd, which I think is residency
2023-08-21 01:16:43 +0000albet70(~xxx@2400:8902::f03c:92ff:fe60:98d8)
2023-08-21 01:16:54 +0000 <wroathe> https://downloads.haskell.org/ghc/latest/docs/users_guide/profiling.html#rts-flag--hd
2023-08-21 01:17:32 +0000 <int-e> "live heap", yeah that's residency
2023-08-21 01:17:54 +0000quidnunc(~user@70.31.194.28) (Read error: Connection reset by peer)
2023-08-21 01:19:04 +0000 <wroathe> int-e: https://i.imgur.com/3WYdFMs.png
2023-08-21 01:20:15 +0000 <int-e> Cool, so the Data.Text.Read.sat* things are indeed gone. But it didn't reduce the Text numbers, hmm. Interesting.
2023-08-21 01:21:40 +0000 <int-e> (so that part of my speculation didn't work out)
2023-08-21 01:22:10 +0000 <EvanR> when you get individual text values in the recursive parser, I wonder if those are even evaluated fully before the list begins to materials
2023-08-21 01:22:12 +0000 <EvanR> materialize
2023-08-21 01:22:27 +0000 <EvanR> at the end of parsing
2023-08-21 01:23:14 +0000 <EvanR> assuming that's not them in the profile
2023-08-21 01:23:20 +0000 <EvanR> which I was assuming
2023-08-21 01:23:54 +0000 <int-e> Oh and of course the results have to go somewhere... is that the IS thing?
2023-08-21 01:25:14 +0000 <int-e> (Is that how I# is rendered in a profile?)
2023-08-21 01:28:52 +0000hsxtrt(~hsxtrt@14-200-253-168.static.tpgi.com.au) (Quit: This computer has gone to sleep)
2023-08-21 01:30:08 +0000mikoto-chan(~mikoto-ch@85-76-111-77-nat.elisa-mobile.fi)
2023-08-21 01:35:19 +0000 <int-e> Anyway, I think ultimately the data may just be roughly this big. For example, each `Maybe Text` that isn't Nothing takes up 48 bytes on the heap, in addition to 8 bytes in the corresponding record. (Assuming a 64 bit system), assuming they all point to the same underlying byte array.
2023-08-21 01:36:21 +0000 <wroathe> int-e: Could be, yeah. I'm just trying to beat this advanceTo thing to death
2023-08-21 01:36:22 +0000 <int-e> corresponding to the Text and Just constructors in that profile.
2023-08-21 01:36:36 +0000libertyprime(~libertypr@203.96.203.44)
2023-08-21 01:36:42 +0000 <wroathe> I'm about to run an experiment to isolate advanceTo here
2023-08-21 01:36:58 +0000 <int-e> I mean, there are a lot of sat_ there indicating that things are lazy that could be strict.
2023-08-21 01:37:45 +0000 <wroathe> ! all the things
2023-08-21 01:37:50 +0000 <int-e> But it's starting to look like you won't get below 60M with those data types, no matter how you do the parsing.
2023-08-21 01:38:27 +0000 <wroathe> int-e: Yup, I figured as much.
2023-08-21 01:38:50 +0000 <int-e> ("with those data types": it would be significantly more compact if you replaced each Maybe Text by an index and a length into the original input)
2023-08-21 01:38:52 +0000jle`(~jle`@23.240.75.236) (Ping timeout: 248 seconds)
2023-08-21 01:39:22 +0000 <int-e> If those are unpacked, that's 16 bytes instead of 48 + 8 bytes.
2023-08-21 01:39:43 +0000 <wroathe> Do you have some reading I can do on the representation of haskell data in memory?
2023-08-21 01:39:59 +0000 <wroathe> With C I can more or less add it all up in my head for my architecture, but for Haskell I've got no fucking clue
2023-08-21 01:40:16 +0000jle`(~jle`@cpe-23-240-75-236.socal.res.rr.com)
2023-08-21 01:42:11 +0000 <int-e> Well in the simplest case, it's one word for the constructor tag, and another word for each data item attached to it (a pointer). This is complicated when strict fields get unpacked... then rather than the pointer, you have the fields of the unpacked single-constructor type. And then you have primitive types which are usually a word, some sometimes more.
2023-08-21 01:43:50 +0000 <int-e> So Just x is 2 words, and Text happens to contain a ByteArray (which is a pointer to a heap object containing the actual byte array), and two unpacked Ints. So that's 4 words.
2023-08-21 01:44:15 +0000 <int-e> and 6 words = 48 bytes.
2023-08-21 01:46:16 +0000 <EvanR> why do you think there's a ton of Just hanging around
2023-08-21 01:46:18 +0000ddellacosta(~ddellacos@143.244.47.100) (Ping timeout: 256 seconds)
2023-08-21 01:46:46 +0000 <int-e> The details... there are papers on GHC's RTS, starting with the STG paper and many tweaks; not sure what the best one is. They talk about stuff like info tables (the tags are pointers to info tables), entry points (actually the tags are pointers to entry points and the info tables are put in front of those entry points)... lots of icky details.
2023-08-21 01:47:00 +0000 <wroathe> So I just ran an interesting experiment by just executing parseRowState in a loop
2023-08-21 01:47:11 +0000 <int-e> EvanR: Because basically every single text field is a Maybe Text.
2023-08-21 01:47:31 +0000 <int-e> EvanR: unless that was a rhetorical question; I can't tell.
2023-08-21 01:47:32 +0000 <EvanR> oh the Maybe is part of the output data
2023-08-21 01:47:55 +0000 <int-e> EvanR: https://gist.github.com/JustinChristensen/72e4eae8a8e6e4e4f9be09078770c504#file-parse-hs-L53-L58
2023-08-21 01:47:56 +0000 <EvanR> not a control structure
2023-08-21 01:48:09 +0000 <EvanR> ok then
2023-08-21 01:48:16 +0000ddellacosta(~ddellacos@146.70.168.217)
2023-08-21 01:48:48 +0000 <wroathe> int-e: EvanR: https://i.imgur.com/84es3Qe.png
2023-08-21 01:49:19 +0000 <EvanR> that's the same amount of ARR_WORDS as before, just not elevated on top of other stuff
2023-08-21 01:49:25 +0000 <EvanR> 8M of ARR_WORDS
2023-08-21 01:49:50 +0000 <wroathe> https://gist.github.com/JustinChristensen/72e4eae8a8e6e4e4f9be09078770c504#file-rowstate-hs
2023-08-21 01:49:50 +0000 <int-e> wroathe: expected... I mean if I understand correctly, you read the file and while all the stuff you have seen before gets allocated, it also gets collected quickly so it's lost in the noise
2023-08-21 01:49:51 +0000 <EvanR> basically the whole file
2023-08-21 01:49:58 +0000 <int-e> assuming you actually force the parse result
2023-08-21 01:50:10 +0000finsternis(~X@23.226.237.192) (Read error: Connection reset by peer)
2023-08-21 01:50:37 +0000 <int-e> the 3.5MB number looks like you're, maybe, not forcing the parse
2023-08-21 01:50:42 +0000hsxtrt(~hsxtrt@14.200.253.168)
2023-08-21 01:50:56 +0000 <wroathe> I linked the updated program there
2023-08-21 01:51:30 +0000 <EvanR> I change my earlier speculation about evaluating those individual Text to evaluating the Just text
2023-08-21 01:51:46 +0000 <EvanR> as soon as possible
2023-08-21 01:51:59 +0000 <wroathe> And here is the profile for that updated program: https://gist.github.com/JustinChristensen/72e4eae8a8e6e4e4f9be09078770c504#file-rowstate-prof
2023-08-21 01:52:12 +0000 <wroathe> So based on this what I think I'm getting is...
2023-08-21 01:52:20 +0000 <wroathe> Yeah, resident here there's only the 8MB worth of data from the file
2023-08-21 01:52:37 +0000 <wroathe> But during the course of execution advanceTo seems to be allocating lots of objects that get GCed immediately?
2023-08-21 01:53:36 +0000 <wroathe> I think it must be misreporting
2023-08-21 01:53:49 +0000 <int-e> It has to allocate a new Text object. And an updated internal state record for the parser.
2023-08-21 01:53:51 +0000 <wroathe> Because I look at the profile it says that 2 GB of allocations can be attributed to advanceTo
2023-08-21 01:54:03 +0000 <wroathe> Which sounds very wrong
2023-08-21 01:54:06 +0000 <int-e> There are no in-place updates.
2023-08-21 01:54:29 +0000 <int-e> It's all recreate-and-discard-old-version.
2023-08-21 01:55:15 +0000 <EvanR> normally a haskell program will allocate an insane amount of bytes per second
2023-08-21 01:55:15 +0000codaraxis__(~codaraxis@user/codaraxis) (Quit: Leaving)
2023-08-21 01:55:31 +0000 <EvanR> of course it doesn't stay because you'd run out of memory
2023-08-21 01:55:35 +0000 <wroathe> Right
2023-08-21 01:56:05 +0000 <wroathe> Yeah, resident here is only the original 8 MB, which is good... although even that looks suspicious
2023-08-21 01:56:18 +0000 <wroathe> Because even with this new version of the program I'd expect to see some Text resident
2023-08-21 01:56:56 +0000 <int-e> `Text` is just those 32 bytes that point into the big blob that holds the entire input file.
2023-08-21 01:57:12 +0000 <int-e> you can have hundreds of those and it won't be visible in the graph
2023-08-21 01:57:50 +0000 <wroathe> int-e: Yeah, but according to the profile advanceTo is allocating 2 GB worth of something over the entire ~0.5s of runtime
2023-08-21 01:57:56 +0000 <int-e> it's when you get to half a million or more that they become visible like in the other version of the program
2023-08-21 01:58:17 +0000 <wroathe> This is what I'm referring to: https://gist.github.com/JustinChristensen/72e4eae8a8e6e4e4f9be09078770c504#file-rowstate-prof-L10
2023-08-21 01:59:01 +0000 <int-e> wroathe: There may be some allocation there that can be avoided, but if so I have no clue what that is. As I said earlier, I usually don't worry about allocations all that much.
2023-08-21 01:59:02 +0000 <EvanR> how many loop iterations is that in 0.5s and how many bytes per iteration does it allocate
2023-08-21 01:59:18 +0000 <EvanR> could easily add up to 2G
2023-08-21 02:00:13 +0000 <wroathe> What I'm wondering is if the runtime is allocating a region or something and that profile is mis-attributing that region allocation to this one routine
2023-08-21 02:04:30 +0000waleee(~waleee@h-176-10-137-138.NA.cust.bahnhof.se) (Ping timeout: 250 seconds)
2023-08-21 02:05:21 +0000 <int-e> hmm... it's quite possible that findIndex actually unpacks the text into a stream
2023-08-21 02:07:07 +0000 <wroathe> I was actually just about to test if findIndex was the culprit
2023-08-21 02:07:10 +0000 <int-e> Follow https://hackage.haskell.org/package/text-2.0.2/docs/src/Data.Text.html#findIndex and notice the absence of an implementation that *doesn't* use a stream.
2023-08-21 02:07:45 +0000 <EvanR> is something wrong with using a stream
2023-08-21 02:11:48 +0000td_(~td@i53870934.versanet.de) (Ping timeout: 256 seconds)
2023-08-21 02:13:35 +0000td_(~td@i53870925.versanet.de)
2023-08-21 02:14:15 +0000xff0x(~xff0x@2405:6580:b080:900:9c64:3e23:a36:74a0) (Ping timeout: 245 seconds)
2023-08-21 02:16:31 +0000gastus(~gastus@185.6.123.186)
2023-08-21 02:16:34 +0000nate2(~nate@c-98-45-169-16.hsd1.ca.comcast.net)
2023-08-21 02:17:52 +0000 <dsal> I replaced that code that was using unsafeIOToSTM by making a pure "forgetful" map and just wrapping it in STM.
2023-08-21 02:18:00 +0000hugo(znc@verdigris.lysator.liu.se) (Ping timeout: 245 seconds)
2023-08-21 02:18:27 +0000 <dsal> It's not *exactly* the same because that other thing was overly precise with its clock updates and stuff. We just don't want to remember everything forever, so mine's a lot more chill.
2023-08-21 02:19:39 +0000gastus_(~gastus@185.6.123.193) (Ping timeout: 244 seconds)
2023-08-21 02:20:14 +0000 <dsal> The original code was using Map.filter in a loop to drop old entries, so it wasn't exactly precise anyway (though I made all the entrypoints also check before I started making larger changes).
2023-08-21 02:20:49 +0000 <int-e> EvanR: Hmm it's more subtle than that. If `text` was compiled with optimizations, the Stream should all disappear. However, the resulting `findIndex` is too big to be inlined. Which means that the chars that are passed to the predicate all have to be boxed... though that doesn't begin to explain 2GB worth of allocations for at most 8M skipped bytes.
2023-08-21 02:21:03 +0000 <dsal> Now I just do a Map.splitLookup on a synthetic time thing which gives me all the keys that need to be deleted.
2023-08-21 02:22:42 +0000jargon(~jargon@174-22-213-62.phnx.qwest.net) (Remote host closed the connection)
2023-08-21 02:22:50 +0000 <int-e> anyway, let me get out of this rabbit hole
2023-08-21 02:23:00 +0000razetime(~quassel@117.254.36.220) (Ping timeout: 245 seconds)
2023-08-21 02:23:31 +0000 <EvanR> you can checkout anytime but never leave
2023-08-21 02:23:37 +0000razetime(~quassel@117.254.37.117)
2023-08-21 02:23:40 +0000ddellacosta(~ddellacos@146.70.168.217) (Ping timeout: 248 seconds)
2023-08-21 02:25:21 +0000 <monochrom> The singularity is in your future. >:)
2023-08-21 02:27:25 +0000 <int-e> EvanR: (More subtlety: there's also a boxed Bool in that picture... but the two values are statically allocated.)
2023-08-21 02:28:03 +0000 <EvanR> .oO(are the first few Char statically allocated too)
2023-08-21 02:28:17 +0000 <EvanR> (or the first few Int for that matter)
2023-08-21 02:28:32 +0000justsomeguy(~justsomeg@user/justsomeguy)
2023-08-21 02:28:35 +0000 <int-e> EvanR: yes but I believe only the unpackCString (spelling?) stuff actually uses that
2023-08-21 02:28:54 +0000hugo(znc@2001:6b0:17:f0a0::17)
2023-08-21 02:28:57 +0000 <int-e> And in particular, the C# constructor of Char doesn't.
2023-08-21 02:29:25 +0000 <int-e> emphasis on *believe*
2023-08-21 02:31:06 +0000ddellacosta(~ddellacos@146.70.171.136)
2023-08-21 02:35:50 +0000 <wroathe> int-e: So this version of advanceTo has no appreciable difference on the 2GB of allocations: https://gist.github.com/JustinChristensen/72e4eae8a8e6e4e4f9be09078770c504#file-sigh-hs
2023-08-21 02:36:03 +0000 <wroathe> so findIndex doesn't appear to be the problem
2023-08-21 02:36:26 +0000 <wroathe> The stateOffset is only used to compute error output, so for the purposes of testing it can be elided
2023-08-21 02:36:53 +0000Inst(~liamzy@2601:6c4:4085:6d50::85eb)
2023-08-21 02:44:17 +0000 <int-e> as you suggested earlier, it is possible that there's some misattribution there.
2023-08-21 02:44:57 +0000 <int-e> or maybe the function gets used way more often than you think due to backtracking
2023-08-21 02:46:14 +0000hsxtrt(~hsxtrt@14.200.253.168) (Quit: Leaving)
2023-08-21 02:46:40 +0000 <wroathe> Well, I just looked at the input file and there are 1,087,560 tabs and newlines in it
2023-08-21 02:46:48 +0000 <wroathe> So that should be the number of times advanceTo is called
2023-08-21 02:47:53 +0000 <int-e> EvanR: fwiw, using C# definitely results in heap allocations
2023-08-21 02:48:09 +0000 <EvanR> :t C#
2023-08-21 02:48:10 +0000 <lambdabot> error: Data constructor not in scope: C#
2023-08-21 02:48:22 +0000 <int-e> % :info Char
2023-08-21 02:48:22 +0000 <yahb2> type Char :: * ; data Char = GHC.Types.C# GHC.Prim.Char# ; -- Defined in ‘GHC.Types’ ; instance Eq Char -- Defined in ‘GHC.Classes’ ; instance Ord Char -- Defined in ‘GHC.Classes’ ; instance Enu...
2023-08-21 02:48:57 +0000 <int-e> :t GHC.Types.C#
2023-08-21 02:48:57 +0000 <EvanR> when you type 'c' is that "using C#" or a statically allocated 'c'
2023-08-21 02:48:58 +0000 <lambdabot> GHC.Prim.Char# -> Char
2023-08-21 02:49:16 +0000justsomeguy(~justsomeg@user/justsomeguy) (Ping timeout: 260 seconds)
2023-08-21 02:49:36 +0000mikoto-chan(~mikoto-ch@85-76-111-77-nat.elisa-mobile.fi) (Ping timeout: 245 seconds)
2023-08-21 02:50:04 +0000 <int-e> That's a compile time constant, so it'll be *a* statically allocated 'c'. I'm not sure that those are shared across modules.
2023-08-21 02:50:34 +0000 <EvanR> I would never presume to suggest they were!
2023-08-21 02:50:52 +0000justsomeguy(justsomegu@user/justsomeguy)
2023-08-21 02:50:59 +0000 <int-e> But I meant actually using C# as a function with unknown argument.
2023-08-21 02:51:07 +0000 <EvanR> sure
2023-08-21 02:51:44 +0000finn_elija(~finn_elij@user/finn-elija/x-0085643)
2023-08-21 02:51:44 +0000FinnElija(~finn_elij@user/finn-elija/x-0085643) (Killed (NickServ (Forcing logout FinnElija -> finn_elija)))
2023-08-21 02:51:44 +0000finn_elijaFinnElija
2023-08-21 02:54:48 +0000jpds(~jpds@gateway/tor-sasl/jpds) (Ping timeout: 246 seconds)
2023-08-21 02:55:09 +0000xff0x(~xff0x@125x103x176x34.ap125.ftth.ucom.ne.jp)
2023-08-21 02:57:10 +0000arahael(~arahael@119-18-1-27.771201.syd.nbn.aussiebb.net)
2023-08-21 03:00:50 +0000jargon(~jargon@174-22-213-62.phnx.qwest.net)
2023-08-21 03:01:40 +0000arahael(~arahael@119-18-1-27.771201.syd.nbn.aussiebb.net) (Ping timeout: 256 seconds)
2023-08-21 03:02:28 +0000jmcantrell(~weechat@user/jmcantrell)
2023-08-21 03:03:26 +0000 <wroathe> int-e: using lazy text instead of strict text resulted in 27% fewer allocations in that dropWhile implementation
2023-08-21 03:04:11 +0000 <wroathe> From 2,717,358,616 bytes down to 1,969,361,672
2023-08-21 03:04:56 +0000aforemny(~aforemny@i59F516C9.versanet.de) (Ping timeout: 246 seconds)
2023-08-21 03:05:12 +0000 <EvanR> lazy readFile will do lazy I/O (like I originally suggested)
2023-08-21 03:05:33 +0000 <EvanR> though the parsing still kind defeats some of the benefit
2023-08-21 03:05:52 +0000aforemny(~aforemny@2001:9e8:6cd8:3100:c980:385d:6185:8dda)
2023-08-21 03:07:27 +0000hsw(~hsw@2001-b030-2303-0104-0172-0025-0012-0132.hinet-ip6.hinet.net) (Quit: Leaving)
2023-08-21 03:10:52 +0000 <int-e> EvanR: on the other hand, String literals (unpackCString#) and IO (like getContents) share the same table of "low" characters.
2023-08-21 03:12:52 +0000wroathe(~wroathe@user/wroathe) (Ping timeout: 244 seconds)
2023-08-21 03:16:20 +0000shapr(~user@2600:1700:c640:3100:6898:ed8d:7f5e:e726) (Remote host closed the connection)
2023-08-21 03:16:55 +0000shapr(~user@2600:1700:c640:3100:2ac6:30d3:17d6:81ff)
2023-08-21 03:18:33 +0000nate2(~nate@c-98-45-169-16.hsd1.ca.comcast.net) (Ping timeout: 244 seconds)
2023-08-21 03:23:56 +0000libertyprime(~libertypr@203.96.203.44) (Ping timeout: 248 seconds)
2023-08-21 03:27:07 +0000ulysses4ever(~artem@c-73-103-90-145.hsd1.in.comcast.net)
2023-08-21 03:27:07 +0000artem(~artem@c-73-103-90-145.hsd1.in.comcast.net) (Read error: Connection reset by peer)
2023-08-21 03:32:22 +0000libertyprime(~libertypr@203.96.203.44)
2023-08-21 03:34:32 +0000justsomeguy(justsomegu@user/justsomeguy) (Ping timeout: 245 seconds)
2023-08-21 03:40:12 +0000Unicorn_Princess(~Unicorn_P@user/Unicorn-Princess/x-3540542) (Remote host closed the connection)
2023-08-21 03:47:31 +0000ddellacosta(~ddellacos@146.70.171.136) (Ping timeout: 245 seconds)
2023-08-21 03:49:33 +0000ddellacosta(~ddellacos@146.70.168.136)
2023-08-21 03:50:12 +0000Inst(~liamzy@2601:6c4:4085:6d50::85eb) (Remote host closed the connection)
2023-08-21 03:50:58 +0000Inst(~liamzy@2601:6c4:4085:6d50::a0f6)
2023-08-21 03:54:59 +0000[itchyjunk](~itchyjunk@user/itchyjunk/x-7353470) (Remote host closed the connection)
2023-08-21 04:00:32 +0000actioninja(~actioninj@user/actioninja) (Quit: see ya mane)
2023-08-21 04:00:57 +0000actioninja(~actioninj@user/actioninja)
2023-08-21 04:05:37 +0000g(~glguy@libera/staff-emeritus/glguy) (Remote host closed the connection)
2023-08-21 04:05:44 +0000g(~glguy@libera/staff-emeritus/glguy)
2023-08-21 04:06:40 +0000_ht(~Thunderbi@28-52-174-82.ftth.glasoperator.nl)
2023-08-21 04:07:29 +0000g(~glguy@libera/staff-emeritus/glguy) (Remote host closed the connection)
2023-08-21 04:07:37 +0000g(g@libera/staff-emeritus/glguy)
2023-08-21 04:23:29 +0000jargon(~jargon@174-22-213-62.phnx.qwest.net) (Remote host closed the connection)
2023-08-21 04:23:46 +0000razetime(~quassel@117.254.37.117) (Ping timeout: 245 seconds)
2023-08-21 04:24:48 +0000mvk(~mvk@2607:fea8:5c9a:a600::1c6d) (Ping timeout: 246 seconds)
2023-08-21 04:26:12 +0000jmcantrell(~weechat@user/jmcantrell) (Quit: WeeChat 4.0.3)
2023-08-21 04:53:09 +0000libertyprime(~libertypr@203.96.203.44) (Ping timeout: 246 seconds)
2023-08-21 04:56:18 +0000arahael(~arahael@119-18-1-27.771201.syd.nbn.aussiebb.net)
2023-08-21 05:00:30 +0000arahael(~arahael@119-18-1-27.771201.syd.nbn.aussiebb.net) (Ping timeout: 246 seconds)
2023-08-21 05:01:47 +0000Inst(~liamzy@2601:6c4:4085:6d50::a0f6) (Remote host closed the connection)
2023-08-21 05:02:05 +0000Inst(~liamzy@2601:6c4:4085:6d50::85eb)
2023-08-21 05:11:12 +0000Feuermagier(~Feuermagi@user/feuermagier) (Quit: Leaving)
2023-08-21 05:11:26 +0000bjin(~bjin@user/bjin)
2023-08-21 05:15:59 +0000nate2(~nate@c-98-45-169-16.hsd1.ca.comcast.net)
2023-08-21 05:20:22 +0000nate2(~nate@c-98-45-169-16.hsd1.ca.comcast.net) (Ping timeout: 250 seconds)
2023-08-21 05:28:23 +0000arahael(~arahael@119-18-1-27.771201.syd.nbn.aussiebb.net)
2023-08-21 05:32:32 +0000arahael(~arahael@119-18-1-27.771201.syd.nbn.aussiebb.net) (Ping timeout: 240 seconds)
2023-08-21 05:34:28 +0000eggplantade(~Eggplanta@2600:1700:38c5:d800:bc38:61d8:7af5:2488) (Remote host closed the connection)
2023-08-21 05:35:37 +0000jonathan__(~jonathan@193.203.13.94)
2023-08-21 05:36:01 +0000bgs(~bgs@212-85-160-171.dynamic.telemach.net)
2023-08-21 05:37:12 +0000_ht(~Thunderbi@28-52-174-82.ftth.glasoperator.nl) (Quit: _ht)
2023-08-21 05:41:13 +0000chele(~chele@user/chele)
2023-08-21 05:48:55 +0000michalz(~michalz@185.246.207.222)
2023-08-21 05:53:30 +0000notzmv(~zmv@user/notzmv) (Ping timeout: 246 seconds)
2023-08-21 05:55:04 +0000NewtonTrendy(uid282092@user/bopqod) (Quit: Connection closed for inactivity)
2023-08-21 06:08:29 +0000justsomeguy(~justsomeg@user/justsomeguy)
2023-08-21 06:08:42 +0000Inst(~liamzy@2601:6c4:4085:6d50::85eb) (Ping timeout: 258 seconds)
2023-08-21 06:09:48 +0000mikoto-chan(~mikoto-ch@85-76-50-50-nat.elisa-mobile.fi)
2023-08-21 06:13:19 +0000tcard(~tcard@2400:4051:5801:7500:cf17:befc:ff82:5303) (Remote host closed the connection)
2023-08-21 06:13:59 +0000tcard(~tcard@2400:4051:5801:7500:cf17:befc:ff82:5303)
2023-08-21 06:15:12 +0000arahael(~arahael@119-18-1-27.771201.syd.nbn.aussiebb.net)
2023-08-21 06:15:49 +0000tcard(~tcard@2400:4051:5801:7500:cf17:befc:ff82:5303) (Read error: Connection reset by peer)
2023-08-21 06:16:30 +0000tcard(~tcard@2400:4051:5801:7500:cf17:befc:ff82:5303)
2023-08-21 06:16:44 +0000shapr(~user@2600:1700:c640:3100:2ac6:30d3:17d6:81ff) (Ping timeout: 248 seconds)
2023-08-21 06:16:59 +0000acidjnk(~acidjnk@p200300d6e7072f62514217c34acbe695.dip0.t-ipconnect.de)
2023-08-21 06:19:32 +0000arahael(~arahael@119-18-1-27.771201.syd.nbn.aussiebb.net) (Ping timeout: 246 seconds)
2023-08-21 06:21:42 +0000YuutaW(~YuutaW@mail.yuuta.moe) (Ping timeout: 256 seconds)
2023-08-21 06:24:17 +0000razetime(~quassel@117.254.37.117)
2023-08-21 06:25:20 +0000YuutaW(~YuutaW@mail.yuuta.moe)
2023-08-21 06:35:30 +0000Simikando(~Simikando@adsl-dyn1.91-127-51.t-com.sk)
2023-08-21 06:35:38 +0000eggplantade(~Eggplanta@104-55-37-220.lightspeed.sntcca.sbcglobal.net)
2023-08-21 06:37:44 +0000justsomeguy(~justsomeg@user/justsomeguy) (Ping timeout: 246 seconds)
2023-08-21 06:38:26 +0000paddymahoney(~paddymaho@cpe883d24bcf597-cmbc4dfb741f80.cpe.net.cable.rogers.com) (Ping timeout: 246 seconds)
2023-08-21 06:40:06 +0000eggplantade(~Eggplanta@104-55-37-220.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 250 seconds)
2023-08-21 06:40:39 +0000Simikando(~Simikando@adsl-dyn1.91-127-51.t-com.sk) (Quit: Leaving)
2023-08-21 06:43:56 +0000lortabac(~lortabac@2a01:e0a:541:b8f0:cc65:1a3b:6ab3:49f4)
2023-08-21 06:47:49 +0000Simikando(~Simikando@adsl-dyn1.91-127-51.t-com.sk)
2023-08-21 06:48:15 +0000justsomeguy(~justsomeg@user/justsomeguy)
2023-08-21 06:52:10 +0000Simikando(~Simikando@adsl-dyn1.91-127-51.t-com.sk) (Ping timeout: 246 seconds)
2023-08-21 06:52:31 +0000justsomeguy(~justsomeg@user/justsomeguy) (Ping timeout: 246 seconds)
2023-08-21 06:52:34 +0000fendor(~fendor@2a02:8388:1640:be00:b586:6c06:a58:19a3)
2023-08-21 06:58:35 +0000idgaen(~idgaen@2a01:e0a:498:fd50:fcc6:bb5d:489a:ce8c)
2023-08-21 07:03:02 +0000ensyde(ensyde@2600:3c02::f03c:93ff:fe9e:b831)
2023-08-21 07:06:41 +0000mikoto-chan(~mikoto-ch@85-76-50-50-nat.elisa-mobile.fi) (Ping timeout: 245 seconds)
2023-08-21 07:07:37 +0000bliminse(~bliminse@user/bliminse) (Quit: leaving)
2023-08-21 07:10:21 +0000dibblego(~dibblego@haskell/developer/dibblego) (Ping timeout: 246 seconds)
2023-08-21 07:10:28 +0000rune__(sid21167@ilkley.irccloud.com)
2023-08-21 07:11:13 +0000rune__(sid21167@ilkley.irccloud.com) (Client Quit)
2023-08-21 07:14:57 +0000coot(~coot@89-69-206-216.dynamic.chello.pl)
2023-08-21 07:17:00 +0000dibblego(~dibblego@116-255-1-151.ip4.superloop.au)
2023-08-21 07:17:00 +0000dibblego(~dibblego@116-255-1-151.ip4.superloop.au) (Changing host)
2023-08-21 07:17:00 +0000dibblego(~dibblego@haskell/developer/dibblego)
2023-08-21 07:19:11 +0000mikoto-chan(~mikoto-ch@ip-83-134-209-157.dsl.scarlet.be)
2023-08-21 07:19:23 +0000cfricke(~cfricke@user/cfricke)
2023-08-21 07:21:54 +0000gastus(~gastus@185.6.123.186) (Ping timeout: 244 seconds)
2023-08-21 07:22:34 +0000Pickchea(~private@user/pickchea)
2023-08-21 07:26:11 +0000CiaoSen(~Jura@2a05:5800:2d6:1600:664b:f0ff:fe37:9ef)
2023-08-21 07:37:06 +0000ft(~ft@p4fc2ad78.dip0.t-ipconnect.de) (Ping timeout: 245 seconds)
2023-08-21 07:37:32 +0000mikoto-chan(~mikoto-ch@ip-83-134-209-157.dsl.scarlet.be) (Ping timeout: 252 seconds)
2023-08-21 07:41:02 +0000misterfish(~misterfis@87.215.131.102)
2023-08-21 07:43:10 +0000arahael(~arahael@119-18-1-27.771201.syd.nbn.aussiebb.net)
2023-08-21 07:43:26 +0000bliminse(~bliminse@user/bliminse)
2023-08-21 07:44:52 +0000dibblego(~dibblego@haskell/developer/dibblego) (Ping timeout: 240 seconds)
2023-08-21 07:46:46 +0000idgaen(~idgaen@2a01:e0a:498:fd50:fcc6:bb5d:489a:ce8c) (Quit: WeeChat 4.0.2)
2023-08-21 07:47:52 +0000arahael(~arahael@119-18-1-27.771201.syd.nbn.aussiebb.net) (Ping timeout: 245 seconds)
2023-08-21 07:48:56 +0000ft(~ft@p4fc2ad78.dip0.t-ipconnect.de)
2023-08-21 07:49:16 +0000wrengr(~wrengr@201.59.83.34.bc.googleusercontent.com) (Remote host closed the connection)
2023-08-21 07:49:43 +0000gensyst(~gensyst@user/gensyst)
2023-08-21 07:49:47 +0000 <gensyst> I have tons of these: "newtype Lol = Lol Float", "newtype Rofl = Rofl Float".
2023-08-21 07:49:47 +0000 <gensyst> When extracting, I'm always doing "(let Lol x = lol in x)", "(let Rofl x = rofl in x)", etc.
2023-08-21 07:49:47 +0000 <gensyst> Is it possible to have one general extraction function that works for all newtypes?
2023-08-21 07:50:02 +0000dibblego(~dibblego@116-255-1-151.ip4.superloop.au)
2023-08-21 07:50:02 +0000dibblego(~dibblego@116-255-1-151.ip4.superloop.au) (Changing host)
2023-08-21 07:50:02 +0000dibblego(~dibblego@haskell/developer/dibblego)
2023-08-21 07:52:30 +0000mikoto-chan(~mikoto-ch@ip-83-134-209-157.dsl.scarlet.be)
2023-08-21 07:52:43 +0000 <opqdonut> gensyst: you can define your own class, or use one of the solutions on hackage like https://hackage.haskell.org/package/newtype
2023-08-21 07:53:01 +0000mima(~mmh@aftr-62-216-211-33.dynamic.mnet-online.de)
2023-08-21 07:54:03 +0000 <probie> gensyst: `Data.Coerce.coerce`?
2023-08-21 07:54:59 +0000jespada(~jespada@cpc121308-nmal25-2-0-cust15.19-2.cable.virginm.net) (Remote host closed the connection)
2023-08-21 07:55:37 +0000jespada(~jespada@cpc121308-nmal25-2-0-cust15.19-2.cable.virginm.net)
2023-08-21 07:58:22 +0000econo_(uid147250@id-147250.tinside.irccloud.com) (Quit: Connection closed for inactivity)
2023-08-21 07:59:30 +0000 <dminuoso> gensyst: Also, newtypes can have field accessors. So you can also write something like `newtype Lol = Lol { unLol :: Float }`, that can help some as well.
2023-08-21 08:00:22 +0000Sgeo(~Sgeo@user/sgeo) (Read error: Connection reset by peer)
2023-08-21 08:02:10 +0000 <dminuoso> If you're using Lens, Control.Lens.Wrapped might be interesting to look at as well. You could also consider Generics (Control.Lens.Wrapped.Wrapped has a default implementation to look at)
2023-08-21 08:04:23 +0000notzmv(~zmv@user/notzmv)
2023-08-21 08:11:18 +0000azimut(~azimut@gateway/tor-sasl/azimut) (Remote host closed the connection)
2023-08-21 08:11:44 +0000azimut(~azimut@gateway/tor-sasl/azimut)
2023-08-21 08:12:23 +0000califax(~califax@user/califx) (Remote host closed the connection)
2023-08-21 08:12:46 +0000califax(~califax@user/califx)
2023-08-21 08:15:22 +0000dibblego(~dibblego@haskell/developer/dibblego) (Ping timeout: 245 seconds)
2023-08-21 08:15:56 +0000Simikando(~Simikando@adsl-dyn1.91-127-51.t-com.sk)
2023-08-21 08:20:49 +0000dibblego(~dibblego@116-255-1-151.ip4.superloop.au)
2023-08-21 08:20:49 +0000dibblego(~dibblego@116-255-1-151.ip4.superloop.au) (Changing host)
2023-08-21 08:20:49 +0000dibblego(~dibblego@haskell/developer/dibblego)
2023-08-21 08:20:59 +0000arahael(~arahael@119-18-1-27.771201.syd.nbn.aussiebb.net)
2023-08-21 08:21:55 +0000dhil(~dhil@78.45.150.83.ewm.ftth.as8758.net)
2023-08-21 08:24:00 +0000lortabac(~lortabac@2a01:e0a:541:b8f0:cc65:1a3b:6ab3:49f4) (Ping timeout: 246 seconds)
2023-08-21 08:30:42 +0000lortabac(~lortabac@2a01:e0a:541:b8f0:a6c1:e36f:a7ec:e7e5)
2023-08-21 08:35:41 +0000razetime(~quassel@117.254.37.117) (Ping timeout: 246 seconds)
2023-08-21 08:35:50 +0000Simikando(~Simikando@adsl-dyn1.91-127-51.t-com.sk) (Ping timeout: 252 seconds)
2023-08-21 08:38:02 +0000turlando(~turlando@user/turlando)
2023-08-21 08:40:48 +0000cyphase_eviltwin(~cyphase@user/cyphase)
2023-08-21 08:40:57 +0000cyphase(~cyphase@user/cyphase) (Ping timeout: 244 seconds)
2023-08-21 08:44:31 +0000 <fendor> I am working through https://blog.sumtypeofway.com/posts/introduction-to-recursion-schemes.html. the advantage of `newtype Term f = In (f (Term f))` is that I can derive, foldable, etc...
2023-08-21 08:44:38 +0000Pickchea(~private@user/pickchea) (Ping timeout: 252 seconds)
2023-08-21 08:45:25 +0000 <fendor> but I seem to be loosing the ability to derive Show for types Expr where `type Expr = Term ExprF`. Can I still derive Show somehow?
2023-08-21 08:47:32 +0000 <[Leary]> fendor: `deriving instance Show (f (Term f)) => Show (Term f)`, with StandaloneDeriving and perhaps UndecidableInstances.
2023-08-21 08:49:51 +0000 <fendor> I am a bit weary of UndecidableInstances in my code... but I suppose, it is fine in this particular instance
2023-08-21 08:51:02 +0000Inst(~liamzy@2601:6c4:4085:6d50::85eb)
2023-08-21 08:51:57 +0000 <probie> You probably want to define `Show1` (from `Data.Functor.Classes` https://hackage.haskell.org/package/base-4.18.0.0/docs/Data-Functor-Classes.html)
2023-08-21 08:53:18 +0000 <c_wraith> UndecidableInstances is harmless. If it ends up in a loop trying to figure something out, it gives an error message instead of compiling incorrectly or something
2023-08-21 08:56:31 +0000razetime(~quassel@117.254.37.117)
2023-08-21 08:59:08 +0000gensyst(~gensyst@user/gensyst) (Ping timeout: 246 seconds)
2023-08-21 09:03:08 +0000danse-nr3(~francesco@151.47.152.232)
2023-08-21 09:03:38 +0000Simikando(~Simikando@adsl-dyn1.91-127-51.t-com.sk)
2023-08-21 09:07:11 +0000 <fendor> it might be harmless, but unless you understand why you need it, you might run into issues later
2023-08-21 09:11:57 +0000 <fendor> probie, thanks!
2023-08-21 09:14:14 +0000Square(~Square4@user/square)
2023-08-21 09:14:26 +0000 <c_wraith> You have to try really hard to run into problems with it. You basically need to be writing fundep prolog to get UndecidableInstances to loop indefinitely
2023-08-21 09:16:03 +0000 <fendor> iirc, I encountered issues that I couldn't actually write the instances I wanted, even though it fixed my initial type error
2023-08-21 09:16:36 +0000Simikando(~Simikando@adsl-dyn1.91-127-51.t-com.sk) (Quit: Leaving)
2023-08-21 09:17:14 +0000nate2(~nate@c-98-45-169-16.hsd1.ca.comcast.net)
2023-08-21 09:19:30 +0000 <[Leary]> fendor: In order to ensure instance resolution finishes within a finite number of steps, Haskell imposes the (overly strong) restriction that constraints on an instance must be smaller (in some precise sense) than the instance head. UndecidableInstances just lifts that restriction.
2023-08-21 09:20:10 +0000 <c_wraith> ah, well. There certainly are instances that don't work even with it on.
2023-08-21 09:21:00 +0000 <c_wraith> Even though GHC tells you enabling it will help - it only helps with one specific thing, and several might apply at the same time.
2023-08-21 09:22:07 +0000 <fendor> exactly
2023-08-21 09:22:28 +0000nate2(~nate@c-98-45-169-16.hsd1.ca.comcast.net) (Ping timeout: 256 seconds)
2023-08-21 09:30:19 +0000ft(~ft@p4fc2ad78.dip0.t-ipconnect.de) (Quit: leaving)
2023-08-21 09:35:41 +0000danse-nr3(~francesco@151.47.152.232) (Ping timeout: 248 seconds)
2023-08-21 09:37:54 +0000eggplantade(~Eggplanta@2600:1700:38c5:d800:d4d1:1f75:43b9:b6be)
2023-08-21 09:42:03 +0000eggplantade(~Eggplanta@2600:1700:38c5:d800:d4d1:1f75:43b9:b6be) (Ping timeout: 246 seconds)
2023-08-21 09:45:10 +0000whatsupdoc(uid509081@id-509081.hampstead.irccloud.com) (Quit: Connection closed for inactivity)
2023-08-21 09:46:45 +0000azimut(~azimut@gateway/tor-sasl/azimut) (Ping timeout: 246 seconds)
2023-08-21 09:47:32 +0000Pickchea(~private@user/pickchea)
2023-08-21 09:52:03 +0000danse-nr3(~francesco@151.47.152.232)
2023-08-21 09:55:05 +0000tzh(~tzh@c-24-21-73-154.hsd1.wa.comcast.net) (Quit: zzz)
2023-08-21 09:55:32 +0000td_(~td@i53870925.versanet.de) (Ping timeout: 250 seconds)
2023-08-21 10:03:09 +0000[itchyjunk](~itchyjunk@user/itchyjunk/x-7353470)
2023-08-21 10:05:34 +0000ensyde(ensyde@2600:3c02::f03c:93ff:fe9e:b831) (Quit: WeeChat 4.0.3)
2023-08-21 10:07:36 +0000xff0x(~xff0x@125x103x176x34.ap125.ftth.ucom.ne.jp) (Ping timeout: 246 seconds)
2023-08-21 10:10:44 +0000Inst(~liamzy@2601:6c4:4085:6d50::85eb) (Remote host closed the connection)
2023-08-21 10:11:03 +0000Inst(~liamzy@2601:6c4:4085:6d50::c972)
2023-08-21 10:11:13 +0000bjin(~bjin@user/bjin) (Leaving)
2023-08-21 10:17:20 +0000td_(~td@i5387092A.versanet.de)
2023-08-21 10:23:51 +0000mc47(~mc47@xmonad/TheMC47)
2023-08-21 10:24:32 +0000CiaoSen(~Jura@2a05:5800:2d6:1600:664b:f0ff:fe37:9ef) (Ping timeout: 246 seconds)
2023-08-21 10:27:16 +0000lottaquestions(~nick@2607:fa49:503d:b200:5a77:1161:fea9:1c25)
2023-08-21 10:28:49 +0000td_(~td@i5387092A.versanet.de) (Ping timeout: 246 seconds)
2023-08-21 10:35:15 +0000Inst(~liamzy@2601:6c4:4085:6d50::c972) (Remote host closed the connection)
2023-08-21 10:35:32 +0000Inst(~liamzy@2601:6c4:4085:6d50::2cf5)
2023-08-21 10:36:18 +0000ripspin(~chatzilla@1.145.138.142)
2023-08-21 10:39:23 +0000shriekingnoise(~shrieking@186.137.175.87) (Quit: Quit)
2023-08-21 10:51:38 +0000justsomeguy(~justsomeg@user/justsomeguy)
2023-08-21 10:58:48 +0000justsomeguy(~justsomeg@user/justsomeguy) (Ping timeout: 250 seconds)
2023-08-21 10:59:37 +0000xff0x(~xff0x@2405:6580:b080:900:519f:cf85:d2f3:6c08)
2023-08-21 11:01:42 +0000acidjnk(~acidjnk@p200300d6e7072f62514217c34acbe695.dip0.t-ipconnect.de) (Ping timeout: 246 seconds)
2023-08-21 11:04:42 +0000acidjnk(~acidjnk@p200300d6e7072f62bd26c55050e04c1c.dip0.t-ipconnect.de)
2023-08-21 11:09:00 +0000vglfr(~vglfr@cli-188-239-201-89.bbn.slav.dn.ua) (Ping timeout: 256 seconds)
2023-08-21 11:09:45 +0000acidjnk(~acidjnk@p200300d6e7072f62bd26c55050e04c1c.dip0.t-ipconnect.de) (Ping timeout: 244 seconds)
2023-08-21 11:10:52 +0000td_(~td@i5387093F.versanet.de)
2023-08-21 11:17:16 +0000mikoto-chan(~mikoto-ch@ip-83-134-209-157.dsl.scarlet.be) (Quit: WeeChat 3.8)
2023-08-21 11:20:44 +0000Pickchea(~private@user/pickchea) (Quit: Leaving)
2023-08-21 11:22:02 +0000cfricke(~cfricke@user/cfricke) (Ping timeout: 260 seconds)
2023-08-21 11:25:08 +0000sm(~sm@plaintextaccounting/sm)
2023-08-21 11:32:30 +0000td_(~td@i5387093F.versanet.de) (Ping timeout: 246 seconds)
2023-08-21 11:36:07 +0000Guest12(~Guest44@176.122.87.241)
2023-08-21 11:39:21 +0000eggplantade(~Eggplanta@2600:1700:38c5:d800:d4d1:1f75:43b9:b6be)
2023-08-21 11:39:22 +0000td_(~td@i5387092D.versanet.de)
2023-08-21 11:43:42 +0000eggplantade(~Eggplanta@2600:1700:38c5:d800:d4d1:1f75:43b9:b6be) (Ping timeout: 245 seconds)
2023-08-21 11:45:23 +0000 <Guest12> hello
2023-08-21 11:46:09 +0000danse-nr3(~francesco@151.47.152.232) (Ping timeout: 246 seconds)
2023-08-21 11:46:35 +0000 <Guest12> https://paste.tomsmeding.com/orqoheRZ
2023-08-21 11:48:06 +0000pointlessslippe1(~pointless@212.82.82.3) (Ping timeout: 256 seconds)
2023-08-21 11:49:59 +0000pointlessslippe1(~pointless@212.82.82.3)
2023-08-21 11:50:12 +0000 <Guest12> is it possible to specify a "specific" SomeType for Message content? or just don't use SomeType?    https://paste.tomsmeding.com/MvCm3vC8
2023-08-21 11:51:11 +0000Guest12(~Guest44@176.122.87.241) (Quit: Client closed)
2023-08-21 11:51:29 +0000Guest92(~Guest44@176.122.87.241)
2023-08-21 11:52:57 +0000razetime(~quassel@117.254.37.117) (Ping timeout: 260 seconds)
2023-08-21 11:54:07 +0000danse-nr3(~francesco@151.47.152.232)
2023-08-21 11:54:32 +0000td_(~td@i5387092D.versanet.de) (Ping timeout: 240 seconds)
2023-08-21 11:56:03 +0000kuribas(~user@2a02:1808:87:3737:23f8:531e:6ce4:5065)
2023-08-21 11:56:42 +0000artem(~artem@c-73-103-90-145.hsd1.in.comcast.net)
2023-08-21 11:56:42 +0000ulysses4ever(~artem@c-73-103-90-145.hsd1.in.comcast.net) (Read error: Connection reset by peer)
2023-08-21 12:03:34 +0000SegmentationFaul(~Segmentat@185.151.84.54)
2023-08-21 12:04:02 +0000jmdaemon(~jmdaemon@user/jmdaemon) (Ping timeout: 260 seconds)
2023-08-21 12:07:07 +0000td_(~td@83.135.9.23)
2023-08-21 12:08:29 +0000Inst(~liamzy@2601:6c4:4085:6d50::2cf5) (Ping timeout: 246 seconds)
2023-08-21 12:15:26 +0000 <exarkun> I tried to write a unit-y test for custom TLS settings for use with http-client-tls (by submitting the configuration and then asking http-client's "manager" to make a connection to a server the tests run, and asserting something about the result of the connection attempt) but I have now run into the issue that the http-client's Connection type is internal (but exposed ... so ... fine I guess) and
2023-08-21 12:15:28 +0000 <exarkun> also missing basic functionality, like a Show instance. Am I barking up the wrong tree?
2023-08-21 12:15:42 +0000danse-nr3(~francesco@151.47.152.232) (Ping timeout: 246 seconds)
2023-08-21 12:16:44 +0000sm(~sm@plaintextaccounting/sm) (Quit: sm)
2023-08-21 12:17:30 +0000kitzman(~kitzman@user/dekenevs) (Quit: C-x C-c)
2023-08-21 12:18:11 +0000Guest92(~Guest44@176.122.87.241) (Quit: Client closed)
2023-08-21 12:18:15 +0000danse-nr3(~francesco@151.47.152.232)
2023-08-21 12:19:29 +0000kitzman(~kitzman@user/dekenevs)
2023-08-21 12:19:31 +0000razetime(~quassel@117.254.37.117)
2023-08-21 12:24:18 +0000dibblego(~dibblego@haskell/developer/dibblego) (Ping timeout: 246 seconds)
2023-08-21 12:26:42 +0000dibblego(~dibblego@116.255.1.151)
2023-08-21 12:26:42 +0000dibblego(~dibblego@116.255.1.151) (Changing host)
2023-08-21 12:26:42 +0000dibblego(~dibblego@haskell/developer/dibblego)
2023-08-21 12:31:28 +0000ripspin(~chatzilla@1.145.138.142) (Remote host closed the connection)
2023-08-21 12:34:48 +0000SegmentationFaul(~Segmentat@185.151.84.54) (Quit: Client closed)
2023-08-21 12:40:36 +0000falafel(~falafel@216.68.6.51.dyn.plus.net)
2023-08-21 12:47:13 +0000ph88(~ph88@ip5b403cd4.dynamic.kabel-deutschland.de)
2023-08-21 12:47:32 +0000 <ph88> how can i run Control.Monad.Fail ? either with Either or with exception
2023-08-21 12:48:16 +0000 <ph88> oh nvm i guess i can turn it into Maybe
2023-08-21 12:49:32 +0000razetime(~quassel@117.254.37.117) (Ping timeout: 245 seconds)
2023-08-21 12:54:20 +0000 <ncf> > fail "boo" :: Either String ()
2023-08-21 12:54:21 +0000 <lambdabot> error:
2023-08-21 12:54:21 +0000 <lambdabot> • No instance for (MonadFail (Either String))
2023-08-21 12:54:21 +0000 <lambdabot> arising from a use of ‘fail’
2023-08-21 12:54:50 +0000 <ncf> rip
2023-08-21 12:57:00 +0000 <ncf> https://gitlab.haskell.org/ghc/ghc/-/issues/12160
2023-08-21 13:01:24 +0000mc47(~mc47@xmonad/TheMC47) (Remote host closed the connection)
2023-08-21 13:02:16 +0000danse-nr3(~francesco@151.47.152.232) (Read error: Connection reset by peer)
2023-08-21 13:02:46 +0000danse-nr3(~francesco@151.37.126.103)
2023-08-21 13:09:46 +0000 <albet70> how to construct an IO String reading element from a list one by one?
2023-08-21 13:11:27 +0000 <ncf> IORef?
2023-08-21 13:15:30 +0000arahael(~arahael@119-18-1-27.771201.syd.nbn.aussiebb.net) (Ping timeout: 245 seconds)
2023-08-21 13:19:00 +0000nate2(~nate@c-98-45-169-16.hsd1.ca.comcast.net)
2023-08-21 13:23:15 +0000kuribas`(~user@2a02:1808:1:281d:be13:5348:8276:dbb0)
2023-08-21 13:23:50 +0000ystael(~ystael@user/ystael)
2023-08-21 13:24:24 +0000nate2(~nate@c-98-45-169-16.hsd1.ca.comcast.net) (Ping timeout: 250 seconds)
2023-08-21 13:25:06 +0000kuribas(~user@2a02:1808:87:3737:23f8:531e:6ce4:5065) (Ping timeout: 260 seconds)
2023-08-21 13:27:54 +0000ccapndave(~ccapndave@xcpe-62-167-165-47.cgn.res.adslplus.ch)
2023-08-21 13:28:57 +0000hgolden(~hgolden@2603-8000-9d00-3ed1-fc05-5499-f77c-fbe5.res6.spectrum.com) (Remote host closed the connection)
2023-08-21 13:31:16 +0000SegmentationFaul(~Segmentat@185.151.84.54)
2023-08-21 13:32:06 +0000dhil(~dhil@78.45.150.83.ewm.ftth.as8758.net) (Ping timeout: 252 seconds)
2023-08-21 13:35:17 +0000sm(~sm@plaintextaccounting/sm)
2023-08-21 13:36:20 +0000arahael(~arahael@119-18-1-27.771201.syd.nbn.aussiebb.net)
2023-08-21 13:36:54 +0000falafel(~falafel@216.68.6.51.dyn.plus.net) (Ping timeout: 246 seconds)
2023-08-21 13:38:55 +0000 <xerox> elements being?
2023-08-21 13:40:11 +0000ccapndave(~ccapndave@xcpe-62-167-165-47.cgn.res.adslplus.ch) (Quit: Textual IRC Client: www.textualapp.com)
2023-08-21 13:40:32 +0000wroathe(~wroathe@207-153-38-140.fttp.usinternet.com)
2023-08-21 13:40:32 +0000wroathe(~wroathe@207-153-38-140.fttp.usinternet.com) (Changing host)
2023-08-21 13:40:32 +0000wroathe(~wroathe@user/wroathe)
2023-08-21 13:40:36 +0000arahael(~arahael@119-18-1-27.771201.syd.nbn.aussiebb.net) (Ping timeout: 246 seconds)
2023-08-21 13:43:58 +0000ec(~ec@gateway/tor-sasl/ec) (Remote host closed the connection)
2023-08-21 13:44:21 +0000ec(~ec@gateway/tor-sasl/ec)
2023-08-21 13:45:05 +0000danse-nr3(~francesco@151.37.126.103) (Ping timeout: 245 seconds)
2023-08-21 13:49:38 +0000danse-nr3(~francesco@151.37.126.103)
2023-08-21 13:52:20 +0000sm(~sm@plaintextaccounting/sm) (Quit: sm)
2023-08-21 13:55:55 +0000ripspin(~chatzilla@1.145.177.194)
2023-08-21 13:56:21 +0000kuribas`(~user@2a02:1808:1:281d:be13:5348:8276:dbb0) (Ping timeout: 246 seconds)
2023-08-21 13:59:04 +0000ddellacosta(~ddellacos@146.70.168.136) (Ping timeout: 250 seconds)
2023-08-21 14:01:52 +0000wroathe(~wroathe@user/wroathe) (Ping timeout: 260 seconds)
2023-08-21 14:05:11 +0000Sgeo(~Sgeo@user/sgeo)
2023-08-21 14:08:34 +0000mc47(~mc47@xmonad/TheMC47)
2023-08-21 14:10:07 +0000Simikando(~Simikando@adsl-dyn1.91-127-51.t-com.sk)
2023-08-21 14:11:53 +0000Simikando(~Simikando@adsl-dyn1.91-127-51.t-com.sk) (Client Quit)
2023-08-21 14:14:12 +0000Simikando(~Simikando@adsl-dyn1.91-127-51.t-com.sk)
2023-08-21 14:23:14 +0000Ram-Z(Ram-Z@2a01:7e01::f03c:91ff:fe57:d2df) (Ping timeout: 246 seconds)
2023-08-21 14:23:15 +0000jonathan(~jonathan@193.203.13.94)
2023-08-21 14:23:41 +0000ulysses4ever(~artem@c-73-103-90-145.hsd1.in.comcast.net)
2023-08-21 14:23:41 +0000artem(~artem@c-73-103-90-145.hsd1.in.comcast.net) (Read error: Connection reset by peer)
2023-08-21 14:29:03 +0000Ram-Z(~Ram-Z@li1814-254.members.linode.com)
2023-08-21 14:31:12 +0000m21it(~m21it@2800:ac:c020:f24b:2278:812f:509e:9a2f)
2023-08-21 14:34:52 +0000 <m21it> Hello! I'm writing some instances for the Data.Data.Data class and I can not understand how `toConstr` and `dataTypeOf` could actually work, because they do seem recursively depend on each other through the `DataRep`.
2023-08-21 14:35:06 +0000 <m21it> https://hackage.haskell.org/package/base-4.18.0.0/docs/src/Data.Data.html#DataType
2023-08-21 14:36:37 +0000 <m21it> I did some tests `x `shouldBe` Data.fromConstr (Data.toConstr x)` but it seems to be non-terminating due to infinite recursion
2023-08-21 14:39:37 +0000Ram-Z(~Ram-Z@li1814-254.members.linode.com) (Quit: ZNC - http://znc.in)
2023-08-21 14:41:24 +0000 <m21it> It seems to be Constr does depend on DataType does depend on DataRep does depend of Constr..
2023-08-21 14:41:28 +0000Ram-Z(Ram-Z@2a01:7e01::f03c:91ff:fe57:d2df)
2023-08-21 14:42:03 +0000Simikando(~Simikando@adsl-dyn1.91-127-51.t-com.sk) (Quit: Leaving)
2023-08-21 14:42:24 +0000acidjnk(~acidjnk@p200300d6e7072f62b0c5e6199a92dfb8.dip0.t-ipconnect.de)
2023-08-21 14:46:31 +0000thegeekinside(~thegeekin@189.180.79.225)
2023-08-21 14:50:52 +0000jonathan(~jonathan@193.203.13.94) (Quit: Leaving)
2023-08-21 14:51:04 +0000srk-(~sorki@user/srk)
2023-08-21 14:54:58 +0000srk(~sorki@user/srk) (Ping timeout: 252 seconds)
2023-08-21 14:54:58 +0000srk-srk
2023-08-21 14:55:06 +0000misterfish(~misterfis@87.215.131.102) (Ping timeout: 256 seconds)
2023-08-21 14:55:48 +0000random-jellyfish(~random-je@user/random-jellyfish)
2023-08-21 15:02:16 +0000 <random-jellyfish> is there a way to convert an imperative algorithm with if statements, while/for loops, break statements, case statements etc. into finite state machine algorithm?
2023-08-21 15:02:32 +0000 <random-jellyfish> is there like a standard way that I can read about and reuse?
2023-08-21 15:04:19 +0000idgaen(~idgaen@2a01:e0a:498:fd50:fcc6:bb5d:489a:ce8c)
2023-08-21 15:04:56 +0000ripspin(~chatzilla@1.145.177.194) (Ping timeout: 250 seconds)
2023-08-21 15:05:42 +0000dsfsdfsdf(~dsfsdfsdf@ip4d148080.dynamic.kabel-deutschland.de)
2023-08-21 15:06:11 +0000 <m21it> random-jellyfish: yes, StateT monad transformer
2023-08-21 15:07:19 +0000 <m21it> random-jellyfish: and if you need more imperative features than just state, you could use other transformers like for example ExceptT for early return/brake
2023-08-21 15:07:42 +0000 <random-jellyfish> can it be implemented in other languages? e.g. CommonLisp?
2023-08-21 15:07:54 +0000dsfsdfsdf(~dsfsdfsdf@ip4d148080.dynamic.kabel-deutschland.de) (Client Quit)
2023-08-21 15:08:41 +0000azimut(~azimut@gateway/tor-sasl/azimut)
2023-08-21 15:09:21 +0000gatekempt(~gatekempt@user/gatekempt)
2023-08-21 15:10:12 +0000 <m21it> It depends, I don't know. Monads and monad transformers do depend on ad-hoc polymorphism (type classes) and higher-order types. In other languages there will be other instruments
2023-08-21 15:10:31 +0000Unicorn_Princess(~Unicorn_P@user/Unicorn-Princess/x-3540542)
2023-08-21 15:14:36 +0000 <[Leary]> m21it: Mutual recursion (whether of values or data types) is not inherently problematic. The docs for the class show what a GHC generated instance looks like, and you can see it ties a knot with `con_C1`, `con_C2` and `ty_T`---this is fine, so long as `mkConstr` and `mkDataType` are not strict in these arguments.
2023-08-21 15:14:44 +0000 <[Leary]> > (fromConstr . toConstr :: Data a => a -> a) <$> [Nothing, Just ()]
2023-08-21 15:14:46 +0000 <lambdabot> [Nothing,Just *Exception: Data.Data.fromConstr
2023-08-21 15:16:37 +0000 <ph88> is there some auto fixer program that can do things like remove unused imports. replace unused variables by underscore etc ?
2023-08-21 15:17:24 +0000artem(~artem@c-73-103-90-145.hsd1.in.comcast.net)
2023-08-21 15:17:25 +0000ulysses4ever(~artem@c-73-103-90-145.hsd1.in.comcast.net) (Read error: Connection reset by peer)
2023-08-21 15:19:01 +0000lortabac(~lortabac@2a01:e0a:541:b8f0:a6c1:e36f:a7ec:e7e5) (Quit: WeeChat 2.8)
2023-08-21 15:21:24 +0000eggplantade(~Eggplanta@2600:1700:38c5:d800:75c0:69c6:c6bf:d46c)
2023-08-21 15:21:27 +0000 <m21it> ph88: hlint and fourmolu are good to remove redundant stuff and do simple auto-refactorings
2023-08-21 15:21:41 +0000ripspin(~chatzilla@1.145.251.200)
2023-08-21 15:22:17 +0000 <ph88> thx
2023-08-21 15:30:07 +0000 <EvanR> express an imperative algorithm with an actual finite state machine is a more narrow objective though, not just can you write it in haskell
2023-08-21 15:30:25 +0000 <geekosaur> https://hackage.haskell.org/package/HaRe seems a bit out of date
2023-08-21 15:30:52 +0000 <geekosaur> but I think most of its goals have been integrated into HLS, not that that has a batch mode
2023-08-21 15:32:01 +0000 <geekosaur> also, PSA: I just got the buggy Linux kernel on my Ubuntu 22.04.2 system, look out for more "mmap 4096 bytes" complaints
2023-08-21 15:32:22 +0000 <m21it> geekosaur: oh, hi! You are in this chat as well :)
2023-08-21 15:32:32 +0000 <geekosaur> (luckily I already upgraded to a GHC that works compatibly with the new kernel)
2023-08-21 15:32:42 +0000 <geekosaur> this is actually my main chat
2023-08-21 15:33:32 +0000Square(~Square4@user/square) (Ping timeout: 248 seconds)
2023-08-21 15:38:44 +0000NewtonTrendy(uid282092@user/bopqod)
2023-08-21 15:38:51 +0000azimut(~azimut@gateway/tor-sasl/azimut) (Ping timeout: 246 seconds)
2023-08-21 15:41:00 +0000 <[Leary]> random-jellyfish: Seems like FSM aren't Turing complete, so an imperative language with while loops is probably too powerful to be translated.
2023-08-21 15:42:02 +0000 <EvanR> yeah, the loops are the fundamental issue. But also imperative code often has int variables, which starts to stretch the definition of Finite State
2023-08-21 15:42:09 +0000rembo10(~rembo10@main.remulis.com) (Quit: ZNC 1.8.2 - https://znc.in)
2023-08-21 15:42:20 +0000 <EvanR> 4 ints is 2^(4*64) states
2023-08-21 15:42:28 +0000rembo10(~rembo10@main.remulis.com)
2023-08-21 15:43:04 +0000sefidel(~sefidel@user/sefidel) (Ping timeout: 244 seconds)
2023-08-21 15:43:11 +0000 <random-jellyfish> yeah it's true some cases might not be translatable
2023-08-21 15:43:20 +0000sefidel(~sefidel@user/sefidel)
2023-08-21 15:47:58 +0000random-jellyfish(~random-je@user/random-jellyfish) (Quit: Client closed)
2023-08-21 15:52:40 +0000chele(~chele@user/chele) (Remote host closed the connection)
2023-08-21 15:53:33 +0000ripspin(~chatzilla@1.145.251.200) (Remote host closed the connection)
2023-08-21 15:56:05 +0000geekosaur(~geekosaur@xmonad/geekosaur) (Remote host closed the connection)
2023-08-21 15:56:59 +0000geekosaur(~geekosaur@xmonad/geekosaur)
2023-08-21 15:57:23 +0000Ram-Z(Ram-Z@2a01:7e01::f03c:91ff:fe57:d2df) (Quit: ZNC - http://znc.in)
2023-08-21 15:59:26 +0000Ram-Z(~Ram-Z@li1814-254.members.linode.com)
2023-08-21 16:00:08 +0000geekosaur(~geekosaur@xmonad/geekosaur) (Remote host closed the connection)
2023-08-21 16:01:04 +0000geekosaur(~geekosaur@xmonad/geekosaur)
2023-08-21 16:02:19 +0000Tuplanolla(~Tuplanoll@91-159-68-236.elisa-laajakaista.fi)
2023-08-21 16:05:01 +0000geekosaur(~geekosaur@xmonad/geekosaur) (Remote host closed the connection)
2023-08-21 16:05:36 +0000_ht(~Thunderbi@28-52-174-82.ftth.glasoperator.nl)
2023-08-21 16:05:52 +0000dhil(~dhil@78.45.150.83.ewm.ftth.as8758.net)
2023-08-21 16:06:31 +0000_ht(~Thunderbi@28-52-174-82.ftth.glasoperator.nl) (Client Quit)
2023-08-21 16:06:51 +0000_ht(~Thunderbi@28-52-174-82.ftth.glasoperator.nl)
2023-08-21 16:11:28 +0000gmg(~user@user/gehmehgeh)
2023-08-21 16:16:56 +0000geekosaur(~geekosaur@xmonad/geekosaur)
2023-08-21 16:16:58 +0000arahael(~arahael@119-18-1-27.771201.syd.nbn.aussiebb.net)
2023-08-21 16:17:33 +0000tzh(~tzh@c-24-21-73-154.hsd1.or.comcast.net)
2023-08-21 16:19:34 +0000geekosaur(~geekosaur@xmonad/geekosaur) (Client Quit)
2023-08-21 16:22:13 +0000FinnElija(~finn_elij@user/finn-elija/x-0085643) (Remote host closed the connection)
2023-08-21 16:22:41 +0000FinnElija(~finn_elij@user/finn-elija/x-0085643)
2023-08-21 16:22:58 +0000geekosaur(~geekosaur@xmonad/geekosaur)
2023-08-21 16:23:36 +0000dcoutts(~duncan@cpc69402-oxfd27-2-0-cust903.4-3.cable.virginm.net) (Ping timeout: 260 seconds)
2023-08-21 16:24:23 +0000razetime(~quassel@117.254.37.154)
2023-08-21 16:24:36 +0000thegeekinside(~thegeekin@189.180.79.225) (Ping timeout: 245 seconds)
2023-08-21 16:25:21 +0000thegeekinside(~thegeekin@189.180.79.225)
2023-08-21 16:25:30 +0000arahael(~arahael@119-18-1-27.771201.syd.nbn.aussiebb.net) (Ping timeout: 245 seconds)
2023-08-21 16:25:55 +0000woffs(3cd46299b2@woffs.de)
2023-08-21 16:37:02 +0000machinedgod(~machinedg@d198-53-218-113.abhsia.telus.net) (Ping timeout: 245 seconds)
2023-08-21 16:39:32 +0000m21it(~m21it@2800:ac:c020:f24b:2278:812f:509e:9a2f) (Remote host closed the connection)
2023-08-21 16:40:02 +0000ulysses4ever(~artem@c-73-103-90-145.hsd1.in.comcast.net)
2023-08-21 16:40:03 +0000artem(~artem@c-73-103-90-145.hsd1.in.comcast.net) (Read error: Connection reset by peer)
2023-08-21 16:42:39 +0000vglfr(~vglfr@145.224.100.231)
2023-08-21 16:43:06 +0000oo_miguel(~Thunderbi@78-11-179-96.static.ip.netia.com.pl)
2023-08-21 16:43:55 +0000SegmentationFaul(~Segmentat@185.151.84.54) (Quit: Client closed)
2023-08-21 16:44:25 +0000vglfr(~vglfr@145.224.100.231) (Read error: Connection reset by peer)
2023-08-21 16:44:35 +0000vglfr(~vglfr@145.224.100.231)
2023-08-21 16:46:42 +0000vglfr(~vglfr@145.224.100.231) (Read error: Connection reset by peer)
2023-08-21 16:50:53 +0000Simikando(~Simikando@adsl-dyn1.91-127-51.t-com.sk)
2023-08-21 16:51:40 +0000FinnElija(~finn_elij@user/finn-elija/x-0085643) (Remote host closed the connection)
2023-08-21 16:52:07 +0000woffs(3cd46299b2@woffs.de) ()
2023-08-21 16:52:14 +0000FinnElija(~finn_elij@user/finn-elija/x-0085643)
2023-08-21 16:53:41 +0000pavonia(~user@user/siracusa) (Quit: Bye!)
2023-08-21 17:02:38 +0000danse-nr3(~francesco@151.37.126.103) (Read error: Connection reset by peer)
2023-08-21 17:03:07 +0000danse-nr3(~francesco@151.47.168.22)
2023-08-21 17:04:16 +0000myyo(~myyo@75-166-145-203.hlrn.qwest.net)
2023-08-21 17:08:00 +0000razetime(~quassel@117.254.37.154) (Ping timeout: 245 seconds)
2023-08-21 17:09:44 +0000shapr(~user@2600:1700:c640:3100:4414:113a:dbea:a6ec)
2023-08-21 17:10:04 +0000zer0bitz(~zer0bitz@user/zer0bitz)
2023-08-21 17:14:30 +0000Simikando(~Simikando@adsl-dyn1.91-127-51.t-com.sk) (Ping timeout: 250 seconds)
2023-08-21 17:14:30 +0000jmcantrell(~weechat@user/jmcantrell)
2023-08-21 17:15:31 +0000ars23(~ars23@92.81.96.66)
2023-08-21 17:15:44 +0000ars23(~ars23@92.81.96.66) (Changing host)
2023-08-21 17:15:44 +0000ars23(~ars23@user/ars23)
2023-08-21 17:15:55 +0000ars23(~ars23@user/ars23) (Remote host closed the connection)
2023-08-21 17:17:04 +0000geekosaur(~geekosaur@xmonad/geekosaur) (Remote host closed the connection)
2023-08-21 17:17:21 +0000myyo(~myyo@75-166-145-203.hlrn.qwest.net) ()
2023-08-21 17:18:17 +0000 <dminuoso> EvanR: 2^(4*64) is quite... finite?
2023-08-21 17:18:24 +0000 <dminuoso> It's not less finite than 10.
2023-08-21 17:18:35 +0000zer0bitz(~zer0bitz@user/zer0bitz) (Read error: Connection reset by peer)
2023-08-21 17:18:36 +0000ulysses4ever(~artem@c-73-103-90-145.hsd1.in.comcast.net) (Read error: Connection reset by peer)
2023-08-21 17:18:48 +0000ulysses4ever(~artem@c-73-103-90-145.hsd1.in.comcast.net)
2023-08-21 17:20:05 +0000 <EvanR> and ram is finite so every algorithm is O(1)
2023-08-21 17:20:26 +0000 <dminuoso> Well RAM is usually not part of the definition of most languages.
2023-08-21 17:20:40 +0000 <dminuoso> So if we consider something like Integer its a different story, because its unbounded in principle.
2023-08-21 17:20:44 +0000nate2(~nate@c-98-45-169-16.hsd1.ca.comcast.net)
2023-08-21 17:20:46 +0000 <dminuoso> But Int is very finite.
2023-08-21 17:22:15 +0000 <mauke> fortunately C isn't turing complete, so it is always O(1)
2023-08-21 17:22:19 +0000 <mauke> which explains its speed
2023-08-21 17:22:22 +0000 <EvanR> having spent time in the godot discord you have this idea that a finite state machine is a particular way of writing an imperative algorithm with if statements and for loops, which is what that discussion immediately sounded like because no one was actually talking about finite state machines
2023-08-21 17:23:47 +0000 <EvanR> finite or not 2^256 sets of rules isn't practical
2023-08-21 17:25:12 +0000nate2(~nate@c-98-45-169-16.hsd1.ca.comcast.net) (Ping timeout: 240 seconds)
2023-08-21 17:27:17 +0000geekosaur(~geekosaur@xmonad/geekosaur)
2023-08-21 17:28:59 +0000Simikando(~Simikando@adsl-dyn1.91-127-51.t-com.sk)
2023-08-21 17:29:40 +0000 <Athas> Why is the dynamically linked binary I build with 'cabal build' 120MiB (86MiB after stripping), while the statically linked binary I build with Nix only 43MiB?
2023-08-21 17:29:51 +0000 <Athas> Same version of GHC and almost same Hackage dependencies.
2023-08-21 17:30:14 +0000 <Athas> Also same GHC options, unless Nix sets something unusual.
2023-08-21 17:37:52 +0000Simikando(~Simikando@adsl-dyn1.91-127-51.t-com.sk) (Ping timeout: 240 seconds)
2023-08-21 17:38:32 +0000kimiamania600(~65804703@user/kimiamania)
2023-08-21 17:38:48 +0000kimiamania60(~65804703@user/kimiamania) (Ping timeout: 244 seconds)
2023-08-21 17:38:48 +0000kimiamania600kimiamania60
2023-08-21 17:40:38 +0000shapr(~user@2600:1700:c640:3100:4414:113a:dbea:a6ec) (Ping timeout: 246 seconds)
2023-08-21 17:44:09 +0000danse-nr3(~francesco@151.47.168.22) (Remote host closed the connection)
2023-08-21 17:44:31 +0000danse-nr3(~francesco@151.47.168.22)
2023-08-21 17:47:20 +0000danza(~francesco@151.47.168.22)
2023-08-21 17:48:21 +0000ddellacosta(~ddellacos@146.70.168.100)
2023-08-21 17:50:18 +0000danse-nr3(~francesco@151.47.168.22) (Ping timeout: 246 seconds)
2023-08-21 17:58:52 +0000 <tomsmeding> Athas: any striking differences when running this? objdump -h $EXECNAME | awk '{print $3 " " $2}' | grep '^[0-9a-f]\+ ' | sort
2023-08-21 18:00:25 +0000teddyc(theodorc@cassarossa.samfundet.no) (Quit: WeeChat 3.0)
2023-08-21 18:01:16 +0000kimiamania60(~65804703@user/kimiamania) (Ping timeout: 245 seconds)
2023-08-21 18:02:00 +0000 <Athas> The .text and .data sections are only half the size in the Nix-built one.
2023-08-21 18:02:17 +0000 <geekosaur> sounds like it uses -split-sections?
2023-08-21 18:02:22 +0000 <Athas> Which of them?
2023-08-21 18:02:49 +0000 <geekosaur> what?
2023-08-21 18:03:20 +0000 <geekosaur> oh. I mean nix does
2023-08-21 18:03:21 +0000 <Athas> Is it the Nix or the cabal one that you think uses -split-sections?
2023-08-21 18:03:42 +0000 <Athas> Is there a reason not to use -split-sections, if it makes such a large difference?
2023-08-21 18:03:43 +0000 <geekosaur> it means the linker can do more pruning of unusede code/data
2023-08-21 18:03:51 +0000 <geekosaur> portability, mostly
2023-08-21 18:04:31 +0000 <geekosaur> also it's somewhat slower to build and in particuloar link
2023-08-21 18:04:48 +0000 <geekosaur> (granted, not as horrendously slow as the old -split-objs)
2023-08-21 18:05:03 +0000 <tomsmeding> portability across linkers or portability across loaders (running platforms)?
2023-08-21 18:05:25 +0000 <geekosaur> neither os x nor windows supports -split-sections
2023-08-21 18:05:27 +0000mc47(~mc47@xmonad/TheMC47) (Remote host closed the connection)
2023-08-21 18:06:53 +0000 <Athas> Presumably GHC knows which operating system it is running on.
2023-08-21 18:07:48 +0000 <geekosaur> yes, it just whines if you use it on the wrong platform, but some people don't like that
2023-08-21 18:08:18 +0000kimiamania600(~65804703@user/kimiamania)
2023-08-21 18:10:47 +0000 <geekosaur> also it puts a lot of load on the linker, meaning you should prefer `ld.gold`, but you should anyway as there's a bug iirc in the old bfd linker that ghc tickles
2023-08-21 18:16:24 +0000 <geekosaur> (or a non-GNU linker if you are on an ELF platform that has one)
2023-08-21 18:19:11 +0000ph88(~ph88@ip5b403cd4.dynamic.kabel-deutschland.de) (Remote host closed the connection)
2023-08-21 18:25:41 +0000m1dnight(~christoph@78-22-4-67.access.telenet.be) (Read error: Connection reset by peer)
2023-08-21 18:26:42 +0000geekosaur(~geekosaur@xmonad/geekosaur) (Remote host closed the connection)
2023-08-21 18:26:59 +0000Simikando(~Simikando@adsl-dyn1.91-127-51.t-com.sk)
2023-08-21 18:27:24 +0000tromp(~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
2023-08-21 18:29:19 +0000eggplantade(~Eggplanta@2600:1700:38c5:d800:75c0:69c6:c6bf:d46c) (Remote host closed the connection)
2023-08-21 18:29:59 +0000mima(~mmh@aftr-62-216-211-33.dynamic.mnet-online.de) (Ping timeout: 246 seconds)
2023-08-21 18:31:38 +0000m1dnight(~christoph@78-22-4-67.access.telenet.be)
2023-08-21 18:36:31 +0000fendor(~fendor@2a02:8388:1640:be00:b586:6c06:a58:19a3) (Remote host closed the connection)
2023-08-21 18:38:44 +0000geekosaur(~geekosaur@xmonad/geekosaur)
2023-08-21 18:38:59 +0000waleee(~waleee@2001:9b0:21c:4000:5bf9:6515:c030:57b7)
2023-08-21 18:47:34 +0000Pickchea(~private@user/pickchea)
2023-08-21 19:00:20 +0000Simikando(~Simikando@adsl-dyn1.91-127-51.t-com.sk) (Quit: Leaving)
2023-08-21 19:02:02 +0000geekosaur(~geekosaur@xmonad/geekosaur) (Remote host closed the connection)
2023-08-21 19:03:34 +0000artem(~artem@c-73-103-90-145.hsd1.in.comcast.net)
2023-08-21 19:03:34 +0000ulysses4ever(~artem@c-73-103-90-145.hsd1.in.comcast.net) (Read error: Connection reset by peer)
2023-08-21 19:04:24 +0000geekosaur(~geekosaur@xmonad/geekosaur)
2023-08-21 19:08:33 +0000zer0bitz(~zer0bitz@user/zer0bitz)
2023-08-21 19:15:07 +0000misterfish(~misterfis@84-53-85-146.bbserv.nl)
2023-08-21 19:19:30 +0000shapr(~user@2600:1700:c640:3100:65f2:5dc9:6ef9:713)
2023-08-21 19:29:09 +0000jmdaemon(~jmdaemon@user/jmdaemon)
2023-08-21 19:29:49 +0000eggplantade(~Eggplanta@104-55-37-220.lightspeed.sntcca.sbcglobal.net)
2023-08-21 19:34:11 +0000eggplantade(~Eggplanta@104-55-37-220.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 245 seconds)
2023-08-21 19:49:48 +0000bramhaag7(~bramhaag@134.195.121.39)
2023-08-21 19:50:55 +0000bramhaag(~bramhaag@134.195.121.39) (Ping timeout: 246 seconds)
2023-08-21 19:51:45 +0000ft(~ft@p4fc2ad78.dip0.t-ipconnect.de)
2023-08-21 19:54:12 +0000bramhaag7(~bramhaag@134.195.121.39) (Ping timeout: 260 seconds)
2023-08-21 19:55:25 +0000bramhaag(~bramhaag@134.195.121.39)
2023-08-21 20:01:27 +0000jonathan__(~jonathan@193.203.13.94) (Remote host closed the connection)
2023-08-21 20:01:52 +0000jonathan__(~jonathan@193.203.13.94)
2023-08-21 20:01:58 +0000bramhaag(~bramhaag@134.195.121.39) (Quit: The Lounge - https://thelounge.chat)
2023-08-21 20:03:08 +0000bramhaag7(~bramhaag@198.8.58.39)
2023-08-21 20:03:30 +0000misterfish(~misterfis@84-53-85-146.bbserv.nl) (Ping timeout: 250 seconds)
2023-08-21 20:06:13 +0000idgaen(~idgaen@2a01:e0a:498:fd50:fcc6:bb5d:489a:ce8c) (Quit: WeeChat 4.0.2)
2023-08-21 20:06:37 +0000econo_(uid147250@2a03:5180:f::2:3f32)
2023-08-21 20:15:01 +0000Square2(~Square4@user/square)
2023-08-21 20:15:20 +0000misterfish(~misterfis@84-53-85-146.bbserv.nl)
2023-08-21 20:17:19 +0000_ht(~Thunderbi@28-52-174-82.ftth.glasoperator.nl) (Quit: _ht)
2023-08-21 20:25:28 +0000fendor(~fendor@2a02:8388:1640:be00:b586:6c06:a58:19a3)
2023-08-21 20:25:28 +0000misterfish(~misterfis@84-53-85-146.bbserv.nl) (Ping timeout: 256 seconds)
2023-08-21 20:26:29 +0000son0p(~ff@191.104.6.44)
2023-08-21 20:29:54 +0000dhil(~dhil@78.45.150.83.ewm.ftth.as8758.net) (Ping timeout: 246 seconds)
2023-08-21 20:30:50 +0000ulysses4ever(~artem@73.145.241.240)
2023-08-21 20:32:54 +0000artem(~artem@c-73-103-90-145.hsd1.in.comcast.net) (Ping timeout: 246 seconds)
2023-08-21 20:39:47 +0000artem(~artem@73.145.241.240)
2023-08-21 20:39:47 +0000ulysses4ever(~artem@73.145.241.240) (Read error: Connection reset by peer)
2023-08-21 20:40:10 +0000tromp(~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
2023-08-21 20:47:41 +0000ulysses4ever(~artem@73.145.241.240)
2023-08-21 20:47:41 +0000artem(~artem@73.145.241.240) (Read error: Connection reset by peer)
2023-08-21 20:48:03 +0000tromp(~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
2023-08-21 20:51:32 +0000coot(~coot@89-69-206-216.dynamic.chello.pl) (Quit: coot)
2023-08-21 20:55:05 +0000NewtonTrendy(uid282092@user/bopqod) (Quit: Connection closed for inactivity)
2023-08-21 20:59:51 +0000jonathan__(~jonathan@193.203.13.94) (Ping timeout: 246 seconds)
2023-08-21 21:03:11 +0000danza_(~francesco@151.47.175.249)
2023-08-21 21:03:19 +0000sm(~sm@plaintextaccounting/sm)
2023-08-21 21:04:46 +0000ulysses4ever(~artem@73.145.241.240) (Ping timeout: 260 seconds)
2023-08-21 21:05:18 +0000danza(~francesco@151.47.168.22) (Ping timeout: 252 seconds)
2023-08-21 21:06:31 +0000bgs(~bgs@212-85-160-171.dynamic.telemach.net) (Remote host closed the connection)
2023-08-21 21:17:22 +0000Pickchea(~private@user/pickchea) (Quit: Leaving)
2023-08-21 21:19:36 +0000sm(~sm@plaintextaccounting/sm) (Quit: sm)
2023-08-21 21:20:14 +0000Guest|16(~Guest|16@174.27.143.6)
2023-08-21 21:22:55 +0000nate2(~nate@c-98-45-169-16.hsd1.ca.comcast.net)
2023-08-21 21:28:00 +0000nate2(~nate@c-98-45-169-16.hsd1.ca.comcast.net) (Ping timeout: 250 seconds)
2023-08-21 21:28:01 +0000falafel(~falafel@216.68.6.51.dyn.plus.net)
2023-08-21 21:35:47 +0000michalz(~michalz@185.246.207.222) (Remote host closed the connection)
2023-08-21 21:42:50 +0000jargon(~jargon@174-22-213-62.phnx.qwest.net)
2023-08-21 21:44:02 +0000fendor(~fendor@2a02:8388:1640:be00:b586:6c06:a58:19a3) (Remote host closed the connection)
2023-08-21 21:45:39 +0000ulysses4ever(~artem@73.145.240.4)
2023-08-21 21:50:34 +0000NewtonTrendy(uid282092@user/bopqod)
2023-08-21 21:52:08 +0000arahael(~arahael@119-18-1-27.771201.syd.nbn.aussiebb.net)
2023-08-21 21:52:37 +0000ulysses4ever(~artem@73.145.240.4) (Ping timeout: 260 seconds)
2023-08-21 21:54:09 +0000Lord_of_Life(~Lord@user/lord-of-life/x-2819915) (Quit: Laa shay'a waqi'un moutlaq bale kouloun moumkine)
2023-08-21 21:55:31 +0000Lord_of_Life(~Lord@user/lord-of-life/x-2819915)
2023-08-21 21:59:09 +0000arahael(~arahael@119-18-1-27.771201.syd.nbn.aussiebb.net) (Ping timeout: 246 seconds)
2023-08-21 21:59:26 +0000mjt128(~user@2604:3d09:3e79:f200:7249:9780:ed33:b6f3)
2023-08-21 22:03:06 +0000pavonia(~user@user/siracusa)
2023-08-21 22:05:38 +0000Guest|16(~Guest|16@174.27.143.6) (Quit: Connection closed)
2023-08-21 22:06:47 +0000[_](~itchyjunk@user/itchyjunk/x-7353470)
2023-08-21 22:07:02 +0000[itchyjunk](~itchyjunk@user/itchyjunk/x-7353470) (Ping timeout: 245 seconds)
2023-08-21 22:19:43 +0000drewjose(~drewjose@2401:4900:1cc9:b527:b1a8:defb:8599:3a50)
2023-08-21 22:23:55 +0000gatekempt(~gatekempt@user/gatekempt) (Quit: My MacBook has gone to sleep. ZZZzzz…)
2023-08-21 22:33:39 +0000ulysses4ever(~artem@2601:408:c405:52ad:f474:e3f8:9806:671)
2023-08-21 22:34:30 +0000Guest99(~Guest99@apn-31-0-47-57.dynamic.gprs.plus.pl)
2023-08-21 22:38:05 +0000tromp(~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
2023-08-21 22:38:22 +0000Guest99(~Guest99@apn-31-0-47-57.dynamic.gprs.plus.pl) (Client Quit)
2023-08-21 22:39:36 +0000dibblego(~dibblego@haskell/developer/dibblego) (Ping timeout: 245 seconds)
2023-08-21 22:42:03 +0000ulysses4ever(~artem@2601:408:c405:52ad:f474:e3f8:9806:671) (Ping timeout: 246 seconds)
2023-08-21 22:43:39 +0000ulysses4ever(~artem@2601:408:c405:52ad:f474:e3f8:9806:671)
2023-08-21 22:43:55 +0000dibblego(~dibblego@116-255-1-151.ip4.superloop.au)
2023-08-21 22:43:55 +0000dibblego(~dibblego@116-255-1-151.ip4.superloop.au) (Changing host)
2023-08-21 22:43:55 +0000dibblego(~dibblego@haskell/developer/dibblego)
2023-08-21 22:44:53 +0000gmg(~user@user/gehmehgeh) (Quit: Leaving)
2023-08-21 22:49:49 +0000machinedgod(~machinedg@d198-53-218-113.abhsia.telus.net)
2023-08-21 22:53:58 +0000artem(~artem@73.145.240.227)
2023-08-21 22:53:58 +0000ulysses4ever(~artem@2601:408:c405:52ad:f474:e3f8:9806:671) (Read error: Connection reset by peer)
2023-08-21 22:57:32 +0000mima(~mmh@62.216.211.35)
2023-08-21 22:59:55 +0000jle`(~jle`@cpe-23-240-75-236.socal.res.rr.com) (Ping timeout: 246 seconds)
2023-08-21 23:01:59 +0000jle`(~jle`@cpe-23-240-75-236.socal.res.rr.com)
2023-08-21 23:03:34 +0000acidjnk(~acidjnk@p200300d6e7072f62b0c5e6199a92dfb8.dip0.t-ipconnect.de) (Ping timeout: 256 seconds)
2023-08-21 23:15:44 +0000jargon(~jargon@174-22-213-62.phnx.qwest.net) (Remote host closed the connection)
2023-08-21 23:17:28 +0000shapr(~user@2600:1700:c640:3100:65f2:5dc9:6ef9:713) (Remote host closed the connection)
2023-08-21 23:17:42 +0000shapr(~user@2600:1700:c640:3100:b3b0:6645:998e:257b)
2023-08-21 23:23:21 +0000ystael(~ystael@user/ystael) (Ping timeout: 245 seconds)
2023-08-21 23:23:46 +0000azimut(~azimut@gateway/tor-sasl/azimut)
2023-08-21 23:25:22 +0000machinedgod(~machinedg@d198-53-218-113.abhsia.telus.net) (Ping timeout: 260 seconds)
2023-08-21 23:31:55 +0000gatekempt(~gatekempt@user/gatekempt)
2023-08-21 23:33:26 +0000eggplantade(~Eggplanta@2600:1700:38c5:d800:75c0:69c6:c6bf:d46c)
2023-08-21 23:33:52 +0000myxos_(~myxos@cpe-65-28-251-121.cinci.res.rr.com)
2023-08-21 23:33:56 +0000myxos_(~myxos@cpe-65-28-251-121.cinci.res.rr.com) (Client Quit)
2023-08-21 23:34:50 +0000myxokephale(~myxos@cpe-65-28-251-121.cinci.res.rr.com)
2023-08-21 23:34:54 +0000juri_(~juri@84-19-175-187.pool.ovpn.com) (Ping timeout: 246 seconds)
2023-08-21 23:35:01 +0000myxokephale(~myxos@cpe-65-28-251-121.cinci.res.rr.com) (Client Quit)
2023-08-21 23:37:43 +0000eggplantade(~Eggplanta@2600:1700:38c5:d800:75c0:69c6:c6bf:d46c) (Ping timeout: 246 seconds)
2023-08-21 23:41:50 +0000juri_(~juri@79.140.117.208)
2023-08-21 23:44:02 +0000Lord_of_Life(~Lord@user/lord-of-life/x-2819915) (Ping timeout: 260 seconds)
2023-08-21 23:44:24 +0000Lord_of_Life(~Lord@user/lord-of-life/x-2819915)
2023-08-21 23:49:56 +0000Tuplanolla(~Tuplanoll@91-159-68-236.elisa-laajakaista.fi) (Quit: Leaving.)
2023-08-21 23:50:40 +0000mvk(~mvk@2607:fea8:5c9a:a600::1c6d)
2023-08-21 23:52:52 +0000juri_(~juri@79.140.117.208) (Ping timeout: 244 seconds)
2023-08-21 23:54:54 +0000juri_(~juri@84-19-175-187.pool.ovpn.com)