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.