Home liberachat/#haskell: Logs Calendar

Logs on 2022-02-03 (liberachat/#haskell)

00:00:28 <monochrom> You used to partially understand conduit's documentation, too.
00:00:56 <dsal> *sigh* -- this project I'm having a problem with uses a Makefile to build. Neat, a simple entry point, I guess. The Makefile launches stack. But it's not a stack project. So stack on my machine gets confused because whatever the default is just doesn't work for me. But there's a cabal file. cabal builds it just fine and doesn't have the same strange issue the complex nix project I'm trying to import it into has.
00:01:04 dsal should add a build system to solve the problem
00:01:15 <awpr> the issue is basically that streaming a tree structure is a bit complicated, because you have to consume it as "enter an <p> tag, visit this sentence, enter an <img> tag, observe this src=_ attribute, exit an <img> tag, visit another sentence, exit a <p> tag, etc.", and no streaming library will make that not be complicated
00:02:27 <segfaultfizzbuzz> i mean,... as long as you do your computation when you hit </tag of interest>, isn't that enough ?
00:02:32 <monochrom> dsal: I would be interested in what cute name you would choose for your build system :)
00:02:55 <dsal> haha. noo... I very much don't want to introduce a build system.
00:02:55 <awpr> yeah, as long as you took care to collect the needed information from the start of the tag
00:03:29 <dsal> stack + nix = snax
00:03:30 × xkuru quits (~xkuru@user/xkuru) (Read error: Connection reset by peer)
00:03:31 <awpr> this is still something you can do, but it's not done by the Element-oriented functions
00:03:34 <DigitalKiwi> dsl build
00:03:45 <segfaultfizzbuzz> so... i can't do this then? i have to fit the entire file into RAM in order to process? my zip file is like a terabyte and i have a dozen or so gigs of ram here
00:03:50 <monochrom> @botsnax
00:03:50 <lambdabot> :)
00:04:16 <monochrom> (The true command is @botsnack )
00:04:16 kli_ joins (~kli@ip-89-177-122-45.net.upcbroadband.cz)
00:04:24 lavaman joins (~lavaman@98.38.249.169)
00:05:01 <monochrom> So lambdabot is saying it likes the name snax. :)
00:05:28 <geekosaur> https://www.schoolofhaskell.com/school/starting-with-haskell/libraries-and-frameworks/text-manipulation/tagsoup might be of interest
00:05:51 × kli_ quits (~kli@ip-89-177-122-45.net.upcbroadband.cz) (Remote host closed the connection)
00:06:35 <DigitalKiwi> @botsnack
00:06:35 <lambdabot> :)
00:07:03 <DigitalKiwi> @botgiberrish
00:07:03 <lambdabot> Unknown command, try @list
00:07:09 <DigitalKiwi> :(
00:08:43 <dsal> @botulism
00:08:43 <lambdabot> Unknown command, try @list
00:08:53 × lavaman quits (~lavaman@98.38.249.169) (Ping timeout: 256 seconds)
00:09:58 <segfaultfizzbuzz> geekosaur: this documentation is from 2013...
00:11:01 <geekosaur> and? tagsoup is stable, and has the advantage that you can pretty much ignore document structure (if any; being the web there often isn't much reliable structure, which is the point of tagsoup)
00:11:49 <geekosaur> tagsoup doesn't *need* to change much
00:12:20 <awpr> a high-level description of how to grab img tags out of the event stream manually would be like: write a Conduit `consumeOne` that `await`s an event; if it's an img tag, call a second Conduit `consumeImg` on it; else do nothing. then `consumeImg` should await the contents until it finds a "</img>", and emit an `Element` or whatever other type you want; finally, the whole consumer is `forever consumeOne`
00:13:44 <awpr> or, if you're willing to assume img tags are empty, then just `mapMaybe` the event stream looking for `EventBeginElement "img" ...` and ignore everything else
00:13:58 <EvanR> if it's not invalidated and requiring maintenance every week or two is it really compatible with the web
00:16:08 <EvanR> if usable code necessarily requires someone to hammer on it periodically, then that's a hard limit on the amount of usable code at any given time (assuming fixed amount of available programmers)
00:16:15 × mcgroin quits (~mcgroin@roc37-h01-176-170-197-243.dsl.sta.abo.bbox.fr) (Ping timeout: 256 seconds)
00:21:01 × CHUD quits (~CHUD@host-80-41-89-108.as13285.net) (Ping timeout: 256 seconds)
00:21:36 × toshiblue quits (~toshiblue@c-73-111-20-145.hsd1.il.comcast.net) (Ping timeout: 256 seconds)
00:24:19 × raehik quits (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Quit: WeeChat 3.4)
00:25:17 raehik joins (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net)
00:28:24 <segfaultfizzbuzz> geekosaur: tagsoup is not stream-based, it looks like?
00:28:48 <segfaultfizzbuzz> geekosaur: so it will read the entire page into memory, parse there, and then try to operate on the fully parsed document?
00:29:13 × shapr quits (~user@pool-173-73-44-186.washdc.fios.verizon.net) (Remote host closed the connection)
00:29:18 <segfaultfizzbuzz> awpr: i will try to understand this
00:29:30 shapr joins (~user@pool-173-73-44-186.washdc.fios.verizon.net)
00:29:51 <segfaultfizzbuzz> awpr: thanks for clarifying that this is beyond what can be done ergonomically (?) with streams
00:30:34 × alx741 quits (~alx741@157.100.197.240) (Quit: alx741)
00:31:00 <segfaultfizzbuzz> so then if i can't work with a tree data structure in streams (which is more or less the simplest thing i can think of), is conduits/streams "meant" to be used on localized computations on a window of the stream?
00:31:06 × machinedgod quits (~machinedg@24.105.81.50) (Ping timeout: 250 seconds)
00:32:13 <geekosaur> sorry, I thought this used a tagsoup conduit. in any case the tutorial I linked tells you how to search dfor specific tags with a specific attribute
00:32:16 alx741 joins (~alx741@157.100.197.240)
00:32:22 <geekosaur> looks like it uses xml-conduit
00:33:03 × d0ku quits (~d0ku@178.43.19.180.ipv4.supernova.orange.pl) (Remote host closed the connection)
00:33:56 <awpr> tbh I don't think this is really specifically about Haskell streaming issues, but more about incremental processing of a tree given its preorder traversal -- it'd be complicated in the same ways in any other language
00:33:57 chenqisu1 joins (~chenqisu1@183.217.200.249)
00:33:58 <segfaultfizzbuzz> ah my bad i just consulted the tagsoup documentation directly... i'll try this
00:34:06 × boxscape_ quits (~boxscape_@p4ff0b9d5.dip0.t-ipconnect.de) (Quit: Connection closed)
00:34:51 <geekosaur> there *is* a conduit-tagsoup module, it turns out, but it's aged and explicitly "semi-maintained"
00:34:51 × alx741 quits (~alx741@157.100.197.240) (Read error: Connection reset by peer)
00:35:04 <segfaultfizzbuzz> sigh
00:35:15 <segfaultfizzbuzz> okay what do "normal" programmers use for this... some java library...?
00:35:17 <geekosaur> then again, like tagsoup itself it doesn't need much maintenance; conduit likely changes more often than tagsoup does
00:36:03 <awpr> if the task is literally extracting img tags from a compressed xml document... I'd probably use `gunzip | xsel`
00:36:16 × vicfred quits (~vicfred@user/vicfred) (Quit: Leaving)
00:36:19 justsomeguy joins (~justsomeg@user/justsomeguy)
00:37:35 <awpr> and if it needed to be callable from Haskell, I might even consider wrapping that actual Unix pipeline up in Haskell APIs, depending on miscellaneous circumstances
00:38:16 <segfaultfizzbuzz> my goal is to use haskell here. my document isn't html, it's some weird xml document. i need to grab some elements and calculate some stuff on them
00:40:17 × raehik quits (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 240 seconds)
00:41:08 <awpr> wrapping up calls to xsel still might be a decent answer -- they've already done the hard work of sifting through XML efficiently to find specific things. or if the details of what you want to extract are simple enough (like "all of a certain kind of tag, assumed to be empty"), then the "more complicated" event stream approach might not be so bad
00:41:45 × haskellberryfinn quits (~nut@roc37-h01-176-170-197-243.dsl.sta.abo.bbox.fr) (Ping timeout: 256 seconds)
00:42:02 <awpr> (re-raising "or, if you're willing to assume img tags are empty, then just `mapMaybe` the event stream looking for `EventBeginElement "img" ...` and ignore everything else")
00:42:26 × n3rdy1 quits (~n3rdy1@2600:1700:4570:3480::41) (Ping timeout: 245 seconds)
00:42:40 EsoAlgo joins (~EsoAlgo@152.70.142.52)
00:43:22 <awpr> (because if you assume the tags you're looking for are empty, then the EventBeginElement has everything you need, and if you don't care where the tag is, then you don't have to look at the other events at all)
00:44:52 <segfaultfizzbuzz> my goal isn't to get the work done here as much as to try to "make use of haskell"
00:45:09 <dibblego> just use tagsoup
00:45:13 <segfaultfizzbuzz> i actually began this um, project under the apparently flawed assumption that laziness would be useful for working with streaming
00:45:23 × mon_aaraj quits (~MonAaraj@149.255.212.24) (Ping timeout: 250 seconds)
00:45:32 <segfaultfizzbuzz> dibblego: yeah i'm trying that at the moment
00:45:42 <dibblego> ok cool
00:45:45 <awpr> (+1 to tagsoup if it does support a streaming API after all)
00:46:07 <EvanR> this is my dude, haskell for haskell's sake
00:46:31 <EvanR> pass the koolaid
00:46:45 <awpr> but yeah, unfortunately laziness is kind of just a tempting distraction to effectful streaming. good for pure streaming, though
00:47:20 <geekosaur> since tagsoup explicitly doesn't care about structure I'd think it ideal for streaming, tbh
00:47:22 <segfaultfizzbuzz> pure streaming would mean like that i am generating the data myself?
00:47:34 mon_aaraj joins (~MonAaraj@user/mon-aaraj/x-4416475)
00:47:57 <segfaultfizzbuzz> so in the example here i'm working with the "With a List" section https://www.schoolofhaskell.com/school/starting-with-haskell/libraries-and-frameworks/text-manipulation/tagsoup
00:48:13 <EvanR> when the effect involves IO at some level, you have to reconsider your laziness
00:48:17 <awpr> yeah, that's what I meant by "pure streaming" -- streaming in the sense of describing (purely) a huge data structure, and consuming it incrementally without materializing the whole thing
00:48:44 <segfaultfizzbuzz> but the data structure is only "huge" because a computer is generating it synthetically
00:48:59 <segfaultfizzbuzz> rather than because it comes from io
00:49:04 merijn joins (~merijn@c-001-002-002.client.esciencecenter.eduvpn.nl)
00:49:14 <EvanR> the huge data structure was already there, the computer only chiseled away with enclosing marble
00:49:58 <EvanR> what does algorithmic vs I/O based have to do with size
00:50:07 yauhsien_ joins (~yauhsien@118-167-40-21.dynamic-ip.hinet.net)
00:50:48 <segfaultfizzbuzz> uh well part of the purpose of this experiment was to try to understand where laziness is beneficial in programming, and i had thought that streaming was such a situation, but now i am being told that isn't the case unless the stream is "pure"
00:51:12 <dolio> You might have to ignore anti-laziness FUD that gets spread even here.
00:51:24 <dolio> If you want to actually determine the answer to your satisfaction.
00:51:30 <EvanR> laziness can also benefit during an I/O stream, you could be consuming incrementally some generated data structure, generated from a bit of input at a time
00:51:46 mvk joins (~mvk@2607:fea8:5cdc:bf00::80f1)
00:52:00 <segfaultfizzbuzz> i'm uh, neither pro nor anti-lazy, just trying to understand haskell and programming better.
00:52:21 <awpr> "huge data" is the motivation to want streaming; if that huge data is the result of a pure computation, laziness might give the streaming you want, but if it's the result of many IO actions, then it's very tempting to express it with laziness, which is where you get stuff like `readFile` and other "lazy IO", but that has its drawbacks
00:52:31 × Gurkenglas quits (~Gurkengla@dslb-090-186-104-244.090.186.pools.vodafone-ip.de) (Ping timeout: 256 seconds)
00:52:51 alx741 joins (~alx741@157.100.197.240)
00:53:01 <awpr> explicit streaming libraries attempt to address those drawbacks without going back to materializing huge data in memory
00:53:13 <segfaultfizzbuzz> i think you mean tempting to express it without laziness for the second part there right?
00:53:25 <EvanR> no, with
00:53:45 <awpr> no, they don't try to eliminate laziness entirely, they just don't rely _solely_ on laziness
00:54:01 <EvanR> readFile does a hack to express your incremental reading as something purely lazy
00:54:06 <awpr> the laziness of `readFile` is a lie, and streaming libraries try to eliminate that lie
00:54:10 <awpr> ahh, too slow
00:54:18 <dibblego> segfaultfizzbuzz: laziness is widely understood even here, and especially not here.
00:54:22 <dibblego> *misunderstood
00:54:30 <dolio> See, this is the kind of stuff you have to ignore and just try yourself.
00:54:40 finley joins (~finley@2600-6c67-8b00-1fea-5c3a-1e8d-cb0f-2e95.res6.spectrum.com)
00:57:38 × alx741 quits (~alx741@157.100.197.240) (Read error: Connection reset by peer)
00:58:22 <segfaultfizzbuzz> lol haskell.com directs to some industrial company which does wastewater treatment plants among other things
00:59:21 <monochrom> I spread anti-silver-bullet FUDs.
00:59:24 <EvanR> obviously haskell is the shit
01:00:05 <monochrom> Laziness causes some problems and eagerness causes the opposite problems.
01:00:13 <monochrom> Every silver lining has tarnish.
01:00:16 <segfaultfizzbuzz> anyway, the With a List section of the documentation is returning nothing, i'm not sure yet whether this is because all of the websites i am trying this on are forcing me to use https or something
01:00:41 <DigitalKiwi> my boss says i'm lazy i just say i'm solving different problems :(
01:00:51 <monochrom> :)
01:01:12 <monochrom> I'm lazy too, and it turns out I do solve different problems. :)
01:01:51 <monochrom> I'm too lazy to evaluate the integrals that engineering students have to evaluate.
01:01:53 <segfaultfizzbuzz> does simpleHttp load https?
01:02:01 <monochrom> But proving that the integrals exist? YES!
01:02:39 × finley quits (~finley@2600-6c67-8b00-1fea-5c3a-1e8d-cb0f-2e95.res6.spectrum.com) (Quit: Client closed)
01:03:27 <segfaultfizzbuzz> geekosaur: any thoughts on loading https in the link you sent? i think that might be an issue here
01:04:45 <geekosaur> still checking but I just noticed that simpleHttp loads the whole document into memory which is what you *don't* want
01:04:57 lainon joins (~lainon@2601:7c0:c500:4d20::ae8)
01:05:09 <geekosaur> "Note: Even though this function returns a lazy bytestring, it does not utilize lazy I/O, and therefore the entire response body will live in memory. If you want constant memory usage, you'll need to use the conduit package and http directly."
01:05:20 <awpr> that tutorial appears to use libraries that materialize the whole document, and doesn't seem to use tagsoup at all as far as I can tell
01:05:39 <monochrom> Yeah that's very strange.
01:06:07 <awpr> the comments section does not seem to be very favorable towards it :)
01:06:31 <geekosaur> but I do see you can specify `secure` if you use the `http` combinator that it recommends instead
01:06:55 × justsomeguy quits (~justsomeg@user/justsomeguy) (Ping timeout: 256 seconds)
01:07:07 <monochrom> strange on the order of https://www.amazon.ca/Haskell-From-First-Principle/dp/0764541668/
01:07:21 <segfaultfizzbuzz> ok so, ... tagsoup is dead in the water then
01:07:38 <awpr> I'm confused. that tutorial has nothing to do with tagsoup
01:07:47 <awpr> except the title (???)
01:07:55 <awpr> looking at the actual tagsoup library, it looks very similar to the event stream representation of xml-types
01:08:01 <monochrom> Hence the funny URL I made :)
01:08:24 <wavemode> I guess learning and growing to hate PHP is the first principle of choosing haskell
01:08:51 <EvanR> PHP was "my language" right before haskell
01:08:56 <EvanR> stark contrast
01:09:37 bitdex joins (~bitdex@gateway/tor-sasl/bitdex)
01:11:37 × mon_aaraj quits (~MonAaraj@user/mon-aaraj/x-4416475) (Ping timeout: 240 seconds)
01:11:58 <EvanR> segfaultfizzbuzz, why not forget the tutorials and mess around with tagsoup by itself to get a feel for it
01:12:14 <EvanR> or simpleHttp by itself, or whatever
01:12:41 <EvanR> combining 9 thinks and a random tutorial might work but maybe you could come at it piece by piece
01:13:30 <segfaultfizzbuzz> so it's back to conduit then if i want to do a streaming xml computation, correct?
01:13:47 alx741 joins (~alx741@157.100.197.240)
01:13:52 <EvanR> conduit is for streaming, yes
01:13:56 mon_aaraj joins (~MonAaraj@user/mon-aaraj/x-4416475)
01:13:57 <EvanR> xml or whatever else
01:15:12 <Axman6> EvanR: Did you migrate to PHP, Purescript, Haskell, Postgres?
01:15:23 <segfaultfizzbuzz> i'm finding this type tetris stuff to be excrutiating unfortunately
01:15:59 × DNH quits (~DNH@2a02:8108:1100:16d8:7cff:235a:6ff3:c21a) (Quit: Textual IRC Client: www.textualapp.com)
01:16:06 <Axman6> is there a reason you're using simpleHttp? Surely you want to use `http` which gives you a conduit to stream the data from the request?
01:16:17 <geekosaur> the tutorial told them to use it
01:16:22 <Axman6> D:
01:16:33 <geekosaur> all hail the tutorial people have been telling them to forget about
01:17:03 <monochrom> Type tetris is everywhere in nature.
01:17:22 <monochrom> It is not like PHP actually lets you multiply a string by a boolean function.
01:17:24 <segfaultfizzbuzz> Axman6: i barely understand haskell, much less am capable of comparing haskell libraries
01:17:26 <geekosaur> and I pointed out earlier that if they wanted to use https and not have the whole document in RAM they needed to use http instead of simpleHttp, that also got ignored
01:17:38 <Axman6> segfaultfizzbuzz: these are functions in the same library
01:17:38 <monochrom> The only difference is how late you receive error messages.
01:17:59 <Axman6> https://hackage.haskell.org/package/http-conduit-2.3.8/docs/Network-HTTP-Conduit.html#v:simpleHttp see `http` below this
01:18:00 <segfaultfizzbuzz> Axman6: my goal in this project is to stream a gzipped xml document over http (actually probably https to be precise) and then grab some parts of it and do some simple calculations on those parts
01:18:01 <EvanR> segfaultfizzbuzz, self-imposed trial by fire then, props
01:18:37 × alx741 quits (~alx741@157.100.197.240) (Read error: Connection reset by peer)
01:19:27 <EvanR> I think the first thing I did in haskell was also HTML filtering and statistics, but offline, not web
01:20:16 × Tuplanolla quits (~Tuplanoll@91-159-68-166.elisa-laajakaista.fi) (Quit: Leaving.)
01:21:42 <segfaultfizzbuzz> Axman6: i think i have a conduit already. if you see awpr's comments above describing an await and soforth, it looks like streaming computations on trees aren't a foremost consideration and so you need to do some gymnastics to make them work
01:22:17 wroathe joins (~wroathe@206-55-188-8.fttp.usinternet.com)
01:22:17 × wroathe quits (~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host)
01:22:17 wroathe joins (~wroathe@user/wroathe)
01:22:23 <awpr> (it's not that they're not a consideration, it's that a linearized form of a tree is a weird thing to work with, independently of whether you're streaming it or not)
01:23:21 × merijn quits (~merijn@c-001-002-002.client.esciencecenter.eduvpn.nl) (Ping timeout: 256 seconds)
01:24:18 <geekosaur> which is why I was going for tagsoup, it ignores the tree structure and just looks for tags
01:24:18 × pretty_dumm_guy quits (trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655) (Quit: WeeChat 3.4)
01:24:41 <Axman6> segfaultfizzbuzz: do you have some code? I haven't been folllowing along, but I'm reading the Text.XML.Stream.Parse docs now
01:25:34 <awpr> hm? the tagsoup library I'm looking at is working with the same kind of linearized tree as xml-types' Event
01:26:47 <geekosaur> https://hackage.haskell.org/package/tagstream-conduit looks interesting
01:27:03 <geekosaur> awpr, nothing in it cares about "tree"
01:27:12 <awpr> these three are all the same idea
01:27:14 <geekosaur> the elements are linearized but not structured
01:27:33 justsomeguy joins (~justsomeg@user/justsomeguy)
01:27:36 × justsomeguy quits (~justsomeg@user/justsomeguy) (Client Quit)
01:27:53 <awpr> there's still an implied tree based on the TagOpen and TagCloses, that's exactly what I mean by "linearized tree"
01:27:58 <geekosaur> that's the whole point of tag *soup*, it assumes lack of meaningful structure and just emits the content
01:28:18 <geekosaur> awpr, the reason tagsoup was written was <p><a></p></a>
01:28:18 <awpr> right, I think we're on the same page
01:28:33 <geekosaur> tags *do not nest* in the tagsoup model
01:28:49 <Axman6> gross D:
01:28:54 <awpr> they're still supposed to, it's just meant to tolerate the real-world cases when they don't
01:28:57 <monochrom> If you stick to "parseTags :: StringLike str => str -> [Tag str]" you have no tree, and in fact no check of open-close consistencies.
01:29:49 <monochrom> The stuff in Text.HTML.TagSoup.Tree is optional. And to be disregarded when inputting untrusted inputs.
01:31:00 × lbseale quits (~ep1ctetus@user/ep1ctetus) (Read error: Connection reset by peer)
01:31:41 <segfaultfizzbuzz> Axman6: here is my most recent: https://paste.rs/oBr.hs
01:34:28 <Axman6> isNamed feels like the wrong thing to be using here...
01:34:43 alx741 joins (~alx741@157.100.197.240)
01:35:24 <awpr> try replacing the concatMap step with `Data.Conduit.List.mapMaybe (\case EventBeginElement "img" attrs -> Just attrs; _ -> Nothing)`
01:35:37 toshiblue joins (~toshiblue@c-73-111-20-145.hsd1.il.comcast.net)
01:35:47 <Axman6> yeah that looks like a better start
01:36:10 <awpr> that may not be the final robust solution, but it should do something and get you started with the "not-parsed-into-a-tree" representation
01:36:32 <Axman6> that should give you a ConduitT Event [(Name, [Content])] m ()
01:37:41 <segfaultfizzbuzz> ... XLambdaCase...?
01:38:20 <awpr> yes, enable that, or you can write the function out as a separate binding or however you prefer
01:38:20 × alx741 quits (~alx741@157.100.197.240) (Read error: Connection reset by peer)
01:38:36 × perrierjouet quits (~perrier-j@modemcable012.251-130-66.mc.videotron.ca) (Quit: WeeChat 3.4)
01:39:19 × alp quits (~alp@2a01:e0a:58b:4920:d89a:b09d:1a2b:26ba) (Ping timeout: 250 seconds)
01:39:27 <monochrom> Or good old "\x -> case x of EventBeginElement "img" attrs -> Just attrs; _ -> Nothing"
01:40:13 perrierjouet joins (~perrier-j@modemcable012.251-130-66.mc.videotron.ca)
01:41:30 × wavemode quits (~wavemode@c-98-223-145-19.hsd1.il.comcast.net) (Ping timeout: 256 seconds)
01:42:02 <segfaultfizzbuzz> Axman6: hmmm, well at least zombo.com seems to fail to parse now: mystream: ParseError {errorContexts = ["open tag","'>'"], errorMessage = "Failed reading: satisfy", errorPosition = 51:8 (1070)}
01:43:27 <EvanR> zombo.com is still a thing
01:43:57 × mon_aaraj quits (~MonAaraj@user/mon-aaraj/x-4416475) (Ping timeout: 240 seconds)
01:44:32 <Axman6> @gogle Bool -> [a] -> [a]
01:44:33 <lambdabot> No Result Found.
01:44:58 <Axman6> @botsnack thanks for reading my mind lambdabot
01:44:58 <lambdabot> :)
01:45:08 <monochrom> ZomboCom was my favourite example of camel case. :)
01:45:27 <awpr> it may not be valid XML; the parser might have choked on the embedded JS
01:45:46 <jackdk> I see stack still stubbornly refuses to ship a GHC 8.10.7 snapshot with recent hashable.
01:46:14 × lainon quits (~lainon@2601:7c0:c500:4d20::ae8) (Remote host closed the connection)
01:46:42 off^ joins (~off@128-092-174-141.biz.spectrum.com)
01:46:55 <awpr> actually, it looks like the parse error position points to an attribute name with no value. sounds like this page is just not sufficiently-valid XML for the parser
01:46:56 × jao quits (~jao@cpc103048-sgyl39-2-0-cust502.18-2.cable.virginm.net) (Remote host closed the connection)
01:47:08 <EvanR> oof...
01:47:15 <EvanR> XML in name only
01:47:34 <monochrom> Is there any reason to use an XML library on HTML inputs?
01:47:35 <awpr> (that might not be a real problem since the intended real input is said to be XML. just means this isn't a good test case)
01:47:38 mon_aaraj joins (~MonAaraj@user/mon-aaraj/x-4416475)
01:47:53 <EvanR> oh nvm
01:48:27 <EvanR> HTML blob in an XML hole
01:49:00 × off^ quits (~off@128-092-174-141.biz.spectrum.com) (Remote host closed the connection)
01:49:02 n3rdy1 joins (~n3rdy1@2600:1700:4570:3480::41)
01:49:45 × yauhsien_ quits (~yauhsien@118-167-40-21.dynamic-ip.hinet.net) (Ping timeout: 256 seconds)
01:50:35 <segfaultfizzbuzz> lol
01:54:37 × vglfr quits (~vglfr@88.155.15.0) (Ping timeout: 240 seconds)
01:54:58 alx741 joins (~alx741@157.100.197.240)
01:56:44 jao joins (~jao@cpc103048-sgyl39-2-0-cust502.18-2.cable.virginm.net)
01:59:17 × alx741 quits (~alx741@157.100.197.240) (Read error: Connection reset by peer)
02:02:58 lavaman joins (~lavaman@98.38.249.169)
02:06:05 sprout_ joins (~quassel@2a02:a467:ccd6:1:b9e2:b772:90e7:5a2b)
02:06:34 vglfr joins (~vglfr@88.155.15.0)
02:09:39 × sprout quits (~quassel@2a02:a467:ccd6:1:6013:7539:4fef:cd22) (Ping timeout: 250 seconds)
02:12:57 × mvk quits (~mvk@2607:fea8:5cdc:bf00::80f1) (Ping timeout: 240 seconds)
02:16:08 alx741 joins (~alx741@157.100.197.240)
02:16:12 vysn joins (~vysn@user/vysn)
02:20:17 × wroathe quits (~wroathe@user/wroathe) (Ping timeout: 240 seconds)
02:21:14 califax- joins (~califax@user/califx)
02:21:14 × alx741 quits (~alx741@157.100.197.240) (Read error: Connection reset by peer)
02:23:51 × califax quits (~califax@user/califx) (Ping timeout: 276 seconds)
02:23:52 califax- is now known as califax
02:27:51 × xff0x quits (~xff0x@2001:1a81:53ac:4a00:25b:5701:e54d:ee3e) (Ping timeout: 245 seconds)
02:28:35 wroathe joins (~wroathe@206-55-188-8.fttp.usinternet.com)
02:28:35 × wroathe quits (~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host)
02:28:35 wroathe joins (~wroathe@user/wroathe)
02:29:44 xff0x joins (~xff0x@2001:1a81:53e8:2500:a319:1c51:2e8e:9977)
02:33:23 × wroathe quits (~wroathe@user/wroathe) (Ping timeout: 256 seconds)
02:34:11 ethanN joins (~ethanN@d198-53-4-47.abhsia.telus.net)
02:39:48 alx741 joins (~alx741@157.100.197.240)
02:42:54 × ethanN quits (~ethanN@d198-53-4-47.abhsia.telus.net) (Quit: Leaving)
02:48:20 × wombat871 quits (~wombat875@pool-72-89-24-154.nycmny.fios.verizon.net) (Quit: WeeChat 2.2-dev)
02:48:50 × jao quits (~jao@cpc103048-sgyl39-2-0-cust502.18-2.cable.virginm.net) (Remote host closed the connection)
02:49:53 × alx741 quits (~alx741@157.100.197.240) (Read error: Connection reset by peer)
03:01:46 × absentia quits (~evocatus@24-212-138-156.cable.teksavvy.com) (Changing host)
03:01:46 absentia joins (~evocatus@user/absentia)
03:02:27 × absentia quits (~evocatus@user/absentia) (Quit: WeeChat 3.4)
03:02:39 evocatus joins (~absentia@24-212-138-156.cable.teksavvy.com)
03:02:51 × Morrow quits (~user@bzq-110-168-31-106.red.bezeqint.net) (Ping timeout: 256 seconds)
03:02:54 × evocatus quits (~absentia@24-212-138-156.cable.teksavvy.com) (Client Quit)
03:03:06 absentia joins (~absentia@24-212-138-156.cable.teksavvy.com)
03:03:51 × absentia quits (~absentia@24-212-138-156.cable.teksavvy.com) (Changing host)
03:03:51 absentia joins (~absentia@user/absentia)
03:03:57 × lavaman quits (~lavaman@98.38.249.169) (Ping timeout: 240 seconds)
03:06:53 alx741 joins (~alx741@157.100.197.240)
03:07:21 jao joins (~jao@cpc103048-sgyl39-2-0-cust502.18-2.cable.virginm.net)
03:08:43 finn_elija joins (~finn_elij@user/finn-elija/x-0085643)
03:08:43 × FinnElija quits (~finn_elij@user/finn-elija/x-0085643) (Killed (NickServ (Forcing logout FinnElija -> finn_elija)))
03:08:43 finn_elija is now known as FinnElija
03:11:29 sprout joins (~quassel@2a02:a467:ccd6:1:80b2:e90a:7da7:7a8d)
03:11:29 × alx741 quits (~alx741@157.100.197.240) (Read error: Connection reset by peer)
03:12:09 × vglfr quits (~vglfr@88.155.15.0) (Ping timeout: 256 seconds)
03:13:37 × n3rdy1 quits (~n3rdy1@2600:1700:4570:3480::41) (Ping timeout: 240 seconds)
03:13:54 mbuf joins (~Shakthi@122.162.66.95)
03:14:31 Morrow joins (~user@bzq-110-168-31-106.red.bezeqint.net)
03:14:37 × sprout_ quits (~quassel@2a02:a467:ccd6:1:b9e2:b772:90e7:5a2b) (Ping timeout: 240 seconds)
03:15:24 × jao quits (~jao@cpc103048-sgyl39-2-0-cust502.18-2.cable.virginm.net) (Remote host closed the connection)
03:17:00 jao joins (~jao@cpc103048-sgyl39-2-0-cust502.18-2.cable.virginm.net)
03:18:04 × perrierjouet quits (~perrier-j@modemcable012.251-130-66.mc.videotron.ca) (Quit: WeeChat 3.4)
03:20:55 perrierjouet joins (~perrier-j@modemcable012.251-130-66.mc.videotron.ca)
03:24:35 merijn joins (~merijn@c-001-001-018.client.esciencecenter.eduvpn.nl)
03:25:20 n3rdy1 joins (~n3rdy1@2600:1700:4570:3480:1b88:50f:dae0:9293)
03:25:44 dawdler joins (~dawdler@user/dawdler)
03:26:15 × tatarqa quits (~kli@ip-89-177-122-45.net.upcbroadband.cz) (Remote host closed the connection)
03:26:31 × dawdler quits (~dawdler@user/dawdler) (Client Quit)
03:27:01 × perrierjouet quits (~perrier-j@modemcable012.251-130-66.mc.videotron.ca) (Quit: WeeChat 3.4)
03:29:25 alx741 joins (~alx741@157.100.197.240)
03:31:53 × alx741 quits (~alx741@157.100.197.240) (Read error: Connection reset by peer)
03:33:21 perrierjouet joins (~perrier-j@modemcable012.251-130-66.mc.videotron.ca)
03:39:28 dawdler joins (035b60b5aa@user/dawdler)
03:42:08 × Topsi quits (~Tobias@dyndsl-095-033-017-221.ewe-ip-backbone.de) (Read error: Connection reset by peer)
03:43:33 × td_ quits (~td@muedsl-82-207-238-174.citykom.de) (Ping timeout: 256 seconds)
03:43:33 × perrierjouet quits (~perrier-j@modemcable012.251-130-66.mc.videotron.ca) (Quit: WeeChat 3.4)
03:44:27 td_ joins (~td@94.134.91.183)
03:46:28 perrierjouet joins (~perrier-j@modemcable012.251-130-66.mc.videotron.ca)
03:46:57 yauhsien_ joins (~yauhsien@118-167-40-21.dynamic-ip.hinet.net)
03:48:35 alx741 joins (~alx741@157.100.197.240)
03:48:55 wroathe joins (~wroathe@206-55-188-8.fttp.usinternet.com)
03:48:55 × wroathe quits (~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host)
03:48:55 wroathe joins (~wroathe@user/wroathe)
03:51:17 × yauhsien_ quits (~yauhsien@118-167-40-21.dynamic-ip.hinet.net) (Ping timeout: 240 seconds)
03:53:31 × merijn quits (~merijn@c-001-001-018.client.esciencecenter.eduvpn.nl) (Ping timeout: 256 seconds)
03:53:51 × wroathe quits (~wroathe@user/wroathe) (Ping timeout: 256 seconds)
03:56:17 × burnsidesLlama quits (~burnsides@dhcp168-027.wadham.ox.ac.uk) (Remote host closed the connection)
03:56:50 burnsidesLlama joins (~burnsides@client-8-65.eduroam.oxuni.org.uk)
04:00:57 × burnsidesLlama quits (~burnsides@client-8-65.eduroam.oxuni.org.uk) (Ping timeout: 240 seconds)
04:00:57 × alx741 quits (~alx741@157.100.197.240) (Read error: Connection reset by peer)
04:10:23 wroathe joins (~wroathe@206-55-188-8.fttp.usinternet.com)
04:10:23 × wroathe quits (~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host)
04:10:23 wroathe joins (~wroathe@user/wroathe)
04:11:00 × perrierjouet quits (~perrier-j@modemcable012.251-130-66.mc.videotron.ca) (Quit: WeeChat 3.4)
04:12:51 perrierjouet joins (~perrier-j@modemcable012.251-130-66.mc.videotron.ca)
04:15:16 × mon_aaraj quits (~MonAaraj@user/mon-aaraj/x-4416475) (Remote host closed the connection)
04:15:41 mon_aaraj joins (~MonAaraj@user/mon-aaraj/x-4416475)
04:17:39 alx741 joins (~alx741@157.100.197.240)
04:18:36 × ralu quits (~ralu@static.211.245.203.116.clients.your-server.de) (Ping timeout: 250 seconds)
04:19:26 × [itchyjunk] quits (~itchyjunk@user/itchyjunk/x-7353470) (Read error: Connection reset by peer)
04:20:37 × mon_aaraj quits (~MonAaraj@user/mon-aaraj/x-4416475) (Ping timeout: 240 seconds)
04:22:01 mon_aaraj joins (~MonAaraj@user/mon-aaraj/x-4416475)
04:25:53 <Axman6> segfaultfizzbuzz: did you get anywhere with awpr's suggestion of using mapMaybe above?
04:30:26 × alx741 quits (~alx741@157.100.197.240) (Read error: Connection reset by peer)
04:30:55 × mon_aaraj quits (~MonAaraj@user/mon-aaraj/x-4416475) (Ping timeout: 256 seconds)
04:32:02 × waleee quits (~waleee@2001:9b0:21d:fc00:398f:b003:b90d:acf4) (Ping timeout: 250 seconds)
04:36:20 × dawdler quits (035b60b5aa@user/dawdler) (Remote host closed the connection)
04:37:13 mon_aaraj joins (~MonAaraj@user/mon-aaraj/x-4416475)
04:39:17 × segfaultfizzbuzz quits (~rustisafu@2602:306:cd3c:9350:cc4:c954:b25:db0a) (Ping timeout: 240 seconds)
04:39:58 oscurochu joins (~oscurochu@097-096-050-227.res.spectrum.com)
04:43:07 × raym quits (~raym@user/raym) (Quit: kernel update, rebooting...)
04:43:57 × toshiblue quits (~toshiblue@c-73-111-20-145.hsd1.il.comcast.net) (Ping timeout: 256 seconds)
04:45:39 dawdler joins (035b60b5aa@user/dawdler)
04:45:59 × oscurochu quits (~oscurochu@097-096-050-227.res.spectrum.com) (Ping timeout: 256 seconds)
04:47:15 raym joins (~raym@user/raym)
04:48:09 alx741 joins (~alx741@157.100.197.240)
04:53:20 × zaquest quits (~notzaques@5.130.79.72) (Remote host closed the connection)
04:53:21 × alx741 quits (~alx741@157.100.197.240) (Read error: Connection reset by peer)
05:03:57 × mon_aaraj quits (~MonAaraj@user/mon-aaraj/x-4416475) (Ping timeout: 240 seconds)
05:04:31 × vysn quits (~vysn@user/vysn) (Ping timeout: 250 seconds)
05:05:39 mon_aaraj joins (~MonAaraj@user/mon-aaraj/x-4416475)
05:11:49 alx741 joins (~alx741@157.100.197.240)
05:13:05 × ProfSimm quits (~ProfSimm@87.227.196.109) (Remote host closed the connection)
05:20:09 yauhsien joins (~yauhsien@118-167-40-21.dynamic-ip.hinet.net)
05:22:18 × werneta quits (~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net) (Ping timeout: 250 seconds)
05:24:10 werneta joins (~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net)
05:24:31 × yauhsien quits (~yauhsien@118-167-40-21.dynamic-ip.hinet.net) (Ping timeout: 256 seconds)
05:25:51 zaquest joins (~notzaques@5.130.79.72)
05:25:53 × wroathe quits (~wroathe@user/wroathe) (Ping timeout: 256 seconds)
05:26:25 × alx741 quits (~alx741@157.100.197.240) (Read error: Connection reset by peer)
05:34:38 wroathe joins (~wroathe@206-55-188-8.fttp.usinternet.com)
05:34:38 × wroathe quits (~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host)
05:34:38 wroathe joins (~wroathe@user/wroathe)
05:36:10 ss4 joins (~wootehfoo@user/wootehfoot)
05:38:23 × slowButPresent quits (~slowButPr@user/slowbutpresent) (Quit: leaving)
05:38:35 × wootehfoot quits (~wootehfoo@user/wootehfoot) (Ping timeout: 256 seconds)
05:39:29 × wroathe quits (~wroathe@user/wroathe) (Ping timeout: 256 seconds)
05:42:59 alx741 joins (~alx741@157.100.197.240)
05:47:37 × notzmv quits (~zmv@user/notzmv) (Ping timeout: 250 seconds)
05:48:15 × emf quits (~emf@2620:10d:c090:400::5:b0fe) (Read error: Connection reset by peer)
05:50:29 × hpc quits (~juzz@ip98-169-35-13.dc.dc.cox.net) (Ping timeout: 256 seconds)
05:50:41 hpc joins (~juzz@ip98-169-35-13.dc.dc.cox.net)
05:53:07 × alx741 quits (~alx741@157.100.197.240) (Read error: Connection reset by peer)
05:55:11 merijn joins (~merijn@c-001-001-018.client.esciencecenter.eduvpn.nl)
06:05:01 notzmv joins (~zmv@user/notzmv)
06:05:56 × jao quits (~jao@cpc103048-sgyl39-2-0-cust502.18-2.cable.virginm.net) (Remote host closed the connection)
06:09:50 jao joins (~jao@cpc103048-sgyl39-2-0-cust502.18-2.cable.virginm.net)
06:10:17 alx741 joins (~alx741@157.100.197.240)
06:13:44 × gentauro quits (~gentauro@user/gentauro) (Read error: Connection reset by peer)
06:17:47 × mon_aaraj quits (~MonAaraj@user/mon-aaraj/x-4416475) (Ping timeout: 256 seconds)
06:19:26 gentauro joins (~gentauro@user/gentauro)
06:22:43 × jao quits (~jao@cpc103048-sgyl39-2-0-cust502.18-2.cable.virginm.net) (Remote host closed the connection)
06:23:17 × alx741 quits (~alx741@157.100.197.240) (Read error: Connection reset by peer)
06:24:15 × merijn quits (~merijn@c-001-001-018.client.esciencecenter.eduvpn.nl) (Ping timeout: 256 seconds)
06:32:41 takuan joins (~takuan@178-116-218-225.access.telenet.be)
06:36:13 × zmt00 quits (~zmt00@user/zmt00) (Ping timeout: 240 seconds)
06:40:20 alx741 joins (~alx741@157.100.197.240)
06:41:03 × shriekingnoise quits (~shrieking@201.231.16.156) (Quit: Quit)
06:44:53 _ht joins (~quassel@231-169-21-31.ftth.glasoperator.nl)
06:46:12 Inst joins (~delicacie@c-98-208-218-119.hsd1.fl.comcast.net)
06:46:46 vysn joins (~vysn@user/vysn)
06:50:14 × alx741 quits (~alx741@157.100.197.240) (Read error: Connection reset by peer)
06:51:47 × cynomys quits (~cynomys@user/cynomys) (Ping timeout: 256 seconds)
06:53:19 Midjak joins (~Midjak@may53-1-78-226-116-92.fbx.proxad.net)
06:56:55 × Midjak quits (~Midjak@may53-1-78-226-116-92.fbx.proxad.net) (Client Quit)
06:58:33 whound joins (~dust@2405:204:5488:ef4c:54b6:3467:52f3:e9f2)
06:58:34 cynomys joins (~cynomys@user/cynomys)
06:58:53 × sayola quits (~vekto@dslb-002-201-085-116.002.201.pools.vodafone-ip.de) (Read error: Connection reset by peer)
07:01:19 Jing joins (~hedgehog@240e:390:7c53:a7e1:f460:9388:75e8:8181)
07:01:20 lavaman joins (~lavaman@98.38.249.169)
07:05:37 × lavaman quits (~lavaman@98.38.249.169) (Ping timeout: 256 seconds)
07:06:16 alx741 joins (~alx741@157.100.197.240)
07:10:27 × alx741 quits (~alx741@157.100.197.240) (Read error: Connection reset by peer)
07:11:06 alp joins (~alp@user/alp)
07:18:39 Alex_test_ joins (~al_test@178.34.151.37)
07:20:21 × Alex_test quits (~al_test@178.34.151.37) (Ping timeout: 256 seconds)
07:25:23 michalz joins (~michalz@185.246.204.87)
07:25:52 × Boarders_ quits (sid425905@id-425905.lymington.irccloud.com) (*.net *.split)
07:25:52 × JSharp quits (sid4580@id-4580.lymington.irccloud.com) (*.net *.split)
07:25:52 × saolsen quits (sid26430@id-26430.lymington.irccloud.com) (*.net *.split)
07:25:52 × tapas quits (sid467876@id-467876.ilkley.irccloud.com) (*.net *.split)
07:25:52 × cbarrett quits (sid192934@id-192934.helmsley.irccloud.com) (*.net *.split)
07:25:52 × enemeth79 quits (sid309041@id-309041.lymington.irccloud.com) (*.net *.split)
07:25:52 × bjs quits (sid190364@user/bjs) (*.net *.split)
07:25:52 × sclv quits (sid39734@haskell/developer/sclv) (*.net *.split)
07:25:52 × mrianbloom quits (sid350277@id-350277.ilkley.irccloud.com) (*.net *.split)
07:25:52 × dmj` quits (sid72307@id-72307.hampstead.irccloud.com) (*.net *.split)
07:25:52 × acertain quits (sid470584@id-470584.hampstead.irccloud.com) (*.net *.split)
07:25:52 × gaze___ quits (sid387101@id-387101.helmsley.irccloud.com) (*.net *.split)
07:25:52 × hongminhee quits (sid295@id-295.tinside.irccloud.com) (*.net *.split)
07:25:52 × whatsupdoc quits (uid509081@hampstead.irccloud.com) (*.net *.split)
07:25:52 × asivitz quits (uid178348@tinside.irccloud.com) (*.net *.split)
07:25:52 × econo quits (uid147250@user/econo) (*.net *.split)
07:25:52 × Vajb quits (~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi) (*.net *.split)
07:25:52 × cheater quits (~Username@user/cheater) (*.net *.split)
07:25:52 × Guest6340 quits (~cat@h-98-128-128-173.A351.priv.bahnhof.se) (*.net *.split)
07:25:52 × Sgeo quits (~Sgeo@user/sgeo) (*.net *.split)
07:25:52 × deadmarshal quits (~deadmarsh@95.38.114.110) (*.net *.split)
07:25:52 × xdej quits (~xdej@quatramaran.salle-s.org) (*.net *.split)
07:25:52 × red-snail quits (~snail@static.151.210.203.116.clients.your-server.de) (*.net *.split)
07:25:52 × hyiltiz quits (~quassel@31.220.5.250) (*.net *.split)
07:25:52 × quintasan quits (~quassel@quintasan.pl) (*.net *.split)
07:25:52 × cigsender quits (~cigsender@74.124.58.162) (*.net *.split)
07:25:52 × Hafydd quits (~Hafydd@user/hafydd) (*.net *.split)
07:25:52 × aria quits (sid380617@lymington.irccloud.com) (*.net *.split)
07:25:52 × oats quits (~thomas@user/oats) (*.net *.split)
07:25:52 × TheCoffeMaker quits (~TheCoffeM@user/thecoffemaker) (*.net *.split)
07:25:52 × ncopa quits (~ncopa@alpine/developer/ncopa) (*.net *.split)
07:25:52 × lep quits (~lep@94.31.89.203) (*.net *.split)
07:25:52 × AlexZenon quits (~alzenon@178.34.151.37) (*.net *.split)
07:25:52 × ft quits (~ft@shell.chaostreff-dortmund.de) (*.net *.split)
07:25:52 × russruss quits (~russruss@my.russellmcc.com) (*.net *.split)
07:25:52 × tv quits (~tv@user/tv) (*.net *.split)
07:25:53 × gawen_ quits (~gawen@user/gawen) (*.net *.split)
07:25:53 × robertm quits (~robertm@lattice.rojoma.com) (*.net *.split)
07:25:53 × tromp quits (~textual@dhcp-077-249-230-040.chello.nl) (*.net *.split)
07:25:53 × swistak quits (~swistak@185.21.216.141) (*.net *.split)
07:25:53 × wz1000 quits (~zubin@static.11.113.47.78.clients.your-server.de) (*.net *.split)
07:25:53 × superbil quits (~superbil@1-34-176-171.hinet-ip.hinet.net) (*.net *.split)
07:25:53 × marquis_andras quits (~marquis_a@124.170.163.166) (*.net *.split)
07:25:53 × justGhost quits (~justache@user/justache) (*.net *.split)
07:25:53 × mmalter quits (~mmalter@88.126.10.237) (*.net *.split)
07:25:53 × mcglk quits (~mcglk@131.191.49.120) (*.net *.split)
07:25:53 × Maxdamantus quits (~Maxdamant@user/maxdamantus) (*.net *.split)
07:25:53 × stvc quits (~stvc@192.241.166.39) (*.net *.split)
07:25:53 × cls quits (~cls@chalk.lubutu.com) (*.net *.split)
07:25:53 × cross_ quits (~cross@spitfire.i.gajendra.net) (*.net *.split)
07:25:53 × skewerr quits (spoonm@inaba.spoonm.org) (*.net *.split)
07:25:53 × drewr quits (~drew@user/drewr) (*.net *.split)
07:25:53 × fryguybob quits (~fryguybob@cpe-74-67-169-145.rochester.res.rr.com) (*.net *.split)
07:25:53 × haskl quits (~haskl@user/haskl) (*.net *.split)
07:25:53 × mstksg quits (~jle`@cpe-23-240-75-236.socal.res.rr.com) (*.net *.split)
07:25:53 × xstill- quits (xstill@fimu/xstill) (*.net *.split)
07:25:53 × xsarnik quits (xsarnik@lounge.fi.muni.cz) (*.net *.split)
07:25:53 × amk quits (~amk@109.255.169.126) (*.net *.split)
07:25:53 × kojo5551 quits (~kojo5551@fep.grid.pub.ro) (*.net *.split)
07:25:53 × abrar quits (~abrar@static-108-2-152-54.phlapa.fios.verizon.net) (*.net *.split)
07:25:53 × kmein quits (~weechat@user/kmein) (*.net *.split)
07:25:53 × c_wraith quits (~c_wraith@adjoint.us) (*.net *.split)
07:25:53 × statusfailed quits (~statusfai@statusfailed.com) (*.net *.split)
07:25:53 × canta quits (~canta@user/canta) (*.net *.split)
07:25:53 × dminuoso quits (~dminuoso@user/dminuoso) (*.net *.split)
07:25:53 × juri_ quits (~juri@178.63.35.222) (*.net *.split)
07:25:53 × tolt quits (~weechat-h@li219-154.members.linode.com) (*.net *.split)
07:25:53 × mmaruseacph2 quits (~mihai@198.199.100.72) (*.net *.split)
07:25:53 × meejah quits (~meejah@rutas.meejah.ca) (*.net *.split)
07:25:53 × andjjj23_ quits (~irc@107.170.228.47) (*.net *.split)
07:25:53 × neverwas quits (jpneverwas@swissbox.unperson.link) (*.net *.split)
07:25:53 × n3t quits (n3t@user/n3t) (*.net *.split)
07:25:53 × loonycyborg quits (~loonycybo@wesnoth/developer/loonycyborg) (*.net *.split)
07:25:53 × drdo quits (~drdo@roach0.drdo.eu) (*.net *.split)
07:25:53 × ByronJohnson quits (~bairyn@50-250-232-19-static.hfc.comcastbusiness.net) (*.net *.split)
07:25:53 × carter quits (sid14827@helmsley.irccloud.com) (*.net *.split)
07:25:53 × TMA quits (~tma@twin.jikos.cz) (*.net *.split)
07:25:53 × hubvu_ quits (sid495858@tinside.irccloud.com) (*.net *.split)
07:25:53 × jtmar quits (~james@jtmar.me) (*.net *.split)
07:25:53 × kawpuh quits (~kawpuh@66.42.81.80) (*.net *.split)
07:26:09 jao joins (~jao@cpc103048-sgyl39-2-0-cust502.18-2.cable.virginm.net)
07:27:26 alx741 joins (~alx741@157.100.197.240)
07:28:04 whatsupdoc joins (uid509081@hampstead.irccloud.com)
07:28:04 asivitz joins (uid178348@tinside.irccloud.com)
07:28:04 econo joins (uid147250@user/econo)
07:28:04 Vajb joins (~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi)
07:28:04 cheater joins (~Username@user/cheater)
07:28:04 Guest6340 joins (~cat@h-98-128-128-173.A351.priv.bahnhof.se)
07:28:04 Sgeo joins (~Sgeo@user/sgeo)
07:28:04 deadmarshal joins (~deadmarsh@95.38.114.110)
07:28:04 xdej joins (~xdej@quatramaran.salle-s.org)
07:28:04 red-snail joins (~snail@static.151.210.203.116.clients.your-server.de)
07:28:04 hyiltiz joins (~quassel@31.220.5.250)
07:28:04 quintasan joins (~quassel@quintasan.pl)
07:28:04 cigsender joins (~cigsender@74.124.58.162)
07:28:04 Hafydd joins (~Hafydd@user/hafydd)
07:28:04 aria joins (sid380617@lymington.irccloud.com)
07:28:04 oats joins (~thomas@user/oats)
07:28:04 TheCoffeMaker joins (~TheCoffeM@user/thecoffemaker)
07:28:04 ncopa joins (~ncopa@alpine/developer/ncopa)
07:28:04 lep joins (~lep@94.31.89.203)
07:28:04 AlexZenon joins (~alzenon@178.34.151.37)
07:28:04 ft joins (~ft@shell.chaostreff-dortmund.de)
07:28:04 russruss joins (~russruss@my.russellmcc.com)
07:28:04 tv joins (~tv@user/tv)
07:28:04 gawen_ joins (~gawen@user/gawen)
07:28:04 robertm joins (~robertm@lattice.rojoma.com)
07:28:04 tromp joins (~textual@dhcp-077-249-230-040.chello.nl)
07:28:04 swistak joins (~swistak@185.21.216.141)
07:28:04 wz1000 joins (~zubin@static.11.113.47.78.clients.your-server.de)
07:28:04 superbil joins (~superbil@1-34-176-171.hinet-ip.hinet.net)
07:28:04 marquis_andras joins (~marquis_a@124.170.163.166)
07:28:04 justGhost joins (~justache@user/justache)
07:28:04 mmalter joins (~mmalter@88.126.10.237)
07:28:04 mcglk joins (~mcglk@131.191.49.120)
07:28:04 Maxdamantus joins (~Maxdamant@user/maxdamantus)
07:28:04 stvc joins (~stvc@192.241.166.39)
07:28:04 cls joins (~cls@chalk.lubutu.com)
07:28:04 cross_ joins (~cross@spitfire.i.gajendra.net)
07:28:04 skewerr joins (spoonm@inaba.spoonm.org)
07:28:04 drewr joins (~drew@user/drewr)
07:28:04 fryguybob joins (~fryguybob@cpe-74-67-169-145.rochester.res.rr.com)
07:28:04 haskl joins (~haskl@user/haskl)
07:28:04 mstksg joins (~jle`@cpe-23-240-75-236.socal.res.rr.com)
07:28:04 xstill- joins (xstill@fimu/xstill)
07:28:04 xsarnik joins (xsarnik@lounge.fi.muni.cz)
07:28:04 amk joins (~amk@109.255.169.126)
07:28:04 kojo5551 joins (~kojo5551@fep.grid.pub.ro)
07:28:04 abrar joins (~abrar@static-108-2-152-54.phlapa.fios.verizon.net)
07:28:04 kmein joins (~weechat@user/kmein)
07:28:04 c_wraith joins (~c_wraith@adjoint.us)
07:28:04 statusfailed joins (~statusfai@statusfailed.com)
07:28:04 canta joins (~canta@user/canta)
07:28:04 dminuoso joins (~dminuoso@user/dminuoso)
07:28:04 juri_ joins (~juri@178.63.35.222)
07:28:04 tolt joins (~weechat-h@li219-154.members.linode.com)
07:28:04 mmaruseacph2 joins (~mihai@198.199.100.72)
07:28:04 meejah joins (~meejah@rutas.meejah.ca)
07:28:04 andjjj23_ joins (~irc@107.170.228.47)
07:28:04 neverwas joins (jpneverwas@swissbox.unperson.link)
07:28:04 n3t joins (n3t@user/n3t)
07:28:04 loonycyborg joins (~loonycybo@wesnoth/developer/loonycyborg)
07:28:04 drdo joins (~drdo@roach0.drdo.eu)
07:28:04 ByronJohnson joins (~bairyn@50-250-232-19-static.hfc.comcastbusiness.net)
07:28:04 carter joins (sid14827@helmsley.irccloud.com)
07:28:04 TMA joins (~tma@twin.jikos.cz)
07:28:04 hubvu_ joins (sid495858@tinside.irccloud.com)
07:28:04 jtmar joins (~james@jtmar.me)
07:28:04 kawpuh joins (~kawpuh@66.42.81.80)
07:28:04 Boarders_ joins (sid425905@id-425905.lymington.irccloud.com)
07:28:04 JSharp joins (sid4580@id-4580.lymington.irccloud.com)
07:28:04 saolsen joins (sid26430@id-26430.lymington.irccloud.com)
07:28:04 tapas joins (sid467876@id-467876.ilkley.irccloud.com)
07:28:04 cbarrett joins (sid192934@id-192934.helmsley.irccloud.com)
07:28:04 enemeth79 joins (sid309041@id-309041.lymington.irccloud.com)
07:28:04 bjs joins (sid190364@user/bjs)
07:28:04 sclv joins (sid39734@haskell/developer/sclv)
07:28:04 mrianbloom joins (sid350277@id-350277.ilkley.irccloud.com)
07:28:04 dmj` joins (sid72307@id-72307.hampstead.irccloud.com)
07:28:04 acertain joins (sid470584@id-470584.hampstead.irccloud.com)
07:28:04 gaze___ joins (sid387101@id-387101.helmsley.irccloud.com)
07:28:04 hongminhee joins (sid295@id-295.tinside.irccloud.com)
07:31:13 mon_aaraj joins (~MonAaraj@user/mon-aaraj/x-4416475)
07:31:13 × alx741 quits (~alx741@157.100.197.240) (Read error: Connection reset by peer)
07:34:32 Andrew is now known as Guest110
07:34:32 × Guest110 quits (andrew@andrewyu.org) (Killed (molybdenum.libera.chat (Nickname regained by services)))
07:34:45 Andrew_ joins (andrew@andrewyu.org)
07:35:28 dhouthoo joins (~dhouthoo@178-117-36-167.access.telenet.be)
07:36:44 emf joins (~emf@2620:10d:c090:400::5:d558)
07:39:57 × jao quits (~jao@cpc103048-sgyl39-2-0-cust502.18-2.cable.virginm.net) (Ping timeout: 240 seconds)
07:41:21 michalz2 joins (~michalz2@185.246.204.87)
07:43:41 fef joins (~thedawn@user/thedawn)
07:44:47 oscurochu joins (~oscurochu@097-096-050-227.res.spectrum.com)
07:46:12 adnaahm joins (~adnaahm@host-97-net-64-160-119.mobilinkinfinity.net.pk)
07:46:29 mc47 joins (~mc47@xmonad/TheMC47)
07:47:27 alx741 joins (~alx741@157.100.197.240)
07:51:57 × _ht quits (~quassel@231-169-21-31.ftth.glasoperator.nl) (Ping timeout: 240 seconds)
07:52:07 × alx741 quits (~alx741@157.100.197.240) (Read error: Connection reset by peer)
07:52:35 _ht joins (~quassel@231-169-21-31.ftth.glasoperator.nl)
07:52:46 gehmehgeh joins (~user@user/gehmehgeh)
07:52:58 MajorBiscuit joins (~MajorBisc@86-88-79-148.fixed.kpn.net)
07:52:59 × mon_aaraj quits (~MonAaraj@user/mon-aaraj/x-4416475) (Ping timeout: 256 seconds)
07:54:36 mon_aaraj joins (~MonAaraj@user/mon-aaraj/x-4416475)
07:54:51 coot joins (~coot@213.134.190.95)
07:56:37 × foul_owl quits (~kerry@94.140.8.105) (Ping timeout: 256 seconds)
07:57:19 xkuru joins (~xkuru@user/xkuru)
07:57:45 × MajorBiscuit quits (~MajorBisc@86-88-79-148.fixed.kpn.net) (Ping timeout: 256 seconds)
07:59:10 MajorBiscuit joins (~MajorBisc@c-001-015-052.client.tudelft.eduvpn.nl)
08:01:27 × bontaq quits (~user@ool-45779fe5.dyn.optonline.net) (Remote host closed the connection)
08:01:27 × meltedbrain_y2k quits (~tekserf@47.61.115.91) (Read error: Connection reset by peer)
08:06:33 <dminuoso> monochrom: I can see a few somewhat valid ones.
08:07:08 <dminuoso> When the HTML input is somewhat static/controllable and known to be parseable by your XML library, then that could be a good reason
08:07:29 <dminuoso> Heck, I've done regexp matching on XML before for the same reason
08:07:37 × mon_aaraj quits (~MonAaraj@user/mon-aaraj/x-4416475) (Ping timeout: 240 seconds)
08:08:28 sprout_ joins (~quassel@2a02:a467:ccd6:1:2dea:f16f:b001:1064)
08:08:37 alx741 joins (~alx741@157.100.197.240)
08:09:59 mon_aaraj joins (~MonAaraj@user/mon-aaraj/x-4416475)
08:11:37 × sprout quits (~quassel@2a02:a467:ccd6:1:80b2:e90a:7da7:7a8d) (Ping timeout: 240 seconds)
08:12:20 foul_owl joins (~kerry@94.140.8.107)
08:12:57 × alp quits (~alp@user/alp) (Ping timeout: 240 seconds)
08:13:20 × alx741 quits (~alx741@157.100.197.240) (Read error: Connection reset by peer)
08:13:36 mcgroin joins (~mcgroin@roc37-h01-176-170-197-243.dsl.sta.abo.bbox.fr)
08:14:26 sprout joins (~quassel@2a02:a467:ccd6:1:51ac:e09e:aad0:faee)
08:17:17 × sprout_ quits (~quassel@2a02:a467:ccd6:1:2dea:f16f:b001:1064) (Ping timeout: 240 seconds)
08:18:06 × whound quits (~dust@2405:204:5488:ef4c:54b6:3467:52f3:e9f2) (Quit: Konversation terminated!)
08:18:45 Ariakenom joins (~Ariakenom@h-82-196-111-63.na.cust.bahnhof.se)
08:20:37 meltedbrain_y2k joins (~tekserf@47.61.115.91)
08:20:44 merijn joins (~merijn@c-001-001-018.client.esciencecenter.eduvpn.nl)
08:25:07 alp joins (~alp@user/alp)
08:25:17 × mon_aaraj quits (~MonAaraj@user/mon-aaraj/x-4416475) (Ping timeout: 240 seconds)
08:27:05 Gurkenglas joins (~Gurkengla@dslb-090-186-104-244.090.186.pools.vodafone-ip.de)
08:27:25 mon_aaraj joins (~MonAaraj@user/mon-aaraj/x-4416475)
08:28:17 × Sgeo quits (~Sgeo@user/sgeo) (Read error: Connection reset by peer)
08:29:09 × gehmehgeh quits (~user@user/gehmehgeh) (Remote host closed the connection)
08:29:47 alx741 joins (~alx741@157.100.197.240)
08:29:53 gehmehgeh joins (~user@user/gehmehgeh)
08:33:14 × alx741 quits (~alx741@157.100.197.240) (Read error: Connection reset by peer)
08:34:16 lortabac joins (~lortabac@2a01:e0a:541:b8f0:286e:ce4:a8f3:ca6f)
08:34:52 × oscurochu quits (~oscurochu@097-096-050-227.res.spectrum.com) (Remote host closed the connection)
08:36:02 × zaquest quits (~notzaques@5.130.79.72) (Remote host closed the connection)
08:36:43 × glguy quits (x@libera/staff/glguy) (Read error: Connection reset by peer)
08:37:13 glguy joins (x@libera/staff/glguy)
08:37:17 × emf quits (~emf@2620:10d:c090:400::5:d558) (Ping timeout: 240 seconds)
08:38:50 ardell joins (~ardell@user/ardell)
08:39:37 × cyphase quits (~cyphase@user/cyphase) (Ping timeout: 240 seconds)
08:43:09 cyphase joins (~cyphase@user/cyphase)
08:47:43 lavaman joins (~lavaman@98.38.249.169)
08:49:34 × ss4 quits (~wootehfoo@user/wootehfoot) (Quit: Leaving)
08:49:48 alx741 joins (~alx741@157.100.197.240)
08:49:50 wootehfoot joins (~wootehfoo@user/wootehfoot)
08:49:59 machinedgod joins (~machinedg@24.105.81.50)
08:50:58 nschoe joins (~quassel@178.251.84.79)
08:51:31 gargawel joins (~kvirc@82-65-144-99.subs.proxad.net)
08:51:53 max22- joins (~maxime@2a01cb088335980058f4ffda4eee6f66.ipv6.abo.wanadoo.fr)
08:53:03 × xff0x quits (~xff0x@2001:1a81:53e8:2500:a319:1c51:2e8e:9977) (Ping timeout: 256 seconds)
08:53:56 xff0x joins (~xff0x@2001:1a81:53e8:2500:31e6:f5f6:6492:6bc2)
08:54:17 × merijn quits (~merijn@c-001-001-018.client.esciencecenter.eduvpn.nl) (Ping timeout: 240 seconds)
08:54:25 × alx741 quits (~alx741@157.100.197.240) (Read error: Connection reset by peer)
08:54:35 oscurochu joins (~oscurochu@097-096-050-227.res.spectrum.com)
08:56:55 cfricke joins (~cfricke@user/cfricke)
08:57:56 fendor joins (~fendor@178.165.184.56.wireless.dyn.drei.com)
09:02:07 jstolarek joins (~jstolarek@staticline-31-183-164-222.toya.net.pl)
09:04:27 x_kuru joins (~xkuru@user/xkuru)
09:06:37 × xkuru quits (~xkuru@user/xkuru) (Ping timeout: 240 seconds)
09:09:37 × oscurochu quits (~oscurochu@097-096-050-227.res.spectrum.com) (Ping timeout: 240 seconds)
09:10:58 alx741 joins (~alx741@157.100.197.240)
09:11:05 × lewisje quits (~lewisje@72.49.207.113) (Quit: Leaving)
09:11:23 × perrierjouet quits (~perrier-j@modemcable012.251-130-66.mc.videotron.ca) (Quit: WeeChat 3.4)
09:12:40 × jstolarek quits (~jstolarek@staticline-31-183-164-222.toya.net.pl) (Quit: leaving)
09:17:41 × geekosaur quits (~geekosaur@xmonad/geekosaur) (Killed (NickServ (GHOST command used by allbery_b)))
09:17:41 allbery_b joins (~geekosaur@xmonad/geekosaur)
09:17:44 allbery_b is now known as geekosaur
09:17:54 dschrempf joins (~dominik@070-207.dynamic.dsl.fonira.net)
09:19:17 × Erutuon quits (~Erutuon@user/erutuon) (Ping timeout: 240 seconds)
09:20:25 × alx741 quits (~alx741@157.100.197.240) (Read error: Connection reset by peer)
09:22:22 Andrew_ is now known as Andrew
09:22:28 Erutuon joins (~Erutuon@user/erutuon)
09:25:27 merijn joins (~merijn@c-001-001-018.client.esciencecenter.eduvpn.nl)
09:30:15 × wyrd quits (~wyrd@gateway/tor-sasl/wyrd) (Ping timeout: 276 seconds)
09:31:03 × cfricke quits (~cfricke@user/cfricke) (Quit: WeeChat 3.3)
09:31:47 × gargawel quits (~kvirc@82-65-144-99.subs.proxad.net) (Quit: KVIrc 5.0.0 Aria http://www.kvirc.net/)
09:31:53 wyrd joins (~wyrd@gateway/tor-sasl/wyrd)
09:33:40 ubert1 joins (~Thunderbi@p200300ecdf0994a1946b5f66cf92c0df.dip0.t-ipconnect.de)
09:35:55 oscurochu joins (~oscurochu@097-096-050-227.res.spectrum.com)
09:38:37 alx741 joins (~alx741@157.100.197.240)
09:39:00 × Jing quits (~hedgehog@240e:390:7c53:a7e1:f460:9388:75e8:8181) (Quit: My MacBook has gone to sleep. ZZZzzz…)
09:39:31 × whatsupdoc quits (uid509081@hampstead.irccloud.com) (Quit: Connection closed for inactivity)
09:41:45 cfricke joins (~cfricke@user/cfricke)
09:44:03 × adnaahm quits (~adnaahm@host-97-net-64-160-119.mobilinkinfinity.net.pk) (Ping timeout: 256 seconds)
09:44:51 × oscurochu quits (~oscurochu@097-096-050-227.res.spectrum.com) (Ping timeout: 256 seconds)
09:45:26 × eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:a148:40f0:8827:c6ab) (Remote host closed the connection)
09:46:57 × n3rdy1 quits (~n3rdy1@2600:1700:4570:3480:1b88:50f:dae0:9293) (Ping timeout: 240 seconds)
09:47:04 jgeerds joins (~jgeerds@55d4a547.access.ecotel.net)
09:48:05 × tinwood quits (~tinwood@canonical/tinwood) (Remote host closed the connection)
09:49:10 × alx741 quits (~alx741@157.100.197.240) (Read error: Connection reset by peer)
09:50:23 Tuplanolla joins (~Tuplanoll@91-159-68-166.elisa-laajakaista.fi)
09:51:06 tinwood joins (~tinwood@general.default.akavanagh.uk0.bigv.io)
09:51:06 × tinwood quits (~tinwood@general.default.akavanagh.uk0.bigv.io) (Changing host)
09:51:06 tinwood joins (~tinwood@canonical/tinwood)
09:51:13 adnaahm joins (~adnaahm@host-83-net-67-160-119.mobilinkinfinity.net.pk)
09:52:16 × Akiva quits (~Akiva@user/Akiva) (Ping timeout: 250 seconds)
09:58:09 CiaoSen joins (~Jura@p200300c95737a2002a3a4dfffe84dbd5.dip0.t-ipconnect.de)
09:58:13 × werneta quits (~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net) (Ping timeout: 256 seconds)
09:59:50 werneta joins (~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net)
10:00:55 __monty__ joins (~toonn@user/toonn)
10:01:02 oscurochu joins (~oscurochu@097-096-050-227.res.spectrum.com)
10:02:03 × tzh quits (~tzh@c-24-21-73-154.hsd1.wa.comcast.net) (Quit: zzz)
10:05:32 Jing joins (~hedgehog@240e:390:7c53:a7e1:7da5:59e:42b2:ced5)
10:05:49 × oscurochu quits (~oscurochu@097-096-050-227.res.spectrum.com) (Ping timeout: 256 seconds)
10:05:49 alx741 joins (~alx741@157.100.197.240)
10:08:21 sprout_ joins (~quassel@2a02:a467:ccd6:1:a85e:5217:60c2:bcc7)
10:10:16 × alx741 quits (~alx741@157.100.197.240) (Read error: Connection reset by peer)
10:11:17 × sprout quits (~quassel@2a02:a467:ccd6:1:51ac:e09e:aad0:faee) (Ping timeout: 240 seconds)
10:11:20 × Techcable quits (~Techcable@168.235.93.147) (Remote host closed the connection)
10:11:53 raehik joins (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net)
10:12:53 Techcable joins (~Techcable@168.235.93.147)
10:13:56 perrierjouet joins (~perrier-j@modemcable012.251-130-66.mc.videotron.ca)
10:16:05 [itchyjunk] joins (~itchyjunk@user/itchyjunk/x-7353470)
10:19:15 haskellberryfinn joins (~nut@roc37-h01-176-170-197-243.dsl.sta.abo.bbox.fr)
10:19:18 × coot quits (~coot@213.134.190.95) (Quit: coot)
10:19:47 coot joins (~coot@213.134.190.95)
10:20:38 Guest87 joins (~Guest87@4.53.152.194.mga.com.pl)
10:25:09 × Guest87 quits (~Guest87@4.53.152.194.mga.com.pl) (Client Quit)
10:26:29 × jgeerds quits (~jgeerds@55d4a547.access.ecotel.net) (Ping timeout: 250 seconds)
10:26:46 alx741 joins (~alx741@157.100.197.240)
10:28:01 × wyrd quits (~wyrd@gateway/tor-sasl/wyrd) (Remote host closed the connection)
10:31:21 × geekosaur quits (~geekosaur@xmonad/geekosaur) (Remote host closed the connection)
10:33:04 geekosaur joins (~geekosaur@xmonad/geekosaur)
10:33:09 × econo quits (uid147250@user/econo) (Quit: Connection closed for inactivity)
10:33:39 mmhat joins (~mmh@55d48978.access.ecotel.net)
10:35:11 wyrd joins (~wyrd@gateway/tor-sasl/wyrd)
10:38:18 zaquest joins (~notzaques@5.130.79.72)
10:39:14 × alx741 quits (~alx741@157.100.197.240) (Read error: Connection reset by peer)
10:39:37 × Erutuon quits (~Erutuon@user/erutuon) (Ping timeout: 240 seconds)
10:40:18 Benzi-Junior joins (~BenziJuni@dsl-149-66-61.hive.is)
10:44:21 × fef quits (~thedawn@user/thedawn) (Ping timeout: 276 seconds)
10:46:18 eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:4821:3bd5:6699:99c5)
10:48:39 × CiaoSen quits (~Jura@p200300c95737a2002a3a4dfffe84dbd5.dip0.t-ipconnect.de) (Ping timeout: 256 seconds)
10:49:14 DNH joins (~DNH@2a02:8108:1100:16d8:a4a2:67d7:acda:e455)
10:50:37 × eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:4821:3bd5:6699:99c5) (Ping timeout: 240 seconds)
10:54:11 Lord_of_Life_ joins (~Lord@user/lord-of-life/x-2819915)
10:55:07 × Lord_of_Life quits (~Lord@user/lord-of-life/x-2819915) (Ping timeout: 256 seconds)
10:55:30 Lord_of_Life_ is now known as Lord_of_Life
10:57:15 alx741 joins (~alx741@157.100.197.240)
11:01:55 × Inst quits (~delicacie@c-98-208-218-119.hsd1.fl.comcast.net) (Ping timeout: 256 seconds)
11:10:56 × alx741 quits (~alx741@157.100.197.240) (Read error: Connection reset by peer)
11:16:16 oscuroch_ joins (~oscurochu@097-096-050-227.res.spectrum.com)
11:18:01 × haskellberryfinn quits (~nut@roc37-h01-176-170-197-243.dsl.sta.abo.bbox.fr) (Ping timeout: 256 seconds)
11:19:07 × cfricke quits (~cfricke@user/cfricke) (Quit: WeeChat 3.3)
11:25:29 × oscuroch_ quits (~oscurochu@097-096-050-227.res.spectrum.com) (Ping timeout: 256 seconds)
11:28:52 alx741 joins (~alx741@157.100.197.240)
11:29:27 Axma76527 joins (~Axman6@user/axman6)
11:31:20 × Axman6 quits (~Axman6@user/axman6) (Ping timeout: 260 seconds)
11:31:34 × alx741 quits (~alx741@157.100.197.240) (Read error: Connection reset by peer)
11:36:37 × merijn quits (~merijn@c-001-001-018.client.esciencecenter.eduvpn.nl) (Ping timeout: 240 seconds)
11:38:30 merijn joins (~merijn@c-001-001-018.client.esciencecenter.eduvpn.nl)
11:43:52 × [itchyjunk] quits (~itchyjunk@user/itchyjunk/x-7353470) (Read error: Connection reset by peer)
11:47:06 × chenqisu1 quits (~chenqisu1@183.217.200.249) (Quit: Leaving)
11:47:59 alx741 joins (~alx741@157.100.197.240)
11:52:07 × alx741 quits (~alx741@157.100.197.240) (Read error: Connection reset by peer)
11:53:57 × alp quits (~alp@user/alp) (Ping timeout: 240 seconds)
12:06:34 × dschrempf quits (~dominik@070-207.dynamic.dsl.fonira.net) (Quit: WeeChat 3.3)
12:09:54 alp joins (~alp@user/alp)
12:10:30 alx741 joins (~alx741@157.100.197.240)
12:11:53 yauhsien_ joins (~yauhsien@118-167-40-21.dynamic-ip.hinet.net)
12:11:57 × perrierjouet quits (~perrier-j@modemcable012.251-130-66.mc.videotron.ca) (Ping timeout: 240 seconds)
12:14:15 ss4 joins (~wootehfoo@user/wootehfoot)
12:16:43 × yauhsien_ quits (~yauhsien@118-167-40-21.dynamic-ip.hinet.net) (Ping timeout: 256 seconds)
12:17:47 pretty_dumm_guy joins (trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655)
12:18:25 × wootehfoot quits (~wootehfoo@user/wootehfoot) (Ping timeout: 256 seconds)
12:19:28 × ss4 quits (~wootehfoo@user/wootehfoot) (Quit: Leaving)
12:19:31 zincy joins (~zincy@2a00:23c8:970c:4801:340a:21f3:9185:5e11)
12:21:35 × cynomys quits (~cynomys@user/cynomys) (Ping timeout: 256 seconds)
12:22:23 × merijn quits (~merijn@c-001-001-018.client.esciencecenter.eduvpn.nl) (Ping timeout: 256 seconds)
12:23:06 × DNH quits (~DNH@2a02:8108:1100:16d8:a4a2:67d7:acda:e455) (Quit: My MacBook has gone to sleep. ZZZzzz…)
12:23:09 merijn joins (~merijn@c-001-001-018.client.esciencecenter.eduvpn.nl)
12:23:35 CiaoSen joins (~Jura@p200300c95737a2002a3a4dfffe84dbd5.dip0.t-ipconnect.de)
12:25:23 wombat875 joins (~wombat875@pool-72-89-24-154.nycmny.fios.verizon.net)
12:26:18 × alx741 quits (~alx741@157.100.197.240) (Read error: Connection reset by peer)
12:26:24 DNH joins (~DNH@2a02:8108:1100:16d8:a4a2:67d7:acda:e455)
12:29:37 perrierjouet joins (~perrier-j@modemcable012.251-130-66.mc.videotron.ca)
12:30:44 dschrempf joins (~dominik@070-207.dynamic.dsl.fonira.net)
12:30:44 × meltedbrain_y2k quits (~tekserf@47.61.115.91) (Read error: Connection reset by peer)
12:31:02 wootehfoot joins (~wootehfoo@user/wootehfoot)
12:32:01 × merijn quits (~merijn@c-001-001-018.client.esciencecenter.eduvpn.nl) (Ping timeout: 256 seconds)
12:33:14 × biberu quits (~biberu@user/biberu) (Ping timeout: 268 seconds)
12:33:37 × wombat875 quits (~wombat875@pool-72-89-24-154.nycmny.fios.verizon.net) (Ping timeout: 240 seconds)
12:33:42 merijn joins (~merijn@c-001-001-018.client.esciencecenter.eduvpn.nl)
12:36:00 wombat875 joins (~wombat875@pool-72-89-24-154.nycmny.fios.verizon.net)
12:37:01 × wombat875 quits (~wombat875@pool-72-89-24-154.nycmny.fios.verizon.net) (Client Quit)
12:40:03 × LiaoTao quits (~LiaoTao@gateway/tor-sasl/liaotao) (Ping timeout: 276 seconds)
12:40:37 biberu joins (~biberu@user/biberu)
12:41:10 wombat875 joins (~wombat875@pool-72-89-24-154.nycmny.fios.verizon.net)
12:43:07 × Gurkenglas quits (~Gurkengla@dslb-090-186-104-244.090.186.pools.vodafone-ip.de) (Read error: Connection reset by peer)
12:45:38 alx741 joins (~alx741@157.100.197.240)
12:48:08 eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:7058:4e81:e6e0:f9f)
12:48:37 meltedbrain_y2k joins (~tekserf@47.61.115.91)
12:49:06 LiaoTao joins (~LiaoTao@gateway/tor-sasl/liaotao)
12:49:15 × alx741 quits (~alx741@157.100.197.240) (Read error: Connection reset by peer)
12:52:17 × eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:7058:4e81:e6e0:f9f) (Ping timeout: 240 seconds)
12:52:37 × wombat875 quits (~wombat875@pool-72-89-24-154.nycmny.fios.verizon.net) (Ping timeout: 240 seconds)
12:53:39 wombat875 joins (~wombat875@pool-72-89-24-154.nycmny.fios.verizon.net)
12:56:34 kaph joins (~kaph@net-2-47-208-144.cust.vodafonedsl.it)
12:58:27 Inst joins (~delicacie@c-98-208-218-119.hsd1.fl.comcast.net)
13:00:06 × zincy quits (~zincy@2a00:23c8:970c:4801:340a:21f3:9185:5e11) (Remote host closed the connection)
13:05:48 alx741 joins (~alx741@157.100.197.240)
13:09:51 × max22- quits (~maxime@2a01cb088335980058f4ffda4eee6f66.ipv6.abo.wanadoo.fr) (Ping timeout: 250 seconds)
13:11:08 fendor_ joins (~fendor@178.115.38.12.wireless.dyn.drei.com)
13:13:57 × fendor quits (~fendor@178.165.184.56.wireless.dyn.drei.com) (Ping timeout: 256 seconds)
13:13:57 × alx741 quits (~alx741@157.100.197.240) (Read error: Connection reset by peer)
13:14:29 kuribas joins (~user@ip-188-118-57-242.reverse.destiny.be)
13:15:59 tatarqa joins (~kli@ip-89-177-122-45.net.upcbroadband.cz)
13:16:10 zincy joins (~zincy@2a00:23c8:970c:4801:340a:21f3:9185:5e11)
13:20:18 jgeerds joins (~jgeerds@55d4a547.access.ecotel.net)
13:24:54 Gurkenglas joins (~Gurkengla@dslb-090-186-104-244.090.186.pools.vodafone-ip.de)
13:25:33 × zincy quits (~zincy@2a00:23c8:970c:4801:340a:21f3:9185:5e11) (Remote host closed the connection)
13:26:12 × califax quits (~califax@user/califx) (Ping timeout: 276 seconds)
13:32:26 alx741 joins (~alx741@157.100.197.240)
13:32:56 califax joins (~califax@user/califx)
13:32:57 × biberu quits (~biberu@user/biberu) (Ping timeout: 240 seconds)
13:35:35 × alx741 quits (~alx741@157.100.197.240) (Read error: Connection reset by peer)
13:35:51 slowButPresent joins (~slowButPr@user/slowbutpresent)
13:40:40 biberu joins (~biberu@user/biberu)
13:41:37 × adnaahm quits (~adnaahm@host-83-net-67-160-119.mobilinkinfinity.net.pk) (Ping timeout: 240 seconds)
13:42:21 adnaahm joins (~adnaahm@host-251-net-67-160-119.mobilinkinfinity.net.pk)
13:45:36 slack1256 joins (~slack1256@186.11.97.54)
13:52:42 alx741 joins (~alx741@157.100.197.240)
13:56:26 × alx741 quits (~alx741@157.100.197.240) (Read error: Connection reset by peer)
13:57:56 × adnaahm quits (~adnaahm@host-251-net-67-160-119.mobilinkinfinity.net.pk) (Read error: Connection reset by peer)
14:04:23 × Inst quits (~delicacie@c-98-208-218-119.hsd1.fl.comcast.net) (Ping timeout: 256 seconds)
14:05:21 Pickchea joins (~private@user/pickchea)
14:06:21 cfricke joins (~cfricke@user/cfricke)
14:06:56 ProfSimm joins (~ProfSimm@87.227.196.109)
14:08:02 n3rdy1 joins (~n3rdy1@2600:1700:4570:3480::41)
14:08:08 × dschrempf quits (~dominik@070-207.dynamic.dsl.fonira.net) (Quit: WeeChat 3.3)
14:12:28 alo joins (~alo@host-79-36-108-33.retail.telecomitalia.it)
14:12:48 alo parts (~alo@host-79-36-108-33.retail.telecomitalia.it) ()
14:12:59 × __monty__ quits (~toonn@user/toonn) (Quit: leaving)
14:12:59 dschrempf joins (~dominik@070-207.dynamic.dsl.fonira.net)
14:13:17 slac85046 joins (~slack1256@191.126.99.75)
14:13:27 × jespada quits (~jespada@87.74.36.188) (Ping timeout: 256 seconds)
14:14:18 alx741 joins (~alx741@157.100.197.240)
14:15:43 × slack1256 quits (~slack1256@186.11.97.54) (Ping timeout: 256 seconds)
14:15:57 × Pickchea quits (~private@user/pickchea) (Ping timeout: 240 seconds)
14:16:18 jespada joins (~jespada@87.74.36.188)
14:19:29 segfaultfizzbuzz joins (~rustisafu@2602:306:cd3c:9350:cc4:c954:b25:db0a)
14:20:45 <segfaultfizzbuzz> so if i have: runResourceT . runConduit $ httpSource "https://imgur.com" getResponseBody .| parseBytes def .| ::() .| printC
14:20:57 <segfaultfizzbuzz> i want ::() to have ghc spit out the expected type there
14:21:26 <geekosaur> maybe you want _ instead of ::()
14:22:31 × alx741 quits (~alx741@157.100.197.240) (Read error: Connection reset by peer)
14:22:46 <segfaultfizzbuzz> b0 is an ambiguous type variable...?
14:22:59 <dminuoso> segfaultfizzbuzz: Can you share the entirety of the output perhaps?
14:23:16 × lavaman quits (~lavaman@98.38.249.169) (Remote host closed the connection)
14:23:41 <segfaultfizzbuzz> https://paste.rs/YWA.hs
14:23:58 <segfaultfizzbuzz> basically, i have something which works in that pipeline and i want to break it out into a function
14:24:19 <segfaultfizzbuzz> but i don't know how to get haskell to tell me the type of a part of the pipeline
14:24:20 <dminuoso> Yes, this is to be expected.
14:24:22 <dminuoso> printC is a sink
14:24:23 max22- joins (~maxime@2a01cb0883359800569e67c9db5ecf35.ipv6.abo.wanadoo.fr)
14:24:37 <dminuoso> printC :: (Show a, MonadIO m) => ConduitT a o m ()
14:25:28 <dminuoso> Consider this:
14:25:47 <segfaultfizzbuzz> so my function type signature will be UnknownType -> (a, MonadIO) ?
14:26:01 bontaq joins (~user@ool-45779fe5.dyn.optonline.net)
14:26:06 <Clint> no, your function should be a conduit
14:26:17 <merijn> Clint: That's not a function, though :p
14:26:33 <dminuoso> segfaultfizzbuzz: It's just that your attempt of using typed holes to gain inference is a bit flawed.
14:26:39 wroathe joins (~wroathe@206-55-188-8.fttp.usinternet.com)
14:26:39 × wroathe quits (~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host)
14:26:39 wroathe joins (~wroathe@user/wroathe)
14:26:49 × lortabac quits (~lortabac@2a01:e0a:541:b8f0:286e:ce4:a8f3:ca6f) (Ping timeout: 256 seconds)
14:27:25 × jgeerds quits (~jgeerds@55d4a547.access.ecotel.net) (Ping timeout: 250 seconds)
14:27:41 <segfaultfizzbuzz> dminuso: funamentally flawed or just how i am carrying it out?
14:27:44 lavaman joins (~lavaman@98.38.249.169)
14:28:05 <dminuoso> Fundamentally flawed
14:30:54 <segfaultfizzbuzz> so then i look at parseBytes and printC to know my function input and output type?
14:31:06 rusrushal13 joins (~rusrushal@2409:4056:e82:6bda:bd0e:9743:fccb:b2a0)
14:31:06 <dminuoso> printC doesnt know its output type
14:31:17 <segfaultfizzbuzz> printC takes an input type
14:31:22 <segfaultfizzbuzz> my function's output is printC's input
14:31:23 <dminuoso> And its ambiguous in its input type too
14:32:33 <Clint> presumably you know what you want to do with the output of parseBytes before you feed it to printC
14:34:57 × mon_aaraj quits (~MonAaraj@user/mon-aaraj/x-4416475) (Ping timeout: 240 seconds)
14:35:05 lortabac joins (~lortabac@2a01:e0a:541:b8f0:5722:cfcd:da3c:1af2)
14:36:07 <dminuoso> segfaultfizzbuzz: printC learns about its input and output types based on its surroundings.
14:36:11 <dminuoso> Based on inference.
14:36:36 <merijn> segfaultfizzbuzz: What GHC expects is a "ConduitT a b m r" where 'a' = whatever comes out of parsebytes and 'b' is something Showable
14:36:51 <maerwald> still fighting conduit API? :D
14:36:57 <maerwald> it is indeed unintuitive
14:40:22 <segfaultfizzbuzz> maerwald: i am just trying to give haskell an honest try, and for something more substantial than a slow recursive implementation of fib
14:40:47 × dschrempf quits (~dominik@070-207.dynamic.dsl.fonira.net) (Quit: WeeChat 3.3)
14:40:56 <maerwald> segfaultfizzbuzz: there are alternative approaches to streaming that are more closely tied to representing actual streams (similar to lists)
14:40:57 alx741 joins (~alx741@157.100.197.240)
14:41:05 <maerwald> conduit doesn't represent streams, but stream processors
14:42:02 <segfaultfizzbuzz> maerwald: alternatives such as? what is a stream processor vs a stream?
14:42:20 <segfaultfizzbuzz> stream processor can produce and consume multiple streams?
14:42:48 <maerwald> lists are already streams, basically
14:42:54 <geekosaur> segfaultfizzbuzz, you're not misusing conduit. you're expecting ghc to read your mind and figure out which Showable you intend to use
14:43:17 <maerwald> conduit type is about input and output... a list doesn't have that
14:43:33 × alx741 quits (~alx741@157.100.197.240) (Read error: Connection reset by peer)
14:45:05 <maerwald> segfaultfizzbuzz: not sure if my blog post helps you, but I do a recap on conduit there https://hasufell.github.io/posts/2021-10-22-conduit-to-streamly.html
14:47:23 mon_aaraj joins (~MonAaraj@user/mon-aaraj/x-4416475)
14:48:03 <segfaultfizzbuzz> so my function of interest is a Transformer
14:48:42 <maerwald> that would be conduits map
14:49:34 eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:807e:5d29:47f6:b5b3)
14:50:21 adnaahm joins (~adnaahm@host-251-net-64-160-119.mobilinkinfinity.net.pk)
14:50:24 shriekingnoise joins (~shrieking@201.231.16.156)
14:53:37 × eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:807e:5d29:47f6:b5b3) (Ping timeout: 240 seconds)
14:54:05 waleee joins (~waleee@2001:9b0:21d:fc00:398f:b003:b90d:acf4)
14:55:17 × n3rdy1 quits (~n3rdy1@2600:1700:4570:3480::41) (Ping timeout: 240 seconds)
14:58:47 × wroathe quits (~wroathe@user/wroathe) (Ping timeout: 256 seconds)
15:01:24 alx741 joins (~alx741@157.100.197.240)
15:02:18 Sgeo joins (~Sgeo@user/sgeo)
15:04:42 × alx741 quits (~alx741@157.100.197.240) (Read error: Connection reset by peer)
15:05:13 burnsidesLlama joins (~burnsides@dhcp168-042.wadham.ox.ac.uk)
15:07:03 wroathe joins (~wroathe@206-55-188-8.fttp.usinternet.com)
15:07:03 × wroathe quits (~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host)
15:07:03 wroathe joins (~wroathe@user/wroathe)
15:08:15 n3rdy1 joins (~n3rdy1@2600:1700:4570:3480:1b88:50f:dae0:9293)
15:11:29 × wroathe quits (~wroathe@user/wroathe) (Ping timeout: 256 seconds)
15:13:17 × max22- quits (~maxime@2a01cb0883359800569e67c9db5ecf35.ipv6.abo.wanadoo.fr) (Ping timeout: 256 seconds)
15:15:25 × lavaman quits (~lavaman@98.38.249.169) (Remote host closed the connection)
15:16:23 × xff0x quits (~xff0x@2001:1a81:53e8:2500:31e6:f5f6:6492:6bc2) (Ping timeout: 250 seconds)
15:17:08 xff0x joins (~xff0x@2001:1a81:53e8:2500:a7da:afdc:1a91:3063)
15:17:47 RFV joins (~Thunderbi@48.red-83-57-2.dynamicip.rima-tde.net)
15:18:57 × cfricke quits (~cfricke@user/cfricke) (Ping timeout: 256 seconds)
15:20:37 × mon_aaraj quits (~MonAaraj@user/mon-aaraj/x-4416475) (Ping timeout: 240 seconds)
15:21:39 alx741 joins (~alx741@157.100.197.240)
15:22:43 mon_aaraj joins (~MonAaraj@user/mon-aaraj/x-4416475)
15:23:11 <kuribas> > (\(<>) -> <> + 2) 3
15:23:13 <lambdabot> <hint>:1:11: error: parse error on input ‘<>’
15:23:18 <kuribas> > (\(<>) -> (<>) + 2) 3
15:23:19 <lambdabot> 5
15:23:44 <segfaultfizzbuzz> what was that
15:23:59 Alex_test_ is now known as Alex_test
15:24:01 <ski> local binding of operator
15:24:30 × alx741 quits (~alx741@157.100.197.240) (Read error: Connection reset by peer)
15:26:49 <kuribas> to a constant :)
15:28:26 futty14 joins (~futty14@c90-143-137-255.bredband.tele2.se)
15:29:47 × RFV quits (~Thunderbi@48.red-83-57-2.dynamicip.rima-tde.net) (Quit: RFV)
15:30:24 <kuribas> (\α -> α + 3) 2
15:30:26 <kuribas> > (\α -> α + 3) 2
15:30:27 <lambdabot> 5
15:33:00 <kuribas> from now on I'll use greek symbols for all lambdas :)
15:33:32 Pickchea joins (~private@user/pickchea)
15:34:42 <ski> > (\((<>) :: (forall a. Num a => a)) -> (<>) <> 2) 3
15:34:43 <lambdabot> 3
15:36:25 × slac85046 quits (~slack1256@191.126.99.75) (Ping timeout: 256 seconds)
15:36:38 <futty14> Asked a question in the file. I would appriciate it if someone could tell me what is wrong with my code in m2 if we assume that m1 is all correct. replit.com/@futhark14/huff#Main.hs
15:36:40 <kuribas> :t (\((<>) :: (forall a. Num a => a)) -> (<>) <> 2) 3
15:36:41 <lambdabot> Num t => t
15:37:55 <segfaultfizzbuzz> okay so please forgive the potentially distracting question here, but if i wanted to create a haskell with the rustlike concepts of: (1) no exceptions, only errors/result types and panics (2) affine (or linear) resource management, is there anything fundamental about haskell which prevents these things from happening?
15:39:00 <kuribas> segfaultfizzbuzz: not adding something to a language is very easy :)
15:39:14 slack1256 joins (~slack1256@186.11.100.54)
15:39:36 × rusrushal13 quits (~rusrushal@2409:4056:e82:6bda:bd0e:9743:fccb:b2a0) (Ping timeout: 256 seconds)
15:39:36 <segfaultfizzbuzz> i am thinking that at some point there ought to be a haskell++
15:39:43 <kuribas> segfaultfizzbuzz: for adding linear resource and exception handling to a language, you can have a look at idris.
15:39:53 <kuribas> idris is haskell++
15:41:11 <kuribas> in some ways at least.
15:41:33 <kuribas> I just have my doubts about using linear types for resource handling.
15:41:44 <segfaultfizzbuzz> kuribas: oh? plz explain?
15:41:56 <kuribas> idris libraries had a bug that leaked the resource.
15:42:11 alx741 joins (~alx741@157.100.197.240)
15:42:12 <segfaultfizzbuzz> but, that's a flaw with the idris compiler then...?
15:42:26 <kuribas> no, it was a flaw in the library.
15:42:40 whatif joins (~user@123.180.40.237)
15:42:51 <segfaultfizzbuzz> wait, linear types don't stop leaks. leaking memory in rust is safe
15:43:04 <whatif> https://paste.tomsmeding.com/80ERN8cV why this is alway ambigous?
15:43:45 <whatif> potential instance exist, but I have `qualified` to import
15:43:51 <whatif> why this still happend
15:44:22 <kuribas> whatif: you need to add a type annotation to WST.get ...
15:45:05 × alx741 quits (~alx741@157.100.197.240) (Read error: Connection reset by peer)
15:45:21 <lortabac> whatif: name resolution and type inference are completely separated in Haskell
15:45:34 <lortabac> here the problem is about the types, not about the names
15:45:57 lavaman joins (~lavaman@98.38.249.169)
15:50:17 eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:d9db:d02e:3a80:b20d)
15:50:35 × lavaman quits (~lavaman@98.38.249.169) (Ping timeout: 256 seconds)
15:51:01 <ski> segfaultfizzbuzz : did you already look into Clean (or Mercury) ?
15:53:57 <whatif> kuribas: I don't get it, what is a type annotation to WST.get?
15:54:23 Inst joins (~delicacie@c-98-208-218-119.hsd1.fl.comcast.net)
15:54:37 × eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:d9db:d02e:3a80:b20d) (Ping timeout: 240 seconds)
15:54:56 <whatif> WST.get has its type signature from WST
15:55:06 <whatif> why need one?
15:55:11 <ski> whatif> :t WST.get
15:56:33 <whatif> import qualified Web.Scotty.Trans as WST
15:56:37 × alp quits (~alp@user/alp) (Ping timeout: 240 seconds)
15:56:59 ski doesn't really know Scotty
15:57:50 <kuribas> whatif: your error type variable is free.
15:57:52 <ski> anyway, it clearly doesn't know which type of Scotty error that it's supposed to look out for
15:57:53 haskellberryfinn joins (~nut@roc37-h01-176-170-197-243.dsl.sta.abo.bbox.fr)
15:58:05 <ski> you need to pin it down, one way or another
15:58:07 <kuribas> get :: (ScottyError e, MonadIO m) => RoutePattern -> ActionT e m () -> ScottyT e m ()
15:58:35 <ski> (one way might be to make sure the context determines it. another is to add a type ascription, as kuribas is suggesting, which specifies it)
16:01:15 alx741 joins (~alx741@157.100.197.240)
16:01:21 × Inst quits (~delicacie@c-98-208-218-119.hsd1.fl.comcast.net) (Ping timeout: 256 seconds)
16:04:08 × alx741 quits (~alx741@157.100.197.240) (Read error: Connection reset by peer)
16:05:02 zmt00 joins (~zmt00@user/zmt00)
16:05:57 jao joins (~jao@cpc103048-sgyl39-2-0-cust502.18-2.cable.virginm.net)
16:06:51 <whatif> get "/" (text "hello") :: (ScottyError e, MonadIO m) => RoutePattern -> ActionT e m () -> ScottyT e m ()
16:07:17 <whatif> Couldn't match expected type ‘ScottyT e0 IO ()’ with actual type ‘RoutePattern -> ActionT e1 m0 () -> ScottyT e1 m0 ()’
16:07:48 <whatif> what type variable is free?
16:09:30 <kuribas> whatif: "e"
16:09:44 <whatif> get "/" (text "hello") :: ScottyT e m ()
16:09:47 <kuribas> whatif: you want a specific type there, not a polymorphic one.
16:10:00 <kuribas> like "ScottyT () IO ()"
16:10:25 <whatif> kuribas: and why polymorphic is not ok?
16:11:53 <ski> because it doesn't know which `e' to actually pick for you
16:12:00 soxen joins (~bbrahms@pool-173-54-217-168.nwrknj.fios.verizon.net)
16:12:19 <ski> (and the program may behave in different ways, depending on which is picked)
16:12:37 affine joins (~hugh@2a02:1206:45a3:6340:da01:c0c6:8610:80f6)
16:12:52 <segfaultfizzbuzz> ski: no i havent looked into clean/mercury
16:13:06 <affine> given -O0 does this piece of code need a force or seq?
16:13:08 <affine> solve = uncurry max . foldl' (\(r1,r2) m -> (max r1 (r2 + m), r1)) (0,0)
16:13:23 <ski> to actually use a polymorphic value, you will have to instantiate/specialize/monomorphize it, picking some particular type(s) for the universally quantified type varibles
16:13:25 <affine> given that (r1,r2) :: (Int,INt)
16:13:53 <ski> commonly, the context around the use will determine this for you (or defer the decision to the caller of the current code, &c.)
16:14:11 <merijn> affine: Define "need"? :p
16:14:31 <ski> but the context doesn't give enough clues, and so you may need to give an explicit type ascription or signature
16:14:33 <affine> merijn a friend told me that this causes a space leak but i can't see why
16:14:36 <whatif> get "/" (text "hello") :: ScottyT () IO ()
16:14:40 <merijn> affine: Ah, I can :)
16:14:49 <whatif> No instance for (ScottyError ()) arising from a use of ‘get’
16:14:55 <merijn> affine: foldl' evaluates the accumulator to WHNF
16:15:07 <merijn> affine: The WHNF of a tuple is: tuple constructor with 2 thunks :)
16:15:14 <ski> segfaultfizzbuzz : both of them have uniqueness, for handling update-in-place of state, in a pure declarative fashion. Clean also has laziness
16:15:22 <merijn> affine: So foldl' isn't forcing the contents of the tuple (i.e. your +)
16:15:27 <affine> oh really
16:15:32 <whatif> why this `get` is so difficult to use
16:15:44 <affine> weak head normal form of k = (5+7,2+4) is just (5+7,2+4)
16:15:45 <ski> whatif : maybe look at what instances of `ScottyError' are available, if you're not sure which type to choose
16:16:12 <merijn> affine: Personally I find seq hard to use right, I'd recommend going with strictness on the lambda: i.e. "(\(!r1,!r2) m -> (max r1 (r2+ m), r1))"
16:16:22 <affine> so this does actually cause a space leak?
16:16:25 <merijn> affine: Which probably requires -XBangPatterns
16:16:30 <merijn> affine: Potentially
16:16:43 <merijn> affine: It depends how much gets inlined, if the strictness analyzer sees it, etc.
16:16:48 <affine> this is using -O0
16:16:56 <merijn> affine: The probably, yes
16:17:05 <affine> what about levity polymorphism?
16:17:14 × ProfSimm quits (~ProfSimm@87.227.196.109) (Remote host closed the connection)
16:17:16 <affine> unliftedtypes
16:17:26 <merijn> affine: WHNF is basically "evaluate until the first leftmost, outermost thing is a constructor (i.e. the tuple thing)"
16:17:53 <merijn> affine: That'd work, but I don't think foldl' works with that directly, so it quickly becomes messy/tricky
16:18:08 <merijn> affine: BangPatterns on the other hand is fairly straightforward :p
16:18:10 max22- joins (~maxime@2a01cb08833598004d3ba66ae954fefa.ipv6.abo.wanadoo.fr)
16:18:27 <affine> i thought bang patterns were just fully evaluated thunks
16:18:30 <affine> but they still have a pointer
16:18:37 <affine> so strict but still with the pointer?
16:18:57 <ski> ?
16:19:24 <affine> i'm confused about why use bang patterns over unlifted types?
16:19:30 <affine> other than awkwardness of programming
16:19:47 <segfaultfizzbuzz> ski: hm, clean jettisons monads?
16:20:36 alx741 joins (~alx741@157.100.197.240)
16:20:40 <ski> (i dunno what you mean, by those last sentences)
16:20:58 lavaman joins (~lavaman@98.38.249.169)
16:23:17 <merijn> affine: Bang pattern forces to WHNF
16:23:39 × alx741 quits (~alx741@157.100.197.240) (Read error: Connection reset by peer)
16:23:40 <affine> hmm so it is weaker than unlifted types which is essentially a deep force?
16:23:48 <affine> as wHNF is not the same as lacking bottom?
16:23:55 <merijn> affine: So where foldl' forces the tuple to WHNF, "(\(!r1, !r2) m -> ..)" forces r1 and r2 to WHNF whenever the tuple is forced to WHNF
16:24:47 <merijn> affine: unlifted types don't play nice with polymorphic code/functions
16:25:05 <merijn> affine: Supporting parametric polymorphism is one of the main reasons for lifting things :p
16:25:06 neverfindme joins (~hayden@158.123.160.43)
16:25:17 × lavaman quits (~lavaman@98.38.249.169) (Ping timeout: 240 seconds)
16:25:23 <affine> is that an implmentation detail?
16:25:33 <affine> could functions generalise over levity in future given a lot of compiler work??
16:25:42 <affine> or are unlifted types more a special case if you really really need it
16:26:10 <merijn> affine: Ok, so there are, effectively, two ways/strategies for handling polymorphic code
16:26:44 <merijn> datatypes can have different sizes so you can: 1) generate separate code for every possible datatype or 2) force all datatypes to have the same type (for purposes of generic code)
16:27:03 <merijn> The first option optimises better, but bloats code size and can be tricky if you don't know all types ahead of time
16:27:28 <merijn> The second option is generally easier and compacter (but with reduced optimisation opportunity)
16:27:33 <affine> is this static vs dynamic dispatch?
16:27:57 <merijn> affine: The easiest way of making all data the same size is to replace every datatype with a pointer indirection to the data (aka boxing)
16:28:40 <merijn> (GHC has, like, 2 axes boxed/unboxed and lifted/unlifted I think? I'm a bit muddy on the details)
16:29:23 <merijn> affine: Anyway, the result is that you can't magically throw unlifted/unboxed code into any and all functions
16:29:37 <affine> ahh yes of course that makes sense
16:29:47 <affine> you can just pass along a pointer to a function which is the boxed thing
16:30:28 <affine> i suppose i'm imagining knowing the type at compiletime
16:30:30 <merijn> affine: bangpatterns/seq don't affect the representation (just evaluation) so it plays nicer in most cases than unlifted does
16:30:31 <affine> rather than say existential types
16:30:32 × Vajb quits (~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi) (Read error: Connection reset by peer)
16:30:49 Vajb joins (~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi)
16:30:52 mikoto-chan joins (~mikoto-ch@213.177.151.239)
16:31:01 × ardell quits (~ardell@user/ardell) (Quit: Konversation terminated!)
16:31:19 <Andrew> Since Haskell is a lazy language, I wonder if there's a way to represent radicals that's *actually accurate*. For example, is there a form of `pi' that if displayed on its own would be calculated to infinity, but would work with a function that takes an precision value and spits that precision out? I mean a function that works kind-of like `take', but works on those types?
16:31:49 <affine> why not the continued fraction representation?
16:32:01 <affine> that represents sqrt(2) perfectly
16:33:09 × lortabac quits (~lortabac@2a01:e0a:541:b8f0:5722:cfcd:da3c:1af2) (Quit: WeeChat 2.8)
16:33:19 <Andrew> Hmm, nice :)
16:33:24 <Andrew> I just wonder why that isn't the default
16:33:30 × neverfindme quits (~hayden@158.123.160.43) (Quit: Leaving)
16:33:58 <merijn> because that kinda thing is slow :p
16:34:07 <geekosaur> it's slower than machine / IEEE floats
16:34:39 <Andrew> But that's more "correct" :\
16:34:51 <ski> Andrew : see `CReal' ?
16:35:06 <kuribas> shouldn't Data.Map be a Profunctor?
16:35:12 <segfaultfizzbuzz> Andrew: there's a closed form method of calculating any specified digit of pi
16:35:15 <ski> (i dunno if anyone has made an implementation of algebraic numbers, though, hmm ..)
16:35:30 <Andrew> Sounds like it, thanks :)
16:35:43 <Andrew> I suddenly got this idea for no apparant reason while configuring a Postfix server
16:35:46 <segfaultfizzbuzz> so you don't really need laziness, i don't think
16:35:52 <ski> > showCReal 50 pi
16:35:53 <lambdabot> "3.14159265358979323846264338327950288419716939937511"
16:35:59 <ski> > showCReal 100 pi
16:36:00 <lambdabot> "3.1415926535897932384626433832795028841971693993751058209749445923078164062...
16:36:01 <merijn> kuribas: No
16:36:11 <merijn> kuribas: Same reason Set isn't a Functor
16:36:16 <Andrew> segfaultfizzbuzz: Well, I like how laziness works in Haskell, seems quite elegant :)
16:36:39 <segfaultfizzbuzz> also note that there is absolutely no circumstance where more than 100 digits of pi would actually be necessary, except for ivory tower number theory
16:37:32 <polyphem> Andrew: standard pi has 16 siginificant digits, you have to provide your other terms with even more "precision" to be more correct , does that make sense ?
16:38:06 <Andrew> Makes sense
16:38:32 × califax quits (~califax@user/califx) (Remote host closed the connection)
16:38:46 califax joins (~califax@user/califx)
16:38:58 <polyphem> more precise in one factor , doesnt make the whole computation more precise , if the other factors are less precise
16:39:19 <segfaultfizzbuzz> and in any circumstance where pi is actually useful to compute things it needs to be pre-calculated
16:39:36 <segfaultfizzbuzz> sounds like the opposite of where laziness would be useful
16:40:13 <ski> i suppose with laziness, precision can be demand-driven
16:40:37 × jpds quits (~jpds@gateway/tor-sasl/jpds) (Remote host closed the connection)
16:40:42 × deadmarshal quits (~deadmarsh@95.38.114.110) (Quit: ZNC 1.8.2 - https://znc.in)
16:40:46 ski idly ponders stability of numerical algorithms
16:41:01 <Andrew> ski: That's my point
16:41:15 jpds joins (~jpds@gateway/tor-sasl/jpds)
16:41:49 sharky2 joins (~bc8147f2@83.167.180.121)
16:41:50 deadmarshal joins (~deadmarsh@95.38.119.14)
16:42:13 alx741 joins (~alx741@157.100.197.240)
16:42:18 <segfaultfizzbuzz> i mean, do you need deep sub-planck-scale precision?
16:42:30 <carter> if only that was useful :)
16:42:43 × merijn quits (~merijn@c-001-001-018.client.esciencecenter.eduvpn.nl) (Ping timeout: 256 seconds)
16:42:54 azimut_ joins (~azimut@gateway/tor-sasl/azimut)
16:43:15 <segfaultfizzbuzz> lol, quad precision smallest value looks like 2^-16382
16:43:16 int-e drops a feather on ski in hopes of disturbing their precarious balance.
16:43:36 <segfaultfizzbuzz> lol even google reports 2^-16382 as being precisely equal to ezro
16:43:37 × mikoto-chan quits (~mikoto-ch@213.177.151.239) (Ping timeout: 256 seconds)
16:43:48 × azimut quits (~azimut@gateway/tor-sasl/azimut) (Ping timeout: 276 seconds)
16:44:44 × adanwan_ quits (~adanwan@gateway/tor-sasl/adanwan) (Remote host closed the connection)
16:45:03 <segfaultfizzbuzz> planck length is 1.6 x 10^-35 meters which is 2^-115.5
16:45:03 adanwan joins (~adanwan@gateway/tor-sasl/adanwan)
16:45:49 × alx741 quits (~alx741@157.100.197.240) (Read error: Connection reset by peer)
16:46:07 <sharky2> hi. I'm using Network.HTTP.Conduit and Network.Socket.Internal, but this doesn't work as the page I'm trying to download requires cookies. can those packages accept cookies, and if not, what package do you recommend that I use instead?
16:46:37 ski slides away from the point repeller, ends up into a meta-stable chaotic attractor
16:46:45 wroathe joins (~wroathe@206-55-188-8.fttp.usinternet.com)
16:46:45 × wroathe quits (~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host)
16:46:45 wroathe joins (~wroathe@user/wroathe)
16:46:52 <Andrew> But it is not precisely zero. I know I focus too much on correctness, but whatever :)
16:47:01 Andrew closes his IRC to focus on setting up Postfix
16:47:09 <sharky2> big picture: I am writing a web scraper and I wanted to use google's I'm feeling lucky to get to the page of interest, since website I'm scraping has no searching capability. but I'm having trouble using google's I'm feeling lucky page, because it requires cookies
16:48:39 axeman joins (~quassel@2a02:8109:a3c0:b10:7b68:5346:f621:6fdc)
16:49:17 × whatif quits (~user@123.180.40.237) (Ping timeout: 256 seconds)
16:49:29 <segfaultfizzbuzz> Andrew: precision on the scale you are talking about is likely a human invention rather than a reality of nature. i think we can create a compelling case that things like real numbers, actual spheres and circles, etc don't exist
16:49:51 × Pickchea quits (~private@user/pickchea) (Ping timeout: 256 seconds)
16:50:12 Andrew swims in mathematical purity, jumps out into humanity, and sighs
16:50:39 × deadmarshal quits (~deadmarsh@95.38.119.14) (Ping timeout: 256 seconds)
16:50:58 <segfaultfizzbuzz> i've heard that constructivism is becoming fashionable in mathematics but don't know the details there
16:51:00 eggplantade joins (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
16:52:45 <segfaultfizzbuzz> anyway so the actual practical upshot of what i was saying was: you could populate quad float precision once with the values of pi as a compile time constant and be good even for calculations which need to consider effects at the planck scale
16:54:16 <segfaultfizzbuzz> excuse me, way beyond the planck scale, whatever that means ;-)
16:55:09 ski . o O ( cancellation )
16:56:13 <segfaultfizzbuzz> ski: what?
16:56:22 × mbuf quits (~Shakthi@122.162.66.95) (Quit: Leaving)
16:57:20 <ski> if you have two quads which are very nearly equal, and you compute the difference, then that will only have a few significant figures
16:57:48 <ski> https://en.wikipedia.org/wiki/Catastrophic_cancellation
16:58:41 × meltedbrain_y2k quits (~tekserf@47.61.115.91) (Read error: Connection reset by peer)
16:58:56 <segfaultfizzbuzz> okay? how is that relevant for having pi to quad precision
16:59:15 tzh joins (~tzh@c-24-21-73-154.hsd1.or.comcast.net)
16:59:34 <ski> having just quad precision of some inputs might not be enough to get reasonable precision for the results
17:01:57 <segfaultfizzbuzz> the most precise physical measurement ever made was 14 significant digits
17:02:00 finn_elija joins (~finn_elij@user/finn-elija/x-0085643)
17:02:00 × FinnElija quits (~finn_elij@user/finn-elija/x-0085643) (Killed (NickServ (Forcing logout FinnElija -> finn_elija)))
17:02:00 finn_elija is now known as FinnElija
17:02:17 alx741 joins (~alx741@157.100.197.240)
17:02:32 eayavas joins (~eayavas@78.168.199.216)
17:02:37 <monochrom> Intermediate computations can benefit from more guard bits.
17:03:04 <segfaultfizzbuzz> monochrom: understood, but not eight hundred billion trillion guard bits
17:04:12 <monochrom> Then you should do numerical analysis properly to determine how many guard bits (or even better a better algorithm that doesn't need as many). As opposed to armchair opining.
17:04:39 <segfaultfizzbuzz> are there real world situations where you need to go beyond quad float precision?
17:04:50 emf joins (~emf@2620:10d:c090:400::5:3e0a)
17:04:53 <Cale> Also, it's possible to make use of real numbers in ways that don't correspond to physical measurements, though perhaps that's just weird.
17:05:08 <monochrom> And sometimes in lieu of a better algorithm, throwing guard bits at the problem is an interim solution.
17:05:09 × alx741 quits (~alx741@157.100.197.240) (Read error: Connection reset by peer)
17:05:23 <segfaultfizzbuzz> Cale: yes in genetics small probabilities, like 10^-100 can show up
17:05:40 mikoto-chan joins (~mikoto-ch@213.177.151.239)
17:05:57 × mon_aaraj quits (~MonAaraj@user/mon-aaraj/x-4416475) (Ping timeout: 240 seconds)
17:06:40 <monochrom> Observe how we also have 64-cores 2TB RAM 3PB SSD 4K 60" quad-head desktops for merely web devs who "clearly don't need" any of it.
17:06:51 lbseale joins (~ep1ctetus@user/ep1ctetus)
17:06:51 <segfaultfizzbuzz> haha
17:07:25 <monochrom> Well, they need it because they don't have better algorithms or better page layouts.
17:08:28 justsomeguy joins (~justsomeg@user/justsomeguy)
17:11:09 × mcgroin quits (~mcgroin@roc37-h01-176-170-197-243.dsl.sta.abo.bbox.fr) (Ping timeout: 256 seconds)
17:11:27 <Cale> monochrom: Hey, when part of your toolchain is a Haskell to Javascript compiler, you need all the performance you can get just to not spend all day waiting for builds to finish :D (actually, we mostly sidestep the builds now by running our web applications in ghci while developing and having them control the contents of the DOM via a websocket)
17:11:33 alp joins (~alp@user/alp)
17:12:07 <monochrom> But I was referring to those who write in javascript directly.
17:12:45 <c_wraith> I wish jsaddle actually worked in firefox
17:12:53 <Cale> c_wraith: me too
17:13:02 <c_wraith> or with firefox, as the preposition may be
17:13:08 <maerwald> why target javascript?
17:13:28 <Cale> maerwald: as opposed to webassembly?
17:13:44 <monochrom> "it's an easy target" :)
17:13:45 <Cale> It's basically just that the wasm compilers are not quite there yet.
17:14:04 <Cale> haha
17:14:38 <justsomeguy> I have this expression one = [x^y | x <- [1..5], y <- [2, undefined]]. Evaluating it results in an exception once it tries to create the second element of the resulting list [(1^2),(2^undefined)***exception. I want to write a test using Hspec to prove that it throws this particular exception. Can you point me in the right direction to start solving this? I don't know where execption handling
17:14:40 <Cale> c_wraith: I also wish jsaddle were unnecessary on desktop and mobile again, but that's probably a wish that's not coming true any time soon.
17:14:41 <maerwald> I was rather questioning that these days everything is run via electron and other bloat... even stuff that has nothing to do with websites
17:14:41 <justsomeguy> stuff lives in Haskell.
17:15:35 <geekosaur> Control.Exception but I would assume Hspec has its own ways to prove something throws a given exception
17:15:51 <segfaultfizzbuzz> ski: sorry, is there a real situation where i am subtracting a couple of numbers and need beyond a quad precision representation of pi to calculate something (even an error in the subtraction)...?
17:16:01 <Cale> justsomeguy: Exceptions thrown by evaluation of pure code (as opposed to by execution of IO) can also be quite tricky to catch in general, since you have to make sure that evaluation occurs inside the catch.
17:16:30 <c_wraith> in this particular case, you also need to ensure the exception doesn't happen someplace else.
17:16:34 <segfaultfizzbuzz> Cale: ya'll need to adopt rust's error handling techniques, except to be more opinionated about it
17:16:53 <c_wraith> so you can't just evaluate `one !! 1` and call yourself done.
17:17:06 <c_wraith> you need to pattern match much more carefully
17:17:17 <justsomeguy> Hspec has shouldThrow ( http://hspec.github.io/expectations.html ). I get some type errors when I try to use it. I'll write an example anlink to it.
17:17:23 <monochrom> In this case, "seq one ()" doesn't throw.
17:17:26 meltedbrain_y2k joins (~tekserf@47.61.115.91)
17:17:30 <Cale> segfaultfizzbuzz: Well, this is a natural consequence of having lazy evaluation. Really, exceptions thrown from evalation probably ought not to be caught, but it is sometimes nice to have as a last resord.
17:17:36 <Cale> resort*
17:17:46 <monochrom> You will need many ingredients.
17:18:12 <monochrom> One ingredient is Control.DeepSeq for full evaluation.
17:18:37 <c_wraith> you don't want DeepSeq here
17:18:55 <c_wraith> you want to be sure the bottom is in exactly the right place, not just somewhere
17:19:05 × CiaoSen quits (~Jura@p200300c95737a2002a3a4dfffe84dbd5.dip0.t-ipconnect.de) (Ping timeout: 256 seconds)
17:19:06 <monochrom> Another ingredient is Control.Exception's evaluate to go back to IO to make sure evaluation is triggered, and right at the moment you want.
17:19:47 <monochrom> And then undefined is a call to error, and you find out which exception it corresponds to.
17:20:07 <c_wraith> looks like hspec provides anyErrorCall to handle that part
17:20:21 <Cale> justsomeguy: You'll probably want to use Control.Exception.evaluate
17:21:35 alx741 joins (~alx741@157.100.197.240)
17:22:24 <Cale> justsomeguy: So as to turn your expression into an IO action which evaluates the expression and causes the exception to occur. Note however, that since your expression is a list, it can technically be evaluated without causing the exception, so you may wish to also use Control.DeepSeq.rnf on it to insist on evaluating everything deeply.
17:23:06 × kuribas quits (~user@ip-188-118-57-242.reverse.destiny.be) (Quit: ERC (IRC client for Emacs 26.3))
17:25:19 × alx741 quits (~alx741@157.100.197.240) (Read error: Connection reset by peer)
17:25:52 <Cale> Control.Exception.evaluate will only evaluate something as far as determining what its outermost data constructor is, so in your case, it will probably succeed in getting the thing as far as (1^2) : _
17:26:12 <monochrom> _ : _
17:26:24 × doyougnu quits (~doyougnu@cpe-67-249-83-190.twcny.res.rr.com) (Ping timeout: 250 seconds)
17:26:46 <monochrom> % evaluate (undefined : undefined) >> putStrLn "I'm OK"
17:26:46 <yahb> monochrom: I'm OK
17:26:56 <sharky2> can newer versions of ghc/ghci report compile-time warnings for mismatched printf format string and supplied arguments?
17:27:13 <Cale> indeed
17:27:22 <Cale> sharky2: no
17:27:46 <Cale> sharky2: The printf format string is not generally known at compile time
17:28:05 <Cale> sharky2: So that's not technically possible with the approach that Text.Printf takes to it
17:28:12 <sharky2> Cale, what do you mean? it is usually used with string literal, which is known at compile time
17:28:24 mon_aaraj joins (~MonAaraj@user/mon-aaraj/x-4416475)
17:28:42 fef joins (~thedawn@user/thedawn)
17:28:53 <monochrom> "can?" yes, "will?" very improbable.
17:28:57 <Cale> Yeah, but Text.Printf.printf isn't a TH macro or something which will consume its string at compile time. It's just an ordinary function.
17:29:10 Akiva joins (~Akiva@user/Akiva)
17:29:26 <Cale> It is however possible to take a different approach to writing a printf library which will typecheck everything
17:29:40 <sharky2> I am talking about implementing this at ghc/ghci level, not at printf haskell code level. this can certainly be done, just like it is done in many C and C++ compilers
17:29:41 <Cale> It's just not so easy to do that *and* use string literals
17:29:47 <geekosaur> https://hackage.haskell.org/package/typelits-printf
17:30:39 <geekosaur> and if anything, printf id discouraged, so I highly doubt any special support for it will end up in ghc
17:30:48 <geekosaur> *is discouraged
17:31:12 <geekosaur> it basiclaly exists to be a demonstration of how you can abuse typeclasses to make varargs functions
17:31:18 deadmarshal joins (~deadmarsh@95.38.119.14)
17:31:19 tavares joins (~tavares@user/tavares)
17:31:24 <c_wraith> typelits-printf is a bit old. more recent versions of GHC added a type family that should massively speed up what it does
17:31:28 <Cale> https://hackage.haskell.org/package/category-printf -- I would prefer this to Text.Printf, however, in practice, I never use this library, it is a joke.
17:31:32 <dminuoso> geekosaur: What is your preferred method of doing say `printf "%0dc" (c :: Word8)`?
17:31:44 <dminuoso> Uh sorry. "%03o"
17:31:48 × fef quits (~thedawn@user/thedawn) (Read error: Connection reset by peer)
17:31:58 × coot quits (~coot@213.134.190.95) (Remote host closed the connection)
17:32:05 <dminuoso> All the alternatives appear less pleasing.
17:32:21 × nschoe quits (~quassel@178.251.84.79) (Ping timeout: 256 seconds)
17:32:24 <sharky2> well Text.Printf is part of base, and its main disadvantage could be fixed by making special checks in the ghc/ghci compiler.
17:32:26 coot joins (~coot@2a02:a310:e241:1b00:ec1a:e9df:79ac:66ba)
17:33:01 × Jing quits (~hedgehog@240e:390:7c53:a7e1:7da5:59e:42b2:ced5) (Quit: My MacBook has gone to sleep. ZZZzzz…)
17:33:28 <sharky2> if making printf more safe isn't a concern, why even have it in base
17:33:37 <justsomeguy> Alright, now I have a place to start looking :^). I'll peruse the hackage docs Control.Exception, deepseq's Control.DeepSeq, and hspec's Test.Hspec for now.
17:33:43 × mon_aaraj quits (~MonAaraj@user/mon-aaraj/x-4416475) (Ping timeout: 256 seconds)
17:34:15 ProfSimm joins (~ProfSimm@176-12-60-137.pon.spectrumnet.bg)
17:35:11 <Cale> sharky2: It's basically in base only because it made its way into base quite early on when nobody was thinking too much about package structure. I think it predates cabal even.
17:35:20 <EvanR> printf is good for quick and dirty reports
17:35:30 <EvanR> more elaborate pretty printers exist
17:35:34 <Cale> We probably can and should split it into its own package by now, as it's not actually used all that much.
17:35:44 mon_aaraj joins (~MonAaraj@user/mon-aaraj/x-4416475)
17:35:55 <EvanR> speak for yourself xD
17:36:12 <Cale> The only question is: would that simplification of base actually be worth the resulting churn?
17:36:34 <EvanR> making prelude and base less useful than it already is doesn't sound good
17:36:49 <sharky2> I like using printf, alternatives tend to be clumsy and verbose. I also know flags by heart. it is just a bit frustrating and ironic that it is in a way safer to use printf in C than in haskell
17:37:24 × zaquest quits (~notzaques@5.130.79.72) (Remote host closed the connection)
17:37:33 <affine> how is it safer to use printf in c than haskell?
17:37:40 <EvanR> what you're asking for is a special compiler feature for 1 ad-hoc function in some module
17:37:55 <EvanR> that's a can of worms
17:38:10 <Cale> affine: The C compiler checks that your format string matches the arguments provided, and does not permit non-literal strings.
17:38:32 <affine> huh
17:38:34 <affine> thanks
17:38:48 <Cale> Yeah, it's one thing when that function is the way that 99% of all printing to the terminal is done in the language. Doing it for Text.Printf.printf would be insane though.
17:38:56 <affine> could printf in Haskell become n+k patterns?
17:39:04 × ProfSimm quits (~ProfSimm@176-12-60-137.pon.spectrumnet.bg) (Remote host closed the connection)
17:39:04 <affine> a cool feature but eventually deprecated
17:39:17 <EvanR> I daresay the haskell "experiment" philosophy is to not to 1 off ad-hoc solutions to anything and only solve problems in some astounding generic way, otherwise don't bother
17:39:18 <affine> as in type checked printf
17:39:20 <sharky2> affine as Cale said, safer because some C compilers make special checks if the format string is string literal. obviously, at a language level, it is less safe to use printf in C than in haskell.
17:39:37 <dminuoso> But honestly, the lack of a printf makes certain things really poor to express in Haskell.
17:39:46 × geekosaur quits (~geekosaur@xmonad/geekosaur) (Remote host closed the connection)
17:39:56 <affine> could you do this with template haskell?
17:39:58 <dminuoso> `printf "%03o" c` likely has no eloquent of performant equivalent.
17:40:05 <Cale> sharky2: Yeah, it's worth noting that when you mess up the arguments in Haskell, you don't end up reading memory you're not supposed to ;)
17:40:10 geekosaur joins (~geekosaur@xmonad/geekosaur)
17:40:33 <EvanR> I dunno about printf being "performant"
17:40:46 <EvanR> convenient yes
17:40:59 <Cale> dminuoso: I'd probably use showOct and some padding function.
17:41:10 <geekosaur> ^
17:42:12 <geekosaur> or showIntAtBase for an older ghc
17:42:33 <EvanR> it's not exactly "eloquent" for reasons sharky2 is saying
17:42:48 <sharky2> Cale btw I'm pretty sure you can use strings known at compile time in C's printf
17:42:55 <dminuoso> showIntAtBase is available on base-4.16.0.0
17:43:01 <sharky2> Cale btw I'm pretty sure you can use strings that are NOT known at compile time in C's printf
17:43:11 alx741 joins (~alx741@157.100.197.240)
17:43:14 <EvanR> you really should not though
17:43:15 <dminuoso> The thing is, there's just no pretty way to write a left pad function in Haskell.
17:43:26 <affine> how could GHC benefit from AVX512 support? I think AVX-512 has vectorised branching
17:43:32 <dminuoso> Which brings us all the way to the evil of `type String = [Char]`
17:43:35 <Cale> sharky2: You can, if you turn off the corresponding errors, but it is extremely unsafe to use with strings that might be affected by user input
17:43:35 <affine> even if no one has AVX512
17:43:50 <sharky2> C language has no way of enforcing that a function only takes string literal. at best it might be a compile warning
17:43:52 <dminuoso> affine: There's little-to-no support for vectorization in GHC.
17:43:59 <affine> how come?
17:44:13 <dminuoso> Because only few people spend research on it
17:44:29 <dminuoso> Essentially you have to teach GHC how to use vectorized primops
17:44:33 <dminuoso> And when
17:45:03 × wroathe quits (~wroathe@user/wroathe) (Ping timeout: 256 seconds)
17:45:12 <Cale> Yeah, there is some vectorization already iirc, but it's little more than primitives. Actually taking advantage of it is another thing.
17:45:14 shapr` joins (~user@pool-173-73-44-186.washdc.fios.verizon.net)
17:45:22 <EvanR> are we talking about vectorized branching to help with left padding a short string
17:45:29 <affine> no
17:45:30 <EvanR> is this node.js
17:45:33 <Cale> No, that's another discussion
17:45:36 <EvanR> oh
17:46:01 <dminuoso> You might get some local vectorization happening through LLVM if you're lucky, though.
17:46:07 <Cale> https://hackage.haskell.org/package/ghc-prim-0.8.0/docs/GHC-Prim.html#g:38
17:46:30 <affine> i've seen this but frankly it looks painful to use
17:46:37 × shapr quits (~user@pool-173-73-44-186.washdc.fios.verizon.net) (Ping timeout: 240 seconds)
17:46:52 <Cale> It's fairly painful to use, yes
17:46:53 × alx741 quits (~alx741@157.100.197.240) (Read error: Connection reset by peer)
17:47:28 <dminuoso> Cale: Last I checked GHC didn't actually make use of them outside some experimental branch that some researcher was working on. Im trying to find the author, he presented some results on Haskell Exchange 2019 if memory serves right.
17:47:39 <[exa]> affine: what instructions would the vectorized branching correspond to?
17:48:47 <Cale> dminuoso: But you can probably make use of them by hand and have them work with the LLVM backend...
17:48:58 <Cale> dminuoso: it's just, mildly painful
17:49:02 <dminuoso> Yeah absolutely.
17:49:12 <dminuoso> At that point you might as well just FFI into your intel/clang/gcc compiled code.
17:49:22 <EvanR> do any of the array libraries use these prim ops, Repa for example
17:49:57 <Cale> Not as far as I'm aware.
17:50:03 <EvanR> cool
17:50:08 fef joins (~thedawn@user/thedawn)
17:50:15 <dminuoso> How's that cool? Smelling an opportunity? :p
17:50:27 <Cale> https://hackage.haskell.org/package/accelerate might be a good place to consider adding support
17:50:34 <affine> i thought maybe the ternary logic?
17:50:42 <affine> [exa]
17:50:45 <Cale> actually, I wonder what accelerate-llvm-native does
17:51:05 × deadmarshal quits (~deadmarsh@95.38.119.14) (Ping timeout: 250 seconds)
17:51:07 <Cale> I think that's just multicore
17:51:11 <[exa]> btw there is this: https://hackage.haskell.org/package/knead
17:51:33 <[exa]> affine: pick the instruction here https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#techs=AVX_512 :]
17:52:19 shapr` is now known as shapr
17:52:40 <Athas> EvanR: I think Repa predates those primops and Accelerate doesn't use primops at all in its best backends.
17:52:48 <Athas> Maybe Massiv?
17:53:16 wroathe joins (~wroathe@206-55-188-8.fttp.usinternet.com)
17:53:16 × wroathe quits (~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host)
17:53:16 wroathe joins (~wroathe@user/wroathe)
17:54:15 zaquest joins (~notzaques@5.130.79.72)
17:55:54 <EvanR> dminuoso, at least knowing "no" is better than not knowing
17:56:30 <EvanR> I've been told ghc has no "SIMD game"
17:57:10 Midjak joins (~Midjak@may53-1-78-226-116-92.fbx.proxad.net)
17:57:51 × wroathe quits (~wroathe@user/wroathe) (Ping timeout: 256 seconds)
17:58:27 × justsomeguy quits (~justsomeg@user/justsomeguy) (Ping timeout: 250 seconds)
17:59:21 <affine> [exa] vmulps
17:59:38 <affine> like using masks instead of a branch as in branchless code
17:59:45 <affine> although that might be pointless not sure
17:59:51 <affine> it is very very specific
18:01:02 <EvanR> simd stuff would be great for software graphics purposes xD
18:01:29 × MajorBiscuit quits (~MajorBisc@c-001-015-052.client.tudelft.eduvpn.nl) (Ping timeout: 250 seconds)
18:01:37 <EvanR> as great as GPUs are, the interface hurts purity and laziness
18:01:39 ProfSimm joins (~ProfSimm@176-12-60-137.pon.spectrumnet.bg)
18:01:50 <[exa]> affine: yeah ghc generally does not work with the sufficient level of data abstraction there
18:01:51 <EvanR> and haskell doesn't run on GPUs yet
18:02:05 <affine> what do you mean by 'sufficient level of data abstraction'?
18:02:12 <affine> is it laziness?
18:02:54 <[exa]> like, sufficiently big packs of floats that get mapped in precise blocks over simple operations with simple conditions that all can be processed by SIMD instructions
18:04:06 × ProfSimm quits (~ProfSimm@176-12-60-137.pon.spectrumnet.bg) (Remote host closed the connection)
18:04:20 ProfSimm joins (~ProfSimm@176-12-60-137.pon.spectrumnet.bg)
18:04:35 <[exa]> the best way for autogenerating SIMD code now is AFAIK 1] loop unrolling 2] not writing loops and using an abstraction like repa where manipulating the individual tiny processing fibers is easy
18:04:49 alx741 joins (~alx741@157.100.197.240)
18:04:53 <[exa]> (also futhark)
18:05:24 <affine> is SIMD only useful for numeric computations? it is clearly the way to go for matrices
18:06:02 <affine> i know AVX-512 makes your CPU hot. i'm not sure if there is some latency in using it
18:06:29 <Cale> affine: In theory, perhaps not, in practice, it's hard to figure out how to use for anything other than numerical computations.
18:06:32 justsomeguy joins (~justsomeg@user/justsomeguy)
18:07:15 <Cale> It's rare that you have non-numerical datastructures that are laid out in memory in a sufficiently uniform way to get any leverage
18:07:17 <EvanR> it might be hard to map high level code that expresses the idea of matrices (as opposed to a dumb N x M array of floats) to SIMD
18:07:23 segfaultfizzbuzz thinks the machine learning club underuses sparsity
18:07:28 [itchyjunk] joins (~itchyjunk@user/itchyjunk/x-7353470)
18:07:34 <[exa]> yeah, if you have a huge pile of numbers that can be loaded and crunched in the blocks of 4/8/16 or something, it can make a nice 3-4x speedup against manually optimized asm code (SSE case) or even more with AVX (although I wasn't able to squeeze much more than ~4x with everything I tried)
18:08:22 × alx741 quits (~alx741@157.100.197.240) (Read error: Connection reset by peer)
18:08:25 × eayavas quits (~eayavas@78.168.199.216) (Quit: WeeChat 3.4)
18:08:27 <affine> just out of curiosity what numerical things were you computing?
18:08:37 × futty14 quits (~futty14@c90-143-137-255.bredband.tele2.se) (Ping timeout: 256 seconds)
18:08:40 <affine> in haskell*
18:08:43 <koala_man> do you count byte shuffling as numeric computation?
18:09:04 <affine> what is byte shuffling?
18:09:13 <[exa]> affine: not much in haskell directly, for me it was simplest to patch it up in C and then call from haskell
18:10:03 <koala_man> affine: e.g. converting endianness or expanding 16bit values into 32bit one (or packing them back)
18:10:07 <[exa]> anyway the last time it was some weird kind of gradient descent
18:10:37 <[exa]> ah yeah actually crunching long strings makes some minor sense with SIMD
18:11:32 <[exa]> sadly CPUs don't have much cache or memory throughput, so you usually hit the wall there very quickly
18:12:15 <affine> i learnt yesterday how few registers CPU have
18:12:18 <affine> i was totally shocked
18:12:24 <dminuoso> affine: Actually the reality is much more interesting.
18:12:25 <EvanR> that you know of
18:12:29 <monochrom> All those P-boxes, S-boxes, and "do 16 rounds of this" of a cipher may fit SIMD too. But are the data numbers? I think people will kill each other over that question.
18:12:31 <dminuoso> Physically CPUs have about 300-500 registers.
18:12:40 <affine> wait what?
18:12:49 <affine> i thought they had like 30
18:12:54 <EvanR> you can only use registers exposed by the architecture
18:12:58 <dminuoso> So lets say they have 16 so-called architectural registers.
18:13:21 <monochrom> I thought a cache was a register file. :)
18:13:25 <dminuoso> affine: Do some research on whats called the tomasulo algorithm,
18:13:29 <EvanR> the others are used by the illuminati to spy on and compute stuff for their own nefarious purposes
18:13:37 <dolio> They're executing a lot of different instructions at once.
18:13:40 <dminuoso> It will be quite an adventure
18:13:43 <monochrom> haha EvanR
18:14:03 <dolio> So each instruction would need to have a set of registers, presumably.
18:14:29 <dminuoso> affine: CPUs can do simultaneous out-of-order execution. At peak, a modern single CPU is able to execute upwards of 8 (perhaps more on modern CPUs) instructions in special circumstances.
18:14:39 <affine> it sounds like a huge amount of performance is left on the table that compilers it could have. if they can't see all the available registers?
18:14:49 <affine> compilers could have*
18:15:08 <dminuoso> affine: Compilers do their best to produce code that is executed well on todays super scalar CPUs
18:15:20 <dminuoso> But yeah, you have much optimization potential
18:15:26 × ProfSimm quits (~ProfSimm@176-12-60-137.pon.spectrumnet.bg) (Ping timeout: 256 seconds)
18:15:30 <dminuoso> Which is why locally well written assembly can do wonders in certain circumstances
18:15:43 merijn joins (~merijn@c-001-001-018.client.esciencecenter.eduvpn.nl)
18:15:49 <affine> i wrote assembly for the first time yesterday
18:15:55 <affine> never used a more painful language
18:16:05 <affine> other than java
18:16:21 <EvanR> there are programmers who prefer assembly, check out menuetOS xD
18:16:34 <EvanR> gui and everything
18:17:08 <dminuoso> affine: Best of all is the out of order executions. CPUs will not execute your instruction one by one, they are taken out of order and executed in whatever fashion the CPU can leverage its resources with - as long as architecturally you dont get to tell the difference.
18:17:10 <dminuoso> Fun fact now:
18:17:16 <ski> x86 is pretty painful
18:17:31 × DNH quits (~DNH@2a02:8108:1100:16d8:a4a2:67d7:acda:e455) (Ping timeout: 250 seconds)
18:17:32 <EvanR> yes, 4 registers xD
18:17:43 <affine> i was using registers r10 and r10d as if they were unrelated
18:17:44 <ski> there are nicer architectures
18:17:49 <affine> i was super confused why nothing worked
18:17:55 <dminuoso> affine: This buys you a lot of performance. And yet, a lot of the recent CPU vulnerabilities like Spectre and friends are examples how this can still leak timings.
18:17:57 × soxen quits (~bbrahms@pool-173-54-217-168.nwrknj.fios.verizon.net) (Ping timeout: 250 seconds)
18:18:23 <EvanR> did spectre leak the actual data via cache
18:18:29 <EvanR> rather than timing
18:18:54 <affine> does it make sense for CPUs to be consequential instructions? maybe a less deterministic instruction set would make sense?
18:18:58 <dminuoso> Okay that was a slight misrepresentatino, but to exfiltrate that cache you'd execute timing attacks
18:18:59 <affine> i know ARM has weak memory ordering
18:19:33 <dminuoso> Well, the clear trend in the industry is towards more cores on your silicon anyway
18:20:09 <EvanR> which translates to non-determinism
18:21:37 CiaoSen joins (~Jura@p200300c95737a2002a3a4dfffe84dbd5.dip0.t-ipconnect.de)
18:22:07 soxen joins (~bbrahms@pool-173-54-217-168.nwrknj.fios.verizon.net)
18:23:57 × emf quits (~emf@2620:10d:c090:400::5:3e0a) (Ping timeout: 240 seconds)
18:25:16 <EvanR> monochrom, you gotta admit "The Shadow Stack" sounds pretty ominous
18:25:37 × kaph quits (~kaph@net-2-47-208-144.cust.vodafonedsl.it) (Ping timeout: 256 seconds)
18:26:26 alx741 joins (~alx741@157.100.197.240)
18:26:36 × burnsidesLlama quits (~burnsides@dhcp168-042.wadham.ox.ac.uk) (Remote host closed the connection)
18:26:37 × justsomeguy quits (~justsomeg@user/justsomeguy) (Ping timeout: 240 seconds)
18:27:03 burnsidesLlama joins (~burnsides@dhcp168-042.wadham.ox.ac.uk)
18:27:20 <Athas> affine: it depends on what you mean by "numeric", but all sorts of algorithms can be SIMD-accelerated. Searching, for example.
18:27:37 <affine> oh hi, you're the futhark guy :O
18:27:38 emf joins (~emf@163.114.132.7)
18:28:22 zincy joins (~zincy@host86-151-99-97.range86-151.btcentralplus.com)
18:29:04 <dminuoso> I have an API binding library. Say I have a data structure that maps to an API and I happened to use generics to derive the ToJSON instance, and I have a typo in a field name.
18:29:12 <dminuoso> Does fixing the field name warrant a major PVP version bump?
18:29:16 <dminuoso> I feel like its not clear.
18:29:17 × alx741 quits (~alx741@157.100.197.240) (Read error: Connection reset by peer)
18:29:36 <Athas> affine: true!
18:29:40 <dminuoso> It's almost but guaranteed that if you're using this field, you're already experiencing a bug since you couldn't reasonably use this field anyway
18:30:01 <[exa]> dminuoso: I'd say that no one could technically use it before because of the typo, and thus it's non breaking
18:30:11 [exa] hides from angry user mob
18:30:40 <EvanR> fixing is obviously non-breaking
18:31:03 × alp quits (~alp@user/alp) (Ping timeout: 256 seconds)
18:31:24 <dminuoso> Alright, I think Ill go with minor version bump and give the angry user mob, should they appear, [exa]'s private phone number.
18:31:31 × burnsidesLlama quits (~burnsides@dhcp168-042.wadham.ox.ac.uk) (Ping timeout: 256 seconds)
18:32:04 <[exa]> dminuoso: like, looking at some stats about user count would probably be the most guiding info here
18:32:08 <Athas> Is there a variant of 'bracket' where the release action is told whether an exception was thrown?
18:32:41 <dminuoso> [exa]: You likely will experience a lynch mob between a 1 and a hundred.
18:32:49 <monochrom> dminuoso: A bug fix is a point release. You can give my email address to the angry user mob. >:)
18:33:06 <EvanR> you mean, semi-catch the exception? Doesn't that violate the no-cloning theorem of exception mechanics
18:33:32 <Athas> EvanR: I just don't want to conceal the exception with one of my own.
18:33:52 <dminuoso> Athas: Then dont catch SomeException?
18:34:09 <Athas> dminuoso: but I still need to clean up, even if an exception is thrown.
18:34:28 <EvanR> that's what the close clause of the bracket is for
18:34:29 <dminuoso> Athas: Then use a separate onException internally?
18:34:36 <monochrom> Athas: bracketOnError or onException may help
18:34:39 <Athas> I have a cleanup action. If that cleanup action is run under normal circumstances, it m ay throw an exception. But if it is running during exception unwinding, then it should never throw an exception.
18:34:47 <dminuoso> It seems you want two separate exception control mechanisms here
18:35:07 <Athas> Yeah, I can probably cobble something together myself, but this feels like a problem that's easy to solve incorrectly, so I hoped someone had already done so.
18:35:28 <dminuoso> Hah, what could possibly go wrong *uninterruptibleMumble*
18:36:09 <monochrom> Indeed onException seems to be a more basic building block. bracket uses onException.
18:36:14 <[exa]> Athas: maybe your exceptions are so streamlined that they shouldn't be exceptional anymore
18:37:21 <monochrom> (And bracket achieves release-no-matter-what by repeating itself: on exception, release; on no exception, release.
18:37:23 <monochrom> )
18:37:56 <monochrom> (What an irony that when I explain bracket I forgot to a close parenthesis heh)
18:37:56 <EvanR> exceptions possibly during cleanup is nasty business
18:38:30 <EvanR> this is probably why cleanup functions in C never return anything or fail
18:38:33 <Athas> It is.
18:38:48 <Athas> My only goal is to not clobber the message from the original exception.
18:38:59 <Athas> And the process as a whole will likely be dying soon afterwards.
18:42:54 <maerwald> do we have a strpbrk wrapper for bytestring?
18:43:41 DavidMilestone joins (~DavidMile@122.179.237.116)
18:43:54 <dminuoso> Mmm, not in any of the common packages
18:44:07 <dminuoso> But you can trivially FFI against this one yourself I suppose
18:44:42 alp joins (~alp@user/alp)
18:45:17 × merijn quits (~merijn@c-001-001-018.client.esciencecenter.eduvpn.nl) (Ping timeout: 240 seconds)
18:45:33 alx741 joins (~alx741@157.100.197.240)
18:46:30 × acidsys quits (~LSD@2.lsd.systems) (Excess Flood)
18:47:04 acidsys joins (~LSD@2.lsd.systems)
18:48:35 × alx741 quits (~alx741@157.100.197.240) (Read error: Connection reset by peer)
18:49:57 kaph joins (~kaph@net-2-47-208-144.cust.vodafonedsl.it)
18:51:51 <maerwald> I'd assume that's much faster than BS.find?
18:53:34 × zincy quits (~zincy@host86-151-99-97.range86-151.btcentralplus.com) (Remote host closed the connection)
18:53:53 <dminuoso> BS.find is very different from strpbrk?
18:54:52 <dminuoso> Did you mean breakSubstring perhaps?
18:54:59 <monochrom> findIndex is closer. But then there is also the question of, for example, perhaps you use strpbrk but you dereference its answer right away so it's find.
18:55:03 <dminuoso> Or, no not quite
18:55:20 <EvanR> findIndex seems to be a tight loop that just does peekPtr. Does peeking entail a barrier of some sort
18:55:56 econo joins (uid147250@user/econo)
18:56:08 × ubert1 quits (~Thunderbi@p200300ecdf0994a1946b5f66cf92c0df.dip0.t-ipconnect.de) (Remote host closed the connection)
18:56:34 <dminuoso> I guess whether strpbrk is faster than find or findIndex depends on the size of the conceptual character set
18:56:36 <EvanR> it does a call to an unknown function, but inlining
18:57:03 <dminuoso> If the character set is large, Id profile it - if its really small, Id profile it, but between strpbrk seems like it could be faster
18:57:42 <dminuoso> Guess strpbrk can benefit from locality of cache well
18:58:03 <maerwald> https://github.com/bminor/glibc/blob/master/string/strcspn.c
18:58:26 <maerwald> strpbrk is implemented in terms of that
18:58:38 vicfred joins (~vicfred@user/vicfred)
18:58:59 yassernasc joins (~yassernas@ec2-54-87-145-249.compute-1.amazonaws.com)
18:59:46 <maerwald> https://github.com/bminor/glibc/commit/d3496c9f4f27d3009b71be87f6108b4fed7314bd#diff-32ea539240c540597118f53189a64f50d65891dc0e5abfaa033c121f0d2322b1
19:00:08 <maerwald> this looks more sophisticated than a dumb for loop
19:00:09 <dminuoso> Yeah this will definitely execute fast. Seems like this could vectorize, will induce implicit cache prefetching
19:00:38 <dminuoso> I doubt the bytestring code, after going through core, cmm, and then assembly will get anything close enough,.
19:00:54 <maerwald> looks like an easy win then
19:01:01 <dminuoso> Do you pay any penalty for FFI though?
19:01:08 <dminuoso> Is there any RTS cost involved?
19:02:15 burnsidesLlama joins (~burnsides@dhcp168-042.wadham.ox.ac.uk)
19:03:54 × fresheyeball quits (~fresheyeb@c-76-25-93-164.hsd1.co.comcast.net) (Quit: WeeChat 2.9)
19:04:34 <monochrom> FFI has a cost, even when no marshalling.
19:05:23 <EvanR> FFI cost in this case might be worth it since it could be doing significant work on the other side
19:05:44 <monochrom> Mostly in worrying about concurrency so there is some context switching and "this thread can't run Haskell code now, need to find another thread for that".
19:06:31 <EvanR> in before we do a deep dive on this optimization and maerwald finally decides the original task isn't even necessary anymore xD
19:06:55 <maerwald> this is definitely necessary
19:06:57 <monochrom> I wouldn't be surprised if the input size is too small for "performance" to matter.
19:07:10 alx741 joins (~alx741@157.100.197.240)
19:07:17 <maerwald> the input size large
19:07:23 <maerwald> in an XML parser
19:07:35 <maerwald> a fork of xeno
19:08:02 MatthiasG2 joins (~matthias@i6DFA038C.versanet.de)
19:08:27 × haskellberryfinn quits (~nut@roc37-h01-176-170-197-243.dsl.sta.abo.bbox.fr) (Ping timeout: 256 seconds)
19:08:34 <dminuoso> Honestly, sometimes performance golfing is a lot of fun.
19:08:55 × burnsidesLlama quits (~burnsides@dhcp168-042.wadham.ox.ac.uk) (Ping timeout: 256 seconds)
19:08:57 × vysn quits (~vysn@user/vysn) (Ping timeout: 240 seconds)
19:09:06 <dminuoso> I too performance-shedded my DNS parsing library, despite only needing to match against.. 3 domain names right now
19:09:25 <dminuoso> But I feel confident in that we can scale to millions with no heavy performance penalty
19:10:28 <EvanR> I too going down a performance hole, esp the last hole at goofy golf which just keeps going and you never get your ball back
19:10:29 × alx741 quits (~alx741@157.100.197.240) (Read error: Connection reset by peer)
19:10:30 <monochrom> "Hi I'm reading a domain name that's 1MB long, why is Haskell taking 50MB?"
19:10:34 <EvanR> enjoy*
19:11:27 <monochrom> I enjoy the opposite golfing.
19:11:57 <monochrom> I use an n^2 algorithm where an n lg n algorithm exists, where n is the number of students.
19:12:26 <monochrom> My solution is to make homework and exams hard to decrease n. >:)
19:13:20 <EvanR> asymptotically inefficient and slow algorithms for fun and profit, get to market today while the egg heads tool around in research
19:14:49 <dminuoso> Given the influx of asymptotically inefficient implementations nowadays, I ponder about monochrom's part on that.
19:14:59 <dminuoso> Perhaps his pedagogy is misguided.
19:15:10 <monochrom> haha
19:16:21 <monochrom> Don't worry, some of my homework questions are hard precisely because "you have a 2-second limit, if you don't stay below n lg n you won't make it".
19:16:45 <monochrom> "also in a docker container that has only 10MB RAM"
19:16:45 <maerwald> I guess I know now why it wasn't implemented... strpbrk requires a null terminated string
19:16:58 <maerwald> bytestring internally is not null terminated
19:17:29 Pickchea joins (~private@user/pickchea)
19:17:46 Hildegunst joins (~luc@80.248.12.109.rev.sfr.net)
19:17:47 <monochrom> Ah I forgot the null too.
19:18:01 × DavidMilestone quits (~DavidMile@122.179.237.116) (Quit: Client closed)
19:18:18 <monochrom> But breakSubstring is some kind of strcspn.
19:18:21 <EvanR> indeed '\0' is allowed in the body of a bytestring, luckily for general sanity
19:18:33 × soxen quits (~bbrahms@pool-173-54-217-168.nwrknj.fios.verizon.net) (Ping timeout: 256 seconds)
19:20:26 soxen joins (~bbrahms@pool-173-54-217-168.nwrknj.fios.verizon.net)
19:20:46 <EvanR> but your loader might be modified to produce null terminated bytestring if inner 0 are not expected
19:23:27 <maerwald> dreams crushed by a single byte
19:23:57 <monochrom> Perhaps look for a Fortran library instead of a C library...
19:24:43 <EvanR> can we FFI to fortran?
19:25:10 <dminuoso> Absolutely
19:25:14 <EvanR> nice
19:25:24 <monochrom> Yes, it's indistinguishable from FFIing to C.
19:25:25 <dminuoso> e.g. hmatrix
19:25:33 <monochrom> Yeah, that. LAPACK.
19:25:35 <dminuoso> Which FFIs into BLAS/LAPACK
19:26:00 janus joins (janus@anubis.0x90.dk)
19:26:45 <janus> regarding this line, since Typeable is derivable for all types, there can be an instance for all types, right: https://github.com/GetShopTV/swagger2/blob/master/src/Data/Swagger/Internal.hs#L473
19:27:00 <janus> but then why does it fail compilation: https://github.com/GetShopTV/swagger2/runs/5055866820?check_suite_focus=true#step:4:668
19:27:18 DavidMilestone joins (~DavidMile@122.179.237.116)
19:27:23 <janus> "Could not deduce (Typeable t)" why not? you should deduce typeable for any t
19:28:05 <EvanR> not literally everything is typeable right
19:28:20 <EvanR> the universe has grown but isn't complete
19:28:22 <ski> not skolems
19:28:47 alx741 joins (~alx741@157.100.197.240)
19:29:36 <dminuoso> Or what about non-* kinded types?
19:30:23 <awpr> it's not about _whether_ a Typeable can exist for a given type, it's about GHC needing to _have_ the Typeable instance for a given type. GHC can produce an instance on demand for any non-variable type (other than like foralls and other things that can't have typeclass instances). but if you need an instance for a type variable, it'll have to be passed in from somewhere
19:30:25 × DavidMilestone quits (~DavidMile@122.179.237.116) (Client Quit)
19:30:29 <dolio> Isn't it kind polymorphic not?
19:30:31 <dolio> Now, even.
19:30:47 <EvanR> > typeOf 4#
19:30:48 <lambdabot> error:
19:30:48 <lambdabot> • Couldn't match a lifted type with an unlifted type
19:30:48 <lambdabot> When matching types
19:31:20 <awpr> > typeRep @Int#
19:31:21 <lambdabot> error:
19:31:21 <lambdabot> Pattern syntax in expression context: typeRep@Int#
19:31:21 <lambdabot> Did you mean to enable TypeApplications?
19:31:22 <janus> a skolem is skolem means 'skolem variable' in this context? like you can't get a Typeable if you don't know which type it actually is? like here? https://stackoverflow.com/a/12722877/309483
19:31:33 <dminuoso> dolio: Could you even make use of that somehow?
19:31:45 <janus> dminuoso: like e.g. 'Maybe' ?
19:32:01 <awpr> % typeRep @Maybe Proxy
19:32:01 <yahb> awpr: ; <interactive>:9:16: error:; * Couldn't match expected type: Maybe a0; with actual type: Proxy t0; * In the second argument of `typeRep', namely `Proxy'; In the expression: typeRep @Maybe Proxy; In an equation for `it': it = typeRep @Maybe Proxy
19:32:11 <dminuoso> One argument too many
19:32:13 <dminuoso> % typeRep @Maybe
19:32:14 <yahb> dminuoso: ; <interactive>:10:1: error:; * No instance for (Show (Maybe a0 -> TypeRep)) arising from a use of `print'; (maybe you haven't applied a function to enough arguments?); * In a stmt of an interactive GHCi command: print it
19:32:18 <dminuoso> That looks better
19:32:19 × alx741 quits (~alx741@157.100.197.240) (Read error: Connection reset by peer)
19:32:24 <awpr> % typeRep @_ @Maybe Proxy
19:32:25 <yahb> awpr: Maybe
19:32:30 <awpr> % typeRep @_ @42 Proxy
19:32:31 <yahb> awpr: 42
19:33:00 <EvanR> % typeRef @_ @Int# Proxy
19:33:00 <yahb> EvanR: ; <interactive>:13:1: error:; * Variable not in scope: typeRef :: Proxy t0 -> t; * Perhaps you meant one of these: `typeRep' (imported from Data.Data), `typeOf' (imported from Data.Data)
19:33:08 <EvanR> % typeRep @_ @Int# Proxy
19:33:08 <yahb> EvanR: Int#
19:33:19 × affine quits (~hugh@2a02:1206:45a3:6340:da01:c0c6:8610:80f6) (Remote host closed the connection)
19:34:05 Erutuon joins (~Erutuon@user/erutuon)
19:34:25 justsomeguy joins (~justsomeg@user/justsomeguy)
19:35:01 cynomys joins (~cynomys@user/cynomys)
19:35:55 Morrow_ joins (~user@bzq-110-168-31-106.red.bezeqint.net)
19:35:59 <janus> so if typeRep does't error, that should mean that it finds the Typeable instance. so it seems that even though the type inside the maybe isn't found, there is still a Typeable instance
19:36:45 <janus> so not all non-* kinded types have no auto-derived Typeable, i guess
19:36:57 <awpr> not sure what "type inside the maybe" is, but `Maybe` is a thing of kind `Type -> Type`, and GHC can solve a `Typeable` for it
19:37:26 <monochrom> No, in the "typeRep @_ @Maybe Proxy" example, the "Maybe" is there as an example for a *->* kinded type. This is not "typeRep @_ @(Maybe ???) Proxy".
19:37:44 <monochrom> The type of Proxy there is literally "Proxy Maybe". Not "Proxy (Maybe ???)".
19:37:56 doyougnu joins (~doyougnu@cpe-67-249-83-190.twcny.res.rr.com)
19:37:59 <monochrom> See also the 42 example.
19:38:32 <janus> oh, it didn't even occur to me that 'Proxy Maybe' would even be a well-formed type :O
19:38:36 <monochrom> All of those examples are exploring non-* kinds.
19:39:49 <ski> janus : typical term would be "skolem constant (or function)", but yea
19:40:17 × soxen quits (~bbrahms@pool-173-54-217-168.nwrknj.fios.verizon.net) (Ping timeout: 240 seconds)
19:40:45 <ski> "rigid variable" is another term used. other, relevant, words would be opaque/unknown/hidden/forgotten/abstract
19:41:25 <monochrom> May I throw in "existential strength" there? :) Not that it helps.
19:42:01 × alp quits (~alp@user/alp) (Ping timeout: 250 seconds)
19:42:19 <dminuoso> Does prettyprinter have some mechanism to lpad/rpad that Im not seeing?
19:42:37 <ski> janus : the `Typeable a' instance (a dictionary record, in the dictionary passing implementation), needs to come from somewhere. if you have an existential, then you have no way (in general) of recovering what type was hidden inside it, and so the only way to get `Typeable' is to have it packed into / provided in a constraint in the existential
19:42:51 × geekosaur quits (~geekosaur@xmonad/geekosaur) (Remote host closed the connection)
19:43:10 <dminuoso> It seems the best thing to do is use `width` and do it somehow manually
19:43:17 × mikoto-chan quits (~mikoto-ch@213.177.151.239) (Ping timeout: 240 seconds)
19:43:18 <dminuoso> Perhaps Im missing some other combinator?
19:43:40 <EvanR> I wonder if school math would be easier if there was distinction between rigid variables and uhm the other kind, i.e. solve for x in x^2 = x + 1
19:43:54 <monochrom> I think all pretty printer designs we have are around indenting and hanging, they haven't thought of padding.
19:44:17 mikoto-chan joins (~mikoto-ch@213.177.151.239)
19:44:39 <janus> yes, especially with the infamous dictionary i can understand how the compiler needs to 'deduce' which dictionary to actually pass in
19:44:56 <monochrom> EvanR, I think they do, and I think they mess it up.
19:45:08 × [itchyjunk] quits (~itchyjunk@user/itchyjunk/x-7353470) (Remote host closed the connection)
19:45:28 <monochrom> Well, not messed up in the simpleton questions that appear in school homework.
19:46:01 <ski> EvanR : logic programming does make that a syntactical distinction
19:46:05 <janus> talking about a partially-applied Maybe doesn't seem like Haskell98 to me. but it doesn't seem like DataKinds either since there are no ticks
19:46:09 <janus> when was all this introduced?
19:46:32 <ski> higher-order types is Haskell98
19:46:42 <awpr> Haskell98. `Maybe Int` talks about partially-applied `Maybe` as a subterm :)
19:46:45 <monochrom> In "solve for x in x^2 = x + 1" it's taught (more like osmosised) we have an unknown. In "prove x+x = 2x" it's taught (ditto) we have a universal-strength variable.
19:47:34 <janus> but then, if it is just concerning Haskell98, how can it be that the Swagger2 file i linked compiles in GHC 9.0 but not in 9.2? surely Haskell98 details havn't changed
19:47:41 <awpr> also `instance Monad Maybe` talks about partially-applied `Maybe`
19:47:41 <ski> `Fix Maybe' is perfectly Haskell98
19:47:58 <monochrom> They don't really try "solve for x in x^2 = y + 1 so that the solution works for all y" or "prove there exists x such that for all y ..." so they can PCA the whole space to just "solve = unknown, prove = universal".
19:48:03 <ski> or `Fix (Either Integer)', for that matter
19:48:12 × segfaultfizzbuzz quits (~rustisafu@2602:306:cd3c:9350:cc4:c954:b25:db0a) (Quit: Leaving)
19:48:47 <janus> oh right, my missing 'MonadFail (Either String)' instance, that is the same situation, right
19:48:48 alx741 joins (~alx741@157.100.197.240)
19:48:54 <ski> (oh, there's also the term "indeterminate")
19:49:32 <awpr> hmm, I didn't actually look at the error. it's weird that this is happening when there seemingly _is_ a `Typeable` constraint there. feels like GHC is unconvinced that the two `t`s are the same
19:51:09 <janus> but it really could have something to do with DataKinds, couldn't it? because the deducing machinery that suceeded previously, and now fails, it needs to go through a lifted type
19:51:35 geekosaur joins (~geekosaur@xmonad/geekosaur)
19:51:47 <dminuoso> monochrom: Mmm, it seems that `column` and `width` at least let me do limited rpadding.
19:51:47 × alx741 quits (~alx741@157.100.197.240) (Read error: Connection reset by peer)
19:51:50 <dminuoso> I think those could suffice.
19:51:50 <janus> but that it of course unrelated to the ability to talk about indeterminate types
19:52:18 × fef quits (~thedawn@user/thedawn) (Ping timeout: 276 seconds)
19:53:31 <awpr> on 478, where is `t` even coming from? there is no `t` there, unless it's implicit via PolyKinds?
19:54:32 <awpr> this kinda feels like a compiler bug to me. it's like GHC is coming up with a variable for the parameter of `SwaggerType` and forgetting to unify it with the corresponding thing in the instance head
19:55:16 <janus> awpr: PolyKinds is not enabled as far as I can see. i don't think it's implied by any of these extensions
19:55:30 <awpr> yeah, doesn't appear to be enabled
19:55:59 <monochrom> If there is a difference between 9.0 and 9.2 for this, this can get interesting. There is some known change, yes.
19:56:09 <ski> smells like missing an FD, or a type ascription or so ?
19:56:24 <awpr> complete shot in the dark: what happens if you remove the "deriving Typeable"? it's solved automatically on demand and doesn't need to be derived
19:56:39 <awpr> and maybe the deriving is doing something weird?
19:57:33 deadmarshal joins (~deadmarsh@95.38.119.14)
19:57:34 <awpr> re: missing fundeps, the reason this feels so weird to me is that in the instance on line 478, there shouldn't be any type variable involved at all
19:57:45 vglfr joins (~vglfr@88.155.40.186)
19:58:11 ski has no idea what code we're talking about, fwiw
19:58:13 × Morrow quits (~user@bzq-110-168-31-106.red.bezeqint.net) (Remote host closed the connection)
19:58:13 × Morrow_ quits (~user@bzq-110-168-31-106.red.bezeqint.net) (Remote host closed the connection)
19:58:31 <janus> ski: https://github.com/GetShopTV/swagger2/blob/master/src/Data/Swagger/Internal.hs#L473
20:00:11 <janus> monochrom: it does compile and pass the test suite on 9.0.2 (even though CI doesn't verify that). just tested it.
20:00:12 lavaman joins (~lavaman@98.38.249.169)
20:00:12 <ski> hm, is there any raw link ? (not on a gui browser atm)
20:00:35 <janus> ski: yes: https://raw.githubusercontent.com/GetShopTV/swagger2/master/src/Data/Swagger/Internal.hs (line 473)
20:01:23 <awpr> oh, there is a type variable
20:01:31 burnsidesLlama joins (~burnsides@dhcp168-042.wadham.ox.ac.uk)
20:01:50 <awpr> `SwaggerKindParamOtherSchema :: SwaggerKind t` has an invisible kind variable
20:02:17 × n3rdy1 quits (~n3rdy1@2600:1700:4570:3480:1b88:50f:dae0:9293) (Ping timeout: 240 seconds)
20:02:29 <janus> oh, so does that mean that line 432 "deriving instance Typeable 'SwaggerKindParamOtherSchema" is incorrect?
20:02:59 <janus> because it should derive forall t?
20:03:28 <awpr> I'm not sure how far back GHC compat is supposed to go in this codebase, but on modern GHCs that declaration is redundant at best
20:03:50 <janus> oh, so you were proposing removing 429 thorugh 433? i'll try that
20:04:03 × dhouthoo quits (~dhouthoo@178-117-36-167.access.telenet.be) (Quit: WeeChat 3.4)
20:04:04 <awpr> I don't think it'll fix things, I think it'll have no effect
20:04:39 <awpr> a new shot in the dark: maybe 9.2 changed Typeable s.t. it needs to represent the type's kind as well, and that makes the implicit kind variables need Typeable instances too?
20:04:47 × lavaman quits (~lavaman@98.38.249.169) (Ping timeout: 256 seconds)
20:05:14 <janus> lol , removing those lines actually worked! o_O
20:05:20 <awpr> it ... fixed it?
20:05:34 <janus> yesssss :D hähä
20:05:49 <EvanR> more code more problems
20:06:07 <janus> so ghc devs didn't think of testing it because they wouldn't have silly code like that laying around?
20:06:29 × kristjansson quits (sid126207@tinside.irccloud.com) (Ping timeout: 256 seconds)
20:06:41 × Hildegunst quits (~luc@80.248.12.109.rev.sfr.net) (Quit: Reconnecting)
20:06:42 <awpr> I didn't see those instances. I think it seems plausible that they would interfere with instance resolution somehow
20:06:46 juhp joins (~juhp@128.106.188.82)
20:06:53 Hildegunst joins (~luc@80.248.12.109.rev.sfr.net)
20:07:56 <janus> well i won't report a bug because i don't really know how instance deduction is supposed to work here.
20:08:14 shailangsa joins (~shailangs@host86-185-98-37.range86-185.btcentralplus.com)
20:08:17 <janus> but usually it is safe to remove instances, and if it compiles, nothing could have been broken
20:08:28 <awpr> with PolyKinds disabled, that might actually be `instance Typeable ('SwaggerKindSchema @Type)`, which might prevent GHC from solving other instances
20:08:32 merijn joins (~merijn@c-001-001-018.client.esciencecenter.eduvpn.nl)
20:08:32 <janus> though i suppose that assumption is not valid for this file since it has UndecidableInstances...
20:08:40 × Hildegunst quits (~luc@80.248.12.109.rev.sfr.net) (Client Quit)
20:08:45 × NiKaN quits (sid385034@helmsley.irccloud.com) (Ping timeout: 256 seconds)
20:09:33 NiKaN joins (sid385034@id-385034.helmsley.irccloud.com)
20:09:57 <awpr> it might be worth filing a bug anyway, but it's more of "I managed to make something weird and confusing happen by manually deriving Typeable instances, maybe this should be a warning or have better errors" rather than "the compiler was wrong"
20:10:01 kristjansson joins (sid126207@id-126207.tinside.irccloud.com)
20:10:11 briandaed joins (~root@109.95.143.81.r.toneticgroup.pl)
20:10:27 × ProofTechnique quits (sid79547@ilkley.irccloud.com) (Ping timeout: 256 seconds)
20:10:39 alx741 joins (~alx741@157.100.197.240)
20:11:26 ec joins (~ec@gateway/tor-sasl/ec)
20:11:42 ProofTechnique joins (sid79547@id-79547.ilkley.irccloud.com)
20:13:43 <janus> i'll see if i can boil it down. in any case, thanks a lot awpr!
20:13:47 <janus> (and others)
20:14:22 × alx741 quits (~alx741@157.100.197.240) (Read error: Connection reset by peer)
20:16:57 × emf quits (~emf@163.114.132.7) (Ping timeout: 240 seconds)
20:17:02 mcgroin joins (~mcgroin@roc37-h01-176-170-197-243.dsl.sta.abo.bbox.fr)
20:20:17 emf joins (~emf@2620:10d:c090:400::5:e4c1)
20:21:38 Inst joins (~delicacie@c-98-208-218-119.hsd1.fl.comcast.net)
20:24:12 soxen joins (~bbrahms@pool-173-54-217-168.nwrknj.fios.verizon.net)
20:24:46 zincy joins (~zincy@2a00:23c8:970c:4801:340a:21f3:9185:5e11)
20:27:38 yauhsie__ joins (~yauhsien@61-231-25-133.dynamic-ip.hinet.net)
20:28:46 Feuermagier joins (~Feuermagi@user/feuermagier)
20:28:48 × jao quits (~jao@cpc103048-sgyl39-2-0-cust502.18-2.cable.virginm.net) (Remote host closed the connection)
20:29:22 × zincy quits (~zincy@2a00:23c8:970c:4801:340a:21f3:9185:5e11) (Remote host closed the connection)
20:30:17 × jespada quits (~jespada@87.74.36.188) (Ping timeout: 256 seconds)
20:30:41 alx741 joins (~alx741@157.100.197.240)
20:30:51 × Inst quits (~delicacie@c-98-208-218-119.hsd1.fl.comcast.net) (Ping timeout: 256 seconds)
20:32:19 × yauhsie__ quits (~yauhsien@61-231-25-133.dynamic-ip.hinet.net) (Ping timeout: 256 seconds)
20:32:56 × _ht quits (~quassel@231-169-21-31.ftth.glasoperator.nl) (Remote host closed the connection)
20:33:02 jespada joins (~jespada@87.74.36.188)
20:33:14 meltedbrain_y2k parts (~tekserf@47.61.115.91) ()
20:35:57 × axeman quits (~quassel@2a02:8109:a3c0:b10:7b68:5346:f621:6fdc) (Ping timeout: 240 seconds)
20:36:51 jao joins (~jao@cpc103048-sgyl39-2-0-cust502.18-2.cable.virginm.net)
20:37:29 whatsupdoc joins (uid509081@id-509081.hampstead.irccloud.com)
20:37:29 × alx741 quits (~alx741@157.100.197.240) (Read error: Connection reset by peer)
20:38:10 alx741 joins (~alx741@157.100.197.240)
20:41:35 × alx741 quits (~alx741@157.100.197.240) (Read error: Connection reset by peer)
20:42:31 × merijn quits (~merijn@c-001-001-018.client.esciencecenter.eduvpn.nl) (Ping timeout: 256 seconds)
20:45:12 n3rdy1 joins (~n3rdy1@2600:1700:4570:3480::41)
20:49:39 doxen joins (~bbrahms@pool-173-54-217-168.nwrknj.fios.verizon.net)
20:52:37 × soxen quits (~bbrahms@pool-173-54-217-168.nwrknj.fios.verizon.net) (Ping timeout: 256 seconds)
20:56:48 alp joins (~alp@user/alp)
20:57:16 × geekosaur quits (~geekosaur@xmonad/geekosaur) (Remote host closed the connection)
20:57:25 × Akiva quits (~Akiva@user/Akiva) (Ping timeout: 250 seconds)
20:57:40 geekosaur joins (~geekosaur@xmonad/geekosaur)
20:58:13 alx741 joins (~alx741@157.100.197.240)
21:01:00 × alx741 quits (~alx741@157.100.197.240) (Read error: Connection reset by peer)
21:02:36 × Megant quits (megant@user/megant) (Ping timeout: 268 seconds)
21:03:29 × mikoto-chan quits (~mikoto-ch@213.177.151.239) (Ping timeout: 256 seconds)
21:04:07 × burnsidesLlama quits (~burnsides@dhcp168-042.wadham.ox.ac.uk) (Remote host closed the connection)
21:04:13 Megant joins (megant@user/megant)
21:04:38 burnsidesLlama joins (~burnsides@dhcp168-042.wadham.ox.ac.uk)
21:05:27 mikoto-chan joins (~mikoto-ch@213.177.151.239)
21:07:32 zincy joins (~zincy@2a00:23c8:970c:4801:340a:21f3:9185:5e11)
21:08:28 × yassernasc quits (~yassernas@ec2-54-87-145-249.compute-1.amazonaws.com) (Remote host closed the connection)
21:08:49 × burnsidesLlama quits (~burnsides@dhcp168-042.wadham.ox.ac.uk) (Ping timeout: 256 seconds)
21:09:06 × cynomys quits (~cynomys@user/cynomys) (Quit: Lost terminal)
21:09:57 × justsomeguy quits (~justsomeg@user/justsomeguy) (Ping timeout: 256 seconds)
21:10:22 × fendor_ quits (~fendor@178.115.38.12.wireless.dyn.drei.com) (Remote host closed the connection)
21:10:22 × briandaed quits (~root@109.95.143.81.r.toneticgroup.pl) (Quit: leaving)
21:13:33 × wyrd quits (~wyrd@gateway/tor-sasl/wyrd) (Ping timeout: 276 seconds)
21:13:59 <dminuoso> Is there a foolproof guide of broad GHC compatibility for MonadFail in such a way to not provoke warnings on any GHC?
21:14:09 × Pickchea quits (~private@user/pickchea) (Quit: Leaving)
21:14:29 Guest83 joins (~Guest83@181.229.128.244)
21:14:48 <Guest83> better compiler for beginners
21:15:03 <Guest83> ?????
21:16:03 <Cale> Guest83: GHC is really the only practical choice at the moment.
21:16:03 <ski> compiler, or implementation ?
21:17:05 × mikoto-chan quits (~mikoto-ch@213.177.151.239) (Ping timeout: 256 seconds)
21:17:18 <Guest83> for install all new
21:17:24 <sm> https://code.world and https://code.world/haskell
21:18:53 × slack1256 quits (~slack1256@186.11.100.54) (Remote host closed the connection)
21:18:55 alx741 joins (~alx741@157.100.197.240)
21:20:26 <geekosaur> hugs is still usable if not being developed any more
21:21:15 ski . o O ( Helium )
21:21:28 <janus> dminuoso: if you define the MonadFail on the earliest GHC with the class, and exclude the Monad(fail) definition on the earliest GHC version that warns with that defintion, that should cover it?
21:22:09 <janus> dminuoso: you need an ifdef for the import of Control.Monad.Fail too as shown in the wiki article
21:22:24 jgeerds joins (~jgeerds@55d4a547.access.ecotel.net)
21:22:24 × alx741 quits (~alx741@157.100.197.240) (Read error: Connection reset by peer)
21:22:51 <dminuoso> janus: The wiki article has some version mismatching between the specified base versions and the GHC versions in the comments
21:23:09 <dminuoso> #if !MIN_VERSION_base(4,11,0)
21:23:12 <dminuoso> -- Monad(fail) was removed in GHC 8.8.1
21:23:29 <dminuoso> So if I read snippets like this, I get headaches.
21:24:05 <dminuoso> (In case you're not spotting it, base-4.11.0 corresponds to GHC 8.4.1)
21:24:30 <janus> oh sorry, that looks like it was my fault :O
21:26:06 <ski> Guest83 : do you have an intro text to follow ?
21:27:26 <janus> it would be clearer if the comment and the ifdef corresponded to each other
21:28:23 <janus> but there was a transitionary period where you could define fail on Monad even though MonadFail already existed. since it would be nice to have the wiki avoid suggesting code that would warn, i should find out which versions allow you to have the code with no warning
21:28:44 × byorgey quits (~byorgey@155.138.238.211) (Quit: leaving)
21:29:10 <dminuoso> janus: Mmm, it also seems MonadFail is exported via Prelude from some GHC version on forward as well, but its not mentioned which that is.
21:30:00 × mc47 quits (~mc47@xmonad/TheMC47) (Remote host closed the connection)
21:30:04 <dminuoso> With some creativity it could be inferred that this might be the case from 8.8.1
21:31:41 <janus> that would be surprising since the code looks like it is older than 8.8.1 (since it referred to 7.16 when it was written)
21:32:04 <janus> if you click the link to quchen's article, that is what was copied into the wiki
21:32:10 <janus> and it talks about 7.16
21:32:51 × mcgroin quits (~mcgroin@roc37-h01-176-170-197-243.dsl.sta.abo.bbox.fr) (Quit: WeeChat 2.8)
21:33:07 <dminuoso> Uh, so MonadFail is exported since 7.16, while 8.0 lists `Add module Control.Monad.Fail with new class MonadFail(fail)`?
21:33:11 <dminuoso> Sorry!
21:33:15 <dminuoso> Uh, so MonadFail is exported from Prelude since 7.16, while 8.0 lists `Add module Control.Monad.Fail with new class MonadFail(fail)`?
21:33:53 <dminuoso> Do you see why the article is not quite comforting?
21:33:57 <janus> 7.16 doesn't exist, it was extrapolated
21:33:57 × n3rdy1 quits (~n3rdy1@2600:1700:4570:3480::41) (Ping timeout: 240 seconds)
21:34:15 <dminuoso> Ah sorry
21:34:23 <dminuoso> I misinterpreted
21:34:38 <janus> the article is confusing because the comment and the ifdef refer to different versions, because of the transitionary period
21:35:19 <janus> after work i will experiment
21:35:28 <janus> and see where the warnings appear
21:35:44 <dminuoso> Dont worry, I'll gladly do this myself.
21:35:58 <dminuoso> How about this, Ill share my findings and you adjust the wiki?
21:36:02 <janus> sure
21:36:57 burnsidesLlama joins (~burnsides@dhcp168-042.wadham.ox.ac.uk)
21:39:10 alx741 joins (~alx741@157.100.197.240)
21:40:05 Akiva joins (~Akiva@user/Akiva)
21:41:21 × burnsidesLlama quits (~burnsides@dhcp168-042.wadham.ox.ac.uk) (Ping timeout: 256 seconds)
21:45:59 × alx741 quits (~alx741@157.100.197.240) (Read error: Connection reset by peer)
21:46:36 dcoutts joins (~duncan@82-132-232-248.dab.02.net)
21:46:39 alx741 joins (~alx741@157.100.197.240)
21:46:56 n3rdy1 joins (~n3rdy1@2600:1700:4570:3480:1b88:50f:dae0:9293)
21:49:10 × alx741 quits (~alx741@157.100.197.240) (Read error: Connection reset by peer)
21:49:32 × Midjak quits (~Midjak@may53-1-78-226-116-92.fbx.proxad.net) (Read error: Connection reset by peer)
21:49:52 burnsidesLlama joins (~burnsides@dhcp168-042.wadham.ox.ac.uk)
21:50:29 Midjak joins (~Midjak@may53-1-78-226-116-92.fbx.proxad.net)
21:50:45 × deadmarshal quits (~deadmarsh@95.38.119.14) (Ping timeout: 256 seconds)
21:53:12 × coot quits (~coot@2a02:a310:e241:1b00:ec1a:e9df:79ac:66ba) (Quit: coot)
21:54:45 alx741 joins (~alx741@157.100.197.240)
21:57:18 byorgey joins (~byorgey@155.138.238.211)
21:58:08 <mrianbloom> Is it possible to write a lens that is a simple composition over the head of a non-empty list?
21:58:08 × alx741 quits (~alx741@157.100.197.240) (Read error: Connection reset by peer)
21:58:40 <mrianbloom> I feel like I did this a long time ago but that library has changed a lot since then.
21:59:22 <dminuoso> mrianbloom: What do you mean by "composition over"?
22:00:34 <janus> mrianbloom did you see Control.Lens.Cons which has _head (a Traversal')
22:01:42 <janus> % :t _head
22:01:42 <yahb> janus: (Cons s s a a, Applicative f) => (a -> f a) -> s -> f s
22:01:44 <dminuoso> janus: Okay I think I know what I needed. So MonadFail is also exported via Prelude since 8.8.1 which I think is noteworthy.
22:01:56 <mrianbloom> I see, this has a Maybe type though am I correct.
22:02:01 <dminuoso> Also I just conjured up the trick of conditionally doing `#ifdef ... import Prelude hiding (fail) #endif`
22:02:26 <mrianbloom> Let me write a little example of what I'm trying to do in the repl.
22:03:07 <dminuoso> janus: _head wont work on a NonEmpty
22:03:28 <dminuoso> Or does it not?
22:03:32 <Cale> :t let headNonEmpty f (x :| xs) = fmap (\x' -> x' :| xs) (f x) in headNonEmpty
22:03:33 <lambdabot> Functor f => (t -> f t) -> NonEmpty t -> f (NonEmpty t)
22:03:43 <Cale> ^^ that's a lens
22:03:51 <dminuoso> I recall some discussion that `_head` requires unconsing, but you cant do that to a NonEmpty
22:04:08 <mrianbloom> Ahh, headNotEmpty
22:04:09 alx741 joins (~alx741@157.100.197.240)
22:04:18 <mrianbloom> Who would have thought!
22:04:19 <Cale> mrianbloom: I just implemented that, mind
22:04:33 <dminuoso> % _headNE :: Lens' (NonEmpty a) a; _headNE f (a :| as) = (:| as) <$> f a
22:04:33 <yahb> dminuoso: ; <interactive>:19:19: error:; Not in scope: type constructor or class `NonEmpty'; Perhaps you meant `NonEmptyF' (imported from Data.Functor.Base); <interactive>:19:47: error:; Not in scope: data constructor `:|'; Perhaps you meant one of these: `Seq.:<' (imported from Data.Sequence), `:<' (imported from Control.Lens), `Seq.:>' (imported from Data.Sequence)
22:04:40 <dminuoso> % import Data.List.NonEmpty
22:04:40 <yahb> dminuoso:
22:04:43 <dminuoso> % _headNE :: Lens' (NonEmpty a) a; _headNE f (a :| as) = (:| as) <$> f a
22:04:43 <yahb> dminuoso:
22:05:02 <dminuoso> Ah but it looks the same as Cale's
22:05:06 <Cale> dminuoso: that's... yeah
22:05:33 <dminuoso> An alternative trick I just found
22:05:41 <dminuoso> % _headNE = _Wrapped . _1
22:05:42 <yahb> dminuoso:
22:05:45 <Cale> The general pattern is you deconstruct your datastructure into a function which would replace the given thing with a new value, and the new value, and then you fmap the one over f of the other.
22:05:49 alx741_ joins (~alx741@157.100.197.240)
22:05:53 <dminuoso> % :t _headNE
22:05:54 <yahb> dminuoso: (Rewrapped s t, Rewrapped t s, Functor f, Field1 (Unwrapped s) (Unwrapped t) a b) => (a -> f b) -> s -> f t
22:05:57 <dminuoso> Dont mind the type!
22:06:11 <Cale> er, and the value of the thing that was in the hole, rather
22:06:48 <janus> do you need to support GHCs from before the MonadFail transition got going? if you don't, you can just avoid using Prelude.fail in general. always use it qualified
22:06:48 × alx741 quits (~alx741@157.100.197.240) (Read error: Connection reset by peer)
22:07:07 <dminuoso> janus: Im using aeson.
22:07:19 <dminuoso> Im not seeing any official way to fail a parser other than `fail`
22:07:54 <ski> any `empty' or `mzero' ?
22:08:14 <dminuoso> I guess those could work as well, but they wouldnt let me produce a diagnostic at all
22:08:20 <janus> you misunderstand. Prelude may reexport Control.Monad.MonadFail and for other versions it reexports Control.Monad(Monad(fail)). that doesn't mean you need to use it
22:08:26 <dminuoso> I like giving my users at least a very rough idea why their JSON input was rejected.
22:08:29 <janus> i am just saying you don't need to have a conditional Prelude import
22:09:04 <janus> because nobody is forcing you to use fail directly from prelude, even on the oldest versions, you could use fail imported in a qualified manner, no?
22:09:04 × alx741_ quits (~alx741@157.100.197.240) (Read error: Connection reset by peer)
22:09:25 <dminuoso> Mmm, well I have to use whatever aeson is doing I guess
22:09:36 <dminuoso> So let me look at their ifdefing
22:10:14 <janus> why would you? aeson doesn't care whether you get fail through a reexport in the Prelude module or not
22:10:35 × jespada quits (~jespada@87.74.36.188) (Quit: My MacBook has gone to sleep. ZZZzzz…)
22:10:48 <dminuoso> Huh? Because they can easily write non-coherent instances?
22:11:16 <dminuoso> The fact that they're forcing you to use `fail` in the first place is a bit concering already
22:12:13 <dminuoso> I dont know, cant wrap my head around it
22:12:15 jespada joins (~jespada@87.74.36.188)
22:12:44 oscurochu joins (~oscurochu@097-096-050-227.res.spectrum.com)
22:13:24 <janus> if aeson is written sensibly, it doesn't matter whether you call MonadFail(fail) or Monad(fail), they should do the same
22:13:56 <janus> what do you mean by non-coherent? that those two methods don't do the same?
22:17:54 <dminuoso> Yeah
22:19:45 deadmarshal joins (~deadmarsh@95.38.114.73)
22:20:52 × michalz2 quits (~michalz2@185.246.204.87) (Remote host closed the connection)
22:20:52 × michalz quits (~michalz@185.246.204.87) (Remote host closed the connection)
22:20:59 <janus> do you need to support GHC versions from before MonadFail was created?
22:21:22 <dminuoso> No, right now 8.6 to 8.10 is fine by me
22:22:20 ProfSimm joins (~ProfSimm@87.227.196.109)
22:22:25 <janus> well then you can just import MonadFail qualified and always call its fail. then your constraints will also require MonadFail and your haskell library consumers will have less work in the future
22:23:43 × takuan quits (~takuan@178-116-218-225.access.telenet.be) (Remote host closed the connection)
22:24:31 × deadmarshal quits (~deadmarsh@95.38.114.73) (Ping timeout: 256 seconds)
22:26:03 alx741_ joins (~alx741@157.100.197.240)
22:26:53 Inst joins (~delicacie@c-98-208-218-119.hsd1.fl.comcast.net)
22:28:57 × Akiva quits (~Akiva@user/Akiva) (Ping timeout: 256 seconds)
22:29:13 × alx741_ quits (~alx741@157.100.197.240) (Read error: Connection reset by peer)
22:30:17 Topsi joins (~Tobias@dyndsl-037-138-064-017.ewe-ip-backbone.de)
22:34:21 × gehmehgeh quits (~user@user/gehmehgeh) (Quit: Leaving)
22:34:57 choucavalier parts (~choucaval@peanutbuttervibes.com) (WeeChat 3.4)
22:36:57 × alp quits (~alp@user/alp) (Ping timeout: 240 seconds)
22:39:05 merijn joins (~merijn@c-001-001-018.client.esciencecenter.eduvpn.nl)
22:43:55 × dcoutts quits (~duncan@82-132-232-248.dab.02.net) (Read error: Connection reset by peer)
22:43:55 × sharky2 quits (~bc8147f2@83.167.180.121) (Quit: CGI:IRC (Session timeout))
22:45:07 <dminuoso> janus: And where do I import MonadFail from qualified in 8.10?
22:45:45 <dminuoso> Oh wait Control.Monad.Fail is still there, sint it
22:46:18 alx741_ joins (~alx741@157.100.197.240)
22:46:36 <janus> % :m +Control.Monad.Fail
22:46:36 <yahb> janus:
22:46:47 <EvanR> :t fail
22:46:48 <lambdabot> MonadFail m => String -> m a
22:47:17 <EvanR> > fail "the answer to life universe and everything" :: Maybe Int
22:47:19 <lambdabot> Nothing
22:47:37 <EvanR> awkward
22:48:56 <EvanR> > mzero :: Either String Int
22:48:57 <lambdabot> Left ""
22:49:05 × alx741_ quits (~alx741@157.100.197.240) (Read error: Connection reset by peer)
22:49:14 <dminuoso> It's just strange that fail takes a String at all
22:49:34 <dminuoso> Doesn't quite fit the origin of it
22:50:39 <monochrom> The origin is compiler-generated error message.
22:51:12 <dminuoso> What would the compiler insert there, exactly?
22:51:26 × Ariakenom quits (~Ariakenom@h-82-196-111-63.na.cust.bahnhof.se) (Read error: Connection reset by peer)
22:51:34 <dminuoso> % do Just x <- Nothing; pure ()
22:51:35 <yahb> dminuoso: Nothing
22:51:36 <monochrom> "do { Just x <- foo }" is desugared to "foo >>= \case Nothing -> fail "inexhaustive pattern matching etc etc""
22:52:09 <EvanR> never knew that
22:52:14 <monochrom> % do {Just x <- return Nothing; return x} :: IO Int
22:52:15 <yahb> monochrom: *** Exception: user error (Pattern match failure in do expression at <interactive>:30:5-10)
22:53:02 × zincy quits (~zincy@2a00:23c8:970c:4801:340a:21f3:9185:5e11) (Remote host closed the connection)
22:53:38 <EvanR> User error? I beg your pardon
22:53:45 × azimut_ quits (~azimut@gateway/tor-sasl/azimut) (Remote host closed the connection)
22:53:49 <monochrom> IO's fail is error
22:54:04 <monochrom> Maybe's fail is const Nothing. Likewise for [].
22:54:10 azimut joins (~azimut@gateway/tor-sasl/azimut)
22:54:17 <dminuoso> Why is IO's fail error, when you already have IO exceptions at your disposal..
22:54:21 <maerwald> monochrom: IO's fail is an exeption
22:54:31 <EvanR> yeah, userError
22:54:44 <monochrom> Oops yeah.
22:54:50 <EvanR> it just sounds wrong out of context xD
22:55:13 <EvanR> User only used do notation fail features provided by Compiler, don't blame me
22:56:39 <monochrom> IO is probably the only one that cares about the error message. Most other MonadFail instances really just go mzero.
22:56:58 azimut_ joins (~azimut@gateway/tor-sasl/azimut)
22:57:07 × burnsidesLlama quits (~burnsides@dhcp168-042.wadham.ox.ac.uk) (Remote host closed the connection)
22:57:35 burnsidesLlama joins (~burnsides@dhcp168-042.wadham.ox.ac.uk)
22:57:42 <janus> and Aeson's Parser...
22:57:58 <EvanR> > do { Right x <- Left 99; return x } :: Either String Char
22:58:00 <lambdabot> error:
22:58:00 <lambdabot> • No instance for (MonadFail (Either String))
22:58:00 <lambdabot> arising from a do statement
22:58:57 <EvanR> MonadFailed
22:59:41 wroathe joins (~wroathe@206-55-188-8.fttp.usinternet.com)
22:59:41 × wroathe quits (~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host)
22:59:41 wroathe joins (~wroathe@user/wroathe)
23:00:48 × azimut quits (~azimut@gateway/tor-sasl/azimut) (Ping timeout: 276 seconds)
23:01:42 × MatthiasG2 quits (~matthias@i6DFA038C.versanet.de) (Quit: Lost terminal)
23:02:23 × burnsidesLlama quits (~burnsides@dhcp168-042.wadham.ox.ac.uk) (Ping timeout: 256 seconds)
23:03:31 × kojo5551 quits (~kojo5551@fep.grid.pub.ro) (Ping timeout: 256 seconds)
23:03:58 × adnaahm quits (~adnaahm@host-251-net-64-160-119.mobilinkinfinity.net.pk) (Remote host closed the connection)
23:04:08 kojo5551 joins (~kojo5551@fep.grid.pub.ro)
23:04:59 × wroathe quits (~wroathe@user/wroathe) (Ping timeout: 256 seconds)
23:07:15 × pgib quits (~textual@173.38.117.89) (Ping timeout: 256 seconds)
23:09:01 × phma quits (phma@2001:5b0:211c:a988:8f1d:f7a6:3d8d:dc0c) (Quit: Konversation terminated!)
23:09:31 × tavares quits (~tavares@user/tavares) (Ping timeout: 256 seconds)
23:10:04 phma joins (phma@2001:5b0:211c:a988:4657:1b6d:fa0b:fae3)
23:12:19 alx741 joins (~alx741@157.100.197.240)
23:12:37 × merijn quits (~merijn@c-001-001-018.client.esciencecenter.eduvpn.nl) (Ping timeout: 240 seconds)
23:13:57 <ski> @undo do {Just x <- return Nothing; return x}
23:13:57 <lambdabot> return Nothing >>= \ a -> case a of { Just x -> return x; _ -> fail ""}
23:14:45 burnsidesLlama joins (~burnsides@dhcp168-042.wadham.ox.ac.uk)
23:15:35 Axma76527 is now known as Axman6
23:15:37 × machinedgod quits (~machinedg@24.105.81.50) (Ping timeout: 240 seconds)
23:22:34 × alx741 quits (~alx741@157.100.197.240) (Read error: Connection reset by peer)
23:22:52 × phma quits (phma@2001:5b0:211c:a988:4657:1b6d:fa0b:fae3) (Read error: Connection reset by peer)
23:23:17 phma joins (~phma@host-67-44-208-91.hnremote.net)
23:23:35 <janus> awpr: something i forgot is that GHC 9.2 sets PolyKinds by default since it is part of GHC2021. so that may have played a role
23:24:00 <janus> awpr: swamp-agr let me know https://github.com/GetShopTV/swagger2/pull/233#issuecomment-1029474729
23:24:15 × Guest83 quits (~Guest83@181.229.128.244) (Ping timeout: 256 seconds)
23:25:17 × Gurkenglas quits (~Gurkengla@dslb-090-186-104-244.090.186.pools.vodafone-ip.de) (Ping timeout: 240 seconds)
23:25:34 <monochrom> Interesting. Maybe add {-# language NoPolyKinds #-} and see what happens.
23:28:47 × jgeerds quits (~jgeerds@55d4a547.access.ecotel.net) (Ping timeout: 256 seconds)
23:28:47 <janus> yeah i did, and then it finds the instance. even if it is explicitly derived...
23:29:09 nitrix joins (~nitrix@user/nitrix)
23:29:44 wyrd joins (~wyrd@gateway/tor-sasl/wyrd)
23:29:58 <janus> i am confused since the existence of an instance shouldn't affect whether PolyKinds is enabled or not
23:30:10 <janus> but anyway, there is that other compiler bug that makes the impossible happen
23:30:13 dcoutts joins (~duncan@109.144.215.134)
23:30:30 <janus> so 9.2 is unusable for this project anyway, it seems
23:32:19 AlexNoo_ joins (~AlexNoo@94.233.241.94)
23:32:59 × Topsi quits (~Tobias@dyndsl-037-138-064-017.ewe-ip-backbone.de) (Read error: Connection reset by peer)
23:33:53 × Alex_test quits (~al_test@178.34.151.37) (Ping timeout: 256 seconds)
23:34:14 chenqisu1 joins (~chenqisu1@183.217.200.249)
23:34:41 × AlexZenon quits (~alzenon@178.34.151.37) (Ping timeout: 256 seconds)
23:36:02 × AlexNoo quits (~AlexNoo@178.34.151.37) (Ping timeout: 250 seconds)
23:36:50 <janus> well, for it's test suite at least...
23:37:40 × eggplantade quits (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection)
23:38:52 Alex_test joins (~al_test@94.233.241.94)
23:39:04 AlexZenon joins (~alzenon@94.233.241.94)
23:41:00 alx741 joins (~alx741@157.100.197.240)
23:42:27 × max22- quits (~maxime@2a01cb08833598004d3ba66ae954fefa.ipv6.abo.wanadoo.fr) (Remote host closed the connection)
23:43:43 × alx741 quits (~alx741@157.100.197.240) (Read error: Connection reset by peer)
23:43:54 alp joins (~alp@user/alp)
23:45:07 × CiaoSen quits (~Jura@p200300c95737a2002a3a4dfffe84dbd5.dip0.t-ipconnect.de) (Ping timeout: 250 seconds)
23:50:57 <Axman6> just check in a DeferredTypeErrors if it's a test suite >_>
23:51:04 <Axman6> chuck*

All times are in UTC on 2022-02-03.