Home liberachat/#haskell: Logs Calendar

Logs on 2022-12-28 (liberachat/#haskell)

00:04:38 × freeside quits (~mengwong@103.252.202.159) (Ping timeout: 246 seconds)
00:04:43 × eggplantade quits (~Eggplanta@2600:1700:38c5:d800:3964:1012:a01c:6912) (Ping timeout: 260 seconds)
00:04:49 Natch joins (~natch@c-9e07225c.038-60-73746f7.bbcust.telenor.se)
00:05:39 freeside joins (~mengwong@103.252.202.159)
00:06:02 × money_ quits (~money@2601:40:c580:8530:b457:2fe4:d16f:fb83) (Quit: late)
00:07:00 money_ joins (~money@2601:40:c580:8530:b457:2fe4:d16f:fb83)
00:10:05 × notzmv quits (~zmv@user/notzmv) (Ping timeout: 260 seconds)
00:10:12 wroathe joins (~wroathe@207-153-38-140.fttp.usinternet.com)
00:10:12 × wroathe quits (~wroathe@207-153-38-140.fttp.usinternet.com) (Changing host)
00:10:12 wroathe joins (~wroathe@user/wroathe)
00:10:28 × freeside quits (~mengwong@103.252.202.159) (Ping timeout: 268 seconds)
00:13:14 v0id_ptr joins (~adrift@user/ptr-frac7al/x-0038398)
00:22:08 × sammelweis quits (~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10) (Quit: No Ping reply in 180 seconds.)
00:23:15 sammelweis joins (~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10)
00:23:35 freeside joins (~mengwong@103.252.202.159)
00:24:11 × TonyStone quits (~TonyStone@cpe-74-76-57-186.nycap.res.rr.com) (Quit: Leaving)
00:24:50 × money_ quits (~money@2601:40:c580:8530:b457:2fe4:d16f:fb83) (Remote host closed the connection)
00:26:18 × Tuplanolla quits (~Tuplanoll@91-159-68-152.elisa-laajakaista.fi) (Quit: Leaving.)
00:28:02 money_ joins (~money@2601:40:c580:8530:b457:2fe4:d16f:fb83)
00:35:14 × money_ quits (~money@2601:40:c580:8530:b457:2fe4:d16f:fb83) (Remote host closed the connection)
00:35:26 × [itchyjunk] quits (~itchyjunk@user/itchyjunk/x-7353470) (Ping timeout: 246 seconds)
00:42:50 [itchyjunk] joins (~itchyjunk@user/itchyjunk/x-7353470)
00:47:22 × CiaoSen quits (~Jura@p200300c95719fa002a3a4dfffe84dbd5.dip0.t-ipconnect.de) (Ping timeout: 265 seconds)
00:50:56 jmorris joins (uid537181@id-537181.uxbridge.irccloud.com)
00:51:02 <jle``> i can't seem to get my day 16 to take less than 45 minutes lol
00:51:32 <jle``> oops wrong channel
00:53:08 × fizbin quits (~fizbin@user/fizbin) (Ping timeout: 260 seconds)
00:53:14 <mauke[m]> part 1 or part 2?
00:53:49 <mauke[m]> I couldn't figure out part 2, so I brute forced it. takes about 34 seconds on my laptop. part 1 was only about 0.3 seconds, though
00:54:38 <jle``> part 2 :) i used the same algorith for both parts, just polymorphic over the position container (Identity vs. data V2 a = V2 a a)
00:55:17 <mauke[m]> ... position container?
00:55:49 × Guest323 quits (~finn@roc37-h01-176-170-197-243.dsl.sta.abo.bbox.fr) (Ping timeout: 252 seconds)
00:56:36 gurkenglas joins (~gurkengla@p548ac72e.dip0.t-ipconnect.de)
00:56:46 <jle``> well my search state is Position and set of pipes open
00:57:09 <jle``> but i parameterized over a functor, SearchState f = S (f Point) (Set Pipe)
00:57:13 <jle``> so for part 1 f is Identity
00:57:17 <jle``> and part 2 it's a 2-vector
00:57:31 <mauke[m]> oh, that sounds fancy
00:57:42 <jle``> it was more out of laziness :)
00:57:56 <jle``> the human kind, not the haskell kind
00:58:24 <jle``> so i could re-use the same algorithm for part 2 with minimal change
00:58:25 <mauke[m]> I have: process :: (Int -> Int -> Int) -> (Int -> Int) -> Int -> Int -> [Int] -> Int
00:58:30 <jle``> but it leads to .. very long search time
00:59:21 <mauke[m]> couldn't reuse the algorithm because it assumes you always move to an unopened valve at each step
00:59:33 bjourne joins (~bjorn@94.191.136.87.mobile.tre.se)
00:59:44 <jle``> oh, i thought that assumption wasn't valid in the part 1, either?
00:59:51 <mauke[m]> but for part2 that doesn't necessarily produce the optimal solution because it might be better for one player to sit still
01:00:23 <jle``> for part 1 i originally programmed in "don't move to an opened valve" and that was the main reason i didn't solve it that night
01:00:56 <mauke[m]> I can't even represent a move to an opened valve
01:01:06 <mauke[m]> my fundamental operation is "move to valve and open"
01:01:17 <jle``> D:
01:02:21 × johnjaye quits (~pi@173.209.64.74) (Ping timeout: 265 seconds)
01:02:51 johnjaye joins (~pi@173.209.64.74)
01:03:37 <glguy> I use my part 1 to build part 2
01:04:12 <mauke[m]> so did I, but in a dumb way
01:04:23 <glguy> And the thing runs in about 128ms
01:04:59 × ft quits (~ft@i59F541CC.versanet.de) (Ping timeout: 264 seconds)
01:05:23 <mauke[m]> for part 2, I partition the set of valves into two subsets in all possible ways, then solve them separately
01:05:52 <glguy> I pre-solve all the ways
01:06:12 <jle``> mauke[m]: ooh
01:06:29 <jle``> and then you compare the best?
01:07:17 <mauke[m]> maximum $ map (\(vs1, vs2) -> processPart vs1 + processPart vs2) valveDist
01:07:26 <mauke[m]> hey, where's my backslashes
01:07:46 <jle``> at this point i'm surprised my solution was even viable now
01:07:51 <mauke[m]> `maximum $ map (\(vs1, vs2) -> processPart vs1 + processPart vs2) valveDist`
01:08:09 <mauke[m]> I wrote Markdown. hope it looks sensible on the IRC side
01:08:25 <geekosaur> even the first one looked sensible here
01:09:25 <glguy> https://ibb.co/m9J3ZN0
01:09:37 <mauke[m]> where valveDist = filter (uncurry (<)) (subseq valves)
01:10:58 geekosaur suddenly wonders when they got rid of the control-q stuff
01:10:59 × albet70 quits (~xxx@2400:8902::f03c:92ff:fe60:98d8) (Remote host closed the connection)
01:11:05 <glguy> mauke[m]: by first computing all the possible subsequences you can avoid checking impossible ones or recomputing costs
01:11:25 <glguy> The control q stuff was working earlier this month
01:11:52 <glguy> I was surprised to see it pop up; I implemented support for it earlier because irccloud can use it
01:11:55 × xff0x quits (~xff0x@ai071162.d.east.v6connect.net) (Ping timeout: 256 seconds)
01:12:08 <mauke[m]> backslash test: map (\(x, y) -> x + y)
01:12:16 <mauke[m]> weird
01:12:35 <geekosaur> I have a script for hexchat ut it has the side effect of breaking tab notifications, so I disabled it
01:12:53 <mauke[m]> glguy: what do you mean by impossible?
01:13:38 <glguy> There are valve sets one player couldn't open in time, depending on the map
01:14:04 <jle``> thanks for the tips :)
01:14:52 <glguy> So it'd be a waste to ask multiple times on different subsets of valves where the player doesn't open all the valves in the subset
01:15:34 <mauke[m]> I don't see how that follows
01:17:06 albet70 joins (~xxx@2400:8902::f03c:92ff:fe60:98d8)
01:17:24 <glguy> Like suppose theres a graph with nodes ABC and the optimal valve opening on that graph involves opening A then B, we wouldn't want to ask how expensive it is to open the subset AB and also ABC (which would give the same asnswer as asking about AB)
01:17:44 × acidjnk quits (~acidjnk@p200300d6e7137a53b8fa7112b5541570.dip0.t-ipconnect.de) (Ping timeout: 246 seconds)
01:18:24 fizbin joins (~fizbin@user/fizbin)
01:18:35 <mauke[m]> how does that save me work?
01:18:46 <glguy> depends if you were doing both queries or not
01:18:56 <glguy> if you were then it saves a wasted query
01:19:23 <glguy> also doing them as separate queries doesn't allow subsets that have a common prefix from sharing work
01:19:47 × thongpv quits (~thongpv87@2001:ee0:54ab:430:ca58:16f9:bb47:d3ca) (Read error: Connection reset by peer)
01:20:31 <mauke[m]> none of this makes sense to me
01:20:54 <glguy> you were mapping a function over all the pairs of disjoint subsets of valves?
01:21:26 thongpv joins (~thongpv87@113.187.220.176)
01:21:26 <mauke[m]> if I have a subset {A, B, D} and I compute an optimal valve path AB (with D being unreachable), then adding C to the set does not necessarily extend AB
01:21:51 <mauke[m]> the solution for {A, B, D, C} might be ACD or something
01:22:01 <glguy> if the optimal route through {ABC} ignores D, then no sense in asking about ABD, only need to ask about AB
01:22:06 <glguy> err
01:22:10 <glguy> if the optimal route through {ABD} ignores D, then no sense in asking about ABD, only need to ask about AB
01:22:52 <mauke[m]> well yeah. if you start with the optimal route.
01:22:59 <glguy> so instead of asking individually about all the different subsets you can just enumerate all the reachable subsets
01:23:07 <glguy> as a single graph search
01:23:15 × thongpv87 quits (~thongpv87@2001:ee0:54ab:430:ca58:16f9:bb47:d3ca) (Ping timeout: 256 seconds)
01:24:44 <mauke[m]> are we talking about subsets of subsets now?
01:25:13 <glguy> no, subsets of the whole graph
01:25:19 <glguy> https://github.com/glguy/advent/blob/main/solutions/src/2022/16.hs#L68-L81
01:27:10 × tremon quits (~tremon@83-85-213-108.cable.dynamic.v4.ziggo.nl) (Quit: getting boxed in)
01:28:36 <mauke[m]> TIL about ImportQualifiedPost
01:29:25 <mauke[m]> first thing that confuses me: the Map Int [(Int, Int, Int)] type
01:29:39 × thongpv quits (~thongpv87@113.187.220.176) (Ping timeout: 260 seconds)
01:29:54 <mauke[m]> what is flow doing in there?
01:30:09 <glguy> it's the flow value of the valve at that room
01:30:25 <glguy> You only move to a room to open the valve there
01:31:28 thongpv joins (~thongpv87@14.246.240.163)
01:32:01 <mauke[m]> but why is it attached to the arrows and not the nodes?
01:32:13 <mauke[m]> also, which room?
01:32:38 <glguy> to avoid doing a second lookup for the valve value as you always need that information when moving to the room containing the vavle
01:32:54 <mauke[m]> your map describes the relationships between rooms, no?
01:33:30 <glguy> for each "room/valve" it's a list of all the other rooms reachable and the time it would take to move directly to that room
01:34:25 <glguy> having separate maps would make you do twice as many Map.lookups
01:34:34 <mauke[m]> does that mean each flow value is duplicated n times in your data structure (where n = number of elements)?
01:34:39 <glguy> yeah
01:35:11 <mauke[m]> btw, what's a SmallSet?
01:35:23 <glguy> it's a Set but represented with an Int using bit operations
01:35:42 <glguy> I should remove all the Map lookups and just tie the knot
01:36:11 × freeside quits (~mengwong@103.252.202.159) (Ping timeout: 265 seconds)
01:36:56 <mauke[m]> ah, I didn't assume N < 64
01:37:39 <mauke[m]> I also didn't bother with renumbering: valve = (\a b -> (ord a - ord 'A') * 26 + ord b - ord 'A') <$> satisfy isAsciiUpper <*> satisfy isAsciiUpper
01:37:40 <mauke[m]> :-)
01:37:56 <glguy> renumbering saved about 5x
01:38:39 <glguy> at least in an earlier version
01:39:58 × gurkenglas quits (~gurkengla@p548ac72e.dip0.t-ipconnect.de) (Ping timeout: 272 seconds)
01:40:15 × coot quits (~coot@2a02:a310:e241:1b00:ec1a:e9df:79ac:66ba) (Quit: coot)
01:43:39 mauke[m] stares hard at the code
01:48:59 × wroathe quits (~wroathe@user/wroathe) (Quit: leaving)
01:49:18 <mauke[m]> ooh. I think I understand exactly what solve is computing
01:49:55 freeside joins (~mengwong@103.252.202.159)
01:49:56 <glguy> Help me understand what you found confusing, or what I didn't adequately explain so I can update the comments?
01:50:07 <mauke[m]> and I'm pretty sure you're coalescing states by using room sets as keys
01:50:47 <glguy> yes, that happens and I pick the larger of them with 'max'
01:50:47 <mauke[m]> speaking of comments: line 71, s/values/valves/ ?
01:51:01 <mauke[m]> wouldn't it be more efficient to use an IntSet?
01:51:02 <glguy> oops
01:51:07 <mauke[m]> er, IntMap
01:51:24 <glguy> My experience so far is that IntMap is only faster for lookups and not updates
01:51:54 <glguy> Any time I try swapping out a Map for IntMap this year of aoc I got worse times
01:53:26 <EvanR> I've had good results for Map just for the convenience factor
01:53:57 <EvanR> using IntMap when it's not an Int has non zero pain in the ass cost
01:56:41 xff0x joins (~xff0x@125x103x176x34.ap125.ftth.ucom.ne.jp)
02:12:11 <mauke[m]> glguy: s/verticies/vertices/g
02:12:42 azimut joins (~azimut@gateway/tor-sasl/azimut)
02:16:11 × waleee quits (~waleee@2001:9b0:213:7200:cc36:a556:b1e8:b340) (Ping timeout: 248 seconds)
02:16:19 × fizbin quits (~fizbin@user/fizbin) (Remote host closed the connection)
02:16:36 waleee joins (~waleee@2001:9b0:213:7200:cc36:a556:b1e8:b340)
02:16:37 fizbin joins (~fizbin@user/fizbin)
02:18:27 × [itchyjunk] quits (~itchyjunk@user/itchyjunk/x-7353470) (Remote host closed the connection)
02:19:03 <romes[m]> Hey! I'm writing some type level code using type families, but I've encountered a weird behaviour:
02:19:03 <romes[m]> With the constraint `8 ~ SizeOf (DSetBinding 1 (n-1) ys)` I get an error `Could not deduce (SizeOf (DSetBinding 1 0 β) ~ 8)`; However, the constraint `9 ~ SizeOf (DSetBinding 1 (n-1) ys)` results in the (expected) error `Could not deduce (9 ~ 8)`. If I write 7 instead of 9 I also get the nice `Could not deduce (7 ~ 8)`
02:19:11 <romes[m]> Any clues as to what it might be?
02:23:04 notzmv joins (~zmv@user/notzmv)
02:27:16 × beefbambi quits (~beefbambi@183.82.25.109) (Read error: Connection reset by peer)
02:29:49 <EvanR> what's β
02:30:17 beefbambi joins (~beefbambi@183.82.25.109)
02:32:39 × beefbambi quits (~beefbambi@183.82.25.109) (Read error: Connection reset by peer)
02:34:12 <romes[m]> something that makes it work :) if I print it out with TypeError it shows it but it’s not relevant I think
02:34:49 beefbambi joins (~beefbambi@183.82.25.109)
02:34:52 <EvanR> it works? great
02:41:24 × beefbambi quits (~beefbambi@183.82.25.109) (Read error: Connection reset by peer)
02:41:59 × waleee quits (~waleee@2001:9b0:213:7200:cc36:a556:b1e8:b340) (Quit: WeeChat 3.7.1)
02:42:21 beefbambi joins (~beefbambi@183.82.25.109)
02:48:20 eggplantade joins (~Eggplanta@2600:1700:38c5:d800:3964:1012:a01c:6912)
02:52:22 wroathe joins (~wroathe@207-153-38-140.fttp.usinternet.com)
02:52:22 × wroathe quits (~wroathe@207-153-38-140.fttp.usinternet.com) (Changing host)
02:52:22 wroathe joins (~wroathe@user/wroathe)
02:54:29 × freeside quits (~mengwong@103.252.202.159) (Ping timeout: 256 seconds)
02:58:14 × azimut quits (~azimut@gateway/tor-sasl/azimut) (Ping timeout: 255 seconds)
03:09:39 azimut joins (~azimut@gateway/tor-sasl/azimut)
03:10:31 × FinnElija quits (~finn_elij@user/finn-elija/x-0085643) (Killed (NickServ (Forcing logout FinnElija -> finn_elija)))
03:10:31 finn_elija joins (~finn_elij@user/finn-elija/x-0085643)
03:10:31 finn_elija is now known as FinnElija
03:18:16 freeside joins (~mengwong@103.252.202.159)
03:20:43 × td_ quits (~td@83.135.9.15) (Ping timeout: 260 seconds)
03:22:29 td_ joins (~td@83.135.9.57)
03:22:30 × beefbambi quits (~beefbambi@183.82.25.109) (Read error: Connection reset by peer)
03:24:03 beefbambi joins (~beefbambi@183.82.25.109)
03:29:54 razetime joins (~quassel@49.207.230.181)
03:33:20 × emmanuelux quits (~emmanuelu@user/emmanuelux) (Read error: Connection reset by peer)
03:41:27 × terrorjack quits (~terrorjac@2a01:4f8:1c1e:4e8c::) (Quit: The Lounge - https://thelounge.chat)
03:42:50 terrorjack joins (~terrorjac@2a01:4f8:1c1e:4e8c::)
03:45:00 × jero98772 quits (~jero98772@2800:484:1d80:d8ce:3490:26c5:1782:da8c) (Remote host closed the connection)
04:04:59 × bjourne quits (~bjorn@94.191.136.87.mobile.tre.se) (Ping timeout: 248 seconds)
04:09:15 × son0p quits (~ff@2604:3d08:5b7f:5540::417e) (Ping timeout: 260 seconds)
04:12:45 × ddellacosta quits (~ddellacos@143.244.47.100) (Ping timeout: 260 seconds)
04:22:06 × Kaipei quits (~Kaiepi@nwcsnbsc03w-47-55-159-86.dhcp-dynamic.fibreop.nb.bellaliant.net) (Ping timeout: 272 seconds)
04:23:22 × freeside quits (~mengwong@103.252.202.159) (Ping timeout: 272 seconds)
04:32:27 × razetime quits (~quassel@49.207.230.181) (Ping timeout: 260 seconds)
04:37:32 × Unicorn_Princess quits (~Unicorn_P@user/Unicorn-Princess/x-3540542) (Remote host closed the connection)
04:38:18 × Umeaboy quits (~Umeaboy@94-255-145-133.cust.bredband2.com) (Quit: Leaving)
04:42:45 × thongpv quits (~thongpv87@14.246.240.163) (Ping timeout: 265 seconds)
04:51:04 freeside joins (~mengwong@103.252.202.159)
04:51:38 × beefbambi quits (~beefbambi@183.82.25.109) (Read error: Connection reset by peer)
04:51:46 dsrt^ joins (~dsrt@76.145.185.103)
04:52:30 beefbambi joins (~beefbambi@2401:4900:230d:f57c:538c:d7cc:50c0:e377)
04:53:08 × beefbambi quits (~beefbambi@2401:4900:230d:f57c:538c:d7cc:50c0:e377) (Read error: Connection reset by peer)
04:53:26 beefbambi joins (~beefbambi@183.82.25.109)
04:55:47 × freeside quits (~mengwong@103.252.202.159) (Ping timeout: 260 seconds)
04:55:55 thongpv joins (~thongpv87@2402:9d80:3ef:b5ba:d843:66e0:e437:37c3)
04:58:12 × beefbambi quits (~beefbambi@183.82.25.109) (Read error: Connection reset by peer)
04:58:58 beefbambi joins (~beefbambi@2401:4900:230d:f57c:538c:d7cc:50c0:e377)
05:02:19 money_ joins (~money@2601:40:c580:8530:d025:7b6d:55a0:598c)
05:02:38 × money_ quits (~money@2601:40:c580:8530:d025:7b6d:55a0:598c) (Client Quit)
05:03:26 × beefbambi quits (~beefbambi@2401:4900:230d:f57c:538c:d7cc:50c0:e377) (Read error: Connection reset by peer)
05:03:45 beefbambi joins (~beefbambi@183.82.25.109)
05:07:07 freeside joins (~mengwong@103.252.202.159)
05:15:53 johnw joins (~johnw@2600:1700:cf00:db0:68bc:4dc1:caa4:f545)
05:18:11 × beefbambi quits (~beefbambi@183.82.25.109) (Ping timeout: 264 seconds)
05:22:58 razetime joins (~quassel@49.207.230.181)
05:23:16 beefbambi joins (~beefbambi@2401:4900:230d:f57c:538c:d7cc:50c0:e377)
05:28:17 × thongpv quits (~thongpv87@2402:9d80:3ef:b5ba:d843:66e0:e437:37c3) (Quit: Leaving)
05:34:13 × v0id_ptr quits (~adrift@user/ptr-frac7al/x-0038398) (Ping timeout: 268 seconds)
05:35:34 × johnw quits (~johnw@2600:1700:cf00:db0:68bc:4dc1:caa4:f545) (Quit: ZNC - http://znc.in)
05:52:26 _\_ is now known as ___
05:54:26 titibandit joins (~titibandi@xdsl-89-0-163-79.nc.de)
06:05:02 mbuf joins (~Shakthi@49.204.113.226)
06:13:41 × freeside quits (~mengwong@103.252.202.159) (Ping timeout: 268 seconds)
06:18:13 son0p joins (~ff@2604:3d08:5b7f:5540:98a9:2169:15a1:4c7f)
06:35:44 × razetime quits (~quassel@49.207.230.181) (Ping timeout: 272 seconds)
06:38:17 × FinnElija quits (~finn_elij@user/finn-elija/x-0085643) (Ping timeout: 255 seconds)
06:43:30 FinnElija joins (~finn_elij@user/finn-elija/x-0085643)
06:51:13 trev joins (~trev@user/trev)
06:54:42 × kritzefitz quits (~kritzefit@debian/kritzefitz) (Ping timeout: 252 seconds)
06:56:57 × perrierjouet quits (~perrier-j@modemcable048.127-56-74.mc.videotron.ca) (Quit: WeeChat 3.7.1)
06:57:16 kritzefitz joins (~kritzefit@debian/kritzefitz)
06:58:03 perrierjouet joins (~perrier-j@modemcable048.127-56-74.mc.videotron.ca)
06:58:23 × perrierjouet quits (~perrier-j@modemcable048.127-56-74.mc.videotron.ca) (Client Quit)
07:00:57 mei joins (~mei@user/mei)
07:03:47 perrierjouet joins (~perrier-j@modemcable048.127-56-74.mc.videotron.ca)
07:14:54 × L29Ah quits (~L29Ah@wikipedia/L29Ah) (Read error: Connection reset by peer)
07:31:58 johnw joins (~johnw@2600:1700:cf00:db0:e590:8ce7:d874:8b6)
07:34:30 lortabac joins (~lortabac@2a01:e0a:541:b8f0:868e:d6ba:423c:8634)
07:35:58 takuan joins (~takuan@178-116-218-225.access.telenet.be)
07:38:46 Kaipei joins (~Kaiepi@nwcsnbsc03w-47-55-159-86.dhcp-dynamic.fibreop.nb.bellaliant.net)
07:39:49 × shriekingnoise quits (~shrieking@186.137.167.202) (Quit: Quit)
07:47:14 shriekingnoise joins (~shrieking@186.137.167.202)
07:47:40 ph88 joins (~ph88@2001:1c05:2412:3100:2cfc:2cfb:90cd:d349)
07:49:58 × Cale quits (~cale@cpef48e38ee8583-cm30b7d4b3fc20.cpe.net.cable.rogers.com) (Remote host closed the connection)
07:53:16 × titibandit quits (~titibandi@xdsl-89-0-163-79.nc.de) (Remote host closed the connection)
07:56:17 × shriekingnoise quits (~shrieking@186.137.167.202) (Quit: Quit)
07:58:47 titibandit joins (~titibandi@xdsl-89-0-163-79.nc.de)
08:00:22 × wroathe quits (~wroathe@user/wroathe) (Quit: leaving)
08:13:03 × ph88 quits (~ph88@2001:1c05:2412:3100:2cfc:2cfb:90cd:d349) (Quit: Leaving)
08:17:42 × Sgeo quits (~Sgeo@user/sgeo) (Read error: Connection reset by peer)
08:25:54 jakalx parts (~jakalx@base.jakalx.net) ()
08:35:34 jakalx joins (~jakalx@base.jakalx.net)
08:37:30 × cyphase quits (~cyphase@user/cyphase) (Ping timeout: 256 seconds)
08:42:12 cyphase joins (~cyphase@user/cyphase)
08:44:10 bgs joins (~bgs@212-85-160-171.dynamic.telemach.net)
08:45:12 Tuplanolla joins (~Tuplanoll@91-159-68-152.elisa-laajakaista.fi)
08:52:22 freeside joins (~mengwong@122.11.214.85)
08:57:22 × jmorris quits (uid537181@id-537181.uxbridge.irccloud.com) (Quit: Connection closed for inactivity)
08:58:41 × bitdex quits (~bitdex@gateway/tor-sasl/bitdex) (Ping timeout: 255 seconds)
09:00:03 × ElliotAlderson[m quits (~elliotal_@2001:470:69fc:105::bb21) (Quit: You have been kicked for being idle)
09:01:10 bitdex joins (~bitdex@gateway/tor-sasl/bitdex)
09:04:10 gnalzo joins (~gnalzo@2a01:e0a:498:fd50:fcc6:bb5d:489a:ce8c)
09:19:02 acidjnk joins (~acidjnk@p200300d6e7137a537d0b13f896941cd5.dip0.t-ipconnect.de)
09:33:37 mmhat joins (~mmh@p200300f1c721be6dee086bfffe095315.dip0.t-ipconnect.de)
09:37:39 aaronv joins (~aaronv@user/aaronv)
09:38:04 gurkenglas joins (~gurkengla@p548ac72e.dip0.t-ipconnect.de)
09:42:25 Guest323 joins (~finn@roc37-h01-176-170-197-243.dsl.sta.abo.bbox.fr)
09:45:27 × tzh quits (~tzh@c-24-21-73-154.hsd1.wa.comcast.net) (Quit: zzz)
09:57:47 × eggplantade quits (~Eggplanta@2600:1700:38c5:d800:3964:1012:a01c:6912) (Remote host closed the connection)
09:57:47 × freeside quits (~mengwong@122.11.214.85) (Ping timeout: 264 seconds)
10:02:39 × phma quits (phma@2001:5b0:211f:fc48:f1c3:2878:2421:3588) (Read error: Connection reset by peer)
10:03:33 phma joins (phma@2001:5b0:210d:5d58:64bb:4721:a872:cb87)
10:04:22 <mauke[m]> glguy: looking at the 'fw' function, doesn't it assign a self-distance of 2 to all rooms? that is, distances M.! (v, v) == 2 for all v
10:05:42 <mauke[m]> and if you skip those entries, wouldn't `Map.lookup (i,k) dists` then be invariant in the innermost loop and could be pulled out?
10:08:10 × xff0x quits (~xff0x@125x103x176x34.ap125.ftth.ucom.ne.jp) (Ping timeout: 252 seconds)
10:08:41 × chiselfuse quits (~chiselfus@user/chiselfuse) (Remote host closed the connection)
10:15:53 <romes[m]> <EvanR> "it works? great" <- oh no I phrased it wrong. I have a type family DSetBinding that when applied to those arguments reduces to `8`. When I write the constraint with `(8 ~ DSetBinding 1 0 x)` it’s as if the family can’t reduce, but if I switch 8 to another number like 9, I get the message “Can’t satisfy 9 ~ 8”
10:16:14 jakalx parts (~jakalx@base.jakalx.net) (Error from remote client)
10:16:18 jakalx joins (~jakalx@base.jakalx.net)
10:16:35 <romes[m]> so I know that the type family reduces, but when I compare it to the value it reduces to its like it stops working!
10:16:37 <romes[m]> :)
10:17:31 × libertyprime quits (~libertypr@203.96.203.167) (Ping timeout: 252 seconds)
10:20:35 × troydm quits (~troydm@host-176-37-124-197.b025.la.net.ua) (Ping timeout: 264 seconds)
10:23:03 × Guest323 quits (~finn@roc37-h01-176-170-197-243.dsl.sta.abo.bbox.fr) (Ping timeout: 260 seconds)
10:23:37 wootehfoot joins (~wootehfoo@user/wootehfoot)
10:25:29 __monty__ joins (~toonn@user/toonn)
10:31:20 × Lord_of_Life quits (~Lord@user/lord-of-life/x-2819915) (Ping timeout: 272 seconds)
10:32:04 freeside joins (~mengwong@122.11.214.85)
10:33:23 Lord_of_Life joins (~Lord@user/lord-of-life/x-2819915)
10:34:02 × econo quits (uid147250@user/econo) (Quit: Connection closed for inactivity)
10:34:12 chiselfuse joins (~chiselfus@user/chiselfuse)
10:38:34 L29Ah joins (~L29Ah@wikipedia/L29Ah)
10:41:24 fserucas joins (~fserucas@a85-138-107-42.cpe.netcabo.pt)
10:43:22 × freeside quits (~mengwong@122.11.214.85) (Read error: Connection reset by peer)
10:43:59 coot joins (~coot@213.134.171.3)
10:58:18 eggplantade joins (~Eggplanta@2600:1700:38c5:d800:3964:1012:a01c:6912)
11:02:34 × eggplantade quits (~Eggplanta@2600:1700:38c5:d800:3964:1012:a01c:6912) (Ping timeout: 252 seconds)
11:06:33 xff0x joins (~xff0x@ai071162.d.east.v6connect.net)
11:14:28 × titibandit quits (~titibandi@xdsl-89-0-163-79.nc.de) (Remote host closed the connection)
11:16:50 × bitdex quits (~bitdex@gateway/tor-sasl/bitdex) (Ping timeout: 255 seconds)
11:18:29 bitdex joins (~bitdex@gateway/tor-sasl/bitdex)
11:20:30 freeside joins (~mengwong@103.252.202.159)
11:25:23 × freeside quits (~mengwong@103.252.202.159) (Ping timeout: 264 seconds)
11:30:35 × jmdaemon quits (~jmdaemon@user/jmdaemon) (Ping timeout: 246 seconds)
11:32:00 freeside joins (~mengwong@103.252.202.159)
11:35:31 money__ joins (~money@2601:40:c580:8530:bc04:ad9b:97b3:650b)
11:35:39 × acidjnk quits (~acidjnk@p200300d6e7137a537d0b13f896941cd5.dip0.t-ipconnect.de) (Ping timeout: 248 seconds)
12:05:18 <mauke[m]> huh. my "connection expansion" function might actually be a variant of Dijkstra's algorithm
12:11:35 acidjnk joins (~acidjnk@p54ad5adb.dip0.t-ipconnect.de)
12:14:47 gehmehgeh joins (~user@user/gehmehgeh)
12:15:14 × freeside quits (~mengwong@103.252.202.159) (Quit: brb)
12:15:47 × gmg quits (~user@user/gehmehgeh) (Ping timeout: 255 seconds)
12:17:44 × acidjnk quits (~acidjnk@p54ad5adb.dip0.t-ipconnect.de) (Ping timeout: 272 seconds)
12:18:23 bontaq joins (~user@71.27.75.65)
12:18:41 Guest32 joins (~Guest32@176.122.87.241)
12:18:52 <Guest32> hello
12:19:40 <Guest32> can i ask a question about yesodweb?
12:19:56 <chreekat> yep
12:20:07 <Guest32> I need to wrap the select field in a div. Is there an easier way than custom field?
12:21:50 <Guest32> my css framework wrap some fields in divs
12:23:38 × irrgit__ quits (~irrgit@146.70.27.250) (Remote host closed the connection)
12:24:57 irrgit__ joins (~irrgit@176.113.74.74)
12:26:19 × perrierjouet quits (~perrier-j@modemcable048.127-56-74.mc.videotron.ca) (Quit: WeeChat 3.7.1)
12:26:48 perrierjouet joins (~perrier-j@modemcable048.127-56-74.mc.videotron.ca)
12:29:11 × fserucas quits (~fserucas@a85-138-107-42.cpe.netcabo.pt) (Ping timeout: 252 seconds)
12:48:48 × sammelweis quits (~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10) (Quit: No Ping reply in 180 seconds.)
12:49:00 × albet70 quits (~xxx@2400:8902::f03c:92ff:fe60:98d8) (Remote host closed the connection)
12:50:03 sammelweis joins (~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10)
12:53:04 dextaa9 joins (~DV@user/dextaa)
12:54:18 × Guest32 quits (~Guest32@176.122.87.241) (Quit: Client closed)
12:54:51 × dextaa quits (~DV@user/dextaa) (Ping timeout: 252 seconds)
12:54:51 dextaa9 is now known as dextaa
12:55:07 albet70 joins (~xxx@2400:8902::f03c:92ff:fe60:98d8)
12:59:44 × kjak quits (~kjak@pool-72-66-75-40.washdc.fios.verizon.net) (Ping timeout: 260 seconds)
13:00:09 eggplantade joins (~Eggplanta@2600:1700:38c5:d800:3964:1012:a01c:6912)
13:01:59 × califax quits (~califax@user/califx) (Remote host closed the connection)
13:02:14 jonathanx joins (~jonathan@h-178-174-176-109.A357.priv.bahnhof.se)
13:04:23 × eggplantade quits (~Eggplanta@2600:1700:38c5:d800:3964:1012:a01c:6912) (Ping timeout: 246 seconds)
13:07:23 califax joins (~califax@user/califx)
13:11:07 <kjlid[m]> Say I have a typeclass `HasEntry t` with a bunch of functions to retreive some fields from a data structure - would it make sense to have a `toEntry :: t -> Entry` if I want to have the ability to copy the data and replace some fields in it before I shove it into a database?
13:11:35 <kjlid[m]> I don't know what the idiomatic way to do that in Haskell is
13:12:25 <kjlid[m]> Or would it make more sense to have a DAO-like type?
13:12:34 <mauke[m]> why do you have a typeclass?
13:13:41 <kjlid[m]> As a learning exercise
13:14:31 <kjlid[m]> And I heard you guys like abstractions so I figured I'd add some typeclasses to impress you
13:14:53 × money__ quits (~money@2601:40:c580:8530:bc04:ad9b:97b3:650b) (Quit: late)
13:15:47 <mauke[m]> typeclasses are but one way to abstract things
13:16:33 kjak joins (~kjak@pool-72-66-75-40.washdc.fios.verizon.net)
13:17:50 <mauke[m]> I can't tell you what would make sense because I can't form a picture of your code from your description
13:17:52 <mauke[m]> it's too vague for me
13:17:59 <ggVGc> typeclasses are just fancy dictionaries :)
13:20:14 <mauke[m]> in much the same way that function application is just fancy goto
13:21:28 <kjlid[m]> https://paste.tomsmeding.com/QZ1azRNB <- I was thinking of doing something like this. See like 23-28
13:21:32 <kjlid[m]> err, line 23-28
13:22:27 <kjlid[m]> Yes I know this does not compile
13:24:25 troydm joins (~troydm@host-176-37-124-197.b025.la.net.ua)
13:24:51 <mauke[m]> this looks like entry is just a tuple/record of 5 fields
13:26:05 <mauke[m]> in which case I wouldn't make addEntry polymorphic; I'd just have it take an Entry
13:27:04 <mauke[m]> anyone who wants to use it with a different type can write their own conversion function that wraps the necessary pieces in an Entry
13:28:16 × perrierjouet quits (~perrier-j@modemcable048.127-56-74.mc.videotron.ca) (Quit: WeeChat 3.7.1)
13:28:37 perrierjouet joins (~perrier-j@modemcable048.127-56-74.mc.videotron.ca)
13:29:10 <kjlid[m]> Right
13:36:11 × perrierjouet quits (~perrier-j@modemcable048.127-56-74.mc.videotron.ca) (Quit: WeeChat 3.7.1)
13:38:33 × sammelweis quits (~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10) (Quit: No Ping reply in 180 seconds.)
13:39:59 sammelweis joins (~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10)
13:46:55 tremon joins (~tremon@83-85-213-108.cable.dynamic.v4.ziggo.nl)
13:48:35 <JonathanWatson[m> Does anyone know how to set GHC runtime debug options in Cabal? My GHC options end with "-debug +RTS -DL -RTS" but I get an error saying "the flag -DL requires the program to be built with -debug"
13:51:05 <mauke[m]> can you even build ghc with cabal?
13:52:41 cheater joins (~Username@user/cheater)
13:54:24 emmanuelux joins (~emmanuelu@user/emmanuelux)
13:54:57 <JonathanWatson[m> Well I am trying to build an executable using custom GHC options rather than build GHC itself
13:55:37 <JonathanWatson[m> Using these options https://downloads.haskell.org/ghc/latest/docs/users_guide/runtime_control.html?highlight=dl#rts-options-for-hackers-debuggers-and-over-interested-souls
13:56:17 <JonathanWatson[m> It could be that "the program" is referring to GHC though
13:56:44 Sciencentistguy2 joins (~sciencent@hacksoc/ordinary-member)
13:56:52 <glguy> Are you using -with-rtsopts ?
13:58:16 <JonathanWatson[m> Oh no I am using +RTS and -RTS since it didn't work when I tried that with the option on the library, although it should work now that I am only changing the GHC options for the executable
13:58:34 × Sciencentistguy quits (~sciencent@hacksoc/ordinary-member) (Ping timeout: 252 seconds)
13:58:34 Sciencentistguy2 is now known as Sciencentistguy
13:59:01 <mauke[m]> if you're not trying to debug ghc, why are you passing runtime debugging options to ghc?
13:59:03 <glguy> mauke[m]: yes it assigns 2 to the self distances because I didn't add zero entries to the self distances, but I'll have to look to see what the consequence is to the shortest path implementation
13:59:31 <JonathanWatson[m> glguy: thank you that worked!
13:59:53 <JonathanWatson[m> mauke[m]: I am testing a library that uses GHC as a library for dynamic software updating
14:00:03 <glguy> I had the 0 cost entries at one point, but since I don't need them I ended up removing them to save on line count
14:00:16 <mauke[m]> ooh, funky
14:01:58 × fizbin quits (~fizbin@user/fizbin) (Remote host closed the connection)
14:02:15 <JonathanWatson[m> oh well it built but when I run it, it says "bad RTS option: -DL"
14:02:17 fizbin joins (~fizbin@user/fizbin)
14:02:56 <JonathanWatson[m> with "-with-rtsopts=-DL"
14:03:36 × mei quits (~mei@user/mei) (Quit: mei)
14:05:11 <JonathanWatson[m> but it does recognise the option since it says "unexpected RTS argument: DL" when I remove the hyphen
14:05:46 <glguy> Sounds like you didn't build a debug target
14:06:26 <JonathanWatson[m> oh it works with "-with-rtsopts=-Dl"
14:06:37 JonathanWatson[m uploaded an image: (8KiB) < https://libera.ems.host/_matrix/media/v3/download/matrix.org/hiJhcJOhNvweGLPceBqbSmbX/image.png >
14:06:46 <JonathanWatson[m> it's just the verbose one that doesn't work
14:08:20 × fizbin quits (~fizbin@user/fizbin) (Ping timeout: 260 seconds)
14:11:05 Guest91 joins (~Guest91@dyndsl-037-138-067-145.ewe-ip-backbone.de)
14:12:28 kenran joins (~user@user/kenran)
14:12:49 × kenran quits (~user@user/kenran) (Remote host closed the connection)
14:13:22 perrierjouet joins (~perrier-j@modemcable048.127-56-74.mc.videotron.ca)
14:13:32 <JonathanWatson[m> ok that's because I'm reading a later version of the docs
14:15:59 bjourne joins (~bjorn@94.191.136.87.mobile.tre.se)
14:17:08 freeside joins (~mengwong@103.252.202.159)
14:17:35 × notzmv quits (~zmv@user/notzmv) (Ping timeout: 246 seconds)
14:18:39 <freeside> so, i've got my Megaparsec-based parser up and running, and for my next trick, I'm refactoring and simplifying. I want to use one of the available expression parsers, but ...
14:18:59 <freeside> ... do I want Control.Monad.Combinators.Expr? Text.Parser.Expression? Text.Parsec.Expr?
14:20:08 <freeside> they all seem to implement expr, term, table, binary, prefix, postfix
14:25:49 <freeside> i'm going with Control.Monad.Combinators.Expr from parser-combinators, but only because it shares an author with megaparsec; I trust my sleuthing will bear fruit
14:35:42 × gnalzo quits (~gnalzo@2a01:e0a:498:fd50:fcc6:bb5d:489a:ce8c) (Quit: WeeChat 3.7.1)
14:35:45 <ncf> yes that's the intended way https://markkarpov.com/post/megaparsec-7.html#parsercombinators-grows-megaparsec-shrinks
14:36:32 Unicorn_Princess joins (~Unicorn_P@user/Unicorn-Princess/x-3540542)
14:37:48 <freeside> ah, thank you, appreciate the history
14:38:17 <ncf> i suspect the other ones just wouldn't work with megaparsec anyway
14:41:15 <freeside> very well, then i shall submit a PR for https://hackage.haskell.org/package/megaparsec-9.3.0#related-packages lol
14:42:39 money__ joins (~money@64-145-79-171.jfk.as54203.net)
14:42:42 × bontaq quits (~user@71.27.75.65) (Read error: Connection reset by peer)
14:44:40 × finsternis quits (~X@23.226.237.192) (Read error: Connection reset by peer)
14:47:07 <freeside> i wonder why the decision was made not to re-export them from the Text.Megaparsec module namespace
14:48:28 × pavonia quits (~user@user/siracusa) (Quit: Bye!)
14:51:14 jakalx parts (~jakalx@base.jakalx.net) (Error from remote client)
14:51:55 <geekosaur> that's reserved for when they reimplement them for optimization, I think
14:52:57 × Guest91 quits (~Guest91@dyndsl-037-138-067-145.ewe-ip-backbone.de) (Quit: Client closed)
14:53:38 jakalx joins (~jakalx@base.jakalx.net)
14:53:53 shriekingnoise joins (~shrieking@186.137.167.202)
15:00:04 n0den1te joins (~~.~@2401:4900:1c28:5d65:f513:13cc:6745:d0c4)
15:00:42 jargon joins (~jargon@174-22-197-118.phnx.qwest.net)
15:02:24 <bjourne> how can you accomplish exit early in a monad? e.g: if (a) { doA(); return; } if (b) { doB(); return } ...
15:03:07 <geekosaur> you can't; it's a large expression, not really a set of procedures
15:03:31 <geekosaur> closest you get is the Cont or ContT monads but those will seriously warp your brain
15:04:11 <freeside> why not guard / when / <|>
15:04:16 <freeside> https://hackage.haskell.org/package/base-4.17.0.0/docs/Control-Monad.html#g:6
15:04:20 <bjourne> i can accomplish it, but only using deeply nested if-else expressions
15:04:23 <geekosaur> those work in some cases
15:05:08 <freeside> maybe refactor to take advantage of pattern-matching or MultiWayIf?
15:05:33 n0den1te parts (~~.~@2401:4900:1c28:5d65:f513:13cc:6745:d0c4) ()
15:06:08 <freeside> the "deeply nested if-else expressions" antipattern is something i'm trying to address with an embeddable DMN DSL, btw, which is coincidentally the subject of my current refactoring
15:06:44 × money__ quits (~money@64-145-79-171.jfk.as54203.net) (Changing host)
15:06:44 money__ joins (~money@user/polo)
15:06:44 ChanServ sets mode +o litharge
15:06:45 litharge sets mode +b *!*@64.145.79.171
15:06:49 fizbin joins (~fizbin@user/fizbin)
15:06:50 n0den1te joins (~n0den1te@223.178.84.197)
15:06:56 litharge sets mode -o litharge
15:07:36 <freeside> beyond a certain complexity, decision trees really want to be decision tables
15:12:49 fserucas joins (~fserucas@a85-138-107-42.cpe.netcabo.pt)
15:27:36 money___ joins (~money@pool-100-11-18-203.phlapa.fios.verizon.net)
15:28:09 × money__ quits (~money@user/polo) (Ping timeout: 256 seconds)
15:28:29 × dsrt^ quits (~dsrt@76.145.185.103) (Remote host closed the connection)
15:32:57 × perrierjouet quits (~perrier-j@modemcable048.127-56-74.mc.videotron.ca) (Quit: WeeChat 3.7.1)
15:34:25 × beefbambi quits (~beefbambi@2401:4900:230d:f57c:538c:d7cc:50c0:e377) (Read error: Connection reset by peer)
15:34:43 beefbambi joins (~beefbambi@49.204.133.80)
15:38:29 perrierjouet joins (~perrier-j@modemcable048.127-56-74.mc.videotron.ca)
15:43:07 ddellacosta joins (~ddellacos@143.244.47.68)
15:44:08 razetime joins (~quassel@49.207.196.133)
15:47:29 × Sauvin quits (~sauvin@user/Sauvin) (Ping timeout: 246 seconds)
15:51:56 × razetime quits (~quassel@49.207.196.133) (Quit: https://quassel-irc.org - Chat comfortably. Anywhere.)
15:54:36 Sauvin joins (~sauvin@user/Sauvin)
15:54:47 × beefbambi quits (~beefbambi@49.204.133.80) (Read error: Connection reset by peer)
15:55:12 sammelweis_ joins (~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10)
15:55:21 × sammelweis quits (~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10) (Ping timeout: 256 seconds)
15:55:28 beefbambi joins (~beefbambi@49.204.133.80)
15:55:36 razetime joins (~quassel@49.207.196.133)
15:59:21 sayola joins (~sayola@dslb-002-201-085-035.002.201.pools.vodafone-ip.de)
15:59:23 × sammelweis_ quits (~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10) (Ping timeout: 246 seconds)
16:03:29 sammelweis joins (~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10)
16:07:10 × Sauvin quits (~sauvin@user/Sauvin) (Quit: Leaving)
16:07:55 Sauvin joins (~sauvin@user/Sauvin)
16:09:00 × money___ quits (~money@pool-100-11-18-203.phlapa.fios.verizon.net) (Quit: late)
16:10:48 × sammelweis quits (~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10) (Quit: No Ping reply in 180 seconds.)
16:10:58 sammelweis joins (~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10)
16:17:29 × beefbambi quits (~beefbambi@49.204.133.80) (Ping timeout: 260 seconds)
16:17:46 trev_ joins (~trev@109.252.35.99)
16:18:21 beefbambi joins (~beefbambi@2401:4900:230d:f57c:538c:d7cc:50c0:e377)
16:19:59 × cheater quits (~Username@user/cheater) (Ping timeout: 264 seconds)
16:20:57 × trev quits (~trev@user/trev) (Ping timeout: 255 seconds)
16:24:08 × lortabac quits (~lortabac@2a01:e0a:541:b8f0:868e:d6ba:423c:8634) (Quit: WeeChat 2.8)
16:24:56 jpds3 is now known as jpds
16:29:13 notzmv joins (~zmv@user/notzmv)
16:39:56 money__ joins (~money@2601:40:c580:8530:9c03:7900:f37d:8622)
16:40:22 × money__ quits (~money@2601:40:c580:8530:9c03:7900:f37d:8622) (Changing host)
16:40:22 money__ joins (~money@user/polo)
16:40:22 ChanServ sets mode +o litharge
16:40:23 litharge sets mode +b *!*@2601:40:c580:8530:9c03:7900:f37d:8622
16:40:34 litharge sets mode -o litharge
16:43:36 × money__ quits (~money@user/polo) (Client Quit)
16:44:15 eggplantade joins (~Eggplanta@104-55-37-220.lightspeed.sntcca.sbcglobal.net)
16:44:41 acidjnk joins (~acidjnk@p200300d6e7137a4229c4b6108dcb2f5b.dip0.t-ipconnect.de)
16:47:30 × sammelweis quits (~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10) (Quit: No Ping reply in 180 seconds.)
16:48:38 sammelweis joins (~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10)
16:49:09 × gurkenglas quits (~gurkengla@p548ac72e.dip0.t-ipconnect.de) (Ping timeout: 252 seconds)
16:54:03 gnalzo joins (~gnalzo@2a01:e0a:498:fd50:fcc6:bb5d:489a:ce8c)
17:00:05 titibandit joins (~titibandi@xdsl-89-0-163-79.nc.de)
17:00:50 × eggplantade quits (~Eggplanta@104-55-37-220.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection)
17:01:24 wroathe joins (~wroathe@207-153-38-140.fttp.usinternet.com)
17:01:25 × wroathe quits (~wroathe@207-153-38-140.fttp.usinternet.com) (Changing host)
17:01:25 wroathe joins (~wroathe@user/wroathe)
17:01:42 × mbuf quits (~Shakthi@49.204.113.226) (Quit: Leaving)
17:05:30 × sammelweis quits (~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10) (Quit: No Ping reply in 180 seconds.)
17:06:47 sammelweis joins (~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10)
17:09:47 × fizbin quits (~fizbin@user/fizbin) (Ping timeout: 246 seconds)
17:10:05 × califax quits (~califax@user/califx) (Ping timeout: 255 seconds)
17:11:15 califax joins (~califax@user/califx)
17:11:33 fizbin joins (~fizbin@user/fizbin)
17:15:52 × haasn quits (~nand@haasn.dev) (Quit: ZNC 1.7.5+deb4 - https://znc.in)
17:17:45 money__ joins (~money@c-73-188-62-22.hsd1.pa.comcast.net)
17:24:30 × money__ quits (~money@c-73-188-62-22.hsd1.pa.comcast.net) (Quit: late)
17:25:04 CodeInTheShade joins (~CodeInThe@2a02:c7c:5256:d500:49bd:7435:2cab:65db)
17:26:34 econo joins (uid147250@user/econo)
17:31:12 money__ joins (~money@2601:40:c580:8530:215e:3848:10c5:78d9)
17:36:55 × trev_ quits (~trev@109.252.35.99) (Remote host closed the connection)
17:36:59 koz_ is now known as koz
17:40:41 × gehmehgeh quits (~user@user/gehmehgeh) (Ping timeout: 255 seconds)
17:41:21 razetime1 joins (~Thunderbi@49.207.196.133)
17:42:27 gehmehgeh joins (~user@user/gehmehgeh)
17:53:11 × perrierjouet quits (~perrier-j@modemcable048.127-56-74.mc.videotron.ca) (Quit: WeeChat 3.7.1)
17:54:24 jakalx parts (~jakalx@base.jakalx.net) (Disconnected: Replaced by new connection)
17:54:25 jakalx joins (~jakalx@base.jakalx.net)
17:57:02 × beefbambi quits (~beefbambi@2401:4900:230d:f57c:538c:d7cc:50c0:e377) (Ping timeout: 246 seconds)
17:57:09 eggplantade joins (~Eggplanta@2600:1700:38c5:d800:3964:1012:a01c:6912)
17:58:32 × razetime1 quits (~Thunderbi@49.207.196.133) (Quit: razetime1)
17:58:35 × razetime quits (~quassel@49.207.196.133) (Quit: https://quassel-irc.org - Chat comfortably. Anywhere.)
17:59:50 razetime joins (~Thunderbi@49.207.196.133)
18:01:00 × fizbin quits (~fizbin@user/fizbin) (Ping timeout: 272 seconds)
18:05:10 × razetime quits (~Thunderbi@49.207.196.133) (Quit: razetime)
18:12:33 Sgeo joins (~Sgeo@user/sgeo)
18:14:15 tzh joins (~tzh@c-24-21-73-154.hsd1.or.comcast.net)
18:25:20 × notzmv quits (~zmv@user/notzmv) (Ping timeout: 246 seconds)
18:27:37 × money__ quits (~money@2601:40:c580:8530:215e:3848:10c5:78d9) (Quit: late)
18:29:59 × Typedfern quits (~Typedfern@221.red-83-37-36.dynamicip.rima-tde.net) (Ping timeout: 252 seconds)
18:36:26 × eggplantade quits (~Eggplanta@2600:1700:38c5:d800:3964:1012:a01c:6912) (Remote host closed the connection)
18:39:53 × mmhat quits (~mmh@p200300f1c721be6dee086bfffe095315.dip0.t-ipconnect.de) (Ping timeout: 265 seconds)
18:40:16 mmhat joins (~mmh@p200300f1c721be80ee086bfffe095315.dip0.t-ipconnect.de)
18:42:27 eggplantade joins (~Eggplanta@2600:1700:38c5:d800:3964:1012:a01c:6912)
18:42:39 Typedfern joins (~Typedfern@60.red-83-37-32.dynamicip.rima-tde.net)
18:48:38 × azimut quits (~azimut@gateway/tor-sasl/azimut) (Ping timeout: 255 seconds)
18:48:43 money__ joins (~money@2601:40:c580:8530:215e:3848:10c5:78d9)
18:49:40 × sammelweis quits (~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10) (Quit: No Ping reply in 180 seconds.)
18:50:29 × money__ quits (~money@2601:40:c580:8530:215e:3848:10c5:78d9) (Changing host)
18:50:29 money__ joins (~money@user/polo)
18:50:29 ChanServ sets mode +o litharge
18:50:30 litharge sets mode +b *!*@2601:40:c580:8530:215e:3848:10c5:78d9
18:50:41 litharge sets mode -o litharge
18:51:27 sammelweis joins (~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10)
18:52:35 beefbambi joins (~beefbambi@2401:4900:230d:f57c:538c:d7cc:50c0:e377)
18:54:08 jakalx parts (~jakalx@base.jakalx.net) (Error from remote client)
18:56:01 jakalx joins (~jakalx@base.jakalx.net)
19:02:02 money__ parts (~money@user/polo) ()
19:04:59 trev joins (~trev@user/trev)
19:06:36 × beefbambi quits (~beefbambi@2401:4900:230d:f57c:538c:d7cc:50c0:e377) (Read error: Connection reset by peer)
19:06:45 beefbambi joins (~beefbambi@2401:4900:230d:f57c:538c:d7cc:50c0:e377)
19:09:41 × CodeInTheShade quits (~CodeInThe@2a02:c7c:5256:d500:49bd:7435:2cab:65db) (Quit: My MacBook has gone to sleep. ZZZzzz…)
19:12:34 × wootehfoot quits (~wootehfoo@user/wootehfoot) (Ping timeout: 272 seconds)
19:14:18 CodeInTheShade joins (~CodeInThe@2a02:c7c:5256:d500:49bd:7435:2cab:65db)
19:20:33 fizbin joins (~fizbin@user/fizbin)
19:24:00 × CodeInTheShade quits (~CodeInThe@2a02:c7c:5256:d500:49bd:7435:2cab:65db) (Quit: My MacBook has gone to sleep. ZZZzzz…)
19:27:14 mc47 joins (~mc47@xmonad/TheMC47)
19:29:26 CodeInTheShade joins (~CodeInThe@2a02:c7c:5256:d500:49bd:7435:2cab:65db)
19:29:40 Guest323 joins (~finn@roc37-h01-176-170-197-243.dsl.sta.abo.bbox.fr)
19:31:23 × acidjnk quits (~acidjnk@p200300d6e7137a4229c4b6108dcb2f5b.dip0.t-ipconnect.de) (Ping timeout: 248 seconds)
19:39:51 × beefbambi quits (~beefbambi@2401:4900:230d:f57c:538c:d7cc:50c0:e377) (Read error: Connection reset by peer)
19:41:07 beefbambi joins (~beefbambi@183.82.177.237)
19:41:11 unit73e joins (~emanuel@2001:818:e8dd:7c00:656:e5ff:fe72:9d36)
19:43:19 acidjnk joins (~acidjnk@p200300d6e7137a42b47c8252f7d3d407.dip0.t-ipconnect.de)
19:49:31 × beefbambi quits (~beefbambi@183.82.177.237) (Read error: Connection reset by peer)
19:49:50 beefbambi joins (~beefbambi@37.19.205.196)
19:50:53 × CodeInTheShade quits (~CodeInThe@2a02:c7c:5256:d500:49bd:7435:2cab:65db) (Quit: My MacBook has gone to sleep. ZZZzzz…)
19:56:13 CodeInTheShade joins (~CodeInThe@2a02:c7c:5256:d500:49bd:7435:2cab:65db)
20:00:54 × Ram-Z quits (~Ram-Z@li1814-254.members.linode.com) (Ping timeout: 260 seconds)
20:02:51 Ram-Z joins (~Ram-Z@li1814-254.members.linode.com)
20:07:47 perrierjouet joins (~perrier-j@modemcable048.127-56-74.mc.videotron.ca)
20:15:09 Topsi joins (~Topsi@dialin-80-228-141-004.ewe-ip-backbone.de)
20:18:47 × beefbambi quits (~beefbambi@37.19.205.196) (Ping timeout: 264 seconds)
20:19:23 beefbambi joins (~beefbambi@183.82.177.237)
20:23:28 <ddellacosta> fast-logger is thread-safe? Code suggests so but I don't see it explicitly documented anywhere
20:30:26 <ddellacosta> nevermind https://github.com/kazu-yamamoto/logger/issues/203
20:30:50 <EvanR> oof
20:31:05 <ddellacosta> yeah :-(
20:31:15 × johnw quits (~johnw@2600:1700:cf00:db0:e590:8ce7:d874:8b6) (Quit: ZNC - http://znc.in)
20:32:05 <dsal> Is the problem just logs not happening in the right order?
20:32:20 <ddellacosta> I mean, that's not such a big deal if I don't care about ordering, that's true
20:32:35 <geekosaur> lookslike it
20:32:43 <ddellacosta> but, it does make me want to take a closer look at the code
20:33:38 <dsal> It's not clear to me what the relationship between "multithreaded code" and "right order" is if there's not explicit causality being tracked.
20:34:20 <ddellacosta> I mean, I guess the main thing I want to know is that I can order after the fact correctly via timestamps
20:34:24 <EvanR> if precise timestamps are recorded then it's not true they logs will have increasing (non-decreasing?) timestamps
20:34:55 fizbin_ joins (~fizbin@user/fizbin)
20:34:59 notzmv joins (~zmv@user/notzmv)
20:35:00 <EvanR> whatever that's worth
20:36:03 <monochrom> Oh, it's saying out of order for messages from the same thread.
20:36:31 <EvanR> how the heck
20:38:42 × fizbin quits (~fizbin@user/fizbin) (Ping timeout: 272 seconds)
20:39:27 jakalx parts (~jakalx@base.jakalx.net) (Error from remote client)
20:39:49 pavonia joins (~user@user/siracusa)
20:40:54 <monochrom> But then, I don't understand why the analysis explains the obersvation :)
20:41:13 <unit73e> log thread-safe? I never expect much instruction ordering in haskell, but that's because I never cared as long as the final result is valid.
20:41:34 <monochrom> What if "the final result" means the log? :)
20:41:56 <unit73e> in that case yeah I would care :p but that would create a big bottleneck
20:42:05 jakalx joins (~jakalx@base.jakalx.net)
20:42:17 <jean-paul[m]> Where does an error like "solveWanteds: too many iterations (limit = 4)" come from? I just started using a lens and RecursiveDo at the same time (for the first time in both cases), not sure which is to blame
20:42:42 fizbin__ joins (~fizbin@user/fizbin)
20:43:12 <monochrom> What is the MonadFix instance in this case?
20:45:32 <geekosaur> jean-paul[m], that's the typechecker, and it's probably RecursiveDo (which is why monochrom is asking about the MonadFix instance, because mdo uses mfix behind the scenes)
20:46:05 × fizbin_ quits (~fizbin@user/fizbin) (Ping timeout: 246 seconds)
20:46:33 <monochrom> Wait, it is a type error, not a run-time error?
20:46:46 <jean-paul[m]> Does the rest of the error tell me the relevant MonadFix instance (it says "[D] _ {1}:: MonadFix s0 (CDictCan)" but I don't know what that means)
20:46:46 <geekosaur> solveWanteds is the typechecker, yes
20:46:54 <jean-paul[m]> It is a type error yes, sorry for not specifying.
20:47:30 × Topsi quits (~Topsi@dialin-80-228-141-004.ewe-ip-backbone.de) (Ping timeout: 268 seconds)
20:47:41 <geekosaur> but MonadFix is very likely to be why solveWanteds is looping
20:48:14 <monochrom> Then I don't know.
20:48:38 <jean-paul[m]> is solveWanteds trying to ... tie the knot, or something? And the error means it couldn't get it tied (in few enough iterations)?
20:49:11 <geekosaur> more complicated than that; you can't tie the knot at type level, only at value level using laziness
20:49:41 <jean-paul[m]> I think I fixed the cause ... I had wrong precedence on a lens operator so there was a trivial type error in the do block. But that was just from guessing, not because I understood any part of the error message.
20:50:16 <monochrom> I only know one kind of type-level "looping", and it's the well-known one since even Prolog: occurs check aka infinite type, which would be "(limit = finite)", not "(limit = 4)".
20:50:52 <geekosaur> I think the error means some type can't be resolved properly because it has as many unsolved "wanteds" (type variables, essentially) after resolving inner types as it had originally
20:51:00 <EvanR> ultrafinite types
20:51:01 <geekosaur> this shouldn't happen normally
20:51:31 <geekosaur> well, I guess I can't say that with certainty, iirc you can trigger it with type families
20:52:17 <jean-paul[m]> I am also learning to use Reflex ... which seems to use type families a lot.
20:54:17 × beefbambi quits (~beefbambi@183.82.177.237) (Ping timeout: 268 seconds)
20:54:31 beefbambi joins (~beefbambi@2401:4900:230d:f57c:538c:d7cc:50c0:e377)
20:56:28 lortabac joins (~lortabac@2a01:e0a:541:b8f0:2aee:78bc:c5aa:c32c)
20:56:44 × beefbambi quits (~beefbambi@2401:4900:230d:f57c:538c:d7cc:50c0:e377) (Read error: Connection reset by peer)
20:58:23 beefbambi joins (~beefbambi@183.82.177.237)
20:58:32 × lortabac quits (~lortabac@2a01:e0a:541:b8f0:2aee:78bc:c5aa:c32c) (Client Quit)
21:01:41 monochrom has a toy program that uses both BangPatterns and NumericUnderscores. OK that's it, let's just go GHC2021 haha.)
21:01:45 random-jellyfish joins (~random-je@user/random-jellyfish)
21:03:37 <monochrom> Oh! I'm also learning the eveff library, and when you use it you usually want to turn on TypeOperators, FlexibleContexts, RankNTypes. That's also simplifiable to GHC2021. :)
21:04:17 × trev quits (~trev@user/trev) (Remote host closed the connection)
21:15:09 × random-jellyfish quits (~random-je@user/random-jellyfish) (Quit: Client closed)
21:15:26 × jonathanx quits (~jonathan@h-178-174-176-109.A357.priv.bahnhof.se) (Ping timeout: 246 seconds)
21:17:18 fizbin__ is now known as fizbin
21:17:36 × wroathe quits (~wroathe@user/wroathe) (Read error: Connection reset by peer)
21:18:02 <fizbin> Does anyone know how to get coverage of an executable's "main" module out of stack?
21:18:34 random-jellyfish joins (~random-je@user/random-jellyfish)
21:20:06 <fizbin> I can't figure out how to use "stack hpc" to give me what I want, though I do have these *.tix files. Is there some way I can manually take this .tix file and apply it to my main .hs file?
21:21:10 × random-jellyfish quits (~random-je@user/random-jellyfish) (Client Quit)
21:21:57 <glguy> fizbin: are you already looking at https://wiki.haskell.org/Haskell_program_coverage#Hpc_with_a_Cabal_project ?
21:22:11 × CodeInTheShade quits (~CodeInThe@2a02:c7c:5256:d500:49bd:7435:2cab:65db) (Quit: My MacBook has gone to sleep. ZZZzzz…)
21:22:30 random-jellyfish joins (~random-je@user/random-jellyfish)
21:24:08 × Xeroine quits (~Xeroine@user/xeroine) (Read error: Connection reset by peer)
21:24:22 Xeroine joins (~Xeroine@user/xeroine)
21:27:53 gurkenglas joins (~gurkengla@p548ac72e.dip0.t-ipconnect.de)
21:30:40 × beefbambi quits (~beefbambi@183.82.177.237) (Read error: Connection reset by peer)
21:31:31 beefbambi joins (~beefbambi@183.82.177.237)
21:32:13 × mc47 quits (~mc47@xmonad/TheMC47) (Remote host closed the connection)
21:32:25 × random-jellyfish quits (~random-je@user/random-jellyfish) (Quit: Client closed)
21:32:37 random-jellyfish joins (~random-je@user/random-jellyfish)
21:33:51 × zer0bitz quits (~zer0bitz@196.244.192.62) (Read error: Connection reset by peer)
21:40:04 × freeside quits (~mengwong@103.252.202.159) (Ping timeout: 260 seconds)
21:40:29 × random-jellyfish quits (~random-je@user/random-jellyfish) (Quit: Client closed)
21:45:07 × biberu quits (~biberu@user/biberu) (Read error: Connection reset by peer)
21:48:39 johnw joins (~johnw@76-234-69-149.lightspeed.frokca.sbcglobal.net)
21:50:57 biberu joins (~biberu@user/biberu)
21:52:24 freeside joins (~mengwong@103.252.202.159)
21:54:17 cheater joins (~Username@user/cheater)
21:55:29 CodeInTheShade joins (~CodeInThe@2a02:c7c:5256:d500:49bd:7435:2cab:65db)
21:56:45 × freeside quits (~mengwong@103.252.202.159) (Ping timeout: 260 seconds)
21:58:03 × unit73e quits (~emanuel@2001:818:e8dd:7c00:656:e5ff:fe72:9d36) (Ping timeout: 248 seconds)
21:59:27 × CodeInTheShade quits (~CodeInThe@2a02:c7c:5256:d500:49bd:7435:2cab:65db) (Client Quit)
22:00:50 × johnw quits (~johnw@76-234-69-149.lightspeed.frokca.sbcglobal.net) (Ping timeout: 260 seconds)
22:01:01 × n0den1te quits (~n0den1te@223.178.84.197) (Quit: leaving)
22:03:22 × L29Ah quits (~L29Ah@wikipedia/L29Ah) (Ping timeout: 265 seconds)
22:06:21 <geekosaur> mm, nheko still dumps core when checking my matrix account, forgot about that
22:07:04 × titibandit quits (~titibandi@xdsl-89-0-163-79.nc.de) (Remote host closed the connection)
22:11:22 <monochrom> yikes haha
22:12:33 freeside joins (~mengwong@103.252.202.159)
22:14:06 <fizbin> glguy: Actually, https://downloads.haskell.org/~ghc/7.6.3/docs/html/users_guide/hpc.html showed me enough commands to cobble together a report.
22:14:27 × ozkutuk53 quits (~ozkutuk@176.240.173.153) (Ping timeout: 256 seconds)
22:25:08 × fizbin quits (~fizbin@user/fizbin) (Ping timeout: 246 seconds)
22:27:24 <bjourne> how do you write an empty do block?
22:27:53 <Rembane> bjourne: It's very hard. What makes you want to do that?
22:28:12 <bjourne> if without else
22:28:57 <Rembane> Perhaps guard can help you there.
22:28:59 <Rembane> :t guard
22:29:00 <lambdabot> Alternative f => Bool -> f ()
22:29:05 CodeInTheShade joins (~CodeInThe@2a02:c7c:5256:d500:49bd:7435:2cab:65db)
22:30:39 <sm> or when or unless. Also return () often works.
22:30:46 <EvanR> :t do {}
22:30:48 <lambdabot> error: Empty 'do' block
22:31:05 <EvanR> "you can't"
22:32:19 <mauke[m]> :t do { M.empty }
22:32:21 <lambdabot> M.Map k a
22:32:39 cheater_ joins (~Username@user/cheater)
22:33:58 × cheater quits (~Username@user/cheater) (Ping timeout: 272 seconds)
22:34:04 <dsal> > do do do do do do do do do do do empty :: Maybe ()
22:34:05 <lambdabot> Nothing
22:34:28 cheater__ joins (~Username@user/cheater)
22:34:28 cheater__ is now known as cheater
22:34:40 <shapr> I like that song
22:34:50 <monochrom> No, not guard. when.
22:35:12 <monochrom> Alternatively, "empty do block" is pure().
22:35:40 <Rembane> But then the do block has content even though it doesn't do anything.
22:35:52 <Rembane> I suppose you could see it in a syntactic or semantic way.
22:35:55 <monochrom> Well yeah it's an XY problem.
22:36:14 <EvanR> is the opposite of empty do = mfix return
22:36:21 × CodeInTheShade quits (~CodeInThe@2a02:c7c:5256:d500:49bd:7435:2cab:65db) (Quit: My MacBook has gone to sleep. ZZZzzz…)
22:36:29 <monochrom> "I want to do nothing. I think it is achieved by an empty do block."
22:36:43 <dsal> :t do Nothing
22:36:44 <lambdabot> Maybe a
22:37:15 <Rembane> And then things go wrong and I can take care of it like this:
22:37:17 <Rembane> > fix error
22:37:18 <lambdabot> "*Exception: *Exception: *Exception: *Exception: *Exception: *Exception: *Ex...
22:37:21 <Rembane> :D
22:37:31 <monochrom> Studying program semantics (any kind) will reveal that so-called "if-then without else" is syntax sugar for if-then-with-else but the else branch says "nop".
22:38:24 × cheater_ quits (~Username@user/cheater) (Ping timeout: 272 seconds)
22:38:26 <monochrom> Semantically there is always two branches and there is always content in each, even if the content may be trivial.
22:39:21 <bjourne> :) true but programmers care about aestethics so we don't write if (blah) { ... } else { } if we dont need the else
22:39:30 CodeInTheShade joins (~CodeInThe@2a02:c7c:5256:d500:49bd:7435:2cab:65db)
22:39:36 <monochrom> Here "trivial" means the identity function (for functional semantics) or the identity for sequential composition (for imperative semantics). In each case the identity element of respective monoids, yes.
22:40:10 <geekosaur[m]> bjourne, understand that if is not a statement, it is an expression
22:40:13 <monochrom> Programmers should care about both aesthetics and semantics.
22:40:31 <geekosaur[m]> everything in haskell is an expression
22:40:37 <dsal> bjourne: if is an expression. What does it mean to say `let a = if False then 1` ?
22:40:42 <bjourne> i'm well aware of that
22:40:57 <monochrom> For some reason, usually FP tends to make you more painfully aware of semantics.
22:41:38 caryhartline joins (~caryhartl@2600:1700:2d0:8d30:e41e:1f5b:1741:59ed)
22:41:48 [itchyjunk] joins (~itchyjunk@user/itchyjunk/x-7353470)
22:41:53 <dsal> I rather dislike `if-then-else` in haskell. `bool` is usually worse, though.
22:42:33 × CodeInTheShade quits (~CodeInThe@2a02:c7c:5256:d500:49bd:7435:2cab:65db) (Client Quit)
22:42:40 <monochrom> Is that just because of boolean being much less expressive that general ADT cases?
22:42:41 <bjourne> yeah similar to how c makes you painfully aware of how the heap works
22:43:04 <mauke[m]> technical note: C doesn't have a heap
22:43:14 <monochrom> Because the same consideration applies for "what if in some case I want to 'do nothing'".
22:44:04 <mauke[m]> technical note: gcc has a ?: operator with an optional 'then' branch
22:44:27 <davean> mauke[m]: which definition are you using to say C lacks a heap?
22:44:55 <geekosaur[m]> C doesn't define one, malloc/free are defined by a library
22:45:10 <mauke[m]> the standard library is part of C
22:45:25 <monochrom> Or you just don't like the surface syntax of "if cond then b1 else b2", you would rather like "cond ? b1 : b2" or even Hoare's invention "b1 <| cond |> b2" :)
22:45:49 <mauke[m]> oh no, middle endian control flow
22:46:04 <mauke[m]> davean: ISO 9899:something something
22:46:45 <monochrom> Let's just ignore the pedantics.
22:46:47 <davean> mauke[m]: It doesn't *mention* a heap
22:47:19 <monochrom> I am an average community member and when I see "heap in C" I know what the speaker refers to and I know it exists we need not "correct" the wording.
22:47:45 <monochrom> Languages are defined by actual users. Including both conversations and C.
22:48:01 <mauke[m]> how big is the average community?
22:48:04 <davean> I mean "heap memory" is a description of dynamic, non-stack memory
22:48:10 <davean> and C certainly has that in that specification
22:48:17 <davean> so ... it has a heap technically.
22:48:40 <davean> You might use a non-standard definition of heap, and then it wouldn't
22:48:43 <mauke[m]> I'm not sure C has a stack either, so "non-stack" may be ill-defined
22:49:42 <EvanR> now you all are making me question "how the heap works" xD
22:49:46 <EvanR> as a concept
22:50:07 <davean> mauke[m]: you seem to be claiming if a standard doesn't reference something by name that such a thing doesn't exist even though its semantics are pressent and the thing is a categorization
22:50:35 <mauke[m]> sorry for making you painfully aware :-)
22:50:52 <monochrom> The statement "c makes you painfully aware of how the heap works" is true because you have to painfully decide when to call malloc() and when to call free() and you will make mistakes and it all blows up. And painfully if you are lucky to work on an embedded system it may even lack a heap in the first place. In both cases the statement is true.
22:50:54 <EvanR> starting with, does it even (work)
22:51:58 <monochrom> In the same way "Python makes you painfully aware of static type checking" precisely because it doesn't have it.
22:52:36 <monochrom> And of course on the flip side "Haskell makes you painfully aware of dynamic type checking" to be fair haha.
22:52:40 <mauke[m]> davean: I think we're getting close to "monads are just containers" territory
22:53:16 <davean> No monads aren't containers, they're a set of operators and laws
22:53:24 <davean> anything that does that is a monad very clearly.
22:53:28 <mauke[m]> in that I claim "heap" (like "containers") is not a well-defined category, so its semantics are murky
22:54:03 <davean> Many monads *are not containers* in that they contain nothing.
22:54:10 <davean> :-p
22:54:22 <mauke[m]> for example?
22:54:23 <davean> eh
22:54:32 <davean> no, I'm walking that back, because thats not quite what I meant to say
22:54:42 <davean> and its not interesting anyway
22:55:00 <monochrom> Monads are heaps. There.
22:55:04 <davean> particularly because this is a Haskell channel, and we have a seperate definition of Monad
22:55:17 <Jadesheit[m]> the `(->) r` monad?
22:55:33 <mauke[m]> that's a container. more specifically, it's a map
22:57:21 mikoto-chan joins (~mikoto-ch@164.5.249.78)
22:58:41 <mauke[m]> <monochrom> "The statement "c makes you..." <- I'd say that's more C making you painfully aware of manual memory management
22:59:33 <mauke[m]> to which you could reply "well, that's just what I mean by 'heap'"
23:00:00 <monochrom> We need not "correct" the wording.
23:00:11 <mauke[m]> but I feel it equally applies to e.g. the file system, and I haven't seen anyone refer to that as a heap
23:00:37 <monochrom> And to answer your earlier question "how big is the average community?", answer: Includes all those here who were not picking on the wording.
23:02:41 dsrt^ joins (~dsrt@76.145.185.103)
23:03:19 <EvanR> if a container is defined as a boundary clearly partitioning inside from outside, that nicely excludes like everything people usually call containers in programming xD
23:04:56 <monochrom> I don't think people define it that way. I think people define it to be "add data" and "get data back".
23:05:52 <mauke[m]> I don't think people define things precisely
23:06:01 <ggVGc> the thing about words... is that they can have different meanings in different contexts
23:06:03 <ggVGc> like magic
23:06:20 <monochrom> It is never referentially transparent.
23:06:36 <monochrom> If that's magic, then (->)r is magic, too.
23:06:39 <ggVGc> I once thought things were very well defined in maths, but then I was forced to study a bunch of maths this year. And now I know better
23:06:53 <monochrom> In fact every monad is magic.
23:07:51 <monochrom> Oh things are usually very well defined in maths. So well defined there are multiple competing definitions for the same thing, and all competitors are very precise.
23:08:01 <ggVGc> haha
23:08:14 <ggVGc> well, yes... that's the correct interpretation I guess
23:08:14 × bjourne quits (~bjorn@94.191.136.87.mobile.tre.se) (Read error: Connection reset by peer)
23:08:22 morb joins (~morb@pool-72-80-94-112.nycmny.fios.verizon.net)
23:08:22 <monochrom> For example one definition precisely says "0 is not a natural number" and another precisely says "0 is a natural number".
23:08:39 <ggVGc> I also was not aware how wild the space of notation was
23:08:40 fizbin joins (~fizbin@user/fizbin)
23:09:15 <ggVGc> but then I'm a physics major, and the physicists are even more insane with notations
23:09:22 <ggVGc> turns out language is hard
23:09:26 <ggVGc> and context-sensitive
23:09:48 <Hecate> formalising the outside world was a mistake
23:09:50 <EvanR> physics would be easier with type signatures
23:10:02 <EvanR> at a certain level I wonder if anyone's even tried
23:10:07 <ggVGc> please don't make my add type signatures to my lab reports
23:10:07 <Hecate> we must go back to avoiding insulting the gods
23:10:15 <Hecate> and to hell with petrochemistry
23:10:20 <Hecate> ggVGc: :D
23:10:21 <mauke[m]> I knew math notation was a mess when I saw | used to mean absolute value, set definition, and "divides", all in the same line
23:10:31 <Hecate> mauke[m]: oh dear
23:10:40 <EvanR> |1lI
23:11:11 <ggVGc> mauke[m]: my favourite so far is my linear algebra book using pi as the name of a plane, while also talking about the angles relating to said plane, in terms of pi, in the same blob of text
23:11:20 × takuan quits (~takuan@178-116-218-225.access.telenet.be) (Ping timeout: 246 seconds)
23:11:24 <mauke[m]> haha
23:11:29 <darkling> Youch.
23:11:44 <Rembane> ggVGc: Crystal clear! :D
23:11:47 cheater_ joins (~Username@user/cheater)
23:12:16 <Hecate> some editors must be equipped with a hammer
23:12:18 <Hecate> a big hammer
23:12:49 × morb quits (~morb@pool-72-80-94-112.nycmny.fios.verizon.net) (Ping timeout: 260 seconds)
23:13:01 <ggVGc> or my current book using lowercase k and greek kappa in two equations which are almost identical, where the kappa is a value dependent on k
23:13:23 <ggVGc> and shows the two equations in different parts of the text
23:13:34 <ggVGc> and on each line I have to look close if it's the one with k or the one with kappa
23:14:16 × cheater quits (~Username@user/cheater) (Ping timeout: 268 seconds)
23:14:24 cheater_ is now known as cheater
23:14:52 <EvanR> small kappa looks different, k vs κ
23:14:52 <ggVGc> my conclusion is that programmers have it easy. We might fight about code styles, but at least the general symbols are forced to be coherent by compilers and interpeters
23:14:54 <ggVGc> mostly...
23:15:12 <darkling> I think they're mostly forced to be that way by the keyboards.
23:15:20 <ggVGc> EvanR: pretty hard to see the difference when reading the text though, especially since there's a bunch of other maths and explanations around it
23:15:24 <darkling> (APL, I'm looking at you)
23:15:38 <ggVGc> it's not that it's impossible, just adds a bit too much strain when trying to learn the material, for my taste
23:15:52 <EvanR> picking letters is really an art, it's all about your audience familiarity with implications
23:16:17 <ggVGc> true
23:16:23 <EvanR> and collisions are resolved with the infamous "will be clear from context"
23:16:25 <darkling> I had a table of symbols in the back of my thesis. Fortunately, it only ran to two pages.
23:16:28 <ggVGc> I always feel weird when I pick something non-standard in an exam
23:16:28 <mauke[m]> if only mathematicians weren't allergic to multi-letter identifiers ("words")
23:16:36 <ggVGc> feels like I'm gonna get points off for not sticking to the norm
23:16:46 <mauke[m]> then they wouldn't have to keep opening up new alphabets
23:17:00 <ggVGc> that would make the maths quite weird to read, imo
23:17:09 <EvanR> you'd need a different font so it doesn't look like a bunch of letters times
23:17:16 <monochrom> Yes, precisely multi-letter identifiers save the day.
23:17:18 <ggVGc> since letters next to each other is multiplication, which I think basically everyone agrees on
23:17:34 <monochrom> Then again you lose "abc means a times b times c".
23:17:35 <EvanR> distance = rate * time
23:18:05 <mauke[m]> sin(c o s)
23:18:18 <ggVGc> maths already gets super long and messy. I think adding multi-letter words to it would make it way too unwieldly
23:18:31 <monochrom> Then again since mathematicians already embrace ambiguity "you figure it out", why not accept both >:D
23:18:44 <ggVGc> however, as mauke[m] just pointed out, some functions apparently get to be named multilatter...
23:18:54 <EvanR> super long and messy math = failed math xD
23:19:04 <mauke[m]> (f)(x)
23:19:04 <monochrom> "abc may mean abc, or a times bc, or ab times c, or a times b times c, depending on context"
23:19:07 <ggVGc> I fail maths every day. AMA
23:19:16 <mauke[m]> multiplication or application?
23:19:16 <geekosaur> y'all do know about U+2062, right?
23:19:41 <monochrom> > text "\u2062"
23:19:43 <lambdabot> <hint>:1:8: error:
23:19:43 <lambdabot> lexical error in string/character literal at character 'u'
23:20:00 <geekosaur> > text "\x2062"
23:20:02 <lambdabot>
23:20:11 <geekosaur> invisible multiplication sign
23:20:11 <mauke[m]> great times were had
23:20:41 <mauke[m]> ... and that crashed my Element
23:20:51 <ggVGc> as it should
23:20:58 <monochrom> Oh haha invisible times
23:20:59 × freeside quits (~mengwong@103.252.202.159) (Ping timeout: 260 seconds)
23:21:20 freeside joins (~mengwong@103.252.202.159)
23:21:51 <dgpratt[m]> I'm playing around with a toy parser/interpreter for a very simple "language" (RS274 -- basically just a simple sequence of commands that may incorporate expressions and settable variables). But some have extended RS274 to include basic control flow and subroutines and I'm thinking about how to implement such things. One thing in particular I'm not sure how best to handle is the idea of exiting a subroutine from within (say) some nested
23:21:51 <dgpratt[m]> control flow block. Any ideas about how that might be accomplished?
23:21:55 <geekosaur> nheko (from flatpak since ubuntu's crashed) handled it fine
23:22:03 <monochrom> Oh and U+2061 is invisible function application.
23:22:16 × cheater quits (~Username@user/cheater) (Read error: Connection reset by peer)
23:22:50 <EvanR> who ordered these new invisible "characters"
23:22:51 <geekosaur> dgpratt[m], ContT at the price of your sanity
23:22:54 × gurkenglas quits (~gurkengla@p548ac72e.dip0.t-ipconnect.de) (Ping timeout: 268 seconds)
23:23:10 <mauke[m]> I was about to say, you can do anything with continuations
23:23:23 <dgpratt[m]> geekosaur: so funny you said that -- I was just going to say that I was afraid it might be some sort of CPS thing
23:23:47 <monochrom> "sin\x2061(2\x2062t) = 2\x2062sin\xt\x2062cos\x2061t" :)
23:23:53 <dgpratt[m]> for some reason, I find that sort of thing a bit intimidating
23:24:40 <monochrom> Ugh there is also invisible plus at U+2064 -_-
23:25:05 <ggVGc> I'm adopting monochrom's style for my exam in 2 weeks
23:25:24 <dgpratt[m]> geekosaur: anyways, I guess it's good to know my instincts weren't altogether wrongheaded, thanks
23:25:39 v0id_ptr joins (~adrift@user/ptr-frac7al/x-0038398)
23:25:44 <mauke[m]> alternatively, ruthlessly rename everything using Chinese characters
23:25:59 × freeside quits (~mengwong@103.252.202.159) (Ping timeout: 268 seconds)
23:26:01 <mauke[m]> there's thousands of them, so you can give every concept its own distinct symbol
23:26:42 <monochrom> dgpratt[m]: ContT is easier to use than writing your own CPS.
23:27:14 × __monty__ quits (~toonn@user/toonn) (Quit: leaving)
23:27:28 <dgpratt[m]> noted, thanks
23:31:58 gurkenglas joins (~gurkengla@p548ac72e.dip0.t-ipconnect.de)
23:32:12 × bgs quits (~bgs@212-85-160-171.dynamic.telemach.net) (Remote host closed the connection)
23:34:47 × fserucas quits (~fserucas@a85-138-107-42.cpe.netcabo.pt) (Ping timeout: 246 seconds)
23:36:15 johnw joins (~johnw@76-234-69-149.lightspeed.frokca.sbcglobal.net)
23:36:17 cheater joins (~Username@user/cheater)
23:37:37 <DigitalKiwi> geekosaur: if it's invisible why do i see it :(
23:37:53 × johnw quits (~johnw@76-234-69-149.lightspeed.frokca.sbcglobal.net) (Client Quit)
23:38:21 <geekosaur> got a glyph box because your font doesn't have it
23:38:23 <geekosaur> ?
23:38:33 <ggVGc> monochrom: might be easier to do it manually first though?
23:38:38 <monochrom> Yikes, GHC2021's PolyKinds may ruin some of my code.
23:38:43 <DigitalKiwi> there's a dotted square around a x
23:38:46 <ggVGc> like using explicit state and then moving to State monad
23:38:51 <geekosaur> fascinating
23:38:58 <EvanR> sorry, your font has this glyph but it's supposed to be invisible. Aborting
23:39:08 <DigitalKiwi> https://capture.dropbox.com/1yxEyTcJIfmaPYvj
23:39:16 <geekosaur> saner but not what was intended
23:39:16 bjourne joins (~bjorn@94.191.136.87.mobile.tre.se)
23:41:01 <monochrom> "easier to understand the principle underneath" vs "easier to get things done right now this project was due yesterday"
23:41:41 <monochrom> "use" means the latter, not the former.
23:41:44 <ggVGc> usually it's hard to do the latter without the former
23:41:46 morb joins (~morb@pool-72-80-94-112.nycmny.fios.verizon.net)
23:41:47 <ggVGc> in my experience
23:42:56 freeside joins (~mengwong@103.252.202.159)
23:43:05 <DigitalKiwi> nah nobody understands monads but everyone writes blogs about them and uses them :D
23:43:12 <ggVGc> also, from the ContT documentation: "Before using the Continuation monad, be sure that you have a firm understanding of continuation-passing style and that continuations represent the best solution to your particular design problem. Many algorithms which require continuations in other languages do not require them in Haskell, due to Haskell's lazy semantics. Abuse of the Continuation monad can
23:43:14 <ggVGc> produce code that is impossible to understand and maintain."
23:43:16 <ggVGc> :)
23:44:00 <DigitalKiwi> the nice thing about monads is even if you don't understand them they're still useful eh
23:44:07 <geekosaur> cf. "…at the price of your sanity"
23:44:38 <ggVGc> let's be honest, it's the do notation we want
23:44:52 <geekosaur> twice a year I work out how Cont works and promptly forget it again
23:44:53 <ggVGc> still trying to train myself into ApplicativeDo
23:45:00 <monochrom> This is not worth my time. You are talking about general arbitrary usages. The context is a very specific narrow "early exit" and there is just one idiom to know and use.
23:45:17 random-jellyfish joins (~random-je@user/random-jellyfish)
23:45:56 <monochrom> And this is nowhere remotely close to "abuse".
23:46:23 × morb quits (~morb@pool-72-80-94-112.nycmny.fios.verizon.net) (Ping timeout: 264 seconds)
23:47:18 <monochrom> And to rub it in, this is actually a case of "an algorithm which does not require continuation in other languages requires it in Haskell", the very opposite of what the doc says.
23:47:21 <ggVGc> It was just in response to dgpratt[m] saying they are uncomfortable with CPS, and me remembering the documentation even has a warning along those lines in regards to ContT
23:47:45 <monochrom> And nothing says the doc is right in the first place.
23:47:49 × freeside quits (~mengwong@103.252.202.159) (Ping timeout: 260 seconds)
23:47:53 <EvanR> what's funny is you can expand do notation and format it so it looks almost the same as do notation
23:48:10 <EvanR> I'm surprised it's even a thing
23:48:18 × Tuplanolla quits (~Tuplanoll@91-159-68-152.elisa-laajakaista.fi) (Quit: Leaving.)
23:48:19 <ggVGc> EvanR: that's kind of the point of it, isn't it?
23:48:29 <ggVGc> But, there's more stuff on your screen then... which we don't like
23:48:41 <EvanR> there's very little "more" on the screen
23:48:49 <EvanR> if you try it xD
23:49:14 <EvanR> it's like when I rewrote my AoC code to use globals, it didn't actually reduce my code
23:49:26 <ggVGc> I often write things without do, but for longer things, all the binds kind of distract from the bigger picture
23:49:40 <EvanR> that's where the formatting comes in
23:49:41 <monochrom> Yeah there was a small window of time when there was >>= but no do-notation yet, so people thought up how to format it nicely.
23:50:46 <EvanR> and about the presence of >>= in there, sometimes knowing what those look like is key to understanding certain monadic constructions, wrt laziness
23:51:54 × fizbin quits (~fizbin@user/fizbin) (Ping timeout: 260 seconds)
23:52:48 mizlan joins (~mizlan@c-67-169-7-31.hsd1.ca.comcast.net)
23:53:29 <mizlan> hello am i connected
23:53:41 <monochrom> yes
23:54:20 <mizlan> woohoo thanks, i am new to IRC :)
23:54:59 × caryhartline quits (~caryhartl@2600:1700:2d0:8d30:e41e:1f5b:1741:59ed) (Ping timeout: 255 seconds)
23:55:07 <sm> welcome, private
23:58:12 × johnjaye quits (~pi@173.209.64.74) (Ping timeout: 272 seconds)
23:59:42 johnjaye joins (~pi@173.209.64.74)
23:59:51 freeside joins (~mengwong@103.252.202.159)
23:59:54 × mikoto-chan quits (~mikoto-ch@164.5.249.78) (Ping timeout: 268 seconds)

All times are in UTC on 2022-12-28.