Home liberachat/#haskell: Logs Calendar

Logs on 2024-12-13 (liberachat/#haskell)

00:00:15 rstromlund joins (~user@resi-86-63-140-12.isp.ozarksgo.net)
00:00:15 × rstromlund quits (~user@resi-86-63-140-12.isp.ozarksgo.net) (Changing host)
00:00:15 rstromlund joins (~user@user/rstromlund)
00:03:36 × Square quits (~Square@user/square) (Ping timeout: 252 seconds)
00:04:35 × rstromlund quits (~user@user/rstromlund) (Ping timeout: 244 seconds)
00:05:54 merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl)
00:10:55 × merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 260 seconds)
00:12:44 __jmcantrell__ joins (~weechat@user/jmcantrell)
00:12:47 jmcantrell is now known as Guest2459
00:12:47 × Guest2459 quits (644f1bed9a@user/jmcantrell) (Killed (copper.libera.chat (Nickname regained by services)))
00:12:47 __jmcantrell__ is now known as jmcantrell
00:12:55 jmcantrell_ joins (644f1bed9a@user/jmcantrell)
00:18:59 Smiles joins (uid551636@id-551636.lymington.irccloud.com)
00:21:17 merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl)
00:25:36 × merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 252 seconds)
00:32:42 × xff0x quits (~xff0x@2405:6580:b080:900:30ee:920a:5b76:45fa) (Ping timeout: 276 seconds)
00:36:41 merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl)
00:41:25 × merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 248 seconds)
00:52:04 merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl)
00:54:50 emmanuelux joins (~emmanuelu@user/emmanuelux)
00:58:36 × merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 252 seconds)
01:01:46 cuteguest joins (~cuteguest@2601:602:680:2280::5d66)
01:01:48 rstromlund joins (~user@user/rstromlund)
01:02:28 dustee joins (~dustee@2601:43:100:2710:f40e:3554:f28f:fa0b)
01:03:55 <cuteguest> hiii ^_^ is there a way to have a GADT or type family or something where there is like a 1 - 1 match for all values of the input? what i mean is.. lets say i have a GADT that is like: data Fumbo (b :: Bool) where.. so that there is always only one constructor for Fumbo True and Fumbo False?
01:05:32 <EvanR> what if you just used Bool
01:05:46 <Leary> @hackage singletons
01:05:47 <lambdabot> https://hackage.haskell.org/package/singletons
01:05:49 <Leary> cuteguest: ^
01:06:20 <cuteguest> woahg.. hav i landed in dependent type territory?
01:06:54 × rstromlund quits (~user@user/rstromlund) (Ping timeout: 265 seconds)
01:06:58 <cuteguest> i hav slightly heard of these thank you
01:07:53 <geekosaur> I'm trying to figure out if you maybe just need an injective type family?
01:09:04 <cuteguest> hmm hmm hmm hmm
01:10:06 merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl)
01:10:33 × sprotte24 quits (~sprotte24@p200300d16f14d100e5c9a68ab6a328e8.dip0.t-ipconnect.de) (Quit: Leaving)
01:12:51 <cuteguest> testing somthings
01:15:26 <Axman6> definitely sounds like singletons to me
01:15:36 dpratt joins (~dpratt@165.225.220.148)
01:15:50 <cuteguest> the thing thats nice about GADTs is that whenever i have a like a thing "class Flimbly a where; type R :: a -> Type" i can plug the GADT in the instance for R but i cant do that with type families
01:16:45 <cuteguest> singletons hmm..
01:18:28 × merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 244 seconds)
01:18:31 dostoevsky joins (~dostoevsk@user/dostoevsky)
01:19:56 rstromlund joins (~user@user/rstromlund)
01:20:03 <Axman6> cuteguest: https://blog.jle.im/entry/introduction-to-singletons-1.html is probably a better introduction than the package docs, which are pretty impenetrable
01:20:19 <cuteguest> tysm ^_^
01:22:05 <dpratt> haven't even gotten to the hard parts of day 12 and my `getRegion` function is quite slow -- any pointers or suggestions? https://gist.github.com/dgpratt/86b713c7dfadc748ae05fa1021750bb2
01:23:01 ljdarj1 joins (~Thunderbi@user/ljdarj)
01:23:03 peterbecich joins (~Thunderbi@syn-047-229-123-186.res.spectrum.com)
01:26:45 × ljdarj quits (~Thunderbi@user/ljdarj) (Ping timeout: 248 seconds)
01:26:45 ljdarj1 is now known as ljdarj
01:28:11 × dustee quits (~dustee@2601:43:100:2710:f40e:3554:f28f:fa0b) (Quit: Client closed)
01:28:43 <cuteguest> are you doing a code advent calendar? : )
01:29:31 merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl)
01:29:51 <dpratt> cuteguest guess you're asking me, in which case yes (well...I guess I am whether or not you asked me)
01:30:15 <cuteguest> i was asking you ^ .^
01:30:56 <dpratt> I like Haskell a lot, but I don't have much excuse/reason to use it. But when AoC comes around, I try to get as far as I can with Haskell solutions.
01:31:43 <cuteguest> aww thats cool
01:31:47 <cuteguest> haskell is great i think
01:31:56 × cuteguest quits (~cuteguest@2601:602:680:2280::5d66) (Quit: Client closed)
01:32:09 cuteguest joins (~cuteguest@c-73-239-49-112.hsd1.wa.comcast.net)
01:33:25 <dpratt> glguy you have any advice for my slow function above?
01:33:42 × ethantwardy quits (user@user/ethantwardy) (Quit: WeeChat 4.3.2)
01:34:09 × merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 248 seconds)
01:36:50 <c_wraith> dpratt: is it slow, or looping forever?
01:37:25 <dpratt> c_wraith slow -- `getRegion plotMap (1,1)` takes about 30s
01:37:35 <c_wraith> On which input, anyway?
01:37:54 × CrunchyFlakes quits (~CrunchyFl@ip1f13e94e.dynamic.kabel-deutschland.de) (Read error: Connection reset by peer)
01:37:57 <c_wraith> I mean, 30s is just implausible. today isn't a performance challenge. Just a "figure out how to do that" challenge.
01:38:06 <dpratt> c_wraith on the "real" input
01:38:19 <dpratt> c_wraith I agree, no idea why it takes so long
01:40:21 CrunchyFlakes joins (~CrunchyFl@31.19.233.78)
01:40:33 × peterbecich quits (~Thunderbi@syn-047-229-123-186.res.spectrum.com) (Ping timeout: 248 seconds)
01:42:10 xff0x joins (~xff0x@fsb6a9491c.tkyc517.ap.nuro.jp)
01:42:58 <c_wraith> ok, the only way it's going to be 30s is if it's going exponential
01:43:50 <c_wraith> ah. and it is.
01:44:51 merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl)
01:44:54 <c_wraith> your definition of adjacent (line 26) is insufficient. It's sharing the same visited map with each recursive call. It needs to thread updates along.
01:44:57 × Tuplanolla quits (~Tuplanoll@91-159-69-59.elisa-laajakaista.fi) (Quit: Leaving.)
01:47:49 <c_wraith> consider what it's going to do with a big square of the same plot type, starting at a corner. The recursive calls to the next two will know the corner was visited. But the recursive calls from each of those will not know about the other one.
01:48:04 <c_wraith> That's still going to add up to exponential growth as you cross the whole square.
01:48:10 <dpratt> c_wraith ah, ok, thanks for pointing that out -- I suppose that means I should figure out how to make this a "stateful" computation
01:48:40 <dpratt> c_wraith makes sense, thanks!
01:49:12 × merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 252 seconds)
01:49:19 × falafel quits (~falafel@2603:8000:b4f0:62a0:8070:b236:970b:b0e8) (Ping timeout: 260 seconds)
02:00:15 merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl)
02:04:27 × merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 244 seconds)
02:13:00 × dpratt quits (~dpratt@165.225.220.148) (Quit: Client closed)
02:15:37 merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl)
02:18:40 × cuteguest quits (~cuteguest@c-73-239-49-112.hsd1.wa.comcast.net) (Ping timeout: 240 seconds)
02:19:57 × merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 244 seconds)
02:27:53 × ljdarj quits (~Thunderbi@user/ljdarj) (Ping timeout: 245 seconds)
02:30:59 merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl)
02:35:24 × merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 252 seconds)
02:35:49 × rstromlund quits (~user@user/rstromlund) (Ping timeout: 245 seconds)
02:44:59 × homo quits (~homo@user/homo) (Quit: homo)
02:45:23 homo joins (~homo@user/homo)
02:46:21 merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl)
02:50:49 harveypwca joins (~harveypwc@2601:246:d080:b40:1889:d9bf:2dd8:b288)
02:54:09 × merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 248 seconds)
02:54:13 housemate joins (~housemate@2001:8004:27a8:24d3:b2cb:2bd8:520f:6d21)
02:55:20 × housemate quits (~housemate@2001:8004:27a8:24d3:b2cb:2bd8:520f:6d21) (Remote host closed the connection)
02:55:42 housemate joins (~housemate@2001:8004:27a8:24d3:b2cb:2bd8:520f:6d21)
03:06:01 merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl)
03:10:36 × merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 252 seconds)
03:10:43 × eL_Bart0- quits (eL_Bart0@dietunichtguten.org) (Ping timeout: 252 seconds)
03:11:26 × OftenFaded quits (~OftenFade@user/tisktisk) (Quit: Client closed)
03:15:01 × sam113101 quits (~sam@modemcable220.199-203-24.mc.videotron.ca) (Quit: WeeChat 4.4.3)
03:26:30 merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl)
03:31:08 × merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 252 seconds)
03:34:13 peterbecich joins (~Thunderbi@syn-047-229-123-186.res.spectrum.com)
03:37:15 × Smiles quits (uid551636@id-551636.lymington.irccloud.com) (Quit: Connection closed for inactivity)
03:40:56 × gmg quits (~user@user/gehmehgeh) (Remote host closed the connection)
03:41:40 gmg joins (~user@user/gehmehgeh)
03:41:53 merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl)
03:46:54 × merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 252 seconds)
03:51:03 rstromlund joins (~user@user/rstromlund)
03:53:59 × td_ quits (~td@i5387090C.versanet.de) (Ping timeout: 244 seconds)
03:55:32 × rstromlund quits (~user@user/rstromlund) (Ping timeout: 244 seconds)
03:56:10 td_ joins (~td@i5387093F.versanet.de)
03:57:47 merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl)
04:04:19 × merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 244 seconds)
04:10:11 bitdex joins (~bitdex@gateway/tor-sasl/bitdex)
04:12:50 × housemate quits (~housemate@2001:8004:27a8:24d3:b2cb:2bd8:520f:6d21) (Quit: Nothing to see here. I wasn't there. I take IRC seriously. https://files.catbox.moe/4e9k81.pdf)
04:14:03 × gorignak quits (~gorignak@user/gorignak) (Quit: quit)
04:14:15 gorignak joins (~gorignak@user/gorignak)
04:15:50 merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl)
04:19:39 OftenFaded joins (~OftenFade@user/tisktisk)
04:20:16 × merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 252 seconds)
04:22:44 homo_ joins (~homo@user/homo)
04:23:27 × homo quits (~homo@user/homo) (Ping timeout: 246 seconds)
04:23:28 homo_ is now known as homo
04:25:24 Elena59 joins (~Elena@37.25.86.87)
04:26:58 × Elena59 quits (~Elena@37.25.86.87) (Client Quit)
04:31:13 merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl)
04:35:19 × peterbecich quits (~Thunderbi@syn-047-229-123-186.res.spectrum.com) (Ping timeout: 244 seconds)
04:35:40 × merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 252 seconds)
04:36:16 ethantwardy joins (user@user/ethantwardy)
04:37:36 aforemny joins (~aforemny@i577B130D.versanet.de)
04:38:40 × aforemny_ quits (~aforemny@2001:9e8:6cd1:7b00:688b:324:5065:e57a) (Ping timeout: 260 seconds)
04:46:35 merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl)
04:49:50 × harveypwca quits (~harveypwc@2601:246:d080:b40:1889:d9bf:2dd8:b288) (Quit: Leaving)
04:51:06 × merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 246 seconds)
04:52:40 × youthlic quits (~Thunderbi@user/youthlic) (Quit: youthlic)
04:54:53 youthlic joins (~Thunderbi@user/youthlic)
05:01:59 merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl)
05:04:44 × alp quits (~alp@2001:861:8ca0:4940:4155:329b:9129:3e66) (Remote host closed the connection)
05:05:00 alp joins (~alp@2001:861:8ca0:4940:1c03:a77a:acae:42)
05:06:27 × merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 252 seconds)
05:15:12 × rekahsoft quits (~rekahsoft@bras-base-orllon1103w-grc-06-76-69-85-220.dsl.bell.ca) (Remote host closed the connection)
05:17:22 merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl)
05:21:49 × merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 244 seconds)
05:32:45 merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl)
05:34:11 sam113101 joins (~sam@modemcable220.199-203-24.mc.videotron.ca)
05:39:30 × merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 265 seconds)
05:39:31 michalz joins (~michalz@185.246.207.197)
05:51:22 merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl)
05:51:40 × OftenFaded quits (~OftenFade@user/tisktisk) (Ping timeout: 240 seconds)
05:56:15 × merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 260 seconds)
05:58:21 × gorignak quits (~gorignak@user/gorignak) (Quit: quit)
05:59:56 merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl)
06:02:02 gorignak joins (~gorignak@user/gorignak)
06:04:24 × merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 252 seconds)
06:08:15 falafel joins (~falafel@2603:8000:b4f0:62a0:a2ac:33fd:6c9:13bb)
06:15:16 merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl)
06:20:27 × cptaffe quits (~cptaffe@user/cptaffe) (Ping timeout: 276 seconds)
06:22:16 × merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 244 seconds)
06:23:06 cptaffe joins (~cptaffe@user/cptaffe)
06:33:26 merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl)
06:38:09 × merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 248 seconds)
06:39:18 × falafel quits (~falafel@2603:8000:b4f0:62a0:a2ac:33fd:6c9:13bb) (Ping timeout: 276 seconds)
06:42:48 Smiles joins (uid551636@id-551636.lymington.irccloud.com)
06:44:29 × mange quits (~user@user/mange) (Remote host closed the connection)
06:48:52 merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl)
06:53:27 × merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 265 seconds)
06:55:15 merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl)
06:56:03 housemate joins (~housemate@2001:8004:27a8:259e:1908:8615:d13f:227b)
06:57:18 CiaoSen joins (~Jura@2a05:5800:209:ac00:ca4b:d6ff:fec1:99da)
06:57:44 <iqubic> What's the size of Haskell's Ints, and how does that differ from Integer?
06:59:28 × merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 244 seconds)
07:00:53 merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl)
07:01:57 tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
07:04:00 × emmanuelux quits (~emmanuelu@user/emmanuelux) (Quit: au revoir)
07:05:15 × merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 252 seconds)
07:07:47 <probie> "Haskell"'s Ints are "at least 30 bits". With GHC they're machine word sized (so probably 64 bit). Integer's are (in theory) unbounded, although it used to be the case that they couldn't handle an `Integer` that took more than 4GB to represent
07:07:57 <probie> s/Integer's/Integers/
07:09:07 <probie> (Integers in GHC which are backed with gmp, that is)
07:10:09 × acidsys quits (~crameleon@openSUSE/member/crameleon) (Ping timeout: 248 seconds)
07:13:25 <iqubic> That makes sense.
07:15:03 × housemate quits (~housemate@2001:8004:27a8:259e:1908:8615:d13f:227b) (Read error: Connection reset by peer)
07:16:02 <haskellbridge> <hellwolf> fwiw, there is a difference between ** vs. ^
07:16:22 <haskellbridge> <hellwolf> :t (**)
07:16:54 <haskellbridge> <hellwolf> :t (^)
07:17:28 <haskellbridge> <hellwolf> hmm, i can only use this bot when i am using irc, i guess
07:18:27 merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl)
07:20:20 × Sgeo quits (~Sgeo@user/sgeo) (Read error: Connection reset by peer)
07:23:36 × merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 252 seconds)
07:24:13 <iqubic> :t (**)
07:24:14 <lambdabot> Floating a => a -> a -> a
07:24:18 <iqubic> :t (^)
07:24:19 <lambdabot> (Integral b, Num a) => a -> b -> a
07:24:36 <iqubic> I got you, fam!
07:27:10 <c_wraith> I think the current limit on Integer is that the gmp representation can't have more 2^64 or more "limbs". Where I guess a limb is a machine word. That's more memory than most computers have.
07:29:03 <iqubic> Cool. So, for Advent of Code I should be fine with just Ints.
07:29:24 × ft quits (~ft@p508db9c7.dip0.t-ipconnect.de) (Ping timeout: 272 seconds)
07:29:26 peterbecich joins (~Thunderbi@syn-047-229-123-186.res.spectrum.com)
07:30:12 <iqubic> Other langauges have Ints and Longs, but Haskell doesn't really.
07:30:45 vpan joins (~vpan@212.117.1.172)
07:31:46 <c_wraith> I actually used Integer today, but that was sort of accidental because I was using Rational, and Rational = Ratio Integer. I *could* have used Ratio Int, but... that's two tokens!
07:32:32 × mhatta quits (~mhatta@www21123ui.sakura.ne.jp) (Remote host closed the connection)
07:33:03 acidsys joins (~crameleon@openSUSE/member/crameleon)
07:34:19 merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl)
07:34:28 mhatta joins (~mhatta@www21123ui.sakura.ne.jp)
07:36:21 × tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
07:38:29 <probie> hellowolf: try adding a blank new line before commands to lambdabot
07:38:37 × CiaoSen quits (~Jura@2a05:5800:209:ac00:ca4b:d6ff:fec1:99da) (Ping timeout: 252 seconds)
07:38:47 <probie> s/hellowolf/hellwolf/
07:38:57 × merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 248 seconds)
07:40:30 tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
07:40:46 housemate joins (~housemate@2001:8004:1640:2cb0::12e)
07:44:32 briandaed joins (~root@user/briandaed)
07:46:37 sord937 joins (~sord937@gateway/tor-sasl/sord937)
07:49:31 CiaoSen joins (~Jura@2a05:5800:209:ac00:ca4b:d6ff:fec1:99da)
07:49:43 merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl)
07:53:32 <haskellbridge> <hellwolf> got it
07:53:32 <haskellbridge> :t div
07:53:33 <lambdabot> Integral a => a -> a -> a
07:54:22 × merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 265 seconds)
07:54:32 lortabac joins (~lortabac@2a01:e0a:541:b8f0:55ab:e185:7f81:54a4)
07:55:06 <haskellbridge> <hellwolf> :t (180 * (10 ^ 18)) "div" 3600 * 24
07:55:29 <haskellbridge> <hellwolf> bot pls
07:55:30 <haskellbridge> :t (180 * (10 ^ 18)) "div" 3600 * 24
07:55:42 <lambdabot> (Num a, Num t, Num ([Char] -> t -> a)) => a
07:56:09 <haskellbridge> <hellwolf> 🫠
07:58:09 falafel joins (~falafel@2603:8000:b4f0:62a0:b2f3:1ea5:3edd:91fa)
08:00:02 × caconym quits (~caconym@user/caconym) (Quit: bye)
08:00:40 caconym joins (~caconym@user/caconym)
08:01:00 <haskellbridge> <hellwolf> bot pls
08:01:00 <haskellbridge> : (180 * (10 ^ 18)) "div" 3600 * 24
08:01:31 <haskellbridge> <hellwolf> bot pls
08:01:31 <haskellbridge> :eval (180 * (10 ^ 18)) "div" 3600 * 24
08:01:53 merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl)
08:06:11 <probie> It's `>` if you want lambdabot to execute something
08:06:29 × merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 252 seconds)
08:07:40 <c_wraith> well, `> `. The space is necessary.
08:07:51 × tcard_ quits (~tcard@2400:4051:5801:7500:cf17:befc:ff82:5303) (Quit: Leaving)
08:11:07 Square joins (~Square@user/square)
08:11:38 ash3en joins (~Thunderbi@2a03:7846:b6eb:101:93ac:a90a:da67:f207)
08:15:30 <haskellbridge> <hellwolf> bot pls
08:15:30 <haskellbridge> > (180 * (10 ^ 18)) "div" 3600 * 24
08:15:32 <lambdabot> error:
08:15:32 <lambdabot> • Could not deduce (Num t0)
08:15:32 <lambdabot> from the context: (Num a, Num t, Num ([Char] -> t -> a))
08:15:51 <haskellbridge> <hellwolf> bot pls
08:15:51 <haskellbridge> > (180 * (10 ^ 18)) "div" 3600 * 24 :: Integer
08:15:52 <lambdabot> error:
08:15:52 <lambdabot> • No instance for (Num ([Char] -> Integer -> Integer))
08:15:52 <lambdabot> arising from a use of ‘*’
08:16:12 <c_wraith> hellwolf: you're using "" instead of ``
08:16:19 <c_wraith> > 10 `div` 2
08:16:20 <lambdabot> 5
08:16:47 <haskellbridge> <hellwolf> it's the mobile client of element...
08:17:17 merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl)
08:17:53 × peterbecich quits (~Thunderbi@syn-047-229-123-186.res.spectrum.com) (Ping timeout: 248 seconds)
08:18:53 <probie> You might just have to write `div` in prefix form if element (or the bridge) is replacing backticks with double quotes
08:22:05 × lortabac quits (~lortabac@2a01:e0a:541:b8f0:55ab:e185:7f81:54a4) (Quit: WeeChat 4.4.2)
08:26:24 <briandaed> :t (180 * (10 ^ 18)) `div` 3600 * 24
08:26:25 <lambdabot> Integral a => a
08:27:02 × merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 272 seconds)
08:27:15 <int-e> briandaed: do you want (3600 * 24)
08:27:30 <int-e> (aka 86400 but that's not the point)
08:28:04 <int-e> or maybe I should be asking hellwolf
08:29:08 <briandaed> nah, just playing with hellwolf's test
08:33:46 <hololeap> hi, I have a question about immutable data and data sharing with ghc
08:35:12 <hololeap> is it correct that data is shared when you make copies of immutable data, but this gets complicated with Text where sharing parts of a utf-8 string could result in corruption?
08:36:18 <hololeap> eg compacted data is harder to share than a list of data fragments
08:36:25 <c_wraith> sharing can't corrupt things - only mutating can.
08:36:33 <int-e> It's not really corruption that you have to worry about... the problem you can run into is that when you extract a single word from a big chunk of text, that single-word Text value can keep the whole chunk alive.
08:36:43 <int-e> So you can potentially waste a ton of memory.
08:38:02 merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl)
08:38:13 tcard joins (~tcard@2400:4051:5801:7500:cf17:befc:ff82:5303)
08:38:15 <c_wraith> But yeah, you can accidentally hold a gigabyte buffer when you only care about a few characters.
08:39:04 × housemate quits (~housemate@2001:8004:1640:2cb0::12e) (Ping timeout: 272 seconds)
08:39:07 <int-e> When bytestring liberally used `inlinePerformIO` that lead to corruption though. It was a bug.
08:40:04 housemate joins (~housemate@2001:8004:1680:927::12e)
08:40:18 <hololeap> I was just thinking about how ghc might try to reduce data duplication with immutable data, but my ideas fell apart when I started thinking about Text
08:42:17 <probie> That's what things like Data.Text.copy (https://hackage.haskell.org/package/text-2.1.2/docs/Data-Text.html#v:copy) are for. But you have to manually do it, GHC won't do it for you
08:42:29 × merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 248 seconds)
08:44:08 <hololeap> but GHC will do it for you with [Char]?
08:44:57 <c_wraith> Eh. Not exactly.
08:45:18 <c_wraith> You can end up using a lot more memory than you intended because of sharing lists, too
08:45:20 <int-e> There's a hack for avoiding duplicate `Char` values arising from decoding C strings. Other than that, no, GHC's runtime won't deduplicate data for you.
08:45:42 <int-e> (There's no hash-consing to throw in a related keyword.)
08:45:47 <c_wraith> the classic example is let xs = [1 .. 100000000 ] in xs ++ xs
08:46:08 <c_wraith> The sharing there destroys the ability to stream the list
08:46:24 <hololeap> like, if I say: a = ['a','b','c']; b = a
08:46:34 <hololeap> will there be two copies of ['a','b','c'] in memory?
08:46:42 <c_wraith> No.
08:49:07 <hololeap> how about if I said: f (y:ys) = y:['q']; b = f a
08:49:15 <hololeap> would there be two copies of 'a' in memory?
08:50:38 <int-e> no.
08:50:54 <c_wraith> in general, if you're looking at it at an implementation level, variables in GHC correspond to pointers.
08:51:09 <int-e> if you evaluate `b` that ends up as ['a','q'] where the 'a' is shared with the one in `a`.
08:51:45 <hololeap> ok. that pretty much answers my question.
08:51:47 <hololeap> ty!
08:51:53 × Smiles quits (uid551636@id-551636.lymington.irccloud.com) (Quit: Connection closed for inactivity)
08:52:06 <hololeap> that's what I thought but I had to confirm
08:53:25 merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl)
08:53:33 <int-e> Keep in mind that lists are linked lists. Each evaluated non-empty list x:xs is a heap cell for the constructor : with a pointer to x and a pointer to xs.
08:54:13 <int-e> and [x,y] is x:(y:[])
08:54:40 <int-e> so you can share list elements and list tails
08:55:11 szkl joins (uid110435@id-110435.uxbridge.irccloud.com)
08:55:13 <int-e> > tails [1,2,3,4] -- lots of sharing here
08:55:14 <lambdabot> [[1,2,3,4],[2,3,4],[3,4],[4],[]]
08:55:24 <int-e> > inits [1,2,3,4] -- only elements are shared here
08:55:25 <lambdabot> [[],[1],[1,2],[1,2,3],[1,2,3,4]]
08:55:28 × tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
08:55:49 <hololeap> usually I assume ghc does the most sensible thing but sometimes I have to check :D
08:56:16 <int-e> you can destroy sharing easily
08:56:55 <int-e> map id xs will create a copy of xs sharing the elements but with an entirely new spine (all the : constructors)
08:57:35 <hololeap> that's interesting
08:57:50 × merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 252 seconds)
08:59:13 <hololeap> does that ever become an issue?
08:59:24 <int-e> (Hmm, unless GHC has a rewrite rule for `map id = id` somewhere; I don't know that.)
08:59:34 <hololeap> or does the GC keep up with it
09:00:41 <hololeap> I know gc thrash can be an issue in itself
09:01:33 <int-e> if you use `coerce` a lot, convincing the compiler that `fmap coerce = coerce` can be very helpful. I've seen hacks around that in lens.
09:02:28 lxsameer joins (~lxsameer@Serene/lxsameer)
09:02:43 <int-e> (`coerce` *operates* like `id` even though it changes the type)
09:03:12 <hololeap> right, it's basically yelling at the compiler "these two things are the same thing!"
09:03:58 <hololeap> or, I guess "these two representations of the same thing are equal"
09:04:01 <probie> int-e: It doesn't have `map id = id` directly, but it may unfold to one. `map id xs` definitely reduces to at least `build (\c n -> foldr c n xs)`, and I think GHC might have rules that further reduce that to id
09:04:24 × chiselfuse quits (~chiselfus@user/chiselfuse) (Ping timeout: 264 seconds)
09:09:09 <int-e> probie: Yeah there should be a rule to turn build + foldr back into id. So instead of `map id` I should probably use an ad-hoc recursive function, foo (x:xs) = x : foo xs; foo [] = []
09:12:13 <hololeap> is there any way in ghci to see if two variables point to the same data in memory?
09:13:51 <int-e> kind of
09:14:29 <int-e> there's `reallyUnsafePointerEquality` in GHC.Exts (or some abbreviation thereof, I can't look it up right now)
09:15:17 merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl)
09:15:44 <int-e> It can produce false negatives, and there are rare circumstances under which it can flip from true to false too.
09:19:50 × merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 252 seconds)
09:23:34 acidjnk_new joins (~acidjnk@p200300d6e7283f423cf02b510a599160.dip0.t-ipconnect.de)
09:27:20 merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl)
09:30:31 lortabac joins (~lortabac@2a01:e0a:541:b8f0:55ab:e185:7f81:54a4)
09:31:27 kuribas joins (~user@ip-188-118-57-242.reverse.destiny.be)
09:31:53 × jmcantrell quits (~weechat@user/jmcantrell) (Ping timeout: 244 seconds)
09:31:53 jmcantrell_ is now known as jmcantrell
09:31:55 × merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 252 seconds)
09:38:53 Digitteknohippie joins (~user@user/digit)
09:40:39 × Digit quits (~user@user/digit) (Ping timeout: 276 seconds)
09:41:51 jespada joins (~jespada@cpc121308-nmal25-2-0-cust15.19-2.cable.virginm.net)
09:42:45 merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl)
09:44:44 × falafel quits (~falafel@2603:8000:b4f0:62a0:b2f3:1ea5:3edd:91fa) (Ping timeout: 260 seconds)
09:47:29 × merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 248 seconds)
09:50:29 × xff0x quits (~xff0x@fsb6a9491c.tkyc517.ap.nuro.jp) (Ping timeout: 244 seconds)
09:50:33 tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
09:52:06 sprotte24 joins (~sprotte24@p200300d16f08ae001421f9574c92b051.dip0.t-ipconnect.de)
09:52:17 × tzh quits (~tzh@c-76-115-131-146.hsd1.or.comcast.net) (Quit: zzz)
09:58:07 merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl)
09:59:57 <probie> There's a safe way to do it (dwelling in IO). I've done it before (although it has false negatives), I just can't remember it off the top of my head
10:01:21 × housemate quits (~housemate@2001:8004:1680:927::12e) (Ping timeout: 248 seconds)
10:04:06 <Leary> probie: Probably `StableName`.
10:06:03 mari-estel joins (~mari-este@user/mari-estel)
10:07:45 × merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 244 seconds)
10:08:06 Digitteknohippie is now known as Digit
10:09:39 × tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
10:09:49 <probie> Leary: that's the one. I need a hoogle clone that searches my memory
10:17:44 Smiles joins (uid551636@id-551636.lymington.irccloud.com)
10:19:04 merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl)
10:24:53 JuanDaugherty joins (~juan@user/JuanDaugherty)
10:25:42 × merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 246 seconds)
10:31:38 × lortabac quits (~lortabac@2a01:e0a:541:b8f0:55ab:e185:7f81:54a4) (Quit: WeeChat 4.4.2)
10:32:11 × CrunchyFlakes quits (~CrunchyFl@31.19.233.78) (Read error: Connection reset by peer)
10:32:42 × homo quits (~homo@user/homo) (Quit: homo)
10:35:01 CrunchyFlakes joins (~CrunchyFl@31.19.233.78)
10:35:32 homo joins (~homo@user/homo)
10:39:06 merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl)
10:43:26 × merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 252 seconds)
10:48:16 × CiaoSen quits (~Jura@2a05:5800:209:ac00:ca4b:d6ff:fec1:99da) (Ping timeout: 272 seconds)
10:49:53 ubert joins (~Thunderbi@p200300ecdf117c5bfeb2bbe2c0c50acc.dip0.t-ipconnect.de)
10:54:28 merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl)
10:58:57 × merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 248 seconds)
11:04:54 merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl)
11:08:18 __monty__ joins (~toonn@user/toonn)
11:09:41 × merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 248 seconds)
11:11:39 takuan joins (~takuan@178-116-218-225.access.telenet.be)
11:20:18 merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl)
11:25:18 × merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 276 seconds)
11:33:09 arthurvl is now known as earthy
11:35:41 merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl)
11:40:05 lortabac joins (~lortabac@2a01:e0a:541:b8f0:55ab:e185:7f81:54a4)
11:40:15 × merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 252 seconds)
11:47:07 × mari-estel quits (~mari-este@user/mari-estel) ()
11:51:04 merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl)
11:55:22 × sprotte24 quits (~sprotte24@p200300d16f08ae001421f9574c92b051.dip0.t-ipconnect.de) (Quit: Leaving)
11:57:53 × merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 245 seconds)
11:59:43 __monty_1 joins (~toonn@user/toonn)
12:00:54 × __monty__ quits (~toonn@user/toonn) (Killed (NickServ (GHOST command used by __monty_1)))
12:00:59 __monty_1 is now known as __monty__
12:01:50 tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
12:05:45 ljdarj joins (~Thunderbi@user/ljdarj)
12:05:53 merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl)
12:09:09 CiaoSen joins (~Jura@2a05:5800:209:ac00:ca4b:d6ff:fec1:99da)
12:10:21 × merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 246 seconds)
12:20:46 L29Ah parts (~L29Ah@wikipedia/L29Ah) ()
12:21:14 merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl)
12:23:30 xff0x joins (~xff0x@2405:6580:b080:900:33bd:b9d7:1cc6:1151)
12:28:18 × merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 252 seconds)
12:33:23 housemate joins (~housemate@2001:8004:1680:45b::12e)
12:35:40 × tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
12:39:21 merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl)
12:41:38 Digitteknohippie joins (~user@user/digit)
12:42:58 × Digit quits (~user@user/digit) (Ping timeout: 252 seconds)
12:43:42 × merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 252 seconds)
12:46:00 tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
12:50:34 × housemate quits (~housemate@2001:8004:1680:45b::12e) (Quit: Nothing to see here. I wasn't there. I take IRC seriously. https://files.catbox.moe/4e9k81.pdf)
12:51:44 Digitteknohippie is now known as Digit
12:54:44 merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl)
12:54:49 × doyougnu quits (~doyougnu@syn-045-046-170-068.res.spectrum.com) (Ping timeout: 252 seconds)
12:55:00 doyougnu joins (~doyougnu@syn-045-046-170-068.res.spectrum.com)
12:59:35 × merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 244 seconds)
13:00:20 × ubert quits (~Thunderbi@p200300ecdf117c5bfeb2bbe2c0c50acc.dip0.t-ipconnect.de) (Ping timeout: 260 seconds)
13:06:53 merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl)
13:07:37 srazkvt joins (~sarah@user/srazkvt)
13:11:13 × merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 248 seconds)
13:16:45 × weary-traveler quits (~user@user/user363627) (Remote host closed the connection)
13:22:16 merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl)
13:22:30 × JuanDaugherty quits (~juan@user/JuanDaugherty) (Quit: JuanDaugherty)
13:23:25 eL_Bart0 joins (eL_Bart0@dietunichtguten.org)
13:25:37 ubert joins (~Thunderbi@p200300ecdf117c5bcbacc4208e66254f.dip0.t-ipconnect.de)
13:30:33 L29Ah joins (~L29Ah@wikipedia/L29Ah)
13:31:24 × merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 276 seconds)
13:41:38 merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl)
13:43:37 × bitdex quits (~bitdex@gateway/tor-sasl/bitdex) (Quit: = "")
13:46:05 × merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 244 seconds)
13:47:23 ft joins (~ft@p508db9c7.dip0.t-ipconnect.de)
13:51:45 Tuplanolla joins (~Tuplanoll@91-159-69-59.elisa-laajakaista.fi)
13:57:01 merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl)
13:58:58 × GdeVolpiano quits (~GdeVolpia@user/GdeVolpiano) (Read error: Connection reset by peer)
13:59:40 GdeVolpiano joins (~GdeVolpia@user/GdeVolpiano)
14:01:47 × merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 252 seconds)
14:04:47 × tinjamin4 quits (~tinjamin@banshee.h4x0r.space) (Quit: The Lounge - https://thelounge.chat)
14:06:32 tinjamin4 joins (~tinjamin@banshee.h4x0r.space)
14:06:43 Fabric joins (~Fabric@167.136.189.80.dyn.plus.net)
14:06:59 × lortabac quits (~lortabac@2a01:e0a:541:b8f0:55ab:e185:7f81:54a4) (Quit: WeeChat 4.4.2)
14:07:14 simplystuart joins (~simplystu@c-75-75-152-164.hsd1.pa.comcast.net)
14:07:52 merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl)
14:12:19 × vpan quits (~vpan@212.117.1.172) (Quit: Leaving.)
14:12:30 × merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 246 seconds)
14:18:59 dpratt joins (~dpratt@165.225.220.148)
14:23:25 merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl)
14:25:09 weary-traveler joins (~user@user/user363627)
14:26:09 × simplystuart quits (~simplystu@c-75-75-152-164.hsd1.pa.comcast.net) (Ping timeout: 246 seconds)
14:26:32 simplystuart joins (~simplystu@c-75-75-152-164.hsd1.pa.comcast.net)
14:27:56 × merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 244 seconds)
14:30:34 × CiaoSen quits (~Jura@2a05:5800:209:ac00:ca4b:d6ff:fec1:99da) (Ping timeout: 260 seconds)
14:44:17 merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl)
14:49:24 × merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 276 seconds)
14:54:24 rekahsoft joins (~rekahsoft@bras-base-orllon1103w-grc-06-76-69-85-220.dsl.bell.ca)
14:55:08 × mceresa quits (~mceresa@user/mceresa) (Remote host closed the connection)
14:56:26 mceresa joins (~mceresa@user/mceresa)
14:57:50 × dpratt quits (~dpratt@165.225.220.148) (Quit: Client closed)
14:59:05 × alp quits (~alp@2001:861:8ca0:4940:1c03:a77a:acae:42) (Remote host closed the connection)
14:59:24 alp joins (~alp@2001:861:8ca0:4940:fe35:b2c7:be3f:81c)
14:59:40 merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl)
15:00:47 × alp quits (~alp@2001:861:8ca0:4940:fe35:b2c7:be3f:81c) (Remote host closed the connection)
15:01:06 alp joins (~alp@2001:861:8ca0:4940:c731:528a:cc7b:83c4)
15:02:28 × alp quits (~alp@2001:861:8ca0:4940:c731:528a:cc7b:83c4) (Remote host closed the connection)
15:02:47 alp joins (~alp@2001:861:8ca0:4940:6356:ce55:f764:8f07)
15:04:09 × alp quits (~alp@2001:861:8ca0:4940:6356:ce55:f764:8f07) (Remote host closed the connection)
15:04:29 alp joins (~alp@2001:861:8ca0:4940:1fde:7520:470c:b702)
15:04:59 × merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 260 seconds)
15:05:50 × alp quits (~alp@2001:861:8ca0:4940:1fde:7520:470c:b702) (Remote host closed the connection)
15:06:09 alp joins (~alp@2001:861:8ca0:4940:a0f8:bb83:fcc1:1af2)
15:07:31 × alp quits (~alp@2001:861:8ca0:4940:a0f8:bb83:fcc1:1af2) (Remote host closed the connection)
15:07:49 alp joins (~alp@2001:861:8ca0:4940:368f:e308:67fd:150f)
15:08:54 merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl)
15:09:31 alp_ joins (~alp@2001:861:8ca0:4940:bbaf:78a6:fe4b:94e9)
15:10:54 × alp_ quits (~alp@2001:861:8ca0:4940:bbaf:78a6:fe4b:94e9) (Remote host closed the connection)
15:11:12 alp_ joins (~alp@2001:861:8ca0:4940:3ebc:4e24:bba7:15f2)
15:12:08 × ash3en quits (~Thunderbi@2a03:7846:b6eb:101:93ac:a90a:da67:f207) (Quit: ash3en)
15:12:35 × alp_ quits (~alp@2001:861:8ca0:4940:3ebc:4e24:bba7:15f2) (Remote host closed the connection)
15:12:52 × alp quits (~alp@2001:861:8ca0:4940:368f:e308:67fd:150f) (Ping timeout: 252 seconds)
15:12:52 alp_ joins (~alp@2001:861:8ca0:4940:86cd:64ae:1e47:4ab3)
15:14:35 alp__ joins (~alp@128-79-174-146.hfc.dyn.abo.bbox.fr)
15:15:28 × merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 244 seconds)
15:17:41 × alp_ quits (~alp@2001:861:8ca0:4940:86cd:64ae:1e47:4ab3) (Ping timeout: 252 seconds)
15:18:18 × acidjnk_new quits (~acidjnk@p200300d6e7283f423cf02b510a599160.dip0.t-ipconnect.de) (Ping timeout: 246 seconds)
15:18:54 dpratt joins (~dpratt@165.225.220.148)
15:19:32 × remexre quits (~remexre@user/remexre) (Ping timeout: 252 seconds)
15:19:34 × dpratt quits (~dpratt@165.225.220.148) (Client Quit)
15:20:00 dpratt joins (~dpratt@165.225.220.148)
15:24:33 × dostoevsky quits (~dostoevsk@user/dostoevsky) (Quit: dostoevsky)
15:26:09 dostoevsky joins (~dostoevsk@user/dostoevsky)
15:26:15 × dostoevsky quits (~dostoevsk@user/dostoevsky) (Max SendQ exceeded)
15:26:53 dostoevsky joins (~dostoevsk@user/dostoevsky)
15:26:57 merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl)
15:27:03 × dostoevsky quits (~dostoevsk@user/dostoevsky) (Max SendQ exceeded)
15:27:35 dostoevsky joins (~dostoevsk@user/dostoevsky)
15:27:43 × dostoevsky quits (~dostoevsk@user/dostoevsky) (Max SendQ exceeded)
15:31:05 dostoevsky joins (~dostoevsk@user/dostoevsky)
15:31:33 × merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 248 seconds)
15:34:35 × dpratt quits (~dpratt@165.225.220.148) (Quit: Client closed)
15:40:49 × srazkvt quits (~sarah@user/srazkvt) (Quit: Konversation terminated!)
15:44:50 × simplystuart quits (~simplystu@c-75-75-152-164.hsd1.pa.comcast.net) (Ping timeout: 252 seconds)
15:45:13 simplystuart joins (~simplystu@c-75-75-152-164.hsd1.pa.comcast.net)
15:45:46 × tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
15:47:15 merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl)
15:49:57 × dostoevsky quits (~dostoevsk@user/dostoevsky) (Quit: dostoevsky)
15:51:48 × merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 252 seconds)
15:55:09 dostoevsky joins (~dostoevsk@user/dostoevsky)
15:55:29 × dostoevsky quits (~dostoevsk@user/dostoevsky) (Client Quit)
15:57:34 mari-estel joins (~mari-este@user/mari-estel)
15:58:07 dostoevsky joins (~dostoevsk@user/dostoevsky)
15:59:01 × dostoevsky quits (~dostoevsk@user/dostoevsky) (Remote host closed the connection)
16:01:23 dostoevsky joins (~dostoevsk@user/dostoevsky)
16:01:56 × dostoevsky quits (~dostoevsk@user/dostoevsky) (Remote host closed the connection)
16:02:38 merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl)
16:05:44 dostoevsky joins (~dostoevsk@user/dostoevsky)
16:06:52 × dostoevsky quits (~dostoevsk@user/dostoevsky) (Remote host closed the connection)
16:07:11 dostoevsky joins (~dostoevsk@user/dostoevsky)
16:08:10 × merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 244 seconds)
16:09:53 merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl)
16:13:40 tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
16:14:32 × merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 252 seconds)
16:15:20 housemate joins (~housemate@2001:8004:1680:2767:7a79:ea75:6048:3bdc)
16:16:47 Sgeo joins (~Sgeo@user/sgeo)
16:17:58 × dostoevsky quits (~dostoevsk@user/dostoevsky) (Quit: Leaving)
16:18:17 dostoevsky joins (~dostoevsk@user/dostoevsky)
16:25:15 merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl)
16:28:42 acidjnk_new joins (~acidjnk@p200300d6e7283f423cf02b510a599160.dip0.t-ipconnect.de)
16:29:34 × merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 252 seconds)
16:29:53 Digitteknohippie joins (~user@user/digit)
16:31:02 × Digit quits (~user@user/digit) (Ping timeout: 252 seconds)
16:38:25 × housemate quits (~housemate@2001:8004:1680:2767:7a79:ea75:6048:3bdc) (Quit: Nothing to see here. I wasn't there. I take IRC seriously. https://files.catbox.moe/4e9k81.pdf)
16:40:16 × pavonia quits (~user@user/siracusa) (Quit: Bye!)
16:40:37 merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl)
16:42:56 × mari-estel quits (~mari-este@user/mari-estel) ()
16:45:09 × merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 248 seconds)
16:46:33 sprotte24 joins (~sprotte24@p200300d16f08ae0004e79d08210c66b3.dip0.t-ipconnect.de)
16:48:17 × kuribas quits (~user@ip-188-118-57-242.reverse.destiny.be) (Ping timeout: 248 seconds)
16:56:00 merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl)
16:58:52 econo_ joins (uid147250@id-147250.tinside.irccloud.com)
17:00:21 × merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 244 seconds)
17:01:38 Digitteknohippie is now known as Digit
17:09:38 machinedgod joins (~machinedg@d108-173-18-100.abhsia.telus.net)
17:10:53 merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl)
17:16:18 × merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 276 seconds)
17:16:26 sonolin joins (~michael@user/sonolin)
17:20:50 tzh joins (~tzh@c-76-115-131-146.hsd1.or.comcast.net)
17:21:16 remexre joins (~remexre@user/remexre)
17:23:36 × lxsameer quits (~lxsameer@Serene/lxsameer) (Ping timeout: 244 seconds)
17:26:26 merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl)
17:31:42 × merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 272 seconds)
17:34:40 × simplystuart quits (~simplystu@c-75-75-152-164.hsd1.pa.comcast.net) (Ping timeout: 244 seconds)
17:34:51 × machinedgod quits (~machinedg@d108-173-18-100.abhsia.telus.net) (Remote host closed the connection)
17:35:11 machinedgod joins (~machinedg@d108-173-18-100.abhsia.telus.net)
17:39:10 × zenmov quits (~zenmov@user/zenmov) (Ping timeout: 252 seconds)
17:40:20 merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl)
17:43:42 zenmov joins (~zenmov@user/zenmov)
17:44:01 × acidjnk_new quits (~acidjnk@p200300d6e7283f423cf02b510a599160.dip0.t-ipconnect.de) (Remote host closed the connection)
17:44:19 acidjnk_new joins (~acidjnk@p200300d6e7283f42ed270669e8aec613.dip0.t-ipconnect.de)
17:44:47 × merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 244 seconds)
17:50:04 simplystuart joins (~simplystu@c-75-75-152-164.hsd1.pa.comcast.net)
17:54:34 × simplystuart quits (~simplystu@c-75-75-152-164.hsd1.pa.comcast.net) (Ping timeout: 245 seconds)
17:55:43 merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl)
17:58:06 OftenFaded joins (~OftenFade@user/tisktisk)
18:00:21 × merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 248 seconds)
18:00:30 × L29Ah quits (~L29Ah@wikipedia/L29Ah) (Ping timeout: 252 seconds)
18:09:21 simplystuart joins (~simplystu@c-75-75-152-164.hsd1.pa.comcast.net)
18:09:55 × sord937 quits (~sord937@gateway/tor-sasl/sord937) (Quit: sord937)
18:10:43 × jespada quits (~jespada@cpc121308-nmal25-2-0-cust15.19-2.cable.virginm.net) (Quit: My Mac has gone to sleep. ZZZzzz…)
18:11:04 × ljdarj quits (~Thunderbi@user/ljdarj) (Ping timeout: 260 seconds)
18:11:05 merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl)
18:13:42 Lord_of_Life_ joins (~Lord@user/lord-of-life/x-2819915)
18:14:46 × Lord_of_Life quits (~Lord@user/lord-of-life/x-2819915) (Ping timeout: 272 seconds)
18:15:04 Lord_of_Life_ is now known as Lord_of_Life
18:15:44 × merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 260 seconds)
18:26:29 merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl)
18:30:52 × merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 252 seconds)
18:35:16 ash3en joins (~Thunderbi@146.70.124.222)
18:36:31 L29Ah joins (~L29Ah@wikipedia/L29Ah)
18:40:04 × meooow_ quits (~meooow@165.232.184.169) (Quit: q)
18:40:19 meooow joins (~meooow@2400:6180:100:d0::ad9:e001)
18:40:42 zenmov_ joins (~zenmov@user/zenmov)
18:40:46 × zenmov quits (~zenmov@user/zenmov) (Ping timeout: 252 seconds)
18:41:13 × acidjnk_new quits (~acidjnk@p200300d6e7283f42ed270669e8aec613.dip0.t-ipconnect.de) (Ping timeout: 245 seconds)
18:41:51 merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl)
18:42:35 peterbecich joins (~Thunderbi@syn-047-229-123-186.res.spectrum.com)
18:43:04 Digitteknohippie joins (~user@user/digit)
18:44:08 × Digit quits (~user@user/digit) (Ping timeout: 252 seconds)
18:44:09 × tdammers quits (~tdammers@110-136-178-143.ftth.glasoperator.nl) (Ping timeout: 245 seconds)
18:46:41 × merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 252 seconds)
18:50:24 arjun joins (~arjun@user/arjun)
18:53:57 <tomsmeding> Has anyone ever seen a ghcup installation on windows with C:\ghcup\bin\ghcup\bin\cabal.exe ?
18:54:31 <tomsmeding> in particular there's a C:\ghcup\bin\cabal.exe AND a C:\ghcup\bin\ghcup\bin\cabal.exe on this person's machine
18:57:28 tdammers joins (~tdammers@110-136-178-143.ftth.glasoperator.nl)
18:57:33 merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl)
19:01:57 × arjun quits (~arjun@user/arjun) (Quit: Leaving)
19:02:09 × merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 248 seconds)
19:02:59 lxsameer joins (~lxsameer@Serene/lxsameer)
19:03:03 × ash3en quits (~Thunderbi@146.70.124.222) (Quit: ash3en)
19:06:51 × peterbecich quits (~Thunderbi@syn-047-229-123-186.res.spectrum.com) (Ping timeout: 252 seconds)
19:08:21 × weary-traveler quits (~user@user/user363627) (Remote host closed the connection)
19:10:39 × ubert quits (~Thunderbi@p200300ecdf117c5bcbacc4208e66254f.dip0.t-ipconnect.de) (Remote host closed the connection)
19:12:06 merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl)
19:15:52 ljdarj joins (~Thunderbi@user/ljdarj)
19:17:52 × merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 252 seconds)
19:26:30 __jmcantrell__ joins (~weechat@user/jmcantrell)
19:26:32 jmcantrell is now known as Guest8945
19:26:32 × Guest8945 quits (644f1bed9a@user/jmcantrell) (Killed (copper.libera.chat (Nickname regained by services)))
19:26:32 __jmcantrell__ is now known as jmcantrell
19:26:41 jmcantrell_ joins (644f1bed9a@user/jmcantrell)
19:29:01 merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl)
19:31:08 <probie> What's a good choice of data type for a list of fixed length with cheap updates? For very small lengths, `data Foo6 a = Foo6 a a a a a a` (or just a tuple), but what about larger lengths e.g. 65536 where "copy everything" becomes expensive
19:32:42 <probie> A tree with a fixed branching factor probably works, but does involve a bit of indirection (although I guess that's probably necessary, since we need sharing to avoid copying unless we can guarantee linear use)
19:32:51 <glguy> probie: Probably just a Map or IntMap
19:33:14 <glguy> IntMap is likely faster for that case
19:33:27 × merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 246 seconds)
19:34:02 <EvanR> 65536 items with a known representation... a file xD
19:34:08 <tomsmeding> frame challenge: mutable array in either ST or with -XLinearTypes
19:34:14 <EvanR> moving files around and "copying" is cheap
19:40:33 × robobub quits (uid248673@id-248673.uxbridge.irccloud.com) (Quit: Connection closed for inactivity)
19:43:03 acidjnk_new joins (~acidjnk@p200300d6e7283f42593f59da3b296f97.dip0.t-ipconnect.de)
19:44:22 merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl)
19:49:13 × merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 265 seconds)
19:49:41 <probie> glguy: `IntMap` works, but I don't think a patricia tree is optimal for "dense" keys. I guess I should probably write my fixed branching tree based "list" and then benchmark it against it `IntMap`
19:52:48 target_i joins (~target_i@user/target-i/x-6023099)
19:54:18 × zzz quits (~z@user/zero) (Quit: quit)
19:56:33 <tomsmeding> does it need to be pure?
19:56:41 <tomsmeding> (immutable)
19:56:59 zero joins (~z@user/zero)
19:57:37 mastarija joins (~mastarija@42-117.dsl.iskon.hr)
19:58:12 × lxsameer quits (~lxsameer@Serene/lxsameer) (Ping timeout: 252 seconds)
19:58:45 <mastarija> If I understand correctly, ReadPrec allows for precedence parsing, right? But what about operator associativity? Can I just lift chainl1 and chainr1?
19:58:59 × OftenFaded quits (~OftenFade@user/tisktisk) (Quit: Client closed)
19:59:03 Digitteknohippie is now known as Digit
19:59:12 × zero quits (~z@user/zero) (Client Quit)
19:59:48 <haskellbridge> <Bowuigi> For operator associativity you are supposed to use readPrec instead of the chains IIRC
19:59:54 merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl)
20:00:04 × caconym quits (~caconym@user/caconym) (Quit: bye)
20:00:05 <haskellbridge> <Bowuigi> At least that's how it works in Hugs98
20:00:42 caconym joins (~caconym@user/caconym)
20:00:50 zero joins (~z@user/zero)
20:01:59 <mastarija> Hm... I thought ReadPrec only deals with the operator precedence, not associativity. I don't see any way to deal with associativity with just precedence.
20:02:09 × iteratee quits (~kyle@162.218.222.207) (Ping timeout: 246 seconds)
20:04:11 <haskellbridge> <Bowuigi> You call readPrec with the same precedence on the side where you associate and with one less in the other side
20:04:17 × merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 244 seconds)
20:04:56 <probie> tomsmeding: Yes. I should be able to write something like `f x = (x, set 42 "foo" x)` without having the first part of the returned tuple blow up in my face
20:05:22 <tomsmeding> probie: I see, then some tree structure is indeed what you have to reach for
20:06:05 <tomsmeding> how high the branching factor should be is possibly machine-dependent >:)
20:06:22 <haskellbridge> <Bowuigi> re:readPrec Actually I think it's one more, not one less, this is always confusing lmao
20:06:52 <tomsmeding> one more, indeed, to make sure that if you see the same operator on that side, it puts parens around itself
20:06:54 <mastarija> haskellbridge, yeah... I just wanted to ask, since I only see step and reset functions
20:07:29 <tomsmeding> this is parallel with showsPrec
20:07:54 × tdammers quits (~tdammers@110-136-178-143.ftth.glasoperator.nl) (Ping timeout: 244 seconds)
20:08:21 <mastarija> tomsmeding, not sure what you mean by that
20:08:35 <tomsmeding> yeah sorry I was confused and was talking about showsPrec :)
20:08:41 <tomsmeding> but the dual thing happens with readPrec
20:08:43 <mastarija> ah.. np
20:08:48 tabemann_ joins (~tabemann@2600:1700:7990:24e0:73ec:4dd3:844e:8eb8)
20:08:55 ash3en joins (~Thunderbi@2a03:7846:b6eb:101:93ac:a90a:da67:f207)
20:09:33 × tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
20:09:42 iteratee joins (~kyle@162.218.222.207)
20:10:02 <tomsmeding> if, say, (-) is left-associative (i.e. a - b - c means (a - b) - c) at level 4, then 'showsPrec d' of (-) would do: showParen (d > 4) $ showsPrec 4 a . showString " - " . showsPrec 5 b
20:10:24 <tomsmeding> so that if another (-) occurs on the left-hand side, then it's printed without parens, but if another (-) occurs on the right-hand side, it's printed _with_ parens
20:10:41 <mastarija> Anyway, I'm writing a little project for students, and usually I go with parsec, but I've noticed the ReadPrec the other day in base, and thought I'd use that to require less dependencies (which students always mess up)
20:10:49 <tomsmeding> exercise to the reader: convert this to readPrec, because I'm too lazy to look up the exact function signatures :)
20:11:12 <tomsmeding> parsec is in the boot libs, so students can use that by just running plain ghc
20:11:14 × tabemann quits (~tabemann@2600:1700:7990:24e0:39a4:2ebe:705f:fb9f) (Ping timeout: 260 seconds)
20:11:20 <tomsmeding> no need for cabal, if you want to avoid that
20:11:50 <mastarija> Really, when did that change?
20:11:57 <tomsmeding> uh, decades ago? :p
20:12:03 <tomsmeding> https://gitlab.haskell.org/ghc/ghc/-/wikis/commentary/libraries/version-history
20:12:14 <mastarija> Hm... I do remember 3 years ago a few students had issues with that.
20:12:34 <tomsmeding> ah no, ghc 8.4.1
20:12:40 <mastarija> Whenever I use something that's not in base there are problems.
20:12:46 <tomsmeding> was the first to have a parsec as a bootlib, according to that table
20:13:06 merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl)
20:13:16 <tomsmeding> which was released March 2018
20:13:22 <monochrom> I bet the few students used debian/ubuntu and merely did `apt install ghc` therefore obtaining a version outdated by 2 decades.
20:13:26 <tomsmeding> possibly some students were stuck with ancient debians?
20:13:28 <tomsmeding> yes
20:13:47 <tomsmeding> 2018 is not even decades old, that would be good by debian's standards
20:14:02 <mastarija> Well, I'll go with ReadPrec just for my own exercise xD
20:14:18 <mastarija> Now I'm into it already.
20:14:48 <mastarija> Could come in handy on the job as well.
20:15:48 <haskellbridge> <Bowuigi> Oh also
20:16:01 <haskellbridge> <Bowuigi> ReadPrec itself is somewhat incomplete
20:16:32 <haskellbridge> <Bowuigi> You have to lift methods from ReadP if you want chains, many, etc
20:16:34 <mastarija> Yeah I can see from the very barebones api
20:17:00 <mastarija> Text.Read has a few useful ReadPrec utilities as far as I can see.
20:17:07 <haskellbridge> <Bowuigi> I'd suggest using ReadP only
20:17:55 <mastarija> Yehah. I'll see.
20:18:15 <haskellbridge> <Bowuigi> Using readPrec_to_P to convert stuff from ReadPrec by itself if you want to use Text.Read too
20:18:33 tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
20:19:50 × merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 252 seconds)
20:20:29 × CrunchyFlakes quits (~CrunchyFl@31.19.233.78) (Read error: Connection reset by peer)
20:21:02 × ash3en quits (~Thunderbi@2a03:7846:b6eb:101:93ac:a90a:da67:f207) (Quit: ash3en)
20:21:05 tdammers joins (~tdammers@110-136-178-143.ftth.glasoperator.nl)
20:22:03 <haskellbridge> <Bowuigi> Oddly enough it would be easy to make the dual of the showsPrec API and even do both at once with some magic
20:22:52 CrunchyFlakes joins (~CrunchyFl@ip1f13e94e.dynamic.kabel-deutschland.de)
20:23:46 <haskellbridge> <Bowuigi> Oh nvm maybe not doing both at the same time, one requires pattern matching and the other requires construction. Another problem to be solved by row types I guess
20:25:40 <mastarija> I thought I've seen something like that recently?
20:26:07 <mastarija> Like, we can get both parser and renderer from the same combinators, no?
20:26:28 <mastarija> Not in the base ofc, but I thought someone posted something like that.
20:26:46 × Smiles quits (uid551636@id-551636.lymington.irccloud.com) (Quit: Connection closed for inactivity)
20:28:04 <geekosaur> "bidirectional parsing" is what it's often called
20:28:24 × tdammers quits (~tdammers@110-136-178-143.ftth.glasoperator.nl) (Ping timeout: 246 seconds)
20:30:44 merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl)
20:33:13 <mastarija> Hm... I don't quite understand the `prec` function. It will parse only if the current precedence level is what we've given it, but the example in the Text.Read docs seems like it uses it to set the precedence of the operator. If we work with a deeply nested structure the `step` will potentially go over the precedence limit.
20:33:47 <mastarija> At least, that's what I see from the example, perhaps I don't understand.
20:34:59 × merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 244 seconds)
20:36:19 × tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
20:41:40 tdammers joins (~tdammers@110-136-178-143.ftth.glasoperator.nl)
20:42:43 <glguy> Which example are you looking at?
20:46:07 merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl)
20:46:21 <mastarija> glguy, the very first example in the Text.Read module.
20:46:26 <mastarija> And only example I think.
20:46:52 <mastarija> There's the ReadS version and the ReadPrec version
20:47:04 <glguy> Ok, can you paste the link to the thing you're asking about?
20:47:11 <mastarija> Yup, just a sec.
20:47:32 tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
20:47:38 <mastarija> https://hackage.haskell.org/package/base-4.20.0.1/docs/Text-Read.html
20:48:20 <mastarija> glguy, the prec function is in this module: https://hackage.haskell.org/package/base-4.20.0.1/docs/Text-Read.html
20:48:29 <mastarija> Oops.
20:48:35 <glguy> It looks like it uses the same prec argument over and over
20:49:01 <mastarija> https://hackage.haskell.org/package/base-4.20.0.1/docs/Text-ParserCombinators-ReadPrec.html#v:prec
20:49:30 <mastarija> glguy, yes, but it also uses the `step` to advance the precedence every time it goes deeper.
20:49:54 <mastarija> So at some point, precedence will grow over what's specified by the fixed `prec` parser.
20:50:03 <mastarija> And I don't see how that makes sense.
20:51:33 × ljdarj quits (~Thunderbi@user/ljdarj) (Ping timeout: 248 seconds)
20:53:05 × merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 248 seconds)
20:53:19 <mastarija> Hm... perhaps, I think it's starting to make sense... xD
20:53:45 <mastarija> Nope, lost it.
20:55:45 × L29Ah quits (~L29Ah@wikipedia/L29Ah) (Ping timeout: 252 seconds)
20:56:43 <glguy> I think it's designed like that because it says it's NOT using the right associativity of :^:
20:57:16 <glguy> So it's increasing to a precedence where another :^: will fail to parse without intervening ()s
20:57:30 <glguy> But I'm looking at this from my phone and I'm not that clear on it
20:57:59 <mastarija> Like, it looks to me that at a certain depth it'll just stop parsing.
21:00:41 <glguy> The depth gets reset by parens
21:01:08 <mastarija> I'm looking at it's code, and I don't see any depth resetting.
21:01:41 × kimiamania quits (~65804703@user/kimiamania) (Quit: PegeLinux)
21:01:50 <mastarija> Ohh...
21:01:57 <mastarija> It's in the paren'
21:02:04 kimiamania joins (~65804703@user/kimiamania)
21:02:05 <mastarija> I see the reset.
21:04:09 merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl)
21:08:36 × merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 252 seconds)
21:13:47 × target_i quits (~target_i@user/target-i/x-6023099) (Quit: leaving)
21:13:49 harveypwca joins (~harveypwc@2601:246:d080:b40:1889:d9bf:2dd8:b288)
21:19:31 merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl)
21:21:20 × homo quits (~homo@user/homo) (Quit: homo)
21:24:36 × merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 276 seconds)
21:25:58 × Leary quits (~Leary@user/Leary/x-0910699) (Remote host closed the connection)
21:28:48 <hellwolf> $ pointfree '\a -> a + a'
21:28:48 <hellwolf> join (+)
21:29:00 <hellwolf> :t join
21:29:01 <lambdabot> Monad m => m (m a) -> m a
21:29:07 <hellwolf> how does this make sense? where is the monad?
21:29:36 pavonia joins (~user@user/siracusa)
21:29:53 <int-e> it's (r -> (r -> a)) -> (r -> a)
21:30:19 <hellwolf> Reader monad?
21:30:22 <int-e> yep
21:30:29 <hellwolf> how does GHC infer that far
21:30:42 <hellwolf> mind blown. I can't explain that to newbies, let alone to myself.
21:31:37 L29Ah joins (~L29Ah@wikipedia/L29Ah)
21:31:38 <int-e> when you unify m (m a) and a -> a -> a, the only choice for m is (a ->)
21:31:57 <int-e> a -> a -> a coming from (+) :: Num a => a -> a -> a
21:32:59 <monochrom> This is why I teach type inference explicitly (e.g., with unification).
21:34:17 <hellwolf> i see, reading it step-by-step makes sense
21:34:54 merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl)
21:35:19 <hellwolf> this is probably not the best place to do pointfree style, arguably. but maybe it is just my level is not there yet.
21:35:44 <geekosaur> most people agree with you, I think
21:36:02 <geekosaur> the primitive reader monad is mostly obfuscation
21:37:16 <geekosaur> ("primitive" = "not nicely wrapped in a newtype which would keep ghc from inferring it and confusing the hell out of you")
21:38:40 <hellwolf> instance Monad ((->) r) where
21:38:40 <hellwolf> f >>= k = \ r -> k (f r) r
21:38:47 <hellwolf> src/GHC.Internal.Base.html#line-1453
21:39:23 × merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 252 seconds)
21:39:26 Leary joins (~Leary@user/Leary/x-0910699)
21:39:36 <geekosaur> read it and weep 🙂
21:41:03 <hellwolf> the only thing actually catches the eyes of mine is the space between "\" and r... it makes me questioning my own coding style, where there is no space in between :D
21:42:00 <geekosaur> I think most people don't use a space there
21:42:11 × takuan quits (~takuan@178-116-218-225.access.telenet.be) (Remote host closed the connection)
21:43:14 <geekosaur> some of those choices are lost to history, though; that definition, while its current location is GHC-specific, was once shared between ghc, Hugs, and nhc98
21:43:32 <geekosaur> (the Hugs and nhc98 code was mostly ripped out years ago)
21:44:05 hellwolf felt relieved
21:44:51 <hellwolf> But what's the legit case of the reader monad... I wonder how a do notation block of such a monad would look like.
21:47:00 × finsternis quits (~X@23.226.237.192) (Read error: Connection reset by peer)
21:48:44 ljdarj joins (~Thunderbi@user/ljdarj)
21:48:44 <kaol> It's like a single argument function body where every <- gets the argument's value.
21:49:14 × michalz quits (~michalz@185.246.207.197) (Remote host closed the connection)
21:50:18 merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl)
21:51:59 <kaol> > (do { a <- fst ; b <- snd ; return $ a + b }) (1,2)
21:52:00 <lambdabot> 3
21:52:06 <monochrom> The (->)e monad helps understand why and how "data P a = P a a" and "data S a = Cons a (S a)" are monads. Because P is (->)Bool and S is (->)Natural.
21:52:17 <hellwolf> https://play.haskell.org/saved/NoOO2WnH
21:52:23 <hellwolf> this is nuts, nutty code. but it works.
21:52:40 dpratt joins (~dpratt@165.225.220.148)
21:52:52 <hellwolf> https://play.haskell.org/saved/DeEDElh3
21:52:59 <hellwolf> rewrite without the explicit ((->) form
21:53:36 <hellwolf> ah, kaol you have a more succinct one.
21:54:51 × merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 244 seconds)
21:55:46 <hellwolf> but mine calls another "monad"... makes no sense, semantically. (as a human) if you are a living compiler, I don't judge.
21:56:18 <tomsmeding> hellwolf: there's a certain specific, fairly common use of the reader monad: as a monad transformer over IO, i.e. `ReaderT r IO a`, which is newtype-unwrapped the same as `r -> IO a`
21:56:35 <kaol> > ((+) <$> fst <*> snd) (1,2) -- My example didn't actually need the monad but hey
21:56:36 <lambdabot> 3
21:56:55 <tomsmeding> a large fraction of haskell effects libraries use this as their base monad, where the `r` is some vector of IORefs containing the state for each effect in scope
21:57:12 <tomsmeding> it's essentially an invisible argument to every function that can be "requested" inside the monad
21:57:43 <tomsmeding> in Control.Monad(.Trans).Reader, the monad operation that gets this argument is `ask :: Reader r r`
21:58:16 <tomsmeding> if you want more fun: do you know SKI combinators? K = return, S = (<*>) in the reader monad
22:00:08 <tomsmeding> ( https://tech.fpcomplete.com/blog/2017/06/readert-design-pattern/ is sometimes cited in this context)
22:00:52 weary-traveler joins (~user@user/user363627)
22:03:35 OftenFaded joins (~OftenFade@user/tisktisk)
22:03:38 × jmcantrell quits (~weechat@user/jmcantrell) (Ping timeout: 244 seconds)
22:03:38 jmcantrell_ is now known as jmcantrell
22:04:54 × tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
22:05:41 merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl)
22:07:58 <kaol> If you want to have more fun, check out Op in Data.Functor.Contravariant. Or go straight to the Data.Profunctor if you want to have the strong stuff.
22:10:12 × simplystuart quits (~simplystu@c-75-75-152-164.hsd1.pa.comcast.net) (Remote host closed the connection)
22:10:12 × merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 252 seconds)
22:10:21 × dpratt quits (~dpratt@165.225.220.148) (Quit: Client closed)
22:15:57 × remexre quits (~remexre@user/remexre) (Ping timeout: 276 seconds)
22:18:35 <mastarija> haskellbridge, are you sure about calling the parser with the same precedence on the side where I associate?
22:19:04 <mastarija> I'm looking at it, and the only conclusion I can come to is that it will get stuck in the infinite loop
22:19:05 tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
22:19:15 <mastarija> I've made a paste here: https://paste.tomsmeding.com/Q8thgs0a
22:19:35 <mastarija> Line 474
22:19:37 <glguy> mastarija: haskellbridge isn't a person, the person it's bridging is listed in its message
22:19:48 <mastarija> oh... -.-
22:20:06 × ljdarj quits (~Thunderbi@user/ljdarj) (Quit: ljdarj)
22:20:25 ljdarj joins (~Thunderbi@user/ljdarj)
22:20:33 <mastarija> Bowuigi, not sure if it is correct that we just have to use the same precedence.
22:20:40 <glguy> mastarija: I would expect it's OK to call recursively like that for right-associative things
22:20:58 <glguy> but for left associative you'll need to structure things slightly differently to break the left-recursion trap
22:20:59 <mastarija> Yeah. It is.
22:21:03 merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl)
22:21:31 <mastarija> Do you mean something like chainl does?
22:21:39 <glguy> yes, like that
22:25:09 <tomsmeding> classic parser things :)
22:25:59 × merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 260 seconds)
22:26:26 <mastarija> I mean, I've expected that, but I was under the impression that precedence parsers have some kind of magic.
22:26:30 <mastarija> Now I'm disappointed.
22:26:36 <glguy> Instead of using a parser generator, parser combinators make you act as the parser generator
22:26:48 <glguy> it's a big savings for the computer
22:27:03 × ljdarj quits (~Thunderbi@user/ljdarj) (Ping timeout: 246 seconds)
22:27:03 <tomsmeding> well if someone implemented an actual expression parser for you, then they handled this for you already :0
22:27:05 <tomsmeding> * :p
22:27:24 <tomsmeding> passing of precedence numbers down is just a crude tool
22:27:37 <tomsmeding> you can write your own buildExpressionParser that uses chainl when necessary ;)
22:28:06 <glguy> Yes, even better than using a parser generator or being a parser generator is writing a new one!
22:28:13 <mastarija> Are there any examples when we need to mix left, right and no associative operators?
22:28:17 <tomsmeding> more fun for sure
22:28:33 <tomsmeding> a ^ 2 + b ^ 2 == c ^ 2
22:28:42 <tomsmeding> (^) is right-associative, (+) is left, (==) is non
22:29:06 <mastarija> I've meant about the expression parser implementation and how to structure chainl and chainrs
22:29:08 <tomsmeding> I guess it doesn't matter for (+), but for (-) it would
22:29:34 <tomsmeding> you could check how parsec implements buildExpressionParser I guess?
22:30:00 <glguy> To really do fully general mixing you need to parse without any fixities and then post-process them afaik
22:31:07 <monochrom> If (+) is lower than (*), I just code: additive = chainl1 multiplicative (operator "+" *> pure (+)); multiplicative = chainl1 base (operator "*" *> pure (*))
22:31:34 <monochrom> In general, precedence levels become call dependency.
22:32:32 <glguy> If you are parsing a fixed set of operators you can encode the different left/right/none fixities directly into the parser
22:32:36 <monochrom> "higher" precedence = binds tighter = closer to bottom of the food chain.
22:32:43 <mastarija> I have fixed set of operators.
22:33:42 <glguy> stick to each precedence level having a consistent left/right/none level
22:33:46 <geekosaur> you can also do that if you require they be declared before use, though, by mutating a table in the parser. ghc postprocesses because the Haskell standard allows you to do things like putting the fixity declaration on the opposite side of the file from the operator definition
22:34:01 <geekosaur> and doesn't require declaration before use
22:35:57 <mastarija> Dang it. I even derived the Enum and Bounded instances hoping I can just do fmap with a bin op maker over a list of operator tags and call it a day.
22:36:04 <mastarija> Guess I'll have to do it by hand.
22:36:36 merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl)
22:40:30 × tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
22:40:51 × todi quits (~todi@p57803331.dip0.t-ipconnect.de) (Quit: ZNC - https://znc.in)
22:41:18 × merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 276 seconds)
22:49:49 chiselfuse joins (~chiselfus@user/chiselfuse)
22:49:57 peterbecich joins (~Thunderbi@syn-047-229-123-186.res.spectrum.com)
22:51:42 dsrt^ joins (~dsrt@c-98-242-74-66.hsd1.ga.comcast.net)
22:51:59 merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl)
22:55:04 × mastarija quits (~mastarija@42-117.dsl.iskon.hr) (Quit: Leaving)
22:56:27 × merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 246 seconds)
22:58:48 × briandaed quits (~root@user/briandaed) (Quit: Lost terminal)
22:59:21 × machinedgod quits (~machinedg@d108-173-18-100.abhsia.telus.net) (Quit: Lost terminal)
22:59:41 tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
23:00:11 machinedgod joins (~machinedg@d108-173-18-100.abhsia.telus.net)
23:07:22 merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl)
23:08:07 ljdarj joins (~Thunderbi@user/ljdarj)
23:11:54 × merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 252 seconds)
23:15:20 × Spawns_Carpeting quits (~mobile@user/spawns-carpeting/x-6969421) (Quit: ZNC 1.8.2+deb3.1+deb12u1 - https://znc.in)
23:19:21 Spawns_Carpeting joins (~mobile@user/spawns-carpeting/x-6969421)
23:20:02 homo joins (~homo@37-33-208-60.bb.dnainternet.fi)
23:20:33 × homo quits (~homo@37-33-208-60.bb.dnainternet.fi) (Changing host)
23:20:33 homo joins (~homo@user/homo)
23:20:34 sindu joins (~sindu@176.75.224.1)
23:22:45 merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl)
23:29:24 × merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 252 seconds)
23:29:58 × ljdarj quits (~Thunderbi@user/ljdarj) (Ping timeout: 245 seconds)
23:40:02 × toch quits (~toch@user/toch) (Ping timeout: 252 seconds)
23:40:48 merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl)
23:41:00 × tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
23:45:25 × merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 244 seconds)
23:45:44 <haskellbridge> <Bowuigi> @irc_libera.chat_mastarija:kf8nh.com re:precedence/associativity it has to be the same precedence for right associativity, but for left assoc you have to left factor it
23:46:23 <haskellbridge> <Bowuigi> That's what chainl1 does in parsing libraries
23:47:15 <geekosaur> they left
23:47:21 <geekosaur> and irc isn't persistent
23:48:06 <haskellbridge> <Bowuigi> Ah, I guess I mostly just repeated what was already said though
23:48:36 dpratt joins (~dpratt@165.225.220.148)
23:52:39 <haskellbridge> <Bowuigi> Anyway, if anyone is interested in building an expression parser of any kind without buildExpressionParser, the paper "Parsing Mixfix Operators" by N. A. Danielsson and U. Norell suggests an easy to understand and reuse method that works for both the usual expressions and more general ones with mixfix operators (like if_then_else_, let_=_in_;_, etc)
23:53:25 <haskellbridge> <Bowuigi> You can use their principles to implement 90-95% of the parser of a functional language in a maintainable and fast way. Heavily recommended
23:54:32 <dpratt> So I am still stuck on day 12 (part 1!) of the AoC problems. Unfortunately, my code produces the correct answer for the test input. I have also confirmed that (a) the total area of the identified regions is correct and (b) that several "spot-checked" calculations of perimeter and area of individual regions are correct. The current code is here:
23:54:32 <dpratt> https://gist.github.com/dgpratt/86b713c7dfadc748ae05fa1021750bb2
23:54:33 <dpratt> If anyone has suggestions as to an approach to sus out the problem, I would be grateful.
23:55:16 merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl)
23:57:33 __jmcantrell__ joins (~weechat@user/jmcantrell)
23:57:35 jmcantrell is now known as Guest1761
23:57:35 × Guest1761 quits (644f1bed9a@user/jmcantrell) (Killed (molybdenum.libera.chat (Nickname regained by services)))
23:57:35 __jmcantrell__ is now known as jmcantrell
23:57:45 jmcantrell_ joins (644f1bed9a@user/jmcantrell)
23:59:53 × merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 244 seconds)

All times are in UTC on 2024-12-13.