Home liberachat/#haskell: Logs Calendar

Logs on 2024-02-07 (liberachat/#haskell)

00:01:24 peterbecich joins (~Thunderbi@047-229-123-186.res.spectrum.com)
00:04:13 × xigua quits (~xigua@user/xigua) (Read error: Connection reset by peer)
00:04:19 Sgeo joins (~Sgeo@user/sgeo)
00:04:28 xigua joins (~xigua@user/xigua)
00:05:23 × rvalue quits (~rvalue@user/rvalue) (Ping timeout: 264 seconds)
00:05:47 × mobivme quits (~mobivme@user/mobivme) (Ping timeout: 260 seconds)
00:11:25 jmdaemon joins (~jmdaemon@user/jmdaemon)
00:15:21 rvalue joins (~rvalue@user/rvalue)
00:24:37 × peterbecich quits (~Thunderbi@047-229-123-186.res.spectrum.com) (Ping timeout: 260 seconds)
00:45:41 Lycurgus joins (~georg@user/Lycurgus)
00:50:08 peterbecich joins (~Thunderbi@047-229-123-186.res.spectrum.com)
00:55:24 Erutuon joins (~Erutuon@user/erutuon)
01:05:33 × Tuplanolla quits (~Tuplanoll@91-159-68-95.elisa-laajakaista.fi) (Quit: Leaving.)
01:09:01 × xff0x quits (~xff0x@2405:6580:b080:900:5fca:dd8c:766e:9634) (Ping timeout: 272 seconds)
01:10:53 × mmhat quits (~mmh@p200300f1c7032843ee086bfffe095315.dip0.t-ipconnect.de) (Quit: WeeChat 4.2.1)
01:12:09 × santiagopim quits (~user@90.167.66.131) (Ping timeout: 268 seconds)
01:41:57 × Lord_of_Life quits (~Lord@user/lord-of-life/x-2819915) (Ping timeout: 272 seconds)
01:43:02 Lord_of_Life joins (~Lord@user/lord-of-life/x-2819915)
01:47:17 × Katarushisu1 quits (~Katarushi@finc-20-b2-v4wan-169598-cust1799.vm7.cable.virginm.net) (Ping timeout: 240 seconds)
01:55:27 × evj quits (~evj@user/evj) (Ping timeout: 260 seconds)
01:56:01 × Unicorn_Princess quits (~Unicorn_P@user/Unicorn-Princess/x-3540542) (Quit: Leaving)
01:56:57 xff0x joins (~xff0x@125x103x176x34.ap125.ftth.ucom.ne.jp)
02:00:47 Katarushisu1 joins (~Katarushi@finc-20-b2-v4wan-169598-cust1799.vm7.cable.virginm.net)
02:03:57 × pointlessslippe1 quits (~pointless@212.82.82.3) (Ping timeout: 268 seconds)
02:08:16 × jmdaemon quits (~jmdaemon@user/jmdaemon) (Ping timeout: 255 seconds)
02:10:01 × mima quits (~mmh@aftr-62-216-211-178.dynamic.mnet-online.de) (Ping timeout: 256 seconds)
02:17:20 Unode joins (~Unode@fg-ext-220.embl.de)
02:17:55 jmdaemon joins (~jmdaemon@user/jmdaemon)
02:19:38 × machinedgod quits (~machinedg@d173-183-246-216.abhsia.telus.net) (Ping timeout: 252 seconds)
02:23:45 × otto_s quits (~user@p5b044c4b.dip0.t-ipconnect.de) (Ping timeout: 272 seconds)
02:24:23 × Unode quits (~Unode@fg-ext-220.embl.de) (Ping timeout: 260 seconds)
02:25:19 otto_s joins (~user@p5b04467e.dip0.t-ipconnect.de)
02:28:39 Unode joins (~Unode@fg-ext-220.embl.de)
02:30:13 × jmdaemon quits (~jmdaemon@user/jmdaemon) (Quit: ZNC 1.8.2 - https://znc.in)
02:30:33 jmdaemon joins (~jmdaemon@user/jmdaemon)
02:34:07 TonyStone joins (~TonyStone@074-076-057-186.res.spectrum.com)
02:37:41 × jmdaemon quits (~jmdaemon@user/jmdaemon) (Ping timeout: 272 seconds)
02:54:47 × mechap quits (~mechap@user/mechap) (Ping timeout: 272 seconds)
02:56:32 mechap joins (~mechap@user/mechap)
03:02:20 × petrichor quits (~znc-user@user/petrichor) (Quit: ZNC 1.8.2 - https://znc.in)
03:03:15 petrichor joins (~znc-user@user/petrichor)
03:15:41 × waleee quits (~waleee@h-176-10-144-38.NA.cust.bahnhof.se) (Ping timeout: 272 seconds)
03:16:42 <energizer> is there an absorber/annihilator for ++, i.e. an element z such that z ++ a == z for all a?
03:18:54 <geekosaur> no
03:19:38 <jle`> i guess depending on the type of value, you could have `repeat x`, if you define == as equational reasoning based equality instead of haskell's (==)
03:20:16 <jle`> hm, maybe any infinite list counts?
03:21:20 <jle`> for any terminating function f, f (z ++ a) == f z, if z is an infinite list.
03:22:27 bilegeek joins (~bilegeek@2600:1008:b04f:fcf5:b540:c75e:140b:eceb)
03:22:42 <energizer> what about f = last
03:23:05 <jle`> in that case it wouldn't terminate
03:24:28 <jle`> for all f, if f z terminates, then f z == f (z ++ a)
03:25:08 <jle`> which is some type of extensional equality maybe?
03:27:18 × jargon quits (~jargon@123.sub-174-205-225.myvzw.com) (Remote host closed the connection)
03:36:29 waleee joins (~waleee@h-176-10-144-38.NA.cust.bahnhof.se)
03:37:49 × td_ quits (~td@i53870914.versanet.de) (Ping timeout: 255 seconds)
03:37:59 fansly joins (~fansly@2001:448a:2010:476e:5df1:ad02:fa1f:3df1)
03:39:25 td_ joins (~td@i53870927.versanet.de)
03:44:34 × peterbecich quits (~Thunderbi@047-229-123-186.res.spectrum.com) (Ping timeout: 255 seconds)
03:51:13 igemnace joins (~ian@user/igemnace)
03:57:00 <mauke> if f z doesn't terminate, then neither does f (z ++ a) :-)
04:01:22 <ski> people shouldn't say `==', when they mean a semantic equality
04:02:40 <monochrom> Right.
04:03:32 <monochrom> But programmers know only programming languages, not the richer language of mathematical semantics.
04:03:47 <monochrom> Much less the even richer language of formal specifications.
04:05:38 tri joins (~tri@2607:fb90:b189:8360:6dd2:e988:8f60:bbe5)
04:07:01 <energizer> huh?
04:07:29 <monochrom> QED >:)
04:07:50 <energizer> no, in a programming forum == is the predicate; = is assignment
04:08:15 <monochrom> And what would you use for mathematical equality?
04:08:53 <monochrom> Or do you instead opine that there is no need, therefore more proof for my point?
04:08:59 <energizer> if i were in a forum that supports that concept, like math or #lean, then i would use =
04:09:25 <monochrom> This channel does support that concept. All the time.
04:09:28 <ski> saying `repeat x = x : repeat x' is an example of such an equality. if you specifcally do not mean "checking equality" (being `=='), then it'd be better to write `=', to avoid confusion with that (see the stuff about termination above). if you want to be more specific, like rewritability in an operational semantics; or perhaps observable equality based on that, quantifying over all possible contexts yielding
04:09:34 <ski> a result in an "observable type", or if you mean a denotational semantics, or axiomatic semantics, that's fine. but just distinguishing from "checking equality" would go a long way
04:09:46 <ski> energizer : there is no assignment in Haskell
04:10:37 <mauke> unless you're at uni
04:10:51 <mauke> then there are many assignments in haskell :-(
04:10:51 × fansly quits (~fansly@2001:448a:2010:476e:5df1:ad02:fa1f:3df1) (Read error: Connection reset by peer)
04:11:07 <monochrom> Heh, in uni, assignments are denoted by the symbol "A", e.g., "A1", "A2". >:)
04:11:13 <ski> well, i'd agree with the plural, i guess
04:11:40 <monochrom> My colleague says "Exercise 2" instead. >:)
04:11:51 <ski> the gall
04:11:52 <monochrom> (I think it's for an unrelated reason.)
04:12:49 <mauke> execute assignment #66
04:13:07 ski . o O ( "Off with her head!" )
04:14:07 × rekahsoft quits (~rekahsoft@70.51.99.248) (Ping timeout: 246 seconds)
04:15:51 <ski> energizer : "in a programming forum == is the predicate" -- the problem is, there's at least two different notions of "predicate" here. there's boolean-valued ("computable", iow decidable) predicate. and there's truth-valued (potentially provable) predicate
04:16:35 <ski> the first computes a bit. the second computes a proposition
04:16:57 × Lycurgus quits (~georg@user/Lycurgus) (Quit: leaving)
04:17:58 × moixa quits (~moixa@customer-178-16-208-85.stosn.net) (Ping timeout: 264 seconds)
04:20:36 <monochrom> But let's have even more fun.
04:21:15 <monochrom> Even within the computable, Java has == and equal(), and makes a point to warning beginners "== is not what you think".
04:21:54 <monochrom> Not to be undone, Lisp predates that by 40 years with eq?, eqv?, and equal?
04:21:54 <jle`> mauke: right, but that's the most boring case to think about :)
04:22:00 <monochrom> s/undone/outdone/
04:24:32 fansly joins (~fansly@2001:448a:2010:476e:5df1:ad02:fa1f:3df1)
04:24:57 tri_ joins (~tri@2607:fb90:b189:8360:1450:cf3a:2c14:a8bb)
04:28:09 × tri quits (~tri@2607:fb90:b189:8360:6dd2:e988:8f60:bbe5) (Ping timeout: 256 seconds)
04:28:30 <mauke> common lisp: eq, eql, equal, equalp, =, string=, string-equal, char=, char-equal
04:29:58 <ski> yea, that's Scheme. CL and ELisp don't quite use those names
04:30:05 × waleee quits (~waleee@h-176-10-144-38.NA.cust.bahnhof.se) (Ping timeout: 240 seconds)
04:30:11 <mauke> oops, forgot about tree-equal
04:30:21 <monochrom> \∩/
04:30:25 × JordiGH quits (~jordi@user/jordigh) (Ping timeout: 272 seconds)
04:30:40 <ski> (i guess it does use `string=')
04:32:50 <mauke> this is why I like perl. it supports both kinds of equality, == and eq
04:34:12 <energizer> i always liked pyret's equal-now and equal-always predicates https://pyret.org/docs/latest/equality.html
04:34:37 ski . o O ( `equal-eventually' )
04:35:12 <energizer> equal-with-probability-1
04:36:18 <ski> (.. define an equivalence relation over infinite sequences, expressing that they eventually agree forever)
04:37:25 × TonyStone quits (~TonyStone@074-076-057-186.res.spectrum.com) (Quit: Leaving)
04:40:13 <monochrom> At that point, you may be interested in parametrizing equality by a general LTL formula :)
04:42:45 <ski> or CTL, i guess ..
04:43:27 <tri_> hi, im looking into event-driven programming in haskell. My idea is to have the main thread runs forever, meanwhile there is a thread that listens for event, say from AWS SQS. On receiving an event, depending on a value, say a string property, i will pattern match on a handler.
04:44:09 <tri_> i saw the library reactive-banana is an event handler, is that the go-to library for event-drivent programming?
04:47:15 <tri_> in C#, there is the event handler concept, but im not sure it exist in Haskell. I feel like in Haskell, i should use the pipe and conduit library to stream event, which is similar to the Reactive libraries in other langauges, like RxJava, Rx.NET, RxJS,...
04:47:20 <tri_> is my thought correct?
04:48:11 <tri_> i gotta go grab a drink, so i may not be able to get back to any answer in a bit
04:48:13 <tri_> thank you
04:49:54 × igemnace quits (~ian@user/igemnace) (Read error: Connection reset by peer)
04:53:12 aforemny_ joins (~aforemny@2001:9e8:6cca:5a00:54df:9782:a471:5c99)
04:54:29 × aforemny quits (~aforemny@2001:9e8:6ce5:8100:8057:709d:76c5:eec) (Ping timeout: 272 seconds)
05:11:26 × chexum quits (~quassel@gateway/tor-sasl/chexum) (Remote host closed the connection)
05:11:58 chexum joins (~quassel@gateway/tor-sasl/chexum)
05:16:01 × tomku quits (~tomku@user/tomku) (Quit: Lost terminal)
05:19:49 × fansly quits (~fansly@2001:448a:2010:476e:5df1:ad02:fa1f:3df1) (Ping timeout: 272 seconds)
05:20:37 × Erutuon quits (~Erutuon@user/erutuon) (Ping timeout: 246 seconds)
05:24:49 fansly joins (~fansly@103.3.221.233)
05:40:30 peterbecich joins (~Thunderbi@047-229-123-186.res.spectrum.com)
05:45:25 × fansly quits (~fansly@103.3.221.233) (Read error: Connection reset by peer)
05:46:40 fansly joins (~fansly@103.3.221.233)
05:52:12 igemnace joins (~ian@user/igemnace)
05:53:27 × fansly quits (~fansly@103.3.221.233) (Ping timeout: 260 seconds)
05:54:17 fansly joins (~fansly@2001:448a:2010:476e:5df1:ad02:fa1f:3df1)
06:00:17 _ht joins (~Thunderbi@28-52-174-82.ftth.glasoperator.nl)
06:05:59 × mei quits (~mei@user/mei) (Remote host closed the connection)
06:06:06 acidjnk_new joins (~acidjnk@p200300d6e737e7149c5f494a93cffe4b.dip0.t-ipconnect.de)
06:06:28 tomku joins (~tomku@user/tomku)
06:12:07 × euleritian quits (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) (Ping timeout: 260 seconds)
06:12:45 euleritian joins (~euleritia@dynamic-176-006-192-146.176.6.pool.telefonica.de)
06:13:51 mei joins (~mei@user/mei)
06:15:47 <jackdk> tri_: I probably wouldn't go all the way to FRP to solve this problem. A library like `streaming` is probably all you need if you're just consuming messages from the queue as they come in. If you have many event sources in parallel you may need something fancier, or just running each consumer in its own thread may suffice. Hard to say, unless you say more about your problem
06:16:35 <tri_> https://paste.tomsmeding.com/MjXusC2w
06:16:56 <tri_> that's a pseudo code in C#, im trying to port that to Haskell
06:18:50 <probie> or even just listening on a `Chan`
06:19:07 <jackdk> If you have a single event source, I would consume an infinite stream probably, and eschew multithreading altogether
06:20:16 <tri_> probie: what is a chan? is that a library?
06:20:47 <tri_> im listening for message on AWS SQS/SNS
06:21:10 <probie> tri_: they're in base; https://hackage.haskell.org/package/base-4.19.0.0/docs/Control-Concurrent-Chan.html
06:21:38 <tri_> after a bit of thinking, my problem boils down to understand how haskell register a "callback", or in other word, an event handler, when an event is raised
06:22:08 <tri_> like in .NET (as in my pseudo code), i can register an event handler by using +=
06:22:50 <tri_> idk what's an equiavlent in Haskell yet, i guess i have to read how Amazonka - an AWS sdk for Haskell - works
06:22:58 <c_wraith> "event handlers" are an uncommon special case in Haskell
06:23:21 takuan joins (~takuan@178-116-218-225.access.telenet.be)
06:23:52 <tri_> c_wraith: im not sure if we are thinking about the same thing, but event handler is a special thing for OOP, so im not sure if there is a 1-1 to FP
06:23:58 <c_wraith> mostly because the IO manager takes care of suspending threads that are blocked on IO, so event-driven IO doesn't mean much.
06:23:58 <ski> @kind Control.Concurrent.Chan
06:23:59 <lambdabot> * -> *
06:24:33 <tri_> c_wraith: from using RX.Net (or RxJava, RxJS) I feel the way Haskell would handle event is by
06:24:49 evj joins (~evj@user/evj)
06:25:23 <tri_> eventSource & mapFunctionMappingSomeValue & filterFuctionFilteringSomeValue & IOFunctionPrintingOutProcessedValue
06:25:54 <tri_> sorry for my half-baked pseudo-haskell code above, but i hope you get my point
06:27:48 rosco joins (~rosco@175.136.156.77)
06:27:57 <tri_> in F#, that is eventObservable |> List.map (fun event-> event.PropertyImInterestedIn |> List.map (fun data -> data > conditionOfBusinessLogic |> Observable.subscribe (fun processedData -> printfn "finally processed event is %s" processedData)
06:28:00 <c_wraith> my point is that you shouldn't be looking for event handlers. In Haskell, needing an "event" system more complex than a queue is rare.
06:28:26 <c_wraith> You're thinking in a solution space
06:28:44 <c_wraith> Think in the problem space, instead. What do you have? What do you need to do with it?
06:29:06 <tri_> ah, my problem is, I need to react to event. That's it
06:29:18 <c_wraith> See, you're assuming you're using an event system
06:29:22 <c_wraith> That's not a given
06:29:30 <c_wraith> In fact, it's very uncommon
06:29:39 <c_wraith> What do you actually have in the *problem* space?
06:29:50 <tri_> and depend on a certain property of each event (could be string, int,...) then i have a separate function handling them
06:30:18 <tri_> and my program has to be running constantly as a linux service, to continually listening for incoming event to react to them
06:30:45 × peterbecich quits (~Thunderbi@047-229-123-186.res.spectrum.com) (Ping timeout: 272 seconds)
06:30:49 <c_wraith> You have credentials for subscribing to an AWS queue. You need to turn those credentials into a a process that listens to the queue and handles updates on it.
06:32:23 <tri_> c_wraith: you have some terms that I don't quite understand, e.g. why you mention credentials? and listening for queues and handling updating mean what i said earlier, i.e. reacting to the event?
06:33:13 <tri_> c_wraith: i guess you mean what i said, but you put in some new words that confused me, so im not sure if we are still talking about the same thing
06:36:13 chomwitt joins (~chomwitt@2a02:587:7a10:cd00:1ac0:4dff:fedb:a3f1)
06:38:35 pruiz joins (~user@user/pruiz)
06:39:36 × euleritian quits (~euleritia@dynamic-176-006-192-146.176.6.pool.telefonica.de) (Read error: Connection reset by peer)
06:39:56 euleritian joins (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de)
06:43:09 <c_wraith> tri_: the fundamental model in amazonka is sending a request to the service and getting a response. A relevant example here would be ReceiveMessage value off to aws, and getting back a ReceiveMessageResponse that includes some number of new messages in the queue.
06:43:47 <c_wraith> tri_: This doesn't use event handlers. It's making a function call and examining its return value.
06:45:04 <c_wraith> For the use case you've described, that seems sufficient. Run it in a loop. Log errors. Handle expected messages.
06:45:58 zetef joins (~quassel@95.77.17.251)
06:50:26 × rosco quits (~rosco@175.136.156.77) (Quit: Lost terminal)
06:54:18 <Axman6> [3;3~
06:56:01 <Axman6> uh, sorry
06:56:34 <Axman6> That was not meant to be a beatnik cow emoji
06:57:49 <monochrom> You are so imaginative. I don't see a cow. :)
06:58:49 <jackdk> And remember to set a nice long waitTimeSeconds, and a longer timeout on your HTTP manager, so you don't rack up unnecessary costs
06:59:53 <jackdk> FWIW, I agree with everyone who says "just consume in a loop" as a way to get started. You can learn and apply more complicated libraries once you get the thing going
07:00:42 <monochrom> Is that how you keep the AWS bill low? By throttling "I take only 10 requests per second"?
07:01:19 × chomwitt quits (~chomwitt@2a02:587:7a10:cd00:1ac0:4dff:fedb:a3f1) (Remote host closed the connection)
07:01:43 chomwitt joins (~chomwitt@2a02:587:7a10:cd00:1ac0:4dff:fedb:a3f1)
07:02:04 michalz joins (~michalz@185.246.207.215)
07:02:23 <monochrom> So all the "webscale" "10B requests per second" talks are hot air because in the real world no one can afford webscale AWS bills anyway? >:)
07:07:10 <probie> Autoscaling makes you just a DDOS away from being broke
07:08:37 × evj quits (~evj@user/evj) (Quit: evj)
07:08:59 <jackdk> A common way to run up a SQS bill is to call receiveMessage in a loop, when you should set a waitTimeSeconds and long-poll
07:10:44 <Axman6> my whole job for 18 months was working on haskell systems build on Amazonka to process data in SQS queues... amazonka is excellent (and way more excellent today because jackdk is a deadset legend)
07:13:44 <Axman6> tri_: you really, truly, do not need a "event driven library" when working in Haskell. you could emulate things like but you'd be much better off using a functional approach. like probie said, just for a thread that uses amazonka to read data from, whatever AWS service you are about, and put them in a Chan. Then you can have a thread (or many!) which look messages in the Chan and process them.
07:13:45 <c_wraith> Huh. I thought it would long-poll by default, but that's a silly assumption. Yeah, you'd want that configurable. And to configure it for that case.
07:14:43 <Axman6> We actually ended up using SEEK's lambda library (I foret its name) which did all the right thigns to react to SQS messages
07:15:00 mjs2600_ joins (~mjs2600@c-174-169-225-239.hsd1.vt.comcast.net)
07:15:05 × mjs2600 quits (~mjs2600@c-174-169-225-239.hsd1.vt.comcast.net) (Ping timeout: 272 seconds)
07:15:40 <monochrom> The time is ripe for me to tell the converse story. That a student insisted on porting a Haskell solution to Python. (You heard it right, the student did that direction!)
07:15:54 <Axman6> :(
07:16:03 × zetef quits (~quassel@95.77.17.251) (Remote host closed the connection)
07:16:09 <Axman6> My first Haskell job was porting Ruby to Haskell, it was a delight
07:17:06 <monochrom> So in Haskell you would code up an expression evaluator like this. data Expr = Const Int | Add Expr Expr | Mul Expr Expr | ...; eval (Const n) = n; eval (Add e1 e2) = eval e1 + eval e2; ...
07:18:10 <monochrom> So the student said "I love Haskell" so their Python version was: defun eval(e): ... if isinstance(e, Const): ... else if isintance(e, Add): ...
07:18:18 <Axman6> tri_: you could also just use one of the streaming libraries, like streaming
07:18:55 <sshine> my first and only job that involved Haskell was maintaining a smart contract compiler that got axed the same month I started.
07:19:00 <Axman6> monochrom: :((( ... as someone who is now writing python for #work, I feel (what should be) their pain
07:19:22 <Axman6> sshine: ... did we work at the same place?
07:19:34 <sshine> Axman6, we didn't! I would've known :-D
07:19:49 <sshine> Axman6, this was eToro's crypto R&D dept. in Copenhagen.
07:19:56 <Axman6> I feel we need a zero knowledge proof to share the places we worked
07:20:24 <Axman6> Ah fair enough. I was at Digital Asset, I wish I was working on the DAML compiler, but technically I was only secconded to them
07:20:33 <sshine> yeah, build a big bloom filter with hashes of employer unique IDs
07:20:38 × michalz quits (~michalz@185.246.207.215) (Quit: ZNC 1.8.2 - https://znc.in)
07:20:46 <Axman6> yeah that works
07:22:18 <monochrom> Well, Python may be a pain for some other problem domains. But AST evaluator is an easy one that fits OO nicely, just dually to FP. Having Const.eval(), Add.eval(), Mul.eval() is a no-brainer.
07:23:29 michalz joins (~michalz@185.246.207.217)
07:23:36 <monochrom> In fact I think the student did the worst of both worlds. They had Const/Add/Mul.evalmethod(), and its code was "eval(self);".
07:24:35 <monochrom> At which point it's completely self-defeating. (Pun!)
07:25:06 <ski> they could've used VisitorPattern ?
07:25:32 × tri_ quits (~tri@2607:fb90:b189:8360:1450:cf3a:2c14:a8bb) (Remote host closed the connection)
07:26:35 <monochrom> They did have the Add/Mul classes having two fields for the two subexpressions, and Const having a field for the Int. We do not need the visitor pattern yet.
07:26:48 todi joins (~todi@p5dca5fa8.dip0.t-ipconnect.de)
07:28:31 <monochrom> (More broadly, we do not need multiple dispatch yet, and we haven't run into the OO version of the expression problem yet.)
07:30:17 <monochrom> But it is the composite pattern.
07:37:39 <ski> @where IndirectComposite
07:37:39 <lambdabot> <http://web.archive.org/web/20051126141834/http://haskell.org/hawiki/IndirectComposite>
07:37:46 CiaoSen joins (~Jura@2a05:5800:280:5c00:e6b9:7aff:fe80:3d03)
07:39:32 <haskellbridge> <J​ade> is this also the pattern that TTG uses?
07:41:53 <ski> "TTG" ?
07:45:14 <haskellbridge> <J​ade> Trees that grow
07:45:43 <ski> hm, dunno
07:47:03 mobivme joins (~mobivme@130.105.162.31)
07:53:57 tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
07:54:15 × econo_ quits (uid147250@id-147250.tinside.irccloud.com) (Quit: Connection closed for inactivity)
07:58:58 Maxdaman1us is now known as Maxdamantus
08:00:20 pointlessslippe1 joins (~pointless@212.82.82.3)
08:02:58 × bilegeek quits (~bilegeek@2600:1008:b04f:fcf5:b540:c75e:140b:eceb) (Quit: Leaving)
08:03:09 poscat joins (~poscat@user/poscat)
08:03:48 pruiz` joins (~user@213.4.200.211)
08:03:49 × pruiz quits (~user@user/pruiz) (Remote host closed the connection)
08:06:27 × mobivme quits (~mobivme@130.105.162.31) (Ping timeout: 256 seconds)
08:08:01 × poscat quits (~poscat@user/poscat) (Client Quit)
08:12:18 fendor joins (~fendor@2a02:8388:1605:d100:267b:1353:13d7:4f0c)
08:14:52 poscat joins (~poscat@user/poscat)
08:16:58 × Sgeo quits (~Sgeo@user/sgeo) (Read error: Connection reset by peer)
08:17:34 × p3n_ quits (~p3n@2a00:19a0:3:7c:0:d9c6:7cf6:1) (Quit: ZNC 1.8.2 - https://znc.in)
08:21:10 p3n joins (~p3n@217.198.124.246)
08:21:14 mima joins (~mmh@aftr-62-216-211-78.dynamic.mnet-online.de)
08:21:59 coot joins (~coot@89-69-206-216.dynamic.chello.pl)
08:22:57 × fansly quits (~fansly@2001:448a:2010:476e:5df1:ad02:fa1f:3df1) (Remote host closed the connection)
08:33:25 chele joins (~chele@user/chele)
08:40:18 danse-nr3 joins (~danse@151.57.59.129)
08:43:09 fansly joins (~fansly@103.3.221.233)
08:53:30 kuribas joins (~user@ip-188-118-57-242.reverse.destiny.be)
08:54:07 machinedgod joins (~machinedg@d173-183-246-216.abhsia.telus.net)
08:54:41 mobivme joins (~mobivme@130.105.162.31)
08:59:20 mobounce joins (~mobivme@130.105.162.31)
09:00:17 × mobivme quits (~mobivme@130.105.162.31) (Ping timeout: 256 seconds)
09:00:35 × danse-nr3 quits (~danse@151.57.59.129) (Remote host closed the connection)
09:01:22 danse-nr3 joins (~danse@151.57.59.129)
09:02:28 × mobounce quits (~mobivme@130.105.162.31) (Changing host)
09:02:28 mobounce joins (~mobivme@user/mobivme)
09:07:20 mmhat joins (~mmh@p200300f1c7032843ee086bfffe095315.dip0.t-ipconnect.de)
09:08:29 gmg joins (~user@user/gehmehgeh)
09:13:20 × gmg quits (~user@user/gehmehgeh) (Remote host closed the connection)
09:14:11 gmg joins (~user@user/gehmehgeh)
09:15:37 × mobounce quits (~mobivme@user/mobivme) (Ping timeout: 268 seconds)
09:16:05 mmohammadi9812 joins (~mohammad@85.185.34.54)
09:16:51 × tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
09:18:28 mohammadi9812m joins (~mohammad@85.185.35.157)
09:18:55 × fansly quits (~fansly@103.3.221.233) (Remote host closed the connection)
09:20:06 xdminsy joins (~xdminsy@117.147.71.221)
09:21:41 × mmohammadi9812 quits (~mohammad@85.185.34.54) (Ping timeout: 256 seconds)
09:24:54 Square3 joins (~Square4@user/square)
09:28:20 fansly joins (~fansly@103.3.221.233)
09:31:56 × bairyn quits (~bairyn@50-250-232-19-static.hfc.comcastbusiness.net) (Ping timeout: 252 seconds)
09:32:41 sord937 joins (~sord937@gateway/tor-sasl/sord937)
09:33:09 × fansly quits (~fansly@103.3.221.233) (Ping timeout: 272 seconds)
09:33:27 fansly joins (~fansly@2001:448a:2010:476e:5df1:ad02:fa1f:3df1)
09:37:39 × sord937 quits (~sord937@gateway/tor-sasl/sord937) (Remote host closed the connection)
09:38:26 sord937 joins (~sord937@gateway/tor-sasl/sord937)
09:42:47 × califax quits (~califax@user/califx) (Ping timeout: 255 seconds)
09:43:25 califax joins (~califax@user/califx)
09:44:35 __monty__ joins (~toonn@user/toonn)
09:44:57 zetef joins (~quassel@95.77.17.251)
09:45:49 × fansly quits (~fansly@2001:448a:2010:476e:5df1:ad02:fa1f:3df1) (Ping timeout: 272 seconds)
09:46:03 fansly joins (~fansly@114.124.150.111)
09:49:32 × danse-nr3 quits (~danse@151.57.59.129) (Ping timeout: 268 seconds)
09:49:32 × mohammadi9812m quits (~mohammad@85.185.35.157) (Ping timeout: 252 seconds)
09:49:35 × zetef quits (~quassel@95.77.17.251) (Remote host closed the connection)
09:54:12 × stiell quits (~stiell@gateway/tor-sasl/stiell) (Remote host closed the connection)
09:54:48 stiell joins (~stiell@gateway/tor-sasl/stiell)
09:54:54 × adam-fuks quits (~adam-fuks@public-gprs567556.centertel.pl) (Quit: Lost terminal)
09:57:03 danse-nr3 joins (~danse@151.57.59.129)
09:59:42 mobivme joins (~mobivme@130.105.162.31)
09:59:42 × mobivme quits (~mobivme@130.105.162.31) (Changing host)
09:59:42 mobivme joins (~mobivme@user/mobivme)
10:02:27 lambdaman joins (~textual@d172-218-204-71.bchsia.telus.net)
10:07:59 × xff0x quits (~xff0x@125x103x176x34.ap125.ftth.ucom.ne.jp) (Ping timeout: 272 seconds)
10:08:31 × tzh quits (~tzh@c-71-193-181-0.hsd1.or.comcast.net) (Quit: zzz)
10:10:31 × mulk quits (~mulk@pd9514313.dip0.t-ipconnect.de) (Ping timeout: 272 seconds)
10:11:36 mulk joins (~mulk@pd9514313.dip0.t-ipconnect.de)
10:12:33 mreh joins (~matthew@host86-160-168-73.range86-160.btcentralplus.com)
10:18:08 × fansly quits (~fansly@114.124.150.111) (Read error: Connection reset by peer)
10:18:18 fansly joins (~fansly@2001:448a:2010:476e:5df1:ad02:fa1f:3df1)
10:19:23 × chomwitt quits (~chomwitt@2a02:587:7a10:cd00:1ac0:4dff:fedb:a3f1) (Ping timeout: 272 seconds)
10:20:03 tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
10:20:36 lg188 joins (~lg188@82.18.98.230)
10:41:19 × fansly quits (~fansly@2001:448a:2010:476e:5df1:ad02:fa1f:3df1) (Remote host closed the connection)
10:48:56 fansly joins (~fansly@2001:448a:2010:476e:5df1:ad02:fa1f:3df1)
10:57:10 tri joins (~tri@ool-18bc2e74.dyn.optonline.net)
10:59:47 xff0x joins (~xff0x@ai099196.d.east.v6connect.net)
11:01:37 × tri quits (~tri@ool-18bc2e74.dyn.optonline.net) (Ping timeout: 260 seconds)
11:13:24 ubert joins (~Thunderbi@2a02:8109:ab8a:5a00:c790:7857:9c1b:e11e)
11:14:37 × lambdaman quits (~textual@d172-218-204-71.bchsia.telus.net) (Quit: My Mac has gone to sleep. ZZZzzz…)
11:18:44 lambdaman joins (~textual@d172-218-204-71.bchsia.telus.net)
11:28:37 × fansly quits (~fansly@2001:448a:2010:476e:5df1:ad02:fa1f:3df1) (Ping timeout: 264 seconds)
11:28:42 bairyn joins (~bairyn@50.250.232.19)
11:29:39 fansly joins (~fansly@103.3.221.233)
11:33:08 lortabac joins (~lortabac@ip-185-104-138-55.ptr.icomera.net)
11:35:28 Tuplanolla joins (~Tuplanoll@91.159.68.95)
11:36:33 × causal quits (~eric@50.35.85.7) (Quit: WeeChat 4.1.1)
11:40:37 × lortabac quits (~lortabac@ip-185-104-138-55.ptr.icomera.net) (Quit: WeeChat 4.1.1)
11:42:48 × phma quits (~phma@host-67-44-208-73.hnremote.net) (Read error: Connection reset by peer)
11:43:27 × lambdaman quits (~textual@d172-218-204-71.bchsia.telus.net) (Quit: My Mac has gone to sleep. ZZZzzz…)
11:43:31 phma joins (phma@2001:5b0:210f:5128:aa71:bdfd:6827:7ed2)
11:43:41 <haskellbridge> <i​rregularsphere> Jade: by the way remember that IO issue you've ran into
11:43:50 <haskellbridge> <i​rregularsphere> i found something https://hackage.haskell.org/package/base-4.19.0.0/docs/Control-Exception.html#v:bracket
11:45:22 chomwitt joins (~chomwitt@2a02:587:7a10:cd00:1ac0:4dff:fedb:a3f1)
11:47:48 <haskellbridge> <i​rregularsphere> probably wouldn't help though but i guess it's worth looking into?
11:49:09 × szkl quits (uid110435@id-110435.uxbridge.irccloud.com) (Quit: Connection closed for inactivity)
11:49:24 lambdaman joins (~textual@d172-218-204-71.bchsia.telus.net)
11:53:41 × pavonia quits (~user@user/siracusa) (Quit: Bye!)
12:05:41 × lambdaman quits (~textual@d172-218-204-71.bchsia.telus.net) (Quit: My Mac has gone to sleep. ZZZzzz…)
12:07:40 × danse-nr3 quits (~danse@151.57.59.129) (Ping timeout: 268 seconds)
12:08:22 × foul_owl quits (~kerry@174-21-148-34.tukw.qwest.net) (Ping timeout: 246 seconds)
12:09:09 moixa joins (~moixa@customer-178-16-208-85.stosn.net)
12:15:50 × fansly quits (~fansly@103.3.221.233) (Ping timeout: 252 seconds)
12:16:31 × CiaoSen quits (~Jura@2a05:5800:280:5c00:e6b9:7aff:fe80:3d03) (Ping timeout: 276 seconds)
12:16:53 fansly joins (~fansly@2001:448a:2010:476e:5df1:ad02:fa1f:3df1)
12:21:05 foul_owl joins (~kerry@157.97.134.164)
12:25:18 mmohammadi9812 joins (~mohammad@85.185.34.241)
12:35:43 × chele quits (~chele@user/chele) (Ping timeout: 260 seconds)
12:36:29 × fansly quits (~fansly@2001:448a:2010:476e:5df1:ad02:fa1f:3df1) (Ping timeout: 240 seconds)
12:36:50 fansly joins (~fansly@182.2.146.24)
12:37:11 × fansly quits (~fansly@182.2.146.24) (Read error: Connection reset by peer)
12:38:59 × mmohammadi9812 quits (~mohammad@85.185.34.241) (Ping timeout: 260 seconds)
12:40:05 JordiGH joins (~jordi@user/jordigh)
12:40:35 × euleritian quits (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) (Ping timeout: 252 seconds)
12:41:03 euleritian joins (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de)
12:43:36 fansly joins (~fansly@103.3.221.233)
12:46:45 pretty_dumm_guy joins (trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655)
12:47:24 × igemnace quits (~ian@user/igemnace) (Read error: Connection reset by peer)
12:48:14 chele joins (~chele@user/chele)
12:55:17 × JordiGH quits (~jordi@user/jordigh) (Ping timeout: 240 seconds)
12:58:30 danse-nr3 joins (~danse@151.57.34.109)
13:01:02 alexherbo2 joins (~alexherbo@2a02-8440-3440-5654-4484-4a93-9fff-6f85.rev.sfr.net)
13:02:31 × fansly quits (~fansly@103.3.221.233) (Remote host closed the connection)
13:02:49 × mechap quits (~mechap@user/mechap) (Ping timeout: 256 seconds)
13:04:26 igemnace joins (~ian@user/igemnace)
13:04:51 mechap joins (~mechap@user/mechap)
13:12:54 fansly joins (~fansly@2001:448a:2010:476e:5df1:ad02:fa1f:3df1)
13:16:05 × euleritian quits (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) (Ping timeout: 272 seconds)
13:16:59 euleritian joins (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de)
13:23:03 × mmhat quits (~mmh@p200300f1c7032843ee086bfffe095315.dip0.t-ipconnect.de) (Ping timeout: 272 seconds)
13:25:04 × destituion quits (~destituio@2a02:2121:626:f551:7691:f531:69f8:5291) (Ping timeout: 268 seconds)
13:25:20 destituion joins (~destituio@85.221.111.174)
13:25:20 × fansly quits (~fansly@2001:448a:2010:476e:5df1:ad02:fa1f:3df1) (Remote host closed the connection)
13:29:14 fansly joins (~fansly@2001:448a:2010:476e:5df1:ad02:fa1f:3df1)
13:35:14 waleee joins (~waleee@h-176-10-144-38.NA.cust.bahnhof.se)
13:40:07 mmhat joins (~mmh@p200300f1c70397f2ee086bfffe095315.dip0.t-ipconnect.de)
13:45:51 × fansly quits (~fansly@2001:448a:2010:476e:5df1:ad02:fa1f:3df1) (Remote host closed the connection)
13:48:59 × chomwitt quits (~chomwitt@2a02:587:7a10:cd00:1ac0:4dff:fedb:a3f1) (Quit: Leaving)
13:49:46 <absence> Is there anything in lens that works on [(key, value)]? If I don't care about order or duplicates, I can make an unlawful Iso that converts to/from "Map key value", and use "at someKey", but I'm curious if there are alternatives.
13:51:34 <ncf> absence: traversed.itraversed :: IndexedTraversal' k [(k, v)] v
13:51:55 <ncf> (but this won't let you add or remove entries)
13:53:51 <absence> ncf: That makes sense, but unfortunately I need to add...
13:54:34 <absence> Or well, look up a specific key, and add a value for it if it's missing.
13:54:53 <ncf> failover may be useful
13:57:00 <dminuoso_> absence: The closest thing would be At, but there isnt even a suitable Ixed+Index
13:57:31 <hololeap> so, I wrote this abomination to let me write prettyprinter lines with ApplicativeDo: https://bpa.st/QHOA
13:58:05 <hololeap> the funny thing is that it passes the Applicative laws
13:58:42 <hololeap> but I vaguely remember blaze having a Monad instance so that you could write do blocks with it. how did it achieve that?
14:00:08 <ncf> if you replace Writer [Doc ann] () with [Doc ann] then this is the standard applicative instance for Const
14:00:31 × mei quits (~mei@user/mei) (Remote host closed the connection)
14:00:33 <ncf> well, for LinesBuilder ann = Const [Doc ann]
14:00:47 fansly joins (~fansly@2001:448a:2010:476e:5df1:ad02:fa1f:3df1)
14:00:54 × waleee quits (~waleee@h-176-10-144-38.NA.cust.bahnhof.se) (Quit: oops)
14:01:51 <ncf> if you wanted a monad, you could just use Writer [Doc ann]
14:02:55 mei joins (~mei@user/mei)
14:03:51 waleee joins (~waleee@h-176-10-144-38.NA.cust.bahnhof.se)
14:03:58 <hololeap> well, having OverloadedStrings work as well was part of the point, and the compiler doesn't seem to like my original instance of IsString (Writer [Doc ann] ())
14:04:00 <int-e> . o O ( Writer (Endo [Doc ann]) aka Writer (DList (Doc ann)) )
14:04:41 JordiGH joins (~jordi@user/jordigh)
14:04:49 <absence> dminuoso_: Thanks, that makes me feel somewhat less bad about the unlawful Iso at least. :P
14:05:35 × euleritian quits (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) (Ping timeout: 256 seconds)
14:05:39 <ncf> fromString s = Writer ([fromString s], ()) ?
14:06:20 euleritian joins (~euleritia@dynamic-046-114-179-094.46.114.pool.telefonica.de)
14:06:27 <ncf> you might need some silliness like instance (a ~ ()) => IsString (Writer [Doc ann] a)
14:06:27 <danse-nr3> unlawfulness could be even nastier than type unsafety
14:12:30 × alexherbo2 quits (~alexherbo@2a02-8440-3440-5654-4484-4a93-9fff-6f85.rev.sfr.net) (Remote host closed the connection)
14:13:25 <hololeap> ncf: yeah, when I went to use it, I would get ambiguous type errors unless I annotated every line specifying it was Writer [Doc ann] ()
14:13:53 <ncf> right i think that's the problem a ~ () solves
14:15:11 Lycurgus joins (~georg@user/Lycurgus)
14:18:11 <hololeap> huh, yeah that does seem to work
14:18:27 <hololeap> well then
14:18:39 <dminuoso_> ApplicativeDo, now there's an annoying buggy extension Ive stopped using a while ago.
14:19:12 <dminuoso_> The number of times where some interaction with other extensions or lesser known features just silently degrades into Monad...
14:19:28 <dminuoso_> Especially when a Monad instance exists but you dont want to.
14:19:35 <hololeap> dminuoso_: yeah that's an annoying problem
14:19:46 <hololeap> I use it with optparse-applicative quite a bit just to make things more readable. I haven't had any issues with it there, since there's no Monad
14:20:03 × mima quits (~mmh@aftr-62-216-211-78.dynamic.mnet-online.de) (Ping timeout: 272 seconds)
14:26:48 <hololeap> honestly a BindDo would be pretty cool (talking about Bind from semigroupoids)
14:27:23 <dminuoso_> Oh, do give us ApplyDo as well then.
14:27:37 <dminuoso_> And let all of them reuse `do` at the same time.
14:27:45 <hololeap> true
14:27:47 <dminuoso_> Will `do` degrade into... something?
14:28:06 <hololeap> I don't know why you can't at least get ApplicativeDo to give you a warning when it does that
14:28:49 <hololeap> I wonder if there's any GHC bugs for this
14:28:56 <hololeap> *issues
14:31:27 × euleritian quits (~euleritia@dynamic-046-114-179-094.46.114.pool.telefonica.de) (Ping timeout: 272 seconds)
14:31:55 euleritian joins (~euleritia@dynamic-176-006-196-059.176.6.pool.telefonica.de)
14:34:01 × mmhat quits (~mmh@p200300f1c70397f2ee086bfffe095315.dip0.t-ipconnect.de) (Ping timeout: 264 seconds)
14:34:23 mmhat joins (~mmh@p200300f1c7039776ee086bfffe095315.dip0.t-ipconnect.de)
14:36:16 × danse-nr3 quits (~danse@151.57.34.109) (Ping timeout: 276 seconds)
14:41:35 <hololeap> https://gitlab.haskell.org/ghc/ghc/-/issues/24418
14:41:36 danse-nr3 joins (~danse@151.57.34.109)
14:46:24 <hololeap> what would be ideal would be a proposal for being able to specify what 'do' you intend on using for any given block
14:51:29 × euleritian quits (~euleritia@dynamic-176-006-196-059.176.6.pool.telefonica.de) (Ping timeout: 252 seconds)
14:51:47 euleritian joins (~euleritia@176.2.134.110)
14:55:23 dcompoze joins (~Thunderbi@cpc97610-walt24-2-0-cust190.13-2.cable.virginm.net)
14:55:55 <[Leary]> hololeap: QualifiedDo gives you that. Perhaps you could redefine bind with something that throws a compile-time error? An Unsatisfiable constraint, for example.
14:57:08 <hololeap> I didn't even know about QualifiedDo
14:58:00 × fansly quits (~fansly@2001:448a:2010:476e:5df1:ad02:fa1f:3df1) (Remote host closed the connection)
15:00:17 <hololeap> I guess you could wrap a Monad in a newtype then derive up to Applicative with GeneralizedNewtypeDeriving, but that seems like such a hassle to get the behavior you're after
15:01:56 fansly joins (~fansly@2001:448a:2010:476e:5df1:ad02:fa1f:3df1)
15:04:10 tri joins (~tri@ool-18bbef1a.static.optonline.net)
15:08:05 × euleritian quits (~euleritia@176.2.134.110) (Ping timeout: 240 seconds)
15:08:46 × tri quits (~tri@ool-18bbef1a.static.optonline.net) (Ping timeout: 276 seconds)
15:11:17 × chiselfuse quits (~chiselfus@user/chiselfuse) (Ping timeout: 255 seconds)
15:11:55 × dcompoze quits (~Thunderbi@cpc97610-walt24-2-0-cust190.13-2.cable.virginm.net) (Remote host closed the connection)
15:12:14 <hololeap> int-e thanks for the Endo hint
15:12:29 chiselfuse joins (~chiselfus@user/chiselfuse)
15:13:11 × dibblego quits (~dibblego@haskell/developer/dibblego) (Ping timeout: 264 seconds)
15:13:25 <hololeap> I still don't understand why that's more efficient than the built in list concatination
15:16:16 euleritian joins (~euleritia@dynamic-176-006-179-025.176.6.pool.telefonica.de)
15:19:02 <ski> left-nested uses of `++' (which e.g. results if you do recursion to the left of `++', repeatedly adding things to the end) will be unreasonably inefficient. a traversal of `((as ++ bs) ++ cs) ++ ds' will traverse `as', then traverse (a copy of) `as' as well as `bs', then treverse (copies of) `as',`bs' as well as `cs', then traverse (copies of) `as',`bs',`cs' as well as `ds'
15:19:35 <ski> using `Endo [...]' / `DList (...)' effectively transforms this into right-nested uses of `++'
15:20:15 <hololeap> ok, but how
15:21:11 <hololeap> also, does this matter for say 30 small lists
15:21:30 <ncf> (as ++) . (bs ++) . (cs ++) $ [] will be right-associated no matter how you associate the composition
15:22:20 santiagopim joins (~user@90.167.66.131)
15:22:28 dibblego joins (~dibblego@122-199-1-93.ip4.superloop.au)
15:22:28 × dibblego quits (~dibblego@122-199-1-93.ip4.superloop.au) (Changing host)
15:22:28 dibblego joins (~dibblego@haskell/developer/dibblego)
15:22:54 × average quits (uid473595@user/average) (Quit: Connection closed for inactivity)
15:23:58 mima joins (~mmh@138.246.3.248)
15:24:56 × fansly quits (~fansly@2001:448a:2010:476e:5df1:ad02:fa1f:3df1) (Remote host closed the connection)
15:28:17 <hololeap> I see, so it's just due to how functions compose in haskell
15:28:37 <ncf> in math really, but yeah
15:28:58 <hololeap> it will still have to walk each individual list, though, won't it?
15:29:12 <ncf> yes, so it's O(n)
15:29:57 <hololeap> ok, which is why e.g. Sequence exists to get the O(1) concats
15:30:25 <hololeap> thanks for the simple explaination
15:30:56 × waleee quits (~waleee@h-176-10-144-38.NA.cust.bahnhof.se) (Quit: WeeChat 4.1.2)
15:32:14 fansly joins (~fansly@2001:448a:2010:476e:5df1:ad02:fa1f:3df1)
15:32:45 × euleritian quits (~euleritia@dynamic-176-006-179-025.176.6.pool.telefonica.de) (Ping timeout: 260 seconds)
15:33:19 euleritian joins (~euleritia@46.114.105.247)
15:35:38 sp1ff joins (~user@24.21.45.157)
15:38:17 × tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
15:38:31 qqq joins (~qqq@92.43.167.61)
15:42:13 alexherbo2 joins (~alexherbo@2a02-8440-3440-5654-4484-4a93-9fff-6f85.rev.sfr.net)
15:43:10 × fansly quits (~fansly@2001:448a:2010:476e:5df1:ad02:fa1f:3df1) (Remote host closed the connection)
15:46:02 × sympt quits (~sympt@user/sympt) (Quit: Ping timeout (120 seconds))
15:49:04 × mobivme quits (~mobivme@user/mobivme) (Remote host closed the connection)
15:49:13 sympt joins (~sympt@user/sympt)
15:49:23 × xff0x quits (~xff0x@ai099196.d.east.v6connect.net) (Ping timeout: 260 seconds)
15:50:00 xff0x joins (~xff0x@2405:6580:b080:900:e061:c51:d1f0:45a8)
15:50:17 × euleritian quits (~euleritia@46.114.105.247) (Ping timeout: 268 seconds)
15:50:54 fansly joins (~fansly@2001:448a:2010:476e:5df1:ad02:fa1f:3df1)
15:51:10 euleritian joins (~euleritia@dynamic-176-006-188-106.176.6.pool.telefonica.de)
15:55:06 mobivme joins (~mobivme@130.105.162.31)
15:55:06 × mobivme quits (~mobivme@130.105.162.31) (Changing host)
15:55:06 mobivme joins (~mobivme@user/mobivme)
15:56:46 × xff0x quits (~xff0x@2405:6580:b080:900:e061:c51:d1f0:45a8) (Ping timeout: 268 seconds)
15:56:49 × mmhat quits (~mmh@p200300f1c7039776ee086bfffe095315.dip0.t-ipconnect.de) (Ping timeout: 264 seconds)
15:58:18 xff0x joins (~xff0x@ai099196.d.east.v6connect.net)
15:59:18 tromp joins (~textual@92.110.219.57)
16:02:22 × mobivme quits (~mobivme@user/mobivme) (Remote host closed the connection)
16:04:16 tri joins (~tri@ool-18bbef1a.static.optonline.net)
16:08:59 × tri quits (~tri@ool-18bbef1a.static.optonline.net) (Ping timeout: 272 seconds)
16:10:58 Wstfgl0 joins (~me-me@2602:ff16:3:0:1:dc:beef:d00d)
16:11:06 × Me-me quits (~me-me@user/me-me) (Read error: Connection reset by peer)
16:12:21 mmhat joins (~mmh@p200300f1c7060369ee086bfffe095315.dip0.t-ipconnect.de)
16:14:29 Unicorn_Princess joins (~Unicorn_P@user/Unicorn-Princess/x-3540542)
16:15:22 Achylles joins (~Achylles_@45.182.57.94)
16:17:50 mobivme joins (~mobivme@130.105.162.31)
16:20:37 × pruiz` quits (~user@213.4.200.211) (Remote host closed the connection)
16:21:47 econo_ joins (uid147250@2a03:5180:f::2:3f32)
16:25:44 pruiz` joins (~user@213.4.200.211)
16:29:06 × mobivme quits (~mobivme@130.105.162.31) (Quit: ZNC 1.8.2+deb2build5 - https://znc.in)
16:30:55 × euleritian quits (~euleritia@dynamic-176-006-188-106.176.6.pool.telefonica.de) (Ping timeout: 260 seconds)
16:30:59 × pruiz` quits (~user@213.4.200.211) (Ping timeout: 268 seconds)
16:31:23 euleritian joins (~euleritia@dynamic-176-006-188-106.176.6.pool.telefonica.de)
16:32:08 mobivme joins (~mobivme@130.105.162.31)
16:32:23 tri joins (~tri@ool-18bbef1a.static.optonline.net)
16:36:53 × mobivme quits (~mobivme@130.105.162.31) (Ping timeout: 256 seconds)
16:39:34 × dibblego quits (~dibblego@haskell/developer/dibblego) (Ping timeout: 264 seconds)
16:41:48 mobivme joins (~mobivme@130.105.162.31)
16:45:01 × todi quits (~todi@p5dca5fa8.dip0.t-ipconnect.de) (Quit: ZNC - https://znc.in)
16:48:29 × mmhat quits (~mmh@p200300f1c7060369ee086bfffe095315.dip0.t-ipconnect.de) (Ping timeout: 240 seconds)
16:49:11 mmohammadi9812 joins (~mohammad@85.185.33.169)
16:51:02 × euleritian quits (~euleritia@dynamic-176-006-188-106.176.6.pool.telefonica.de) (Ping timeout: 268 seconds)
16:52:11 euleritian joins (~euleritia@dynamic-176-003-154-098.176.3.pool.telefonica.de)
16:54:35 × mmohammadi9812 quits (~mohammad@85.185.33.169) (Ping timeout: 264 seconds)
16:55:57 mmohammadi9812 joins (~mohammad@85.185.33.169)
16:56:22 stevenxl joins (uid133530@id-133530.uxbridge.irccloud.com)
16:58:27 × danse-nr3 quits (~danse@151.57.34.109) (Read error: Connection reset by peer)
16:59:29 danse-nr3 joins (~danse@151.57.36.65)
17:00:11 × mmohammadi9812 quits (~mohammad@85.185.33.169) (Ping timeout: 252 seconds)
17:01:19 mmohammadi9812 joins (~mohammad@85.185.33.169)
17:03:58 <kuribas> hololeap: DList basically makes a tree of thunks, which is then flattened using a depth first traversal.
17:04:10 Nulldata11 joins (~Nulldata@80.71.142.55)
17:04:15 × Nulldata11 quits (~Nulldata@80.71.142.55) (Client Quit)
17:04:26 Nulldatamap joins (~Nulldatam@80.71.142.55)
17:05:19 <kuribas> Of closures actually, because they are lambdas, and lazyness doesn't matter here.
17:06:02 × azimut quits (~azimut@gateway/tor-sasl/azimut) (Ping timeout: 255 seconds)
17:06:56 × califax quits (~califax@user/califx) (Ping timeout: 255 seconds)
17:07:43 × mmohammadi9812 quits (~mohammad@85.185.33.169) (Ping timeout: 276 seconds)
17:07:52 mmhat joins (~mmh@p200300f1c706b969ee086bfffe095315.dip0.t-ipconnect.de)
17:08:46 califax joins (~califax@user/califx)
17:08:54 mmohammadi9812 joins (~mohammad@85.185.33.169)
17:10:10 × mreh quits (~matthew@host86-160-168-73.range86-160.btcentralplus.com) (Ping timeout: 264 seconds)
17:10:22 dibblego joins (~dibblego@122-199-1-93.ip4.superloop.au)
17:10:22 × dibblego quits (~dibblego@122-199-1-93.ip4.superloop.au) (Changing host)
17:10:22 dibblego joins (~dibblego@haskell/developer/dibblego)
17:12:19 × rvalue quits (~rvalue@user/rvalue) (Ping timeout: 272 seconds)
17:13:07 mobounce joins (~mobivme@104.28.226.106)
17:13:34 rvalue joins (~rvalue@user/rvalue)
17:14:22 × califax quits (~califax@user/califx) (Remote host closed the connection)
17:14:51 × mobivme quits (~mobivme@130.105.162.31) (Ping timeout: 272 seconds)
17:15:19 califax joins (~califax@user/califx)
17:16:40 × a51 quits (a51@gateway/vpn/protonvpn/a51) (Quit: WeeChat 4.2.1)
17:17:23 × euleritian quits (~euleritia@dynamic-176-003-154-098.176.3.pool.telefonica.de) (Ping timeout: 272 seconds)
17:17:32 × fendor quits (~fendor@2a02:8388:1605:d100:267b:1353:13d7:4f0c) (Remote host closed the connection)
17:18:40 euleritian joins (~euleritia@dynamic-176-003-138-172.176.3.pool.telefonica.de)
17:20:42 × euleritian quits (~euleritia@dynamic-176-003-138-172.176.3.pool.telefonica.de) (Read error: Connection reset by peer)
17:20:59 euleritian joins (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de)
17:22:16 × thaumavorio quits (~thaumavor@thaumavor.io) (Quit: ZNC 1.8.2 - https://znc.in)
17:23:07 thaumavorio joins (~thaumavor@thaumavor.io)
17:23:58 × Hooloovoo quits (~Hooloovoo@hax0rbana.org) (Ping timeout: 256 seconds)
17:25:34 × mobounce quits (~mobivme@104.28.226.106) (Changing host)
17:25:34 mobounce joins (~mobivme@user/mobivme)
17:25:37 × euleritian quits (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) (Ping timeout: 264 seconds)
17:25:57 euleritian joins (~euleritia@dynamic-176-003-138-172.176.3.pool.telefonica.de)
17:26:28 Hooloovoo joins (~Hooloovoo@hax0rbana.org)
17:29:28 × kuribas quits (~user@ip-188-118-57-242.reverse.destiny.be) (Remote host closed the connection)
17:30:32 × mmohammadi9812 quits (~mohammad@85.185.33.169) (Remote host closed the connection)
17:32:06 × igemnace quits (~ian@user/igemnace) (Quit: WeeChat 4.2.1)
17:32:49 × euleritian quits (~euleritia@dynamic-176-003-138-172.176.3.pool.telefonica.de) (Ping timeout: 264 seconds)
17:33:28 euleritian joins (~euleritia@dynamic-176-003-153-193.176.3.pool.telefonica.de)
17:33:52 <Nulldatamap> Hello, I've got a question about generic functions (`Data.Data`/`Data.Generics`/`syb`):
17:33:53 <Nulldatamap> I'm trying to express a generic transformation over a parametric type like this:
17:33:53 <Nulldatamap> ```
17:33:54 <Nulldatamap> data Wrapped a = Wrapped Int a
17:33:54 <Nulldatamap> -- type GenericT = forall a. Data a => a -> a
17:33:55 <Nulldatamap> -- everywhere ::
17:33:55 <Nulldatamap> -- extT :: (Typeable a, Typeable b) => (a -> a) -> (b -> b) -> a -> a
17:33:56 <Nulldatamap> incWrappedEverywhere :: GenericT -> GenericT
17:33:56 <Nulldatamap> incWrappedEverywhere f = everywhere $ f `extT` incWrapped
17:33:57 <Nulldatamap>   where
17:33:57 <Nulldatamap>     incWrapped :: forall a. Data a => Wrapped a -> Wrapped a
17:33:58 <Nulldatamap>     incWrapped (Wrapped i x) = (Wrapped (i + 1) x)
17:33:58 <Nulldatamap> ```
17:33:59 <Nulldatamap> But this fails with:
17:33:59 <Nulldatamap> ``
17:34:00 <Nulldatamap>  Could not deduce (Data a0) arising from a use of `incWrapped'
17:34:00 <Nulldatamap>       from the context: Data a
17:34:01 <Nulldatamap> ```
17:34:10 <danse-nr3> are you crazy?
17:34:22 <danse-nr3> use a pastebin for goddess' sake
17:34:36 danse-nr3 calms down
17:34:39 <danse-nr3> err ... sorry
17:34:53 <Nulldatamap> My bad, I thought the snippet was small enough
17:35:14 <geekosaur> IRC's a very old protocol, you probably don't want to go over 3 lines
17:35:23 <danse-nr3> my bad as well ... have audio notifications on for this channel ...
17:37:39 × mei quits (~mei@user/mei) (Ping timeout: 272 seconds)
17:37:52 <Nulldatamap> Here's the pastebin link for the sake of syntax highlighting if nothing else then: https://paste.tomsmeding.com/XRAL7oFs
17:40:09 × mmhat quits (~mmh@p200300f1c706b969ee086bfffe095315.dip0.t-ipconnect.de) (Ping timeout: 260 seconds)
17:40:23 × euleritian quits (~euleritia@dynamic-176-003-153-193.176.3.pool.telefonica.de) (Read error: Connection reset by peer)
17:40:36 × mobounce quits (~mobivme@user/mobivme) (Remote host closed the connection)
17:40:40 euleritian joins (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de)
17:41:11 tzh joins (~tzh@c-71-193-181-0.hsd1.or.comcast.net)
17:45:01 × euleritian quits (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) (Ping timeout: 256 seconds)
17:45:54 euleritian joins (~euleritia@dynamic-176-003-153-193.176.3.pool.telefonica.de)
17:46:23 × rvalue quits (~rvalue@user/rvalue) (Ping timeout: 252 seconds)
17:52:21 × tromp quits (~textual@92.110.219.57) (Quit: My iMac has gone to sleep. ZZZzzz…)
17:53:37 mmhat joins (~mmh@p200300f1c707a64cee086bfffe095315.dip0.t-ipconnect.de)
17:55:22 rvalue joins (~rvalue@user/rvalue)
17:56:26 mobivme joins (~mobivme@130.105.162.31)
17:57:56 × Square3 quits (~Square4@user/square) (Ping timeout: 252 seconds)
18:01:14 × anpad quits (~pandeyan@user/anpad) (Quit: ZNC 1.8.2 - https://znc.in)
18:02:11 × sord937 quits (~sord937@gateway/tor-sasl/sord937) (Quit: sord937)
18:04:07 anpad joins (~pandeyan@user/anpad)
18:05:21 × danse-nr3 quits (~danse@151.57.36.65) (Ping timeout: 260 seconds)
18:07:56 × athan quits (~athan@173-042-095-241.biz.spectrum.com) (Quit: Konversation terminated!)
18:08:13 × dibblego quits (~dibblego@haskell/developer/dibblego) (Ping timeout: 264 seconds)
18:08:54 × euleritian quits (~euleritia@dynamic-176-003-153-193.176.3.pool.telefonica.de) (Read error: Connection reset by peer)
18:09:11 euleritian joins (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de)
18:10:39 × mobivme quits (~mobivme@130.105.162.31) (Quit: ZNC 1.8.2+deb2build5 - https://znc.in)
18:10:57 × xdminsy quits (~xdminsy@117.147.71.221) (Ping timeout: 256 seconds)
18:12:56 mei joins (~mei@user/mei)
18:13:10 mobivme joins (~mobivme@130.105.162.31)
18:15:55 × PHO`_ quits (~pho@akari.cielonegro.org) (Ping timeout: 260 seconds)
18:16:15 dibblego joins (~dibblego@122-199-1-93.ip4.superloop.au)
18:16:15 × dibblego quits (~dibblego@122-199-1-93.ip4.superloop.au) (Changing host)
18:16:15 dibblego joins (~dibblego@haskell/developer/dibblego)
18:16:34 PHO`_ joins (~pho@2406:da14:856:600:e03a:2c8f:39c:7838)
18:23:05 tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
18:23:55 lambdaman joins (~textual@d172-218-204-71.bchsia.telus.net)
18:33:35 mc47 joins (~mc47@xmonad/TheMC47)
18:34:31 × mobivme quits (~mobivme@130.105.162.31) (Quit: ZNC 1.8.2+deb2build5 - https://znc.in)
18:35:16 Nulldatamap95 joins (~Nulldatam@80.71.142.55)
18:35:44 × Nulldatamap95 quits (~Nulldatam@80.71.142.55) (Client Quit)
18:36:33 mobivme joins (~mobivme@130.105.162.31)
18:38:23 × dibblego quits (~dibblego@haskell/developer/dibblego) (Ping timeout: 264 seconds)
18:38:35 × alexherbo2 quits (~alexherbo@2a02-8440-3440-5654-4484-4a93-9fff-6f85.rev.sfr.net) (Remote host closed the connection)
18:38:55 alexherbo2 joins (~alexherbo@2a02-8440-3440-5654-4484-4a93-9fff-6f85.rev.sfr.net)
18:40:54 Square joins (~Square@user/square)
18:42:59 × mobivme quits (~mobivme@130.105.162.31) (Ping timeout: 260 seconds)
18:44:19 × lambdaman quits (~textual@d172-218-204-71.bchsia.telus.net) (Quit: My Mac has gone to sleep. ZZZzzz…)
18:46:28 mobivme joins (~mobivme@130.105.162.31)
18:47:17 × gmg quits (~user@user/gehmehgeh) (Ping timeout: 255 seconds)
18:47:37 × Nulldatamap quits (~Nulldatam@80.71.142.55) (Quit: Client closed)
18:49:27 pavonia joins (~user@user/siracusa)
18:49:29 gmg joins (~user@user/gehmehgeh)
18:49:53 lambdaman joins (~textual@172.218.204.71)
18:51:50 × lambdaman quits (~textual@172.218.204.71) (Client Quit)
18:58:04 lambdaman joins (~textual@d172-218-204-71.bchsia.telus.net)
18:59:05 mreh joins (~matthew@host86-160-168-73.range86-160.btcentralplus.com)
18:59:32 athan joins (~athan@173-042-095-241.biz.spectrum.com)
18:59:34 × mobivme quits (~mobivme@130.105.162.31) (Changing host)
18:59:34 mobivme joins (~mobivme@user/mobivme)
19:00:23 × lambdaman quits (~textual@d172-218-204-71.bchsia.telus.net) (Client Quit)
19:02:29 × L29Ah quits (~L29Ah@wikipedia/L29Ah) (Read error: Connection reset by peer)
19:08:01 Raspbelly joins (~Raspbelly@host-213-235-142-6.ip.topnet.cz)
19:09:09 × tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Read error: Connection reset by peer)
19:16:46 waleee joins (~waleee@h-176-10-144-38.NA.cust.bahnhof.se)
19:18:11 wootehfoot joins (~wootehfoo@user/wootehfoot)
19:20:53 × destituion quits (~destituio@85.221.111.174) (Ping timeout: 268 seconds)
19:25:30 × mima quits (~mmh@138.246.3.248) (Ping timeout: 268 seconds)
19:31:57 × mei quits (~mei@user/mei) (Quit: mei)
19:34:49 mobounce joins (~mobivme@104.28.226.106)
19:36:26 × tri quits (~tri@ool-18bbef1a.static.optonline.net) (Remote host closed the connection)
19:37:16 destituion joins (~destituio@2a02:2121:626:f551:c95:8f81:98cb:9432)
19:37:52 × mobivme quits (~mobivme@user/mobivme) (Ping timeout: 276 seconds)
19:38:00 × chele quits (~chele@user/chele) (Remote host closed the connection)
19:43:37 × califax quits (~califax@user/califx) (Remote host closed the connection)
19:45:26 califax joins (~califax@user/califx)
19:51:07 mei joins (~mei@user/mei)
19:54:16 × califax quits (~califax@user/califx) (Remote host closed the connection)
19:54:20 califax_ joins (~califax@user/califx)
19:54:28 × __monty__ quits (~toonn@user/toonn) (Quit: leaving)
19:55:23 Wstfgl0 is now known as Me-me
19:55:25 califax_ is now known as califax
19:55:27 × Me-me quits (~me-me@2602:ff16:3:0:1:dc:beef:d00d) (Changing host)
19:55:27 Me-me joins (~me-me@user/me-me)
19:57:19 × mobounce quits (~mobivme@104.28.226.106) (Changing host)
19:57:20 mobounce joins (~mobivme@user/mobivme)
20:00:38 <tomsmeding> it's quite annoying that when using -XLinearTypes, if you have code that doesn't typecheck for mundane reasons, you more often than not get a multiplicity error and _nothing else_
20:00:38 × euleritian quits (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) (Read error: Connection reset by peer)
20:00:49 <tomsmeding> like, I get it, forgetting an argument to a function makes the linearity fail
20:00:59 euleritian joins (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de)
20:01:03 × JordiGH quits (~jordi@user/jordigh) (Remote host closed the connection)
20:01:20 <tomsmeding> but especially given that the multiplicity error is "cannot match Many with One on this thing all the way at the top of my function", which is utterly useless
20:01:22 JordiGH joins (~jordi@user/jordigh)
20:01:38 <tomsmeding> I cannot help but wish that GHC would check the mundane typing first, and linearity after :p
20:01:43 <dminuoso_> tomsmeding: Fits right into the mindset of the Haskell developer. We gave up on good type errors when we wanted a generalized good type inference long time ago.
20:01:54 <tomsmeding> or, even better, don't stop looking when you get a multiplicity error, and continue typechecking!
20:02:10 L29Ah joins (~L29Ah@wikipedia/L29Ah)
20:02:25 × mmhat quits (~mmh@p200300f1c707a64cee086bfffe095315.dip0.t-ipconnect.de) (Quit: WeeChat 4.2.1)
20:02:39 <dminuoso_> Haskell developers will just cope with the horrible type errors that require you to know how GHC implements type checking in your head to figure out what any given type erorr means.
20:02:41 <tomsmeding> similar to how it's annoying that GHC completely throws its hands in the air when a parse error is raised -- this taught me to always add "in _" when I'm writing a let block
20:03:02 <dminuoso_> Cannot match `a0` with `a0`
20:03:04 <dminuoso_> Comes to mind.
20:03:13 <dminuoso_> "You had one job!"
20:03:17 <tomsmeding> I haven't had that one in quite a while, fortunately! :D
20:03:46 <EvanR> at least non-checking code doesn't make it through
20:04:05 <dminuoso_> See, thats what we keep telling ourselves why we accept that garbage.
20:04:16 <EvanR> which is the apparent objective of many languages these days that weren't originally designed to be type safe but are doing lip service to type safety after the fact
20:04:17 <tomsmeding> surely there are people trying to make ghc able to barrel through when an earlier pass raised an error, right?
20:04:24 <tomsmeding> this situation is painfully obvious with HLS
20:04:46 <dminuoso_> tomsmeding: Im not aware of any attempts of building type error slicing into GHC.
20:04:58 tomsmeding . o O ( "slicing?" )
20:05:03 <dminuoso_> Which is what you would need to get enough context to figure out virtually any `cannot match...` type error.
20:05:08 <tomsmeding> ah
20:05:33 <tomsmeding> I would already be happy enough if GHC could continue with type checking even in the presence of a parse error in a completely unrelated part of the file!
20:05:47 <dolio> Doesn't seem like the linearity thing requires anything as extensive as type error slicing.
20:05:52 <tomsmeding> I'm fine with GHC giving up on that subexpression or something and replacing it with "undefined" for the duration of type checking
20:06:03 <tomsmeding> and similarly for linearity checking
20:06:05 <tomsmeding> yeah
20:06:35 <tomsmeding> well I'm not sure how hard it would be to make the multiplicity errors themselves less atrocious
20:06:44 <tomsmeding> so I'm not asking for that
20:06:59 <tomsmeding> just make it less obvious that these are separate passes in an error monad :p
20:07:11 <dminuoso_> dolio: Sorry, I wasnt trying to give an impression a type error slicer would help with linearity.
20:07:23 <dolio> I know.
20:07:29 peterbecich joins (~Thunderbi@047-229-123-186.res.spectrum.com)
20:08:35 <tomsmeding> my office in Utrecht has a small library (2-3 shelves) of a variety of PL-related books that past occupants have accumulated
20:09:00 <tomsmeding> one of those is "Top Quality Type Error Messages", the PhD thesis of someone who studied in Utrecht
20:09:30 <tomsmeding> perhaps the thing should be propaganda'd a bit more
20:09:42 <dolio> You probably don't need slicing to do better than GHC for normal type errors, either.
20:09:49 lambdaman joins (~textual@207.102.20.146)
20:09:57 <tomsmeding> probably not, but it's probably a lot of engineering work
20:10:01 <dolio> Yeah.
20:10:25 × bliminse quits (~bliminse@user/bliminse) (Quit: leaving)
20:12:28 bliminse joins (~bliminse@user/bliminse)
20:12:45 × lambdaman quits (~textual@207.102.20.146) (Read error: Connection reset by peer)
20:14:42 <monochrom> I use -fdefer-type-errors at early stages. That should be pretty close to "replace by undefined".
20:14:44 tomsmeding . o O ( parse >=> linearityCheck >=> typeCheck >=> (inferTypeClasses | unusedNamesCheck) )
20:15:01 <mauke> no, we'd need -fdefer-parse-errors
20:15:03 × waleee quits (~waleee@h-176-10-144-38.NA.cust.bahnhof.se) (Quit: updating system)
20:15:11 <monochrom> Oh, hahaha, yeah.
20:15:43 <tomsmeding> apparently a multiplicity mismatch is not a deferrable type error!
20:15:52 <monochrom> :(
20:15:55 <tomsmeding> so we need -fdefer-parse-errors _and_ -fdefer-multiplicity-errors!
20:16:06 <tomsmeding> owait
20:16:09 <tomsmeding> it's HLS!
20:16:10 <mauke> which I think is provided by some INTERCAL implemnetation (just-too-late compilation?)
20:16:13 <dolio> I wonder if that's not surprising, actually.
20:16:19 × peterbecich quits (~Thunderbi@047-229-123-186.res.spectrum.com) (Ping timeout: 256 seconds)
20:16:22 <monochrom> I don't use HLS. Good riddance. :)
20:16:23 <EvanR> defer all errors until after the program runs successfully
20:16:28 <tomsmeding> GHC gives multiplicity errors and type errors all together, it's HLS that just shows the multiplicity error and nothing else
20:16:30 dibblego joins (~dibblego@122.199.1.93)
20:16:30 × dibblego quits (~dibblego@122.199.1.93) (Changing host)
20:16:30 dibblego joins (~dibblego@haskell/developer/dibblego)
20:16:30 <EvanR> accomplishing the actual mission
20:16:34 <EvanR> then error all you want
20:16:45 waleee joins (~waleee@h-176-10-144-38.NA.cust.bahnhof.se)
20:16:52 <dolio> Like, can inserting `error` into code violate multiplicity requirements?
20:16:58 <monochrom> @quote monochrom hugs
20:16:59 <lambdabot> No quotes match. Maybe if you used more than just two fingers...
20:17:03 <monochrom> :(
20:17:14 <tomsmeding> lambdabot's reprimands are funny sometimes
20:17:20 <tomsmeding> would this be worth an HLS bug report
20:17:21 <monochrom> I had a saying "hugs turns compile-time errors to run-time errors" >:)
20:17:33 <tomsmeding> hugs is kinder to the programmer
20:17:43 <dolio> Because you're throwing away a value.
20:17:49 <tomsmeding> it's in the name
20:17:52 <monochrom> :)
20:18:19 <tomsmeding> dolio: my intuition says that you should be able to strategically insert 'error', yes
20:18:38 × waleee quits (~waleee@h-176-10-144-38.NA.cust.bahnhof.se) (Client Quit)
20:18:46 <dolio> Hmm.
20:18:51 <tomsmeding> but that's intuition
20:18:56 waleee joins (~waleee@h-176-10-144-38.NA.cust.bahnhof.se)
20:19:28 <monochrom> Perhaps insert one of "error (show x)", "error (show x ++ show x)", "error (show x ++ show x ++ show x)" etc to match multiplicity >:)
20:19:49 <tomsmeding> oh
20:20:09 <tomsmeding> hm, you can break linearity guarantees with asynchronous exceptions anyway
20:20:13 <dolio> I was worried more that all of those are technically 0 uses of `x` or something.
20:20:18 <tomsmeding> so does error have anything to uphold? >:D
20:21:08 <tomsmeding> adding x'es in the argument to 'error' won't fix the multiplicities anyway, because some of those x'es should be returned from the error as well
20:21:22 <tomsmeding> but the point would be that fuck that, we're crashing anyway
20:21:27 <monochrom> Yeah I was just joking. :)
20:21:45 <tomsmeding> proof obligation would be that the error is indeed evaluated whenever you would run code that could depend on the linear computation completing
20:21:50 <tomsmeding> or something
20:21:53 tomsmeding waves hands
20:22:22 <dolio> Also, I seem to recall the asynchronous thing is a flawed argument.
20:23:22 <dolio> The checker is supposed to ensure that actually running the code results in linear behavior. Not that the behavior is ensured by interrupting it at an arbitrary point.
20:24:50 <tomsmeding> you're probably right, but can't I have a linear File or something that I can open and do something with, but then before closing I crash with an asynchronous exception
20:25:02 <tomsmeding> which I catch in IO, after which I happily continue, but now I've leaked a file descriptor
20:25:12 <tomsmeding> which was against the contract of the linearity
20:25:20 <dolio> Yes.
20:25:39 × mobounce quits (~mobivme@user/mobivme) (Ping timeout: 260 seconds)
20:27:39 <dolio> That doesn't mean that code that throws away values counts as linear, though.
20:28:39 <dolio> It means that for linear code to ensure what you want, you can't interrupt it in the middle, or something.
20:28:47 × dibblego quits (~dibblego@haskell/developer/dibblego) (Ping timeout: 264 seconds)
20:29:09 mima joins (~mmh@aftr-62-216-211-118.dynamic.mnet-online.de)
20:30:06 × wootehfoot quits (~wootehfoo@user/wootehfoot) (Read error: Connection reset by peer)
20:30:59 <tomsmeding> right
20:31:13 <tomsmeding> I guess you can always kill the process from outside :p
20:31:28 <tomsmeding> makes your error idea even more likely to work
20:31:47 <tomsmeding> "work" meaning "doesn't introduce new breakage of linearity invariants"
20:36:44 <dolio> The async thing leads me to believe you can't just insert `error` for ill-formed subexpressions, though. At least, it'd have to have some particular linear type.
20:37:23 <tomsmeding> to make the linearity checker happy, you mean?
20:37:28 <dolio> Like, whichever type has the rule that lets you deduce `Γ ⊢ t : T` from no premises.
20:37:36 <dolio> Yeah.
20:38:02 <dolio> Whichever 'unit' lets you eat as many premises as you want.
20:38:04 <tomsmeding> wasn't the idea that we were implementing -fdefer-multiplicity-errors and hence we already gave up making the checker happy, we're just inserting errors wherever the checks failed?
20:39:48 <dolio> I don't know. That isn't how -fdefer-type-errors works, is it? The latter is based on the premise that you can automatically improve ill-typed code to well-typed code by inserting ⊥ in places, right?
20:40:04 <tomsmeding> hm, I guess
20:40:27 <tomsmeding> that fundamentally isn't going to fly for linearity errors
20:40:44 slackwear joins (~slackwear@137.220.66.70)
20:41:05 <tomsmeding> the question is, then, if we can at least make the computation raise an error whenever it would have relied on linearity of the incorrect code
20:41:18 × alexherbo2 quits (~alexherbo@2a02-8440-3440-5654-4484-4a93-9fff-6f85.rev.sfr.net) (Remote host closed the connection)
20:41:31 × mc47 quits (~mc47@xmonad/TheMC47) (Remote host closed the connection)
20:41:38 alexherbo2 joins (~alexherbo@2a02-8440-3440-5654-4484-4a93-9fff-6f85.rev.sfr.net)
20:54:03 × forell quits (~forell@user/forell) (Quit: ZNC - https://znc.in)
20:54:34 × mreh quits (~matthew@host86-160-168-73.range86-160.btcentralplus.com) (Ping timeout: 264 seconds)
20:54:57 forell joins (~forell@user/forell)
20:56:07 Square3 joins (~Square4@user/square)
20:56:38 manwithluck joins (manwithluc@gateway/vpn/protonvpn/manwithluck)
20:57:09 × michalz quits (~michalz@185.246.207.217) (Ping timeout: 272 seconds)
20:57:51 × Square quits (~Square@user/square) (Ping timeout: 260 seconds)
20:58:59 michalz joins (~michalz@185.246.207.193)
21:03:37 × JordiGH quits (~jordi@user/jordigh) (Ping timeout: 260 seconds)
21:05:47 × fansly quits (~fansly@2001:448a:2010:476e:5df1:ad02:fa1f:3df1) (Remote host closed the connection)
21:07:32 × _ht quits (~Thunderbi@28-52-174-82.ftth.glasoperator.nl) (Remote host closed the connection)
21:08:47 × alexherbo2 quits (~alexherbo@2a02-8440-3440-5654-4484-4a93-9fff-6f85.rev.sfr.net) (Remote host closed the connection)
21:09:07 alexherbo2 joins (~alexherbo@2a02-8440-3440-5654-4484-4a93-9fff-6f85.rev.sfr.net)
21:11:09 × mechap quits (~mechap@user/mechap) (Ping timeout: 256 seconds)
21:11:12 <ski> tomsmeding : "Skalpel: A Type Error Slicer for SML" (also see <https://web.archive.org/web/20220617202754/http://www.macs.hw.ac.uk/ultra/skalpel/>,<https://github.com/ultra-group/skalpel>) by Vincent Rahli,Joe Wells,John Pirie,Fairouz Kamareddine in 2014 at <https://www.macs.hw.ac.uk/~fairouz/forest/papers/conference-publications/lsfa14.pdf>
21:11:54 mreh joins (~matthew@host86-160-168-73.range86-160.btcentralplus.com)
21:12:06 × manwithluck quits (manwithluc@gateway/vpn/protonvpn/manwithluck) (Quit: THE END)
21:12:23 <ski> tomsmeding : type error slicing finds all and only the locations that contribute to a type error (rather than just the one where the error was noticed). at least one of these locations must be changed (and perhaps then others, in chain-reaction) in order to resolve the issue
21:12:26 manwithluck joins (manwithluc@gateway/vpn/protonvpn/manwithluck)
21:13:04 <ski> dolio : the additive conjunction unit
21:13:10 mechap joins (~mechap@user/mechap)
21:13:21 <ski> (aka `erase', in Lolli)
21:13:58 <tomsmeding> ski: right -- I've seen the term before, I wasn't quite sure about the details any more
21:14:37 <tomsmeding> but as I was trying to say, GHC need not do any type error slicing and there would still be a lot to improve :p
21:14:49 × Raspbelly quits (~Raspbelly@host-213-235-142-6.ip.topnet.cz) (Ping timeout: 264 seconds)
21:14:50 <tomsmeding> though apparently some of the blame lies with HLS here
21:16:00 <ski> do you know in which way ?
21:16:34 <dolio> ski: Is that ⊤?
21:17:17 <ski> @where+ skalpel "Skalpel: A Type Error Slicer for SML" by Vincent Rahli,Joe Wells,John Pirie,Fairouz Kamareddine in 2014 at <https://www.macs.hw.ac.uk/~fairouz/forest/papers/conference-publications/lsfa14.pdf>, also see <https://web.archive.org/web/20220617202754/http://www.macs.hw.ac.uk/ultra/skalpel/>,<https://github.com/ultra-group/skalpel>
21:17:18 <lambdabot> It is stored.
21:17:51 <ski> dolio : yes, that's the traditional (Girard) symbol for it
21:17:56 mobivme joins (~mobivme@104.28.226.106)
21:18:54 <dolio> Okay, and ⊤ is dual to 0?
21:18:54 <ski> (i, in personal notes, swap the symbols for additive and multiplicative conjunctive neutral element, though .. as well as changing some of the other symbols. also istr Blass or someone else using some other variant notation)
21:19:17 <ski> to additive disjunction neutral element, aka "void", yes
21:19:56 × moixa quits (~moixa@customer-178-16-208-85.stosn.net) (Quit: leaving)
21:20:15 <tomsmeding> ski: "do you know in which way" -- what blame lies with HLS, you mean?
21:20:23 <ski> yep
21:20:58 <tomsmeding> when GHC gives multiplicity errors as well as some other type errors, HLS only reports the multiplicity errors
21:21:09 fansly joins (~fansly@2001:448a:2010:476e:5df1:ad02:fa1f:3df1)
21:21:20 <tomsmeding> easy reproducer is `{-# LANGUAGE LinearTypes #-} foo :: Int %1-> Int ; foo _ = id`
21:21:31 <tomsmeding> 'ghc -c that.hs' gives 2 diagnostics, HLS gives only one
21:22:07 <tomsmeding> I reported that in #haskell-language-server about an hour ago, I'll see if someone bites
21:22:41 <ski> tomsmeding : "Top Quality Error Messages" by Bastiaan J. Heeren in 2005-09-20 at <https://dspace.library.uu.nl/handle/1874/7297> ?
21:22:47 <tomsmeding> yes :)
21:22:54 <tomsmeding> though there is a Type in there as well
21:23:03 <ski> ah, right
21:23:29 <tomsmeding> disclaimer, I haven't read the thing at all -- I just have a vague idea what's in there because I have an idea of what Jurriaan Hage was working on around that time with Helium
21:25:06 <ski> ah, i remember reading about Helium
21:25:15 × fansly quits (~fansly@2001:448a:2010:476e:5df1:ad02:fa1f:3df1) (Remote host closed the connection)
21:25:19 <ski> @where helium
21:25:19 <lambdabot> Haskell subset for beginners, improved diagnostics (incl. eDSLs). See <https://github.com/Helium4Haskell/helium>,<https://hackage.haskell.org/package/helium>,<https://web.archive.org/web/2016062422224
21:25:19 <lambdabot> 0/http://foswiki.cs.uu.nl/foswiki/Helium/WebHome>,<https://web.archive.org/web/20210907032911/http://www.cs.uu.nl/research/projects/helium/>,<https://www.open.ou.nl/bhr/HeliumCompiler.html>
21:25:42 <tomsmeding> uu clearly doesn't care about stable links :(
21:26:10 mud joins (~mud@user/kadoban)
21:32:13 dibblego joins (~dibblego@haskell/developer/dibblego)
21:33:05 Erutuon joins (~Erutuon@user/erutuon)
21:36:46 × Achylles quits (~Achylles_@45.182.57.94) (Remote host closed the connection)
21:37:09 fansly joins (~fansly@2001:448a:2010:476e:5df1:ad02:fa1f:3df1)
21:49:01 × fansly quits (~fansly@2001:448a:2010:476e:5df1:ad02:fa1f:3df1) (Ping timeout: 264 seconds)
21:49:29 × turlando quits (~turlando@user/turlando) (Remote host closed the connection)
21:50:43 turlando joins (~turlando@user/turlando)
21:52:25 × mreh quits (~matthew@host86-160-168-73.range86-160.btcentralplus.com) (Ping timeout: 276 seconds)
21:52:33 × manwithluck quits (manwithluc@gateway/vpn/protonvpn/manwithluck) (Read error: Connection reset by peer)
21:52:56 manwithluck joins (manwithluc@gateway/vpn/protonvpn/manwithluck)
21:53:43 fansly joins (~fansly@103.3.221.233)
22:00:12 × sp1ff quits (~user@24.21.45.157) (Remote host closed the connection)
22:01:29 rscastilho2024 joins (~rscastilh@189.61.140.215)
22:02:23 × rscastilho2024 quits (~rscastilh@189.61.140.215) (Remote host closed the connection)
22:03:56 kadobanana joins (~mud@user/kadoban)
22:04:17 × mud quits (~mud@user/kadoban) (Ping timeout: 272 seconds)
22:15:41 × takuan quits (~takuan@178-116-218-225.access.telenet.be) (Remote host closed the connection)
22:22:29 × mobivme quits (~mobivme@104.28.226.106) (Ping timeout: 252 seconds)
22:26:36 JordiGH joins (~jordi@user/jordigh)
22:26:42 × coot quits (~coot@89-69-206-216.dynamic.chello.pl) (Quit: coot)
22:28:36 mobivme joins (~mobivme@104.28.194.106)
22:38:31 [itchyjunk] joins (~itchyjunk@user/itchyjunk/x-7353470)
22:51:48 × mei quits (~mei@user/mei) (Remote host closed the connection)
22:51:52 azimut joins (~azimut@gateway/tor-sasl/azimut)
22:56:48 analognoise joins (~analognoi@ip98-176-154-48.sd.sd.cox.net)
22:57:14 × analognoise quits (~analognoi@ip98-176-154-48.sd.sd.cox.net) (Remote host closed the connection)
22:59:21 mei joins (~mei@user/mei)
23:00:25 × mobivme quits (~mobivme@104.28.194.106) (Ping timeout: 264 seconds)
23:01:33 peterbecich joins (~Thunderbi@047-229-123-186.res.spectrum.com)
23:04:40 × xff0x quits (~xff0x@ai099196.d.east.v6connect.net) (Ping timeout: 255 seconds)
23:05:02 × Square3 quits (~Square4@user/square) (Ping timeout: 268 seconds)
23:05:34 CrunchyFlakes_ joins (~CrunchyFl@ip92348280.dynamic.kabel-deutschland.de)
23:06:02 × CrunchyFlakes quits (~CrunchyFl@ip92348280.dynamic.kabel-deutschland.de) (Read error: Connection reset by peer)
23:06:45 xff0x joins (~xff0x@178.255.149.135)
23:07:37 × fansly quits (~fansly@103.3.221.233) (Ping timeout: 272 seconds)
23:09:12 fansly joins (~fansly@182.2.141.46)
23:10:41 tri joins (~tri@ool-18bbef1a.static.optonline.net)
23:12:24 × michalz quits (~michalz@185.246.207.193) (Quit: ZNC 1.8.2 - https://znc.in)
23:12:50 × ephemient quits (uid407513@id-407513.lymington.irccloud.com) (Quit: Connection closed for inactivity)
23:15:03 × tri quits (~tri@ool-18bbef1a.static.optonline.net) (Ping timeout: 260 seconds)
23:17:33 mobivme joins (~mobivme@130.105.162.31)
23:20:40 × mobivme quits (~mobivme@130.105.162.31) (Client Quit)
23:21:12 mobivme joins (~mobivme@130.105.162.31)
23:21:12 × mobivme quits (~mobivme@130.105.162.31) (Changing host)
23:21:12 mobivme joins (~mobivme@user/mobivme)
23:23:07 × xff0x quits (~xff0x@178.255.149.135) (Ping timeout: 255 seconds)
23:23:52 × fansly quits (~fansly@182.2.141.46) (Read error: Connection reset by peer)
23:25:02 xff0x joins (~xff0x@ai099196.d.east.v6connect.net)
23:25:56 fansly joins (~fansly@2001:448a:2010:476e:5df1:ad02:fa1f:3df1)
23:26:37 × peterbecich quits (~Thunderbi@047-229-123-186.res.spectrum.com) (Ping timeout: 272 seconds)
23:29:32 × gmg quits (~user@user/gehmehgeh) (Quit: Leaving)
23:30:25 × waleee quits (~waleee@h-176-10-144-38.NA.cust.bahnhof.se) (Ping timeout: 272 seconds)
23:31:38 mobounce joins (~mobivme@104.28.226.104)
23:32:11 waleee joins (~waleee@h-176-10-144-38.NA.cust.bahnhof.se)
23:34:13 × mobivme quits (~mobivme@user/mobivme) (Ping timeout: 272 seconds)
23:34:21 Sgeo joins (~Sgeo@user/sgeo)
23:35:10 <erisco> What is a good choice for a bounded IntSet that supports iteration? Bounded like (Finite n -> Bool) is bounded, but with efficient iteration
23:37:41 × mobounce quits (~mobivme@104.28.226.104) (Changing host)
23:37:41 mobounce joins (~mobivme@user/mobivme)
23:39:59 <probie> Do you have to iterate in order?
23:40:05 × mobounce quits (~mobivme@user/mobivme) (Quit: ZNC 1.8.2+deb2build5 - https://znc.in)
23:40:37 yoo joins (~yo0O0o@104.28.226.104)
23:40:37 × yoo quits (~yo0O0o@104.28.226.104) (Changing host)
23:40:37 yoo joins (~yo0O0o@user/mobivme)
23:45:13 × pretty_dumm_guy quits (trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655) (Quit: WeeChat 3.5)
23:52:35 × acidjnk_new quits (~acidjnk@p200300d6e737e7149c5f494a93cffe4b.dip0.t-ipconnect.de) (Ping timeout: 272 seconds)
23:56:20 <EvanR> array of size n where the elements are packed bits, or Word8 that is zero or one?
23:56:36 <EvanR> ok, that's efficient membership, not iteration, I guess

All times are in UTC on 2024-02-07.