Home liberachat/#haskell: Logs Calendar

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

00:00:06 × jargon quits (~jargon@174-22-192-24.phnx.qwest.net) (*.net *.split)
00:00:06 × gwern quits (~gwern@user/gwern) (*.net *.split)
00:00:06 × bontaq quits (~user@ool-45779fe5.dyn.optonline.net) (*.net *.split)
00:00:06 × AlexZenon quits (~alzenon@178.34.161.14) (*.net *.split)
00:00:06 × jonathanx quits (~jonathan@h-178-174-176-109.A357.priv.bahnhof.se) (*.net *.split)
00:00:06 × Maeda quits (~Maeda@91-161-10-149.subs.proxad.net) (*.net *.split)
00:00:06 × tomku|two quits (~tomku@user/tomku) (*.net *.split)
00:00:06 × hrberg_ quits (~quassel@171.79-160-161.customer.lyse.net) (*.net *.split)
00:00:06 × coderpat- quits (~coderpath@d66-183-126-83.bchsia.telus.net) (*.net *.split)
00:00:06 × jrm quits (~jrm@user/jrm) (*.net *.split)
00:00:06 × pflanze quits (~pflanze@159.100.249.232) (*.net *.split)
00:00:06 × tessier quits (~treed@98.171.210.130) (*.net *.split)
00:00:06 × brettgilio quits (~brettgili@x-irc.gq) (*.net *.split)
00:00:06 × haasn quits (~nand@haasn.dev) (*.net *.split)
00:00:06 × mniip quits (mniip@libera/staff/mniip) (*.net *.split)
00:00:06 × geekosaur quits (~geekosaur@xmonad/geekosaur) (*.net *.split)
00:00:06 × cjay quits (cjay@nerdbox.nerd2nerd.org) (*.net *.split)
00:00:06 × ridcully quits (~ridcully@p508acd69.dip0.t-ipconnect.de) (*.net *.split)
00:00:06 × cstml_ quits (cstml@tilde.club) (*.net *.split)
00:00:06 × bollu quits (~bollu@159.65.151.13) (*.net *.split)
00:00:06 × ystael quits (~ystael@user/ystael) (*.net *.split)
00:00:06 × texasmynsted quits (~texasmyns@99.96.221.112) (*.net *.split)
00:00:06 × crns quits (~netcrns@user/crns) (*.net *.split)
00:00:06 × haskl quits (~haskl@user/haskl) (*.net *.split)
00:00:07 × reda quits (~reda@user/reda) (*.net *.split)
00:00:07 × Hecate quits (~mariposa@user/hecate) (*.net *.split)
00:00:07 × koala_man quits (~vidar@157.146.251.23.bc.googleusercontent.com) (*.net *.split)
00:00:07 × drlkf quits (~drlkf@chat.drlkf.net) (*.net *.split)
00:00:07 × mht-wtf quits (~mht@mht.wtf) (*.net *.split)
00:00:07 × sgarcia quits (sgarcia@swarm.znchost.com) (*.net *.split)
00:00:07 × bcoppens quits (~bartcopp@vpn2.bartcoppens.be) (*.net *.split)
00:00:07 × LambdaDuck quits (~anka@ksit.fixme.fi) (*.net *.split)
00:00:07 × tolt quits (~weechat-h@li219-154.members.linode.com) (*.net *.split)
00:00:07 × marienz quits (~marienz@libera/staff/marienz) (*.net *.split)
00:00:08 × markasoftware quits (~quassel@107.161.26.124) (*.net *.split)
00:00:08 × kora9 quits (~kora@user/Kora9) (*.net *.split)
00:00:08 × orcus quits (~orcus@user/brprice) (*.net *.split)
00:00:08 × int-e quits (~noone@int-e.eu) (*.net *.split)
00:00:08 × opqdonut quits (opqdonut@pseudo.fixme.fi) (*.net *.split)
00:00:08 × Profpatsch quits (~Profpatsc@static.88-198-193-255.clients.your-server.de) (*.net *.split)
00:00:08 × mesaoptimizer2 quits (apotheosis@user/PapuaHardyNet) (*.net *.split)
00:00:08 × dka quits (~code-is-a@ns3059207.ip-193-70-33.eu) (*.net *.split)
00:00:08 × brprice quits (~brprice@user/brprice) (*.net *.split)
00:00:08 × dunj3 quits (~dunj3@kingdread.de) (*.net *.split)
00:00:08 × djanatyn quits (~djanatyn@vps-7f49a6b0.vps.ovh.ca) (*.net *.split)
00:00:08 × hltk quits (~hltk@hltk.fi) (*.net *.split)
00:00:12 opqdonut joins (opqdonut@pseudo.fixme.fi)
00:00:12 LambdaDuck joins (~anka@ksit.fixme.fi)
00:00:14 dka joins (~code-is-a@ns3059207.ip-193-70-33.eu)
00:00:16 hltk joins (~hltk@hltk.fi)
00:00:16 hrberg joins (~quassel@171.79-160-161.customer.lyse.net)
00:00:17 mniip joins (mniip@libera/staff/mniip)
00:00:18 bcoppens joins (~bartcopp@vpn2.bartcoppens.be)
00:00:19 tomku joins (~tomku@068-112-105-122.res.spectrum.com)
00:00:20 bontaq joins (~user@ool-45779fe5.dyn.optonline.net)
00:00:21 crns joins (~netcrns@p4ff5e521.dip0.t-ipconnect.de)
00:00:21 ridcully joins (~ridcully@p508acd69.dip0.t-ipconnect.de)
00:00:21 AlexZenon joins (~alzenon@178.34.161.14)
00:00:21 coderpath joins (~coderpath@d66-183-126-83.bchsia.telus.net)
00:00:22 int-e joins (~noone@int-e.eu)
00:00:22 Hecate joins (~mariposa@user/hecate)
00:00:22 marienz joins (~marienz@libera/staff/marienz)
00:00:23 tessier joins (~treed@98.171.210.130)
00:00:25 cstml_ joins (cstml@tilde.club)
00:00:25 × tomku quits (~tomku@068-112-105-122.res.spectrum.com) (Changing host)
00:00:25 tomku joins (~tomku@user/tomku)
00:00:26 texasmynsted joins (~texasmyns@99.96.221.112)
00:00:26 jonathanx joins (~jonathan@h-178-174-176-109.A357.priv.bahnhof.se)
00:00:36 × mestre quits (~mestre@191.177.185.178) (Quit: Lost terminal)
00:00:42 Profpatsch joins (~Profpatsc@static.88-198-193-255.clients.your-server.de)
00:00:43 jrm joins (~jrm@user/jrm)
00:00:45 tolt joins (~weechat-h@li219-154.members.linode.com)
00:00:52 × crns quits (~netcrns@p4ff5e521.dip0.t-ipconnect.de) (Changing host)
00:00:52 crns joins (~netcrns@user/crns)
00:01:15 sgarcia joins (sgarcia@swarm.znchost.com)
00:01:16 djanatyn joins (~djanatyn@vps-7f49a6b0.vps.ovh.ca)
00:01:45 dunj3 joins (~dunj3@kingdread.de)
00:01:54 pflanze joins (~pflanze@159.100.249.232)
00:02:03 geekosaur joins (~geekosaur@xmonad/geekosaur)
00:02:14 jargon joins (~jargon@174-22-192-24.phnx.qwest.net)
00:02:16 markasoftware joins (~quassel@107.161.26.124)
00:02:19 haskl joins (~haskl@user/haskl)
00:02:20 mht-wtf joins (~mht@2a03:b0c0:3:e0::1e2:c001)
00:02:23 orcus joins (~orcus@user/brprice)
00:02:40 brprice joins (~brprice@user/brprice)
00:02:40 biberu\ joins (~biberu@user/biberu)
00:02:47 haasn joins (~nand@haasn.dev)
00:02:53 burnsidesLlama joins (~burnsides@210006168186.ctinets.com)
00:03:05 bollu joins (~bollu@159.65.151.13)
00:03:17 stef204 joins (~stef204@user/stef204)
00:03:52 drlkf joins (~drlkf@chat.drlkf.net)
00:04:01 kora9 joins (~kora@user/Kora9)
00:05:15 koala_man joins (~vidar@157.146.251.23.bc.googleusercontent.com)
00:05:16 cjay joins (cjay@nerdbox.nerd2nerd.org)
00:05:24 Maeda joins (~Maeda@91-161-10-149.subs.proxad.net)
00:05:24 reda joins (~reda@user/reda)
00:05:29 ystael joins (~ystael@user/ystael)
00:05:33 × biberu quits (~biberu@user/biberu) (Ping timeout: 268 seconds)
00:05:34 gwern joins (~gwern@user/gwern)
00:05:34 biberu\ is now known as biberu
00:05:44 × burnsidesLlama quits (~burnsides@210006168186.ctinets.com) (Remote host closed the connection)
00:06:21 burnsidesLlama joins (~burnsides@210006168186.ctinets.com)
00:10:20 <intelligent_boat> hm. still learning new things about how to think about performance in Haskell. let's say I have: let s = "5", let op = (* (read s)), map op [1, 2, 3, 4]. I was actually wondering whether it would try to parse the string multiple times, which would seem to me like unnecessary work
00:10:56 <intelligent_boat> but, if I change that to let op = (* (trace "read it" $ read s)), "read it" was only printed once, so it suggests the read was only done once (I hope)
00:11:43 <intelligent_boat> how do I know these things in advance so I don't have to wonder "is this thing going to be performed multiple times or just once" ?
00:12:00 <dsal> On one level, thinking about performance in haskell is like thinking about performance in any other language. "Is my program fast enough? If yes, great. If not, measure it and see what part's slow."
00:12:24 <dsal> It's not impossible for trace to mislead you.
00:12:38 merijn joins (~merijn@86-86-29-250.fixed.kpn.net)
00:12:47 <dsal> But if you really want to know, compile to core and see what happens to your code after rules and optimizer passes.
00:13:32 × bitdex quits (~bitdex@gateway/tor-sasl/bitdex) (Ping timeout: 255 seconds)
00:16:15 × jargon quits (~jargon@174-22-192-24.phnx.qwest.net) (Ping timeout: 260 seconds)
00:17:56 bitdex joins (~bitdex@gateway/tor-sasl/bitdex)
00:19:42 <dminuoso> intelligent_boat: As a very rough guideline, if you put it onto a let binding, there's a fair chance it will be shared.
00:20:20 <dminuoso> But if GHC determines it to be very cheap/small, it will inline it regardless
00:20:34 <dminuoso> We do have pragmas like NOINLINE to prevent that, however.
00:21:28 × waleee quits (~waleee@h-176-10-137-138.NA.cust.bahnhof.se) (Ping timeout: 256 seconds)
00:23:28 <dsal> I did something like the above and it spat out this: https://www.irccloud.com/pastebin/z95TStPM/coredump.txt
00:24:06 lisbeths joins (uid135845@id-135845.lymington.irccloud.com)
00:24:52 <dminuoso> monomorphism restriction to the rescue.
00:25:10 <dsal> That's happening inside the map, though…
00:25:18 <dminuoso> oh hah
00:25:26 <dminuoso> You're right
00:26:00 <dminuoso> Im not entirely sure why it was floated inwards
00:26:04 waleee joins (~waleee@2001:9b0:213:7200:cc36:a556:b1e8:b340)
00:26:49 <geekosaur> what -O level?
00:28:16 × acidjnk quits (~acidjnk@p200300d6e7137a279cde44451dfff9db.dip0.t-ipconnect.de) (Ping timeout: 256 seconds)
00:28:20 <dsal> I guess it didn't pick that up in my ghci venture. Otherwise, with -O2 it blows it all over the place.
00:28:40 <dsal> https://www.irccloud.com/pastebin/euO9O1VL/ohtwo.hs
00:29:12 × Tuplanolla quits (~Tuplanoll@91-159-68-152.elisa-laajakaista.fi) (Quit: Leaving.)
00:30:03 <dminuoso> intelligent_boat: Also note that doing these attempts in ghci can be misleading due to MMR and optimization levels.
00:30:40 <dsal> Man, this core thing is worse at naming stuff than I am.
00:30:41 <intelligent_boat> dang. yup I did that exerpiment in GHC
00:31:10 <geekosaur> ghci usually disables optimization
00:31:39 <geekosaur> for a long time one of the non-disableable optimizations was unboxing tuples, which caused ghci to crash
00:35:38 × fizbin quits (~fizbin@user/fizbin) (Ping timeout: 256 seconds)
00:36:00 <dminuoso> Mmm, even for lists of unknown size this will float the read in.
00:37:21 <dminuoso> Ah it may be just with optimizations turned off
00:39:33 <dsal> Yeah, the large one is -O2. `ints5 :: Int` does the read.
00:40:47 × azimut_ quits (~azimut@gateway/tor-sasl/azimut) (Quit: ZNC - https://znc.in)
00:41:14 <dsal> But I stand by my first statement. Is it fast enough? If not, measure.
00:41:20 <dsal> Real code wouldn't have a `read` in it anyway. :)
00:41:35 azimut joins (~azimut@gateway/tor-sasl/azimut)
00:42:39 <dsal> Haskell has all kinds of weird things that sounds like "how long is a string?"
00:43:02 <dsal> How long does it take to compute the length of a list of 2^31 elements? Depends on whether you want to know the length or not.
00:44:50 <dsal> > asum [Just 3, Just (length (replicate (2^31) 'a'))]
00:44:52 <lambdabot> Just 3
00:46:03 <dsal> One of my AoC solutions from a year or two ago finished in nanoseconds. (compilation was a bit slower on that one)
00:46:14 × merijn quits (~merijn@86-86-29-250.fixed.kpn.net) (Ping timeout: 260 seconds)
00:49:45 [itchyjunk] joins (~itchyjunk@user/itchyjunk/x-7353470)
00:49:48 × gurkenglas quits (~gurkengla@p548ac72e.dip0.t-ipconnect.de) (Ping timeout: 256 seconds)
00:53:43 fizbin joins (~fizbin@user/fizbin)
01:03:10 Lycurgus joins (~juan@user/Lycurgus)
01:07:14 × bontaq quits (~user@ool-45779fe5.dyn.optonline.net) (Ping timeout: 260 seconds)
01:07:56 × sadmax quits (~user@209.205.174.253) (Ping timeout: 256 seconds)
01:08:31 mikoto-chan joins (~mikoto-ch@2001:999:700:6f41:84a3:b322:d26d:702e)
01:13:04 troydm joins (~troydm@host-176-37-124-197.b025.la.net.ua)
01:15:28 mvk joins (~mvk@2607:fea8:5ce3:8500::efb)
01:18:11 × xff0x_ quits (~xff0x@ai071162.d.east.v6connect.net) (Ping timeout: 246 seconds)
01:18:29 × Lycurgus quits (~juan@user/Lycurgus) (Quit: Exeunt: personae.ai-integration.biz)
01:26:56 × Unicorn_Princess quits (~Unicorn_P@user/Unicorn-Princess/x-3540542) (Quit: Leaving)
01:30:26 ddellacosta joins (~ddellacos@143.244.47.89)
01:35:44 × ddellacosta quits (~ddellacos@143.244.47.89) (Ping timeout: 246 seconds)
01:37:34 WarzoneCommand joins (~Frank@77-162-168-71.fixed.kpn.net)
01:37:54 son0p joins (~ff@2604:3d08:5b7f:5540::4026)
01:40:30 wroathe joins (~wroathe@207-153-38-140.fttp.usinternet.com)
01:40:30 × wroathe quits (~wroathe@207-153-38-140.fttp.usinternet.com) (Changing host)
01:40:30 wroathe joins (~wroathe@user/wroathe)
01:42:20 merijn joins (~merijn@86-86-29-250.fixed.kpn.net)
01:42:30 × Kaiepi quits (~Kaiepi@108.175.84.104) (Ping timeout: 256 seconds)
01:44:01 ddellacosta joins (~ddellacos@89.45.224.168)
01:54:44 eggplantade joins (~Eggplanta@2600:1700:38c5:d800:a84a:2d35:f948:fe07)
01:57:11 brettgilio joins (~brettgili@x-irc.gq)
01:58:44 × ddellacosta quits (~ddellacos@89.45.224.168) (Ping timeout: 265 seconds)
01:59:07 × eggplantade quits (~Eggplanta@2600:1700:38c5:d800:a84a:2d35:f948:fe07) (Ping timeout: 248 seconds)
02:01:40 xff0x_ joins (~xff0x@125x103x176x34.ap125.ftth.ucom.ne.jp)
02:05:48 × tvandinther quits (~tvandinth@111.69.34.210) (Ping timeout: 260 seconds)
02:07:50 × motherfsck quits (~motherfsc@user/motherfsck) (Quit: quit)
02:11:58 × wroathe quits (~wroathe@user/wroathe) (Ping timeout: 268 seconds)
02:14:38 <EvanR> dsal's flowchart: 10 is it fast enough? No -> optimize it >> goto 10; Yes -> no it isn't >> goto to
02:14:50 <EvanR> 10
02:16:59 × merijn quits (~merijn@86-86-29-250.fixed.kpn.net) (Ping timeout: 264 seconds)
02:20:39 ddellacosta joins (~ddellacos@89.45.224.51)
02:22:38 king_gs1 joins (~Thunderbi@187.201.150.200)
02:24:55 king_gs1 is now known as king_gs
02:27:35 motherfsck joins (~motherfsc@user/motherfsck)
02:28:40 <jackdk> optimises to 10: optimise it; 20: goto 10
02:28:54 × jao quits (~jao@cpc103048-sgyl39-2-0-cust502.18-2.cable.virginm.net) (Ping timeout: 260 seconds)
02:29:30 × burnsidesLlama quits (~burnsides@210006168186.ctinets.com) (Remote host closed the connection)
02:29:48 <EvanR> fix optimize
02:30:38 dsrt^ joins (~dsrt@76.145.185.103)
02:30:40 burnsidesLlama joins (~burnsides@210006168186.ctinets.com)
02:32:18 <jackdk> `fix error` results in a program that never returns an incorrect value :-)
02:35:59 × lisbeths quits (uid135845@id-135845.lymington.irccloud.com) (Quit: Connection closed for inactivity)
02:39:20 × azimut quits (~azimut@gateway/tor-sasl/azimut) (Ping timeout: 255 seconds)
02:40:14 × califax quits (~califax@user/califx) (Ping timeout: 255 seconds)
02:40:19 azimut joins (~azimut@gateway/tor-sasl/azimut)
02:40:50 × mvk quits (~mvk@2607:fea8:5ce3:8500::efb) (Quit: Going elsewhere)
02:48:26 califax joins (~califax@user/califx)
02:52:21 <dsal> If it's good enough, I try to do something more complicated.
02:54:29 × incertia quits (~incertia@209.122.71.127) (Ping timeout: 246 seconds)
02:54:52 × burnsidesLlama quits (~burnsides@210006168186.ctinets.com) (Remote host closed the connection)
02:55:34 incertia joins (~incertia@209.122.71.127)
02:56:05 × foul_owl quits (~kerry@193.29.61.77) (Ping timeout: 260 seconds)
02:56:21 burnsidesLlama joins (~burnsides@210006168186.ctinets.com)
02:57:42 razetime joins (~quassel@49.207.203.213)
03:01:00 king_gs1 joins (~Thunderbi@2806:103e:29:cdd2:b2dd:cddc:5884:d05c)
03:01:15 × king_gs quits (~Thunderbi@187.201.150.200) (Read error: Connection reset by peer)
03:01:16 king_gs1 is now known as king_gs
03:07:32 × ddellacosta quits (~ddellacos@89.45.224.51) (Ping timeout: 272 seconds)
03:08:58 ddellacosta joins (~ddellacos@143.244.47.75)
03:09:14 × burnsidesLlama quits (~burnsides@210006168186.ctinets.com) (Remote host closed the connection)
03:10:23 ensyde joins (~ensyde@2600:1700:2050:1040:e518:6f99:8537:355c)
03:10:34 burnsidesLlama joins (~burnsides@210006168186.ctinets.com)
03:10:45 foul_owl joins (~kerry@193.29.61.234)
03:12:53 merijn joins (~merijn@86-86-29-250.fixed.kpn.net)
03:14:18 instantaphex joins (~jb@c-73-171-252-84.hsd1.fl.comcast.net)
03:19:58 × JordiGH quits (~jordi@user/jordigh) (Ping timeout: 256 seconds)
03:23:31 × [itchyjunk] quits (~itchyjunk@user/itchyjunk/x-7353470) (Remote host closed the connection)
03:26:57 × king_gs quits (~Thunderbi@2806:103e:29:cdd2:b2dd:cddc:5884:d05c) (Quit: king_gs)
03:35:05 eggplantade joins (~Eggplanta@2600:1700:38c5:d800:a84a:2d35:f948:fe07)
03:39:16 × td_ quits (~td@83.135.9.32) (Ping timeout: 265 seconds)
03:39:50 × ddellacosta quits (~ddellacos@143.244.47.75) (Ping timeout: 272 seconds)
03:41:04 td_ joins (~td@83.135.9.49)
03:47:33 × merijn quits (~merijn@86-86-29-250.fixed.kpn.net) (Ping timeout: 268 seconds)
03:48:11 × ec quits (~ec@gateway/tor-sasl/ec) (Ping timeout: 255 seconds)
03:48:12 ec_ joins (~ec@gateway/tor-sasl/ec)
03:49:11 × burnsidesLlama quits (~burnsides@210006168186.ctinets.com) (Remote host closed the connection)
04:00:46 × stef204 quits (~stef204@user/stef204) (Ping timeout: 256 seconds)
04:03:36 × mncheckm quits (~mncheck@193.224.205.254) (Ping timeout: 256 seconds)
04:06:38 × ec_ quits (~ec@gateway/tor-sasl/ec) (Ping timeout: 255 seconds)
04:08:09 ec_ joins (~ec@gateway/tor-sasl/ec)
04:08:25 × Erutuon_ quits (~Erutuon@user/erutuon) (Ping timeout: 260 seconds)
04:12:25 merijn joins (~merijn@86-86-29-250.fixed.kpn.net)
04:17:02 × merijn quits (~merijn@86-86-29-250.fixed.kpn.net) (Ping timeout: 246 seconds)
04:18:52 × img quits (~img@user/img) (Quit: ZNC 1.8.2 - https://znc.in)
04:19:09 img joins (~img@user/img)
04:19:54 burnsidesLlama joins (~burnsides@119247164140.ctinets.com)
04:20:49 money is now known as polo
04:25:11 polo is now known as money
04:29:14 mbuf joins (~Shakthi@49.204.142.15)
04:32:13 × mikoto-chan quits (~mikoto-ch@2001:999:700:6f41:84a3:b322:d26d:702e) (Quit: WeeChat 3.6)
04:34:27 Kaiepi joins (~Kaiepi@108.175.84.104)
04:35:55 <iqubic> :t (>>=) (>>=)
04:35:55 <lambdabot> Monad m => (((a -> m b1) -> m b1) -> m a -> b2) -> m a -> b2
04:36:02 <iqubic> What?!?!?!
04:39:50 <c_wraith> > (+1) >>= (*) $ 4
04:39:52 <lambdabot> 20
04:40:02 <int-e> Yeah any (a ->) b is a monadic value.
04:44:28 <c_wraith> :t (>>=) `asAppliedTo` (>>=)
04:44:29 <lambdabot> Monad m => (m a -> (a -> m b1) -> m b1) -> (((a -> m b1) -> m b1) -> m a -> b2) -> m a -> b2
04:44:47 <c_wraith> that's pretty awful.
04:45:46 <int-e> :t (>>=)
04:45:47 <lambdabot> Monad m => m a -> (a -> m b) -> m b
04:46:00 <int-e> (that's not a small type at all)
04:46:24 <xerox> :t (=<<) (>>=)
04:46:25 <lambdabot> Monad m => ((a -> m b) -> m a) -> (a -> m b) -> m b
04:47:03 <xerox> :t (=<<) (=<<) (=<<)
04:47:04 <lambdabot> (a -> a -> a) -> a -> a
04:47:31 <int-e> > (=<<) (=<<) (=<<) (+) 3
04:47:32 <lambdabot> 9
04:47:42 <int-e> > (=<<) (=<<) (=<<) (-) 3
04:47:43 <lambdabot> -3
04:48:10 <xerox> (:
04:49:21 <int-e> negate = (=<<) (=<<) (=<<) (-) -- don't use for floating point numbers
04:49:38 <xerox> haha
04:50:26 <int-e> This about as sane as the xor-swap trick is in C.
04:51:30 <EvanR> in most dynamic languages you can do anything, but using a function on itself probably results in nonsense.
04:51:52 <EvanR> in haskell the type system usually stops you from doing anything, but using a function on itself probably works
04:52:30 <EvanR> *with different specializations
04:52:58 <int-e> :t foldl foldl
04:52:59 <lambdabot> error:
04:53:00 <lambdabot> • Occurs check: cannot construct the infinite type: a ~ a -> a
04:53:00 <lambdabot> Expected type: ((a -> a) -> a -> a)
04:53:18 <EvanR> :t (+) (+)
04:53:18 <int-e> (it often doesn't work, even for polymorphic functions)
04:53:19 <lambdabot> (Num a, Num (a -> a -> a)) => (a -> a -> a) -> a -> a -> a
04:53:36 <int-e> :t fmap fmap fmap fmap fmap fmap fmap fmap
04:53:37 <lambdabot> (Functor f1, Functor f2, Functor f3) => (a -> b) -> f1 (f2 (f3 a)) -> f1 (f2 (f3 b))
04:54:04 <int-e> (this runs into a cycle if you keep adding more `fmap`s)
04:54:18 <int-e> (don't ask me how I know, I was bored)
04:54:54 × andreas303 quits (andreas303@ip227.orange.bnc4free.com) (Quit: fBNC - https://bnc4free.com)
04:54:55 × xacktm quits (~xacktm@user/xacktm) (Quit: fBNC - https://bnc4free.com)
04:55:56 <EvanR> wait...
04:56:04 <EvanR> a cycle always with three functors?
04:56:41 lisbeths joins (uid135845@id-135845.lymington.irccloud.com)
04:57:14 <int-e> > fmap fmap fmap (+) (*) 1 2 x
04:57:15 <lambdabot> 1 * 2 + x
04:58:03 <int-e> EvanR: I mean you have fmap^k = fmap^l for some natural k < l. I forgot the numbers.
04:59:23 <int-e> (one thing that happens is that the functors get force-instantiated as (a ->) for various a)
04:59:40 <int-e> (but that doesn't explain why the type remains small-ish... it could grow forever)
05:01:43 × waleee quits (~waleee@2001:9b0:213:7200:cc36:a556:b1e8:b340) (Ping timeout: 260 seconds)
05:02:27 × burnsidesLlama quits (~burnsides@119247164140.ctinets.com) (Remote host closed the connection)
05:02:40 burnsidesLlama joins (~burnsides@119247164140.ctinets.com)
05:02:47 × burnsidesLlama quits (~burnsides@119247164140.ctinets.com) (Remote host closed the connection)
05:02:48 <EvanR> right
05:09:11 freeside joins (~mengwong@pd907d273.dip0.t-ipconnect.de)
05:14:51 merijn joins (~merijn@86-86-29-250.fixed.kpn.net)
05:21:49 × shriekingnoise quits (~shrieking@186.137.167.202) (Quit: Quit)
05:23:29 chomwitt joins (~chomwitt@2a02:587:7a0d:e800:1ac0:4dff:fedb:a3f1)
05:24:18 RemiYuko is now known as AkechiShiro
05:27:49 xacktm joins (~xacktm@user/xacktm)
05:30:50 <iqubic> Is there a good way to write a parser "tryOr :: Parser a -> a -> Parser a" with the semantics that if the first parser fails then the whole thing succeeds with the given default value?
05:32:35 <geekosaur> `tryOr p def = try p <|> pure def` ? (`try` depends on which parser lib)
05:33:24 <iqubic> Yeah... that should work.
05:33:30 <iqubic> It's megaparsec
05:33:35 <int-e> but this kind of alternative is a basic building block of any parsing library
05:35:10 × sudden quits (~cat@user/sudden) (Ping timeout: 252 seconds)
05:37:01 <iqubic> Is it? I can't seem to find a default thing for it in megaparsec
05:39:33 <int-e> I mean <|>... `tryOr p def = try p <|> pure def` doesn't pass the https://wiki.haskell.org/Fairbairn_threshold to my mind
05:39:37 <geekosaur> optional is from Control.Applicative, megaparsec reuses it
05:39:59 <int-e> :t Control.Applicative.optional
05:40:00 <lambdabot> Alternative f => f a -> f (Maybe a)
05:40:14 <geekosaur> this is a downside of the refactoring, you have to look in 3 or 4 places for things now
05:40:35 Vajb joins (~Vajb@hag-jnsbng11-58c3a5-27.dhcp.inet.fi)
05:41:17 <c_wraith> also, all those things that were exported to parser-combinators...
05:41:49 <geekosaur> right that was one of the other places I was referring to
05:42:34 andreas303 joins (andreas303@ip227.orange.bnc4free.com)
05:45:12 × Vajb quits (~Vajb@hag-jnsbng11-58c3a5-27.dhcp.inet.fi) (Read error: Connection reset by peer)
05:46:07 Vajb joins (~Vajb@2001:999:504:3ad6:52a4:a3b5:32d8:e74d)
05:47:18 × merijn quits (~merijn@86-86-29-250.fixed.kpn.net) (Ping timeout: 256 seconds)
05:50:42 × Vajb quits (~Vajb@2001:999:504:3ad6:52a4:a3b5:32d8:e74d) (Ping timeout: 256 seconds)
05:51:53 × use-value quits (~Thunderbi@2a00:23c6:8a03:2f01:75c2:a71f:beaa:29bf) (Remote host closed the connection)
05:52:11 use-value joins (~Thunderbi@2a00:23c6:8a03:2f01:75c2:a71f:beaa:29bf)
05:53:53 Lycurgus joins (~juan@user/Lycurgus)
06:01:59 × instantaphex quits (~jb@c-73-171-252-84.hsd1.fl.comcast.net) (Ping timeout: 268 seconds)
06:03:47 × machinedgod quits (~machinedg@d198-53-218-113.abhsia.telus.net) (Ping timeout: 264 seconds)
06:08:40 × freeside quits (~mengwong@pd907d273.dip0.t-ipconnect.de) (Ping timeout: 272 seconds)
06:14:45 takuan joins (~takuan@178-116-218-225.access.telenet.be)
06:15:21 jakalx parts (~jakalx@base.jakalx.net) ()
06:18:06 bahamas joins (~lucian@86.127.154.189)
06:18:30 bahamas is now known as elbear
06:20:49 × elbear quits (~lucian@86.127.154.189) (Client Quit)
06:24:29 elbear joins (~lucian@86.127.154.189)
06:26:31 burnsidesLlama joins (~burnsides@119247164140.ctinets.com)
06:27:02 × Lycurgus quits (~juan@user/Lycurgus) (Quit: Exeunt: personae.ai-integration.biz)
06:28:31 × thegeekinside quits (~thegeekin@189.217.82.244) (Read error: Connection reset by peer)
06:29:33 × burnsidesLlama quits (~burnsides@119247164140.ctinets.com) (Client Quit)
06:30:34 burnsidesLlama joins (~burnsides@119247164140.ctinets.com)
06:33:16 kenran joins (~user@user/kenran)
06:33:23 × kenran quits (~user@user/kenran) (Remote host closed the connection)
06:33:37 × elbear quits (~lucian@86.127.154.189) (Quit: leaving)
06:35:35 × Xeroine quits (~Xeroine@user/xeroine) (Ping timeout: 264 seconds)
06:37:31 <DigitalKiwi> my paste client used to fit in one file and i could run it with nix-shell/cabal shebangs but then i refactored it into lots of files and that doesn't work anymore sad day
06:38:09 <DigitalKiwi> https://gist.github.com/Kiwi/92415b46d58bfce34f7773944b6dcc67
06:38:44 <DigitalKiwi> https://github.com/Kiwi/absurd-paste-client
06:39:02 <DigitalKiwi> it also got more features etc. lol but still
06:39:28 Xeroine joins (~Xeroine@user/xeroine)
06:42:06 freeside joins (~mengwong@217.7.210.115)
06:44:18 merijn joins (~merijn@86-86-29-250.fixed.kpn.net)
06:44:58 jakalx joins (~jakalx@base.jakalx.net)
06:49:07 bgs joins (~bgs@212-85-160-171.dynamic.telemach.net)
06:49:57 × burnsidesLlama quits (~burnsides@119247164140.ctinets.com) ()
06:57:00 × Xeroine quits (~Xeroine@user/xeroine) (Ping timeout: 256 seconds)
06:59:55 Xeroine joins (~Xeroine@user/xeroine)
07:01:59 nut joins (~nut@roc37-h01-176-170-197-243.dsl.sta.abo.bbox.fr)
07:02:07 coot joins (~coot@2a02:a310:e241:1b00:ec1a:e9df:79ac:66ba)
07:16:26 × freeside quits (~mengwong@217.7.210.115) (Ping timeout: 272 seconds)
07:17:47 × merijn quits (~merijn@86-86-29-250.fixed.kpn.net) (Ping timeout: 256 seconds)
07:21:30 × Xeroine quits (~Xeroine@user/xeroine) (Ping timeout: 272 seconds)
07:23:01 Xeroine joins (~Xeroine@user/xeroine)
07:23:36 × bgs quits (~bgs@212-85-160-171.dynamic.telemach.net) (Remote host closed the connection)
07:31:31 × chomwitt quits (~chomwitt@2a02:587:7a0d:e800:1ac0:4dff:fedb:a3f1) (Ping timeout: 252 seconds)
07:35:22 goober joins (~goober@90-231-13-185-no3430.tbcn.telia.com)
07:40:11 jakalx parts (~jakalx@base.jakalx.net) ()
07:44:27 <iqubic> What sorting algorithm does Data.List.Sort use?
07:44:50 trev joins (~trev@user/trev)
07:45:01 jakalx joins (~jakalx@base.jakalx.net)
07:46:10 × Xeroine quits (~Xeroine@user/xeroine) (Quit: ZNC 1.8.2+deb2+b1 - https://znc.in)
07:46:54 <iqubic> Looks like it uses a mergesort.
07:47:00 Xeroine joins (~Xeroine@user/xeroine)
07:48:56 × ec_ quits (~ec@gateway/tor-sasl/ec) (Ping timeout: 255 seconds)
07:49:26 <DigitalKiwi> surely it would use the 4 line quicksort
07:49:57 ec_ joins (~ec@gateway/tor-sasl/ec)
07:55:58 Lycurgus joins (~juan@user/Lycurgus)
07:56:27 michalz joins (~michalz@185.246.204.65)
08:05:05 MajorBiscuit joins (~MajorBisc@217-63-245-103.cable.dynamic.v4.ziggo.nl)
08:05:18 freeside joins (~mengwong@pd907d273.dip0.t-ipconnect.de)
08:09:06 × ec_ quits (~ec@gateway/tor-sasl/ec) (Remote host closed the connection)
08:09:19 mmhat joins (~mmh@p200300f1c7390125ee086bfffe095315.dip0.t-ipconnect.de)
08:09:44 ec_ joins (~ec@gateway/tor-sasl/ec)
08:10:12 × Lycurgus quits (~juan@user/Lycurgus) (Quit: Exeunt: personae.ai-integration.biz)
08:14:03 <EvanR> @src sort
08:14:03 <lambdabot> sort = sortBy compare
08:14:10 <EvanR> *nod*
08:14:17 merijn joins (~merijn@86-86-29-250.fixed.kpn.net)
08:19:46 × merijn quits (~merijn@86-86-29-250.fixed.kpn.net) (Ping timeout: 272 seconds)
08:20:22 × anpad quits (~pandeyan@user/anpad) (Quit: ZNC 1.8.2 - https://znc.in)
08:20:47 tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
08:21:28 <DigitalKiwi> nice
08:22:22 anpad joins (~pandeyan@user/anpad)
08:23:01 × ft quits (~ft@p4fc2a257.dip0.t-ipconnect.de) (Quit: leaving)
08:24:43 gurkenglas joins (~gurkengla@p548ac72e.dip0.t-ipconnect.de)
08:29:24 × kaol quits (~kaol@94-237-42-30.nl-ams1.upcloud.host) (Ping timeout: 260 seconds)
08:29:58 oldsk00l joins (~znc@ec2-3-10-59-201.eu-west-2.compute.amazonaws.com)
08:33:22 merijn joins (~merijn@86-86-29-250.fixed.kpn.net)
08:35:59 kaol joins (~kaol@94-237-42-30.nl-ams1.upcloud.host)
08:36:13 lortabac joins (~lortabac@2a01:e0a:541:b8f0:47dd:78b3:3134:94a)
08:36:37 cfricke joins (~cfricke@user/cfricke)
08:39:28 acidjnk joins (~acidjnk@p200300d6e7137a279cde44451dfff9db.dip0.t-ipconnect.de)
08:39:30 nschoe joins (~q@2a01:e0a:8e:a190:befe:db92:c07:c717)
08:42:27 × dolio quits (~dolio@130.44.134.54) (Ping timeout: 260 seconds)
08:42:39 × hsw_ quits (~hsw@112-104-142-182.adsl.dynamic.seed.net.tw) (Quit: Leaving)
08:42:52 hsw joins (~hsw@2001-b030-2303-0104-0172-0025-0012-0132.hinet-ip6.hinet.net)
08:44:40 dolio joins (~dolio@130.44.134.54)
08:46:03 × Sgeo quits (~Sgeo@user/sgeo) (Read error: Connection reset by peer)
08:46:11 × tzh quits (~tzh@c-24-21-73-154.hsd1.wa.comcast.net) (Quit: zzz)
08:47:28 avicenzi joins (~avicenzi@2a00:ca8:a1f:b004::c32)
08:52:38 xsarnik joins (xsarnik@lounge.fi.muni.cz)
08:54:13 xstill_ joins (xstill@fimu/xstill)
09:00:05 × adziahel[m] quits (~adziahelm@2001:470:69fc:105::b4d) (Quit: You have been kicked for being idle)
09:03:22 × freeside quits (~mengwong@pd907d273.dip0.t-ipconnect.de) (Ping timeout: 256 seconds)
09:06:41 × cfricke quits (~cfricke@user/cfricke) (Quit: WeeChat 3.7.1)
09:08:44 cfricke joins (~cfricke@user/cfricke)
09:10:46 × ensyde quits (~ensyde@2600:1700:2050:1040:e518:6f99:8537:355c) (Quit: Leaving)
09:11:11 Guest23 joins (~Guest23@27.57.46.219)
09:15:05 × tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
09:15:26 × eggplantade quits (~Eggplanta@2600:1700:38c5:d800:a84a:2d35:f948:fe07) (Remote host closed the connection)
09:22:32 × azimut quits (~azimut@gateway/tor-sasl/azimut) (Ping timeout: 255 seconds)
09:29:59 × iqubic quits (~avi@2601:602:9502:c70:6c06:b297:7404:329f) (Ping timeout: 246 seconds)
09:39:44 × Guest23 quits (~Guest23@27.57.46.219) (Ping timeout: 252 seconds)
09:49:04 × MajorBiscuit quits (~MajorBisc@217-63-245-103.cable.dynamic.v4.ziggo.nl) (Ping timeout: 272 seconds)
09:50:19 k joins (~k@fork.wtf)
09:54:26 × econo quits (uid147250@user/econo) (Quit: Connection closed for inactivity)
09:57:11 ubert1 joins (~Thunderbi@p200300ecdf264e2f50477ceb302d227f.dip0.t-ipconnect.de)
09:59:55 × coot quits (~coot@2a02:a310:e241:1b00:ec1a:e9df:79ac:66ba) (Quit: coot)
10:15:02 zer0bitz_ joins (~zer0bitz@196.244.192.60)
10:15:55 eggplantade joins (~Eggplanta@2600:1700:38c5:d800:a84a:2d35:f948:fe07)
10:16:28 × zer0bitz quits (~zer0bitz@196.244.192.56) (Ping timeout: 256 seconds)
10:17:15 × xff0x_ quits (~xff0x@125x103x176x34.ap125.ftth.ucom.ne.jp) (Ping timeout: 248 seconds)
10:19:18 × Lord_of_Life quits (~Lord@user/lord-of-life/x-2819915) (Ping timeout: 256 seconds)
10:20:20 × eggplantade quits (~Eggplanta@2600:1700:38c5:d800:a84a:2d35:f948:fe07) (Ping timeout: 246 seconds)
10:21:15 Lord_of_Life joins (~Lord@user/lord-of-life/x-2819915)
10:21:25 coot joins (~coot@2a02:a310:e241:1b00:ec1a:e9df:79ac:66ba)
10:32:19 tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
10:33:12 MajorBiscuit joins (~MajorBisc@2001:1c00:2404:ed00:28e1:ad14:ec67:539e)
10:34:21 × use-value quits (~Thunderbi@2a00:23c6:8a03:2f01:75c2:a71f:beaa:29bf) (Quit: use-value)
10:37:17 __monty__ joins (~toonn@user/toonn)
10:51:13 Unicorn_Princess joins (~Unicorn_P@user/Unicorn-Princess/x-3540542)
10:52:27 × gurkenglas quits (~gurkengla@p548ac72e.dip0.t-ipconnect.de) (Ping timeout: 255 seconds)
10:53:35 Guest3840 joins (~Guest38@181.214.107.214)
10:54:07 × Guest3840 quits (~Guest38@181.214.107.214) (Client Quit)
10:54:59 × zer0bitz_ quits (~zer0bitz@196.244.192.60) (Read error: Connection reset by peer)
10:59:04 zer0bitz joins (~zer0bitz@196.244.192.60)
11:07:56 azimut joins (~azimut@gateway/tor-sasl/azimut)
11:09:16 xff0x_ joins (~xff0x@ai071162.d.east.v6connect.net)
11:12:20 Guest|66 joins (~Guest|66@77.209.198.178.dynamic.wline.res.cust.swisscom.ch)
11:13:00 × Guest|66 quits (~Guest|66@77.209.198.178.dynamic.wline.res.cust.swisscom.ch) (Client Quit)
11:38:26 iqubic joins (~avi@2601:602:9502:c70:6988:8eb0:bd8c:3233)
11:41:35 teo joins (~teo@user/teo)
11:42:02 × azimut quits (~azimut@gateway/tor-sasl/azimut) (Ping timeout: 255 seconds)
11:43:54 azimut joins (~azimut@gateway/tor-sasl/azimut)
11:55:29 rburkholder joins (~blurb@96.45.2.121)
12:00:11 × darkstardevx quits (~darkstard@50.53.3.186) (Remote host closed the connection)
12:01:35 darkstardevx joins (~darkstard@50.53.3.186)
12:03:33 mixfix41 joins (~sdenynine@user/mixfix41)
12:04:41 × Maxdamantus quits (~Maxdamant@user/maxdamantus) (Ping timeout: 246 seconds)
12:08:51 Maxdamantus joins (~Maxdamant@user/maxdamantus)
12:09:32 dextaa2 joins (~DV@user/dextaa)
12:11:36 × mbuf quits (~Shakthi@49.204.142.15) (Ping timeout: 265 seconds)
12:11:59 × dextaa quits (~DV@user/dextaa) (Ping timeout: 268 seconds)
12:11:59 dextaa2 is now known as dextaa
12:12:25 mbuf joins (~Shakthi@49.204.117.211)
12:17:53 × mbuf quits (~Shakthi@49.204.117.211) (Ping timeout: 265 seconds)
12:18:43 jakalx parts (~jakalx@base.jakalx.net) ()
12:18:44 mbuf joins (~Shakthi@49.205.80.144)
12:19:49 × mmhat quits (~mmh@p200300f1c7390125ee086bfffe095315.dip0.t-ipconnect.de) (Ping timeout: 256 seconds)
12:20:11 mmhat joins (~mmh@p200300f1c73901b0ee086bfffe095315.dip0.t-ipconnect.de)
12:23:17 kalj joins (~kalj@78-71-20-170-no193.tbcn.telia.com)
12:26:41 jakalx joins (~jakalx@base.jakalx.net)
12:28:07 × pavonia quits (~user@user/siracusa) (Quit: Bye!)
12:28:48 × [Leary] quits (~Leary]@user/Leary/x-0910699) (Remote host closed the connection)
12:29:01 [Leary] joins (~Leary]@user/Leary/x-0910699)
12:30:40 × razetime quits (~quassel@49.207.203.213) (Remote host closed the connection)
12:33:54 Guest23 joins (~Guest23@27.57.46.219)
12:37:55 <dminuoso> `show <$> [1, "foo", 'a']`
12:38:01 <dminuoso> I so want to be albe to write this. :(
12:39:06 <_________> you just wrote this ;)
12:39:08 <dminuoso> Heh.
12:39:10 <dminuoso> Is this in principle even possible?
12:39:21 <dminuoso> fmap show (1:"foo":a:[])
12:39:43 <dminuoso> This would at minimum require impredicativity
12:40:24 × jmdaemon quits (~jmdaemon@user/jmdaemon) (Ping timeout: 256 seconds)
12:40:26 <geekosaur> not in Haskell. you could use an existential wrapper so the list items would all be the same type, but at that point it's just as easy to simply wrap all items in `show` and solve the problem
12:40:54 <dminuoso> % :set -XExistentialQuantification
12:40:54 <yahb2> <no output>
12:40:57 <dminuoso> data AList = forall a. ACons a AList | ANil
12:41:00 <dminuoso> % data AList = forall a. ACons a AList | ANil
12:41:00 <yahb2> <no output>
12:41:16 <dminuoso> geekosaur: The thing is, the show wont push the Show constraint into that existential list
12:41:32 <dminuoso> fmap is not capable of doing that
12:41:37 <geekosaur> nope, you would need the Show constraint on the existential
12:42:02 <geekosaur> which is why it's easier to just wrap everything in show manually: it's more work to do the existential
12:42:09 <dminuoso> Maybe with `constraints` and GADTs I could do this?
12:42:50 <dminuoso> geekosaur: Sure, Im just trying to come up with a way that requires neither a constraint on an existential newtype, nor float the show into
12:43:10 geekosaur is wondering about some clever quasiquoter or something
12:43:13 <dminuoso> I *think* it could be done with an alteration of `fmap`
12:43:20 <dminuoso> Something that communicates constraints
12:43:27 <geekosaur> [fmap|1, "oo", 'a']
12:43:39 <geekosaur> s/oo/foo/
12:43:45 <dminuoso> TH feels like cheating here
12:43:59 × mbuf quits (~Shakthi@49.205.80.144) (Ping timeout: 265 seconds)
12:44:34 mbuf joins (~Shakthi@49.204.114.77)
12:45:32 <dminuoso> % :set -XImpredicativeTypes
12:45:33 <yahb2> <no output>
12:45:40 <dminuoso> % :t (1:"foo":a:[])
12:45:40 <yahb2> <interactive>:1:10: error: Variable not in scope: a :: String
12:45:43 <dminuoso> % :t (1:"foo":'a':[])
12:45:43 <yahb2> <interactive>:1:10: error: ; • Couldn't match type ‘Char’ with ‘[Char]’ ; Expected: String ; Actual: Char ; • In the first argument of ‘(:)’, namely ‘'a'’ ; In the secon...
12:45:56 × azimut quits (~azimut@gateway/tor-sasl/azimut) (Ping timeout: 255 seconds)
12:46:13 <dminuoso> I guess we lack a typing rule to generalize here?
12:47:15 <Clint> what would the type of that list be?
12:47:31 <dminuoso> [exist a. a]
12:47:59 <geekosaur> that can't exist in Haskell, it has to be wrapped in a newtype
12:48:08 <geekosaur> ImpredicativeTypes doesn't help
12:49:03 <dminuoso> Why cant it exist, though?
12:49:16 <geekosaur> and even if it could, you wouldn't know the types of the items coming out, so the newtype wrapper also has to include a constrant that gives you some handle on the types coming out (here, Show)
12:49:39 <geekosaur> but at that point you;re doing mroe work than manually writing [show 1, show "foo", show 'a']
12:49:53 <mniip> clearly, when I write 'x' I actually mean `'x' :: exists a. (all instances that Char satifies) *> a`
12:51:12 <geekosaur> dminuoso, you could write a typing rule that let you create such a list. you can't write a typing rule that lets you deconstruct it
12:51:36 <dminuoso> geekosaur: I think mniip captured my thought well enough mmm.
12:51:55 <mniip> that makes a closed world assumption
12:52:01 <dminuoso> My initial instinct that by using fmap, perhaps one could conjure a typing rule that would flow the constraint into the existential
12:52:04 <dminuoso> Right
12:52:20 <_________> are you rediscovering HList?
12:52:21 <dminuoso> Or perhaps not necessarily, if we had some obscure magic `AnySatisfy Char` constraint resolvable later.
12:53:03 <mniip> well if you didn't want [1, "foo", 'a'] to have the weird type on its own, you would have to give `fmap show` a weird type
12:53:50 <mniip> rewriting `show :: forall a. Show a => a -> String` as `show :: (exists a. Show a *> a) -> String`
12:54:02 <lortabac> dminuoso: you can create your own list type, something like this: https://paste.tomsmeding.com/FjPlR3jb
12:55:30 × Reinhilde quits (ellenor@callbox.trd.is) (Quit: Bye Open Projects!)
12:55:51 <dminuoso> lortabac: Mmm thats interesting.
12:56:16 <[Leary]> That's the same as a list of existentials though. You can instead preserve the type information with an HList and write something like:
12:56:22 <[Leary]> `monomap :: (forall x. c x => x -> a) -> HList c xs -> [a]`
12:56:23 <mniip> % fmap (\x -> x show) ([\k -> k 1, \k -> k "foo", \k -> k 'a'] :: [forall r. (forall a. Show a => a -> r) -> r])
12:56:23 <yahb2> ["1","\"foo\"","'a'"]
12:57:12 <mniip> unforunately $ is not magical enough for ($ show) or ($ 1) to work here
12:58:45 <dminuoso> % :set -XDeepSubsumption
12:58:45 <yahb2> <no output>
12:58:49 <lortabac> [Leary]: that's the same minus the need to wrap every single item with an existential constructor
12:59:00 <dminuoso> % fmap ($ show) ([\k -> k 1, \k -> k "foo", \k -> k 'a'] :: [forall r. (forall a. Show a => a -> r) -> r])
12:59:00 <yahb2> <interactive>:38:15: error: ; • Couldn't match type: forall r. (forall a. Show a => a -> r) -> r ; with: (a0 -> String) -> b ; Expected: [(a0 -> String) -> b] ; ...
12:59:14 <mniip> nothing to do with deep subsumption
13:00:25 <_________> % fmap (`$` show) ([\k -> k 1, \k -> k "foo", \k -> k 'a'] :: [forall r. (forall a. Show a => a -> r) -> r])
13:00:25 <yahb2> Oops, something went wrong
13:00:29 <dminuoso> [Leary]: I may have to revisit HList, its not entirely clear how that would type check
13:00:43 × acidjnk quits (~acidjnk@p200300d6e7137a279cde44451dfff9db.dip0.t-ipconnect.de) (Ping timeout: 252 seconds)
13:00:44 <mniip> oh actually
13:00:48 <mniip> this may be a bug in QuickLook
13:01:07 <mniip> that for some reason makes operator sections inequvalent to their expanded form
13:02:05 <mniip> \k -> k `id` 1 typechecks, but (`id` 1) does not
13:03:20 <[Leary]> dminuoso: Here, the definition would be like `data HList c xs where Nil :: HList c '[]; Cons :: c x => x -> HList c xs -> HList c (x:xs)`, then `monomap f Nil = Nil; monomap f (Cons x xs) = f x : monomap f xs`.
13:07:02 × perrierjouet quits (~perrier-j@modemcable048.127-56-74.mc.videotron.ca) (Quit: WeeChat 3.7.1)
13:11:20 × merijn quits (~merijn@86-86-29-250.fixed.kpn.net) (Quit: Reconnecting)
13:11:26 merijn joins (~merijn@c-001-001-007.client.esciencecenter.eduvpn.nl)
13:13:50 × stiell quits (~stiell@gateway/tor-sasl/stiell) (Ping timeout: 255 seconds)
13:15:09 mesaoptimizer_ joins (apotheosis@tilde.institute)
13:15:49 × mesaoptimizer_ quits (apotheosis@tilde.institute) (Client Quit)
13:17:00 mesaoptimizer2 joins (apotheosis@tilde.institute)
13:17:07 × mesaoptimizer2 quits (apotheosis@tilde.institute) (Client Quit)
13:18:42 PapuaHardyNet joins (apotheosis@user/PapuaHardyNet)
13:19:43 × PapuaHardyNet quits (apotheosis@user/PapuaHardyNet) (Client Quit)
13:20:18 mesaoptimizer_ joins (apotheosis@tilde.institute)
13:20:44 × mesaoptimizer_ quits (apotheosis@tilde.institute) (Client Quit)
13:21:05 PapuaHardyNet joins (apotheosis@user/PapuaHardyNet)
13:21:39 stiell joins (~stiell@gateway/tor-sasl/stiell)
13:22:07 × PapuaHardyNet quits (apotheosis@user/PapuaHardyNet) (Client Quit)
13:22:31 mesaoptimizer_ joins (apotheosis@tilde.institute)
13:22:42 × mesaoptimizer_ quits (apotheosis@tilde.institute) (Client Quit)
13:23:03 Ellenor joins (ellenor@callbox.trd.is)
13:23:06 PapuaHardyNet joins (apotheosis@user/PapuaHardyNet)
13:23:45 PapuaHardyNet is now known as mesaoptimizer
13:23:55 × mesaoptimizer quits (apotheosis@user/PapuaHardyNet) (Client Quit)
13:24:16 mesaoptimizer joins (apotheosis@user/PapuaHardyNet)
13:24:27 JordiGH joins (~jordi@user/jordigh)
13:25:31 <merijn> Is there a quick and dirty way to get a DAG of imports within a component?
13:25:54 <merijn> I'm trying to minimise a reproducer and wanna see which leaf modules I can trim
13:28:59 use-value joins (~Thunderbi@2a00:23c6:8a03:2f01:40bc:fcc3:815f:f6e9)
13:32:58 × JordiGH quits (~jordi@user/jordigh) (Ping timeout: 260 seconds)
13:33:16 × Guest23 quits (~Guest23@27.57.46.219) (Ping timeout: 272 seconds)
13:36:26 × son0p quits (~ff@2604:3d08:5b7f:5540::4026) (Read error: Connection reset by peer)
13:36:41 <_________> not sure if it will help you, but ghc has -ddump-minimal-imports option which creates .imports files with minimal number of imports for each module
13:37:10 <merijn> That doesn't really help, no
13:37:24 <merijn> I need to know which modules in the package aren't imported by anything else
13:37:38 × mmhat quits (~mmh@p200300f1c73901b0ee086bfffe095315.dip0.t-ipconnect.de) (Ping timeout: 265 seconds)
13:37:39 <merijn> so I can start trimming stuff until only a (hopefully handful) of modules remain for the reproducer
13:38:12 <jean-paul[m]> I remember a couple projects for doing visualizations - maybe https://hackage.haskell.org/package/haskell-import-graph was one, not sure. a module that isn't imported by anything will have no edges pointing in to it, or something
13:38:44 <dminuoso> That looks stunningly simple, since it just works on the .hi files
13:38:53 <[Leary]> merijn: My quick-and-dirty: the leaf modules should form a final run when compiled, so just kill them in the opposite order cabal builds them?
13:38:59 <merijn> dminuoso: Well, that won't work, then xD
13:39:22 <merijn> [Leary]: Well, the seems to assume the build actually, you know, finishes
13:39:27 <merijn> s/the/that
13:39:37 × bitdex quits (~bitdex@gateway/tor-sasl/bitdex) (Quit: = "")
13:39:40 <merijn> My entire problem is that GHC is crashing :p
13:39:45 <dminuoso> merijn: Mmm, why not?
13:39:48 <[Leary]> True. Old build logs should suffice though.
13:39:53 × rburkholder quits (~blurb@96.45.2.121) (Remote host closed the connection)
13:40:06 <merijn> And I'm trying to get a reproducer for GHC HQ that is not "here's 200 modules, template haskell, and foreign code, good luck!"
13:40:50 × ChaiTRex quits (~ChaiTRex@user/chaitrex) (Ping timeout: 255 seconds)
13:40:57 <[Leary]> Maybe there's some sort of cabal --dry-run that would simulate it.
13:42:05 <dminuoso> That would not produce the full import graph, though.
13:42:12 ChaiTRex joins (~ChaiTRex@user/chaitrex)
13:46:14 Ellenor is now known as Reinhilde
13:47:17 JordiGH joins (~jordi@user/jordigh)
13:47:26 <dminuoso> merijn: Using Cabal-syntax and just quick heuristic parsing (or using `ghc`) should be relatively easy though
13:48:29 × tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
13:49:48 <dminuoso> Hah this is a cool use of BlockArguments and LambdaCase https://github.com/ocharles/weeder/blob/master/src/Weeder.hs#L367-L373
13:50:44 × SIben quits (~SIben@ns3106586.ip-5-135-191.eu) (Ping timeout: 246 seconds)
13:51:05 mmhat joins (~mmh@p200300f1c715781aee086bfffe095315.dip0.t-ipconnect.de)
13:51:30 <dminuoso> mniip: I just thought deep subsumption because my brains pattern matching recalls equivalence to eta expanded forms in some situations is one of the things you give up with simple subsumption.
13:51:43 <dminuoso> It looked like the same pattern :)
13:51:53 <merijn> dminuoso: I mean, 90% of that is LambdaCase?
13:52:11 <merijn> BlockArguments just eliminates the $
13:52:38 <dminuoso> merijn: Sure, but all-in-all this looks very elegant.
13:52:55 × kalj quits (~kalj@78-71-20-170-no193.tbcn.telia.com) (Quit: Client closed)
13:53:19 <[Leary]> $ would also break the composition
13:53:32 <merijn> oh, right
13:53:45 <merijn> Trivially solved by making it a list and using Endo :p
13:53:58 <merijn> or something :p
13:55:38 × JordiGH quits (~jordi@user/jordigh) (Ping timeout: 246 seconds)
13:55:53 <mauke> I wish lambdabot had BlockArguments turned on
13:56:09 <maerwald> it would win every argument...
13:56:32 <merijn> I find BlockArguments kinda meh
13:56:43 <mauke> > do negate do sqrt do 2
13:56:44 <lambdabot> error:
13:56:44 <lambdabot> Unexpected do block in function application:
13:56:44 <lambdabot> do sqrt do 2
13:56:51 <mauke> then that would work
13:57:01 <merijn> I'm not sure the benefits outway the effort my brain has to invest to solve them
13:57:24 <mauke> you're braining it wrong
13:57:33 <merijn> I don't wanna brain at all
13:57:56 <mauke> hard to achieve while staying alive
13:58:00 <maerwald> let's promote do-blocks to type level... you can only pass a monadic block that was defined via a do
13:59:43 JordiGH joins (~jordi@user/jordigh)
14:00:57 × califax quits (~califax@user/califx) (Remote host closed the connection)
14:01:06 tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
14:01:23 califax joins (~califax@user/califx)
14:09:28 × chexum quits (~quassel@gateway/tor-sasl/chexum) (Quit: No Ping reply in 180 seconds.)
14:10:58 chexum joins (~quassel@gateway/tor-sasl/chexum)
14:10:59 × ChaiTRex quits (~ChaiTRex@user/chaitrex) (Ping timeout: 255 seconds)
14:12:07 ChaiTRex joins (~ChaiTRex@user/chaitrex)
14:16:16 thegeekinside joins (~thegeekin@189.217.82.244)
14:19:15 eggplantade joins (~Eggplanta@2600:1700:38c5:d800:a84a:2d35:f948:fe07)
14:20:10 × fizbin quits (~fizbin@user/fizbin) (Ping timeout: 265 seconds)
14:20:48 × hpc quits (~juzz@ip98-169-35-163.dc.dc.cox.net) (Ping timeout: 255 seconds)
14:23:38 × eggplantade quits (~Eggplanta@2600:1700:38c5:d800:a84a:2d35:f948:fe07) (Ping timeout: 246 seconds)
14:25:45 gurkenglas joins (~gurkengla@p548ac72e.dip0.t-ipconnect.de)
14:29:36 Guest23 joins (~Guest23@27.57.46.219)
14:31:15 <mniip> merijn, I'm actually writing a thing for that right now
14:31:45 <merijn> mniip: Rendering imports? Or minimising reproducers?
14:32:04 <mniip> well, a lot more general, but module import graph is one of the things it can do
14:32:08 × stiell quits (~stiell@gateway/tor-sasl/stiell) (Ping timeout: 255 seconds)
14:32:16 <merijn> mniip: Even on code that doesn't compile? ;)
14:32:21 festive_kurbus joins (~festive_k@user/kurbus)
14:32:26 <mniip> that's harder
14:33:10 <mniip> anyway there's a ModuleGraph in a HscEnv
14:33:38 <mniip> via GHC plugins, earliest you can get your hands on one seems to be in a parsedResultAction
14:35:03 hpc joins (~juzz@ip98-169-35-163.dc.dc.cox.net)
14:35:48 azimut joins (~azimut@gateway/tor-sasl/azimut)
14:39:38 × tabemann_ quits (~tabemann@2600:1700:7990:24e0:61f0:ea0e:b3a2:c286) (Remote host closed the connection)
14:39:55 tabemann_ joins (~tabemann@2600:1700:7990:24e0:a525:f2f6:8a3c:81c2)
14:42:08 shriekingnoise joins (~shrieking@186.137.167.202)
14:43:31 × festive_kurbus quits (~festive_k@user/kurbus) (Quit: Client closed)
14:43:46 ec joins (~ec@gateway/tor-sasl/ec)
14:45:41 stiell joins (~stiell@gateway/tor-sasl/stiell)
14:47:26 × ec_ quits (~ec@gateway/tor-sasl/ec) (Ping timeout: 255 seconds)
14:48:18 <mniip> merijn, https://bpa.st/VCXA
14:49:01 <merijn> I'm down to about 30 modules the hard way
14:49:09 <merijn> So the end is in sight
14:49:34 bontaq joins (~user@ool-45779fe5.dyn.optonline.net)
14:58:49 × Reinhilde quits (ellenor@callbox.trd.is) (Remote host closed the connection)
15:02:26 machinedgod joins (~machinedg@d198-53-218-113.abhsia.telus.net)
15:11:24 Ellenor joins (ellenor@callbox.trd.is)
15:19:24 × cfricke quits (~cfricke@user/cfricke) (Quit: WeeChat 3.7.1)
15:20:49 notzmv joins (~zmv@user/notzmv)
15:22:28 acidjnk joins (~acidjnk@p200300d6e7137a81910d6d9ee28ee6f1.dip0.t-ipconnect.de)
15:23:40 j4cc3b joins (~jeffreybe@pool-74-105-2-138.nwrknj.fios.verizon.net)
15:23:43 Ellenor is now known as Reinhilde
15:25:41 Sgeo joins (~Sgeo@user/sgeo)
15:36:27 × Guest23 quits (~Guest23@27.57.46.219) (Ping timeout: 256 seconds)
15:37:23 × stiell quits (~stiell@gateway/tor-sasl/stiell) (Ping timeout: 255 seconds)
15:38:38 Erutuon_ joins (~Erutuon@user/erutuon)
15:39:28 jao joins (~jao@cpc103048-sgyl39-2-0-cust502.18-2.cable.virginm.net)
15:45:45 stiell joins (~stiell@gateway/tor-sasl/stiell)
15:47:03 sudden joins (~cat@user/sudden)
15:50:33 × notzmv quits (~zmv@user/notzmv) (Ping timeout: 265 seconds)
15:54:09 × lortabac quits (~lortabac@2a01:e0a:541:b8f0:47dd:78b3:3134:94a) (Quit: WeeChat 2.8)
15:54:22 doyougnu joins (~doyougnu@cpe-74-69-132-225.stny.res.rr.com)
16:00:49 × JordiGH quits (~jordi@user/jordigh) (Ping timeout: 256 seconds)
16:05:51 <merijn> Anyone with GHC 8.10 willing to donate a few minutes to see if I can crash your GHC? :p
16:06:32 × j4cc3b quits (~jeffreybe@pool-74-105-2-138.nwrknj.fios.verizon.net) (Ping timeout: 272 seconds)
16:07:18 × dsrt^ quits (~dsrt@76.145.185.103) (Remote host closed the connection)
16:07:29 <mauke> I only have 8.8.4
16:07:37 geekosaur has ghcup installed ghc back to 8.10; what's up?
16:08:14 <merijn> geekosaur: If you clone this and run "cabal build", does GHC blow up? https://github.com/merijn/ghc-crash-reproducer
16:08:48 <merijn> It's now sufficiently minimal that I wanna be sure it blows up on other machines too, before I spend effort making it even smaller :p
16:10:17 × tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
16:10:44 <geekosaur> will take a while as I'd forgotten that I hadn't used 8.10.7 since moving to cabal HEAD so it's installing half the universe now
16:11:22 <VOID[m]> Fellas I think I want to implement affine traversal optics, but I think I am missing a lot of theory to do that...... (full message at <https://libera.ems.host/_matrix/media/v3/download/libera.chat/e51c52a118253656ec17b7c82cbca65a808494bd>)
16:12:11 <merijn> geekosaur: Sure, no rush :)
16:14:16 × nut quits (~nut@roc37-h01-176-170-197-243.dsl.sta.abo.bbox.fr) (Ping timeout: 252 seconds)
16:14:48 festive_kurbus joins (~festive_k@user/kurbus)
16:19:05 tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
16:19:23 × terrorjack quits (~terrorjac@2a01:4f8:1c1e:509a::1) (Ping timeout: 264 seconds)
16:20:35 terrorjack joins (~terrorjac@2a01:4f8:1c1e:509a::1)
16:21:23 eggplantade joins (~Eggplanta@2600:1700:38c5:d800:a84a:2d35:f948:fe07)
16:23:38 × jao quits (~jao@cpc103048-sgyl39-2-0-cust502.18-2.cable.virginm.net) (Ping timeout: 272 seconds)
16:24:39 <geekosaur> merijn, https://paste.tomsmeding.com/sGSzqp1R
16:25:05 <merijn> ok, thanks!
16:25:14 <merijn> Different symbol, but same basic blow up
16:25:51 × eggplantade quits (~Eggplanta@2600:1700:38c5:d800:a84a:2d35:f948:fe07) (Ping timeout: 260 seconds)
16:35:14 × mmhat quits (~mmh@p200300f1c715781aee086bfffe095315.dip0.t-ipconnect.de) (Ping timeout: 246 seconds)
16:40:43 leeb joins (~leeb@tk2-243-31079.vs.sakura.ne.jp)
16:48:48 mmhat joins (~mmh@p200300f1c7179fc3ee086bfffe095315.dip0.t-ipconnect.de)
16:52:55 Guest75 joins (Guest75@2a01:7e01::f03c:92ff:fe5d:7b18)
17:00:39 rburkholder joins (~blurb@96.45.2.121)
17:05:20 × festive_kurbus quits (~festive_k@user/kurbus) (Quit: Client closed)
17:08:45 festive_kurbus joins (~festive_k@user/kurbus)
17:10:53 × mmhat quits (~mmh@p200300f1c7179fc3ee086bfffe095315.dip0.t-ipconnect.de) (Ping timeout: 246 seconds)
17:16:30 JordiGH joins (~jordi@user/jordigh)
17:22:16 eggplantade joins (~Eggplanta@2600:1700:38c5:d800:a84a:2d35:f948:fe07)
17:26:36 mmhat joins (~mmh@p200300f1c718063cee086bfffe095315.dip0.t-ipconnect.de)
17:26:55 × jpds2 quits (~jpds@gateway/tor-sasl/jpds) (Remote host closed the connection)
17:26:58 Alex_test_ joins (~al_test@178.34.161.14)
17:27:29 jpds2 joins (~jpds@gateway/tor-sasl/jpds)
17:29:35 × [exa] quits (~exa@user/exa/x-3587197) (Quit: leaving)
17:30:13 [exa] joins (~exa@user/exa/x-3587197)
17:31:05 gaff joins (~gaff@49.207.199.216)
17:31:06 × Guest75 quits (Guest75@2a01:7e01::f03c:92ff:fe5d:7b18) (Quit: Client closed)
17:31:14 × gaff quits (~gaff@49.207.199.216) (Client Quit)
17:31:31 × festive_kurbus quits (~festive_k@user/kurbus) (Quit: Client closed)
17:31:39 × Alex_test_ quits (~al_test@178.34.161.14) (Client Quit)
17:39:36 nut joins (~nut@roc37-h01-176-170-197-243.dsl.sta.abo.bbox.fr)
17:40:46 son0p joins (~ff@2604:3d08:5b7f:5540::64ea)
17:47:12 festive_kurbus joins (~festive_k@user/kurbus)
17:48:28 incertia_ joins (~incertia@209.122.71.127)
17:48:40 pepeiborra_ joins (sid443799@id-443799.ilkley.irccloud.com)
17:48:55 jespada_ joins (~jespada@nmal-24-b2-v4wan-166357-cust1764.vm24.cable.virginm.net)
17:49:39 jmtd joins (jon@dow.land)
17:49:44 CodeKiwi joins (~kiwi@137.184.156.191)
17:49:44 aristid_ joins (sid1599@id-1599.uxbridge.irccloud.com)
17:49:51 × festive_kurbus quits (~festive_k@user/kurbus) (Client Quit)
17:49:59 jbggs[m]1 joins (~jbggsmatr@2001:470:69fc:105::2:995f)
17:50:13 × incertia quits (~incertia@209.122.71.127) (Ping timeout: 252 seconds)
17:50:13 incertia_ is now known as incertia
17:50:23 × pepeiborra quits (sid443799@id-443799.ilkley.irccloud.com) (Ping timeout: 252 seconds)
17:50:24 pepeiborra_ is now known as pepeiborra
17:50:59 jackhill_ joins (~jackhill@kalessin.dragonsnail.net)
17:51:13 elkcl_ joins (~elkcl@broadband-188-255-19-11.ip.moscow.rt.ru)
17:51:41 bonz060_ joins (~quassel@2001:bc8:47a4:a23::1)
17:52:07 sm1 joins (~sm@plaintextaccounting/sm)
17:52:09 tzh joins (~tzh@c-24-21-73-154.hsd1.or.comcast.net)
17:52:52 kitzman_ joins (~kitzman@user/dekenevs)
17:52:57 sunarch_ joins (sid526836@user/sunarch)
17:53:01 tristanC_ joins (~tristanC@user/tristanc)
17:53:08 gmc_ joins (sid58314@id-58314.ilkley.irccloud.com)
17:53:09 urdh_ joins (~urdh@user/urdh)
17:53:21 kmein_ joins (~weechat@user/kmein)
17:53:45 × tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
17:53:48 melonai- joins (~mel@rnrd.eu)
17:54:05 Momentum_ joins (momentum@tilde.team)
17:54:20 × sunarch quits (sid526836@user/sunarch) (Ping timeout: 252 seconds)
17:54:21 Cadey joins (~cadey@tailscale/xe)
17:54:21 sunarch_ is now known as sunarch
17:54:27 ncf_ joins (~n@monade.li)
17:54:34 × jbggs[m] quits (~jbggsmatr@2001:470:69fc:105::2:995f) (Ping timeout: 252 seconds)
17:54:34 × jackhill quits (~jackhill@kalessin.dragonsnail.net) (Ping timeout: 252 seconds)
17:55:26 peutri_ joins (~peutri@bobo.desast.re)
17:55:28 × elkcl quits (~elkcl@broadband-188-255-19-11.ip.moscow.rt.ru) (Ping timeout: 252 seconds)
17:55:28 × aristid quits (sid1599@id-1599.uxbridge.irccloud.com) (Ping timeout: 252 seconds)
17:55:28 × DigitalKiwi quits (~kiwi@137.184.156.191) (Ping timeout: 252 seconds)
17:55:28 × kitzman quits (~kitzman@user/dekenevs) (Ping timeout: 252 seconds)
17:55:29 × Momentum quits (momentum@tilde.team) (Ping timeout: 252 seconds)
17:55:29 × sus quits (zero@user/zeromomentum) (Ping timeout: 252 seconds)
17:55:29 × sm quits (~sm@plaintextaccounting/sm) (Ping timeout: 252 seconds)
17:55:29 × bonz060 quits (~quassel@2001:bc8:47a4:a23::1) (Ping timeout: 252 seconds)
17:55:29 × gmc quits (sid58314@id-58314.ilkley.irccloud.com) (Ping timeout: 252 seconds)
17:55:29 × Jon quits (jon@dow.land) (Ping timeout: 252 seconds)
17:55:29 × geekosaur[m] quits (~geekosaur@xmonad/geekosaur) (Ping timeout: 252 seconds)
17:55:30 × dsal quits (sid13060@id-13060.lymington.irccloud.com) (Ping timeout: 252 seconds)
17:55:30 × tristanC quits (~tristanC@user/tristanc) (Ping timeout: 252 seconds)
17:55:30 × Xe quits (~cadey@tailscale/xe) (Ping timeout: 252 seconds)
17:55:30 × jespada quits (~jespada@nmal-24-b2-v4wan-166357-cust1764.vm24.cable.virginm.net) (Ping timeout: 252 seconds)
17:55:30 × urdh quits (~urdh@user/urdh) (Ping timeout: 252 seconds)
17:55:30 × kmein quits (~weechat@user/kmein) (Ping timeout: 252 seconds)
17:55:30 × ozkutuk[m] quits (~ozkutuk@2001:470:69fc:105::2:9af8) (Ping timeout: 252 seconds)
17:55:30 × kadoban quits (~kadoban@user/kadoban) (Ping timeout: 252 seconds)
17:55:30 × ncf quits (~n@monade.li) (Ping timeout: 252 seconds)
17:55:30 × elevenkb[m] quits (~elevenkb@2001:470:69fc:105::2:cb89) (Ping timeout: 252 seconds)
17:55:30 × liskin quits (~liskin@xmonad/liskin) (Ping timeout: 252 seconds)
17:55:30 × melonai quits (~mel@rnrd.eu) (Ping timeout: 252 seconds)
17:55:30 × peutri quits (~peutri@bobo.desast.re) (Ping timeout: 252 seconds)
17:55:31 elkcl_ is now known as elkcl
17:55:31 aristid_ is now known as aristid
17:55:31 jmtd is now known as Jon
17:55:31 lisk1n joins (~liskin@xmonad/liskin)
17:55:32 urdh_ is now known as urdh
17:55:38 dsal joins (sid13060@id-13060.lymington.irccloud.com)
17:55:57 sus joins (zero@user/zeromomentum)
17:56:10 Xeroine_ joins (~Xeroine@user/xeroine)
17:56:13 × Xeroine quits (~Xeroine@user/xeroine) (Read error: Connection reset by peer)
17:56:20 geekosaur[m] joins (~geekosaur@xmonad/geekosaur)
17:56:25 ozkutuk[m] joins (~ozkutuk@2001:470:69fc:105::2:9af8)
17:57:35 ncf_ is now known as ncf
17:58:41 × califax quits (~califax@user/califx) (Ping timeout: 255 seconds)
17:59:45 califax joins (~califax@user/califx)
18:01:54 Momentum_ is now known as Momentum
18:02:17 × eggplantade quits (~Eggplanta@2600:1700:38c5:d800:a84a:2d35:f948:fe07) (Remote host closed the connection)
18:02:38 notzmv joins (~zmv@user/notzmv)
18:03:24 × califax quits (~califax@user/califx) (Remote host closed the connection)
18:03:33 Cadey is now known as Xe
18:04:40 califax joins (~califax@user/califx)
18:07:29 kadoban joins (~kadoban@user/kadoban)
18:08:01 mestre joins (~mestre@191.177.185.178)
18:08:30 elevenkb[m] joins (~elevenkb@2001:470:69fc:105::2:cb89)
18:10:12 × MajorBiscuit quits (~MajorBisc@2001:1c00:2404:ed00:28e1:ad14:ec67:539e) (Ping timeout: 256 seconds)
18:19:48 jakalx parts (~jakalx@base.jakalx.net) ()
18:21:08 thyriaen joins (~thyriaen@2a01:aea0:dd4:4bae:6245:cbff:fe9f:48b1)
18:22:57 econo joins (uid147250@user/econo)
18:23:02 festive_kurbus joins (~festive_k@user/kurbus)
18:24:42 jakalx joins (~jakalx@base.jakalx.net)
18:26:33 × mbuf quits (~Shakthi@49.204.114.77) (Quit: Leaving)
18:34:06 × teo quits (~teo@user/teo) (Ping timeout: 272 seconds)
18:39:36 <dminuoso> VOID[m]: Affine traversals arent really "needed" for anything. There's nothing that you can do with an affine traversal that you couldnt also do with a general traversal.
18:40:04 × festive_kurbus quits (~festive_k@user/kurbus) (Quit: Client closed)
18:40:13 <dminuoso> They are just useful in expressing some property (namely that the traversal or fold) could at most target only one element, denoting that something like `preview` couldnt possibly throw away information
18:40:23 <dminuoso> But that's the extend of it
18:41:03 <VOID[m]> dminuoso: I figured I am missing basic knowledge around composition (Functors, Applicatives and such). Am reading Learn You a Haskell for Great Good
18:41:26 <dminuoso> Well there's is some easy ways to gain intutions about how lenses and traversals work.
18:42:38 <dminuoso> The main problem in building affine traversals in `lens` is that you would need a class `Pointed`, which you could make. However, they wouldn't cleanly degrade to traversals unless we made it a superclass of Applicative, which is not something you are likely to make happen ever.
18:43:06 <dminuoso> (Especially since the use of a typeclass `Pointed` would pretty much be limited to just that, affine traversals. There isnt any other conceivable use for them in the entire Haskell world)
18:43:17 <mauke> is Pointed = Applicative - Functor?
18:43:31 <dminuoso> Pointed is just `pure`
18:43:33 tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
18:43:46 <dminuoso> So its Applicative sans <*>
18:43:53 <mauke> oh, so Applicative - Functor - (<*>)
18:44:03 <dminuoso> Well, - Functor doesnt make sense
18:44:10 <dminuoso> The ideal lattice you would ahve is:
18:44:35 <dminuoso> class Apply f where (<*>) :: f (a -> b) -> f a -> f b
18:44:37 festive_kurbus joins (~festive_k@user/kurbus)
18:44:46 <dminuoso> class Pointed f where pure :: a -> f a
18:44:56 <dminuoso> class (Apply f, Pointed f) => Applicative f
18:45:26 <dminuoso> This way you would get automatic degradations to `traversals` in all scenarios
18:47:12 <dminuoso> However, this introduces a different set of problems
18:48:10 <VOID[m]> <dminuoso> "The main problem in building..." <- Te thing is I don't understand this sentence, which leads me to believe that I am attempting something above my understanding of Haskell XD
18:48:28 <VOID[m]> s/Te/The/
18:49:02 <dminuoso> VOID[m]: For what its worth, I did build what you're asking for myself recently
18:49:45 <dminuoso> VOID[m]: However, you are absolutely correct that an affine traversal would concisely describe that accessor, so you seem to have a fairly good basic understanding of lens already.
18:50:01 <VOID[m]> I just want an optic made from some path object that works for my tree, that lets me return Maybe when getting and either insert into tree or replace a node with setter (or ignore, if path makes no sence)
18:50:09 <dminuoso> VOID[m]: But it wouldnt be needed, such an accessor could easily just be a Traversal with the implicit understanding it will only touch one element at most.
18:50:46 <dminuoso> Or maybe a `Lense even
18:50:54 <dminuoso> Which is less powerful, but would suffice
18:50:55 <VOID[m]> dminuoso: I have okish basic understanding, but each tutorial I found has a place where it says "Now squit a bit - it's a Foldable with Applicative!" and suddenly code turns into hieroglyphs XD
18:50:56 <dminuoso> Consider:
18:50:58 <dminuoso> at :: Index m -> Lens' m (Maybe (IxValue m))
18:51:04 <dminuoso> ix :: Index m -> Traversal' m (IxValue m)
18:51:14 <dminuoso> (The difference here is that `at` gets to delete an element, `ix` does not)
18:51:29 eggplantade joins (~Eggplanta@2600:1700:38c5:d800:a84a:2d35:f948:fe07)
18:51:57 ft joins (~ft@p4fc2a257.dip0.t-ipconnect.de)
18:52:06 <VOID[m]> dminuoso: god damn it
18:52:06 <VOID[m]> I read somewhere, that Lens has to succeed
18:52:06 <VOID[m]> I don't get how that works with `Maybe` ;_;
18:52:31 <dminuoso> VOID[m]: Imagine something like:
18:52:42 <VOID[m]> Also when I tried doing Lens with Maybe it told me that I have to accept Maybe as input to setter (probably because I was using simplified helpers somewhere?)
18:52:45 <dminuoso> data User = User { _name :: Maybe Textt }
18:52:49 <VOID[m]> dminuoso: Is it open source by any chance?
18:52:56 <dminuoso> With a TH generated lens of `name :: Lens' User (Maybe Text)`
18:53:12 <dminuoso> VOID[m]: And no, thats absolutely right.
18:53:55 VOID[m] sent a hs code block: https://libera.ems.host/_matrix/media/v3/download/libera.chat/88715e5af4c7aef14cc2044c63c6da47ddb4381c
18:54:07 <dminuoso> foo & someMaybeLens .~ Just 1
18:54:09 <dminuoso> foo & someMaybeLens .~ Nothing
18:54:13 × tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
18:54:22 <dminuoso> However, yuou can use the ?~ shorthand (which will automaically introduce the Just)
18:55:19 mauke is impressed by the Matrix->IRC bridge
18:56:17 <VOID[m]> mauke: As a Matrix user - the bridge is GREAT. Persistent history, many devices, modern UI. I just hope you IRC fellas see all of my messages correctly :P
18:56:30 <dminuoso> Looks perfectly fine
18:56:47 <dminuoso> Even with you writing more than libera allows, which automatically gets send into a paste snippet
18:57:23 <mauke> it seems to translate targeted replies and self corrections in a perfectly natural fashion
18:57:40 <monochrom> Nice.
18:57:48 <VOID[m]> Damn
18:57:48 <VOID[m]> That's nice
18:57:48 <VOID[m]> One day I'll have to check out what I am actually sending XD
18:58:00 <dminuoso> VOID[m]: Ill let you know what I do for my tree
18:58:22 <dminuoso> data Tree k a = Node { treeNode :: a, treeChildren :: M.HashMap k (Tree k a) } deriving (Eq, Ord, Show, Foldable, Functor)
18:58:25 <VOID[m]> dminuoso: your maybe example *seems* simple, but I don't know how to do the thing for my `getTree`
18:58:50 <dminuoso> https://gist.github.com/dminuoso/f14ddbbc95a5978bed8bcff594cbf1fe
18:59:04 <dminuoso> VOID[m]: ^- and this is the alterF that allows you to edit the tree
18:59:20 <dminuoso> With some extra hooks for diagnostics that I require
18:59:29 <mauke> VOID[m]: here's what I see: https://paste.tomsmeding.com/7yiOoIXk
18:59:55 <dminuoso> That being said
19:00:07 <dminuoso> There's some cool expression you could do with lens
19:00:42 <dminuoso> All you need is just an Ixed (or even At) instance
19:00:55 <dminuoso> Then you can just fold some [Key] into a Traversal
19:01:28 <dminuoso> VOID[m]: Take my Tree as an immediate example (simply because it already works for that)
19:01:46 <dminuoso> We already have an `(Eq k, Hashable k) => Ixed (HashMap k a)` instance
19:02:08 <VOID[m]> mauke: I have mixed feelings about that code block...
19:02:22 <dminuoso> Modulo the newtype, we can already write `ix "key"` to get a traversal one level deep.
19:02:40 × AlexZenon quits (~alzenon@178.34.161.14) (Ping timeout: 260 seconds)
19:02:42 <dminuoso> Now with [Text] you can just fold, `at` each element, and compose them together
19:02:44 <dminuoso> Done!
19:03:08 <dminuoso> Does that make any sense to you?
19:03:18 × Alex_test quits (~al_test@178.34.161.14) (Ping timeout: 268 seconds)
19:03:40 <VOID[m]> dminuoso: "fold some [Key] into a Traversal" I like your funny words magic man XD I'll have to return to this conversation after I read about composition more, for now folding, at, ixed are quite hard to comprehend... I used them, I managed to implement them a few times, but I don't really "get" them
19:03:52 <VOID[m]> And when they get composed with each other it becomes VERY hard to follow for me
19:03:52 <dminuoso> Okay let me slow down for a moment
19:04:02 <dminuoso> % import qualified Data.Map as M
19:04:02 <yahb2> <no output>
19:04:28 <dminuoso> % let m = M.fromList [("foo", 1), ("bar", 2), ("quux", 3)]
19:04:28 <yahb2> <no output>
19:04:32 <dminuoso> :t m
19:04:33 <lambdabot> Expr
19:04:34 <dminuoso> % :t m
19:04:34 <yahb2> m :: Num a => M.Map String a
19:04:38 <dminuoso> VOID[m]: So far so good?
19:04:40 × nschoe quits (~q@2a01:e0a:8e:a190:befe:db92:c07:c717) (Remote host closed the connection)
19:04:41 <dminuoso> % let m = M.fromList [("foo", 1), ("bar", 2), ("quux", 3 :: Int)]
19:04:41 <yahb2> <no output>
19:04:43 <dminuoso> % :t m
19:04:43 <yahb2> m :: M.Map String Int
19:04:48 <dminuoso> TO make it monomorphic, less confusion
19:05:28 <VOID[m]> sure
19:05:29 <VOID[m]> I get it so far
19:05:41 <dminuoso> Now, because we have an `instance Ord k => Ixed (Map k a)` that means we can use `ix :: String -> Traversal' (M.Map String Int) Int`
19:05:51 <dminuoso> Let's look at how that works
19:05:52 nschoe joins (~q@2a01:e0a:8e:a190:7d4a:1795:de80:8cc7)
19:06:13 <dminuoso> % m ^.. ix "foo"
19:06:13 <yahb2> <interactive>:16:3: error: ; Variable not in scope: (^..) :: M.Map String Int -> t0 -> t ; ; <interactive>:16:7: error: ; • Variable not in scope: ix :: String -> t0 ; • Perhaps you me...
19:06:20 <dminuoso> % import Control.Lens.Fold
19:06:20 <yahb2> <no location info>: error: ; Could not find module ‘Control.Lens.Fold’ ; It is not a module in the current program, or in any known package.
19:06:22 <dminuoso> Uh
19:06:30 <dminuoso> :t (^..)
19:06:31 <lambdabot> s -> Getting (Endo [a]) s a -> [a]
19:06:36 <dminuoso> Okay let me repeat it with lambdabot
19:06:41 <dminuoso> @let import qualified Data.Map as M
19:06:42 <lambdabot> Defined.
19:06:47 <dminuoso> @let m = M.fromList [("foo", 1), ("bar", 2), ("quux", 3 :: Int)]
19:06:48 <lambdabot> Defined.
19:06:51 <dminuoso> @let myMap = M.fromList [("foo", 1), ("bar", 2), ("quux", 3 :: Int)]
19:06:52 <lambdabot> Defined.
19:06:58 <dminuoso> > myMap ^.. ix "foo"
19:07:00 <lambdabot> [1]
19:07:03 <dminuoso> VOID[m]: So far so good?
19:07:29 <VOID[m]> list as output
19:07:31 <VOID[m]> ?
19:07:37 <dminuoso> That's fine, we'll talk about that later
19:07:45 <VOID[m]> Then yes
19:07:48 <dminuoso> This is because `ix` is a traversal, and (^..) is just toListOf
19:07:54 <dminuoso> (or ix produces a traversal, rather)
19:07:59 <dsal> ^? would also be fine here.
19:08:24 <VOID[m]> Ok ok, makes sense
19:08:34 <dminuoso> VOID[m]: Now what we'll do instead, is make a nested map
19:09:21 <dminuoso> @let newtype Tree k a = Node { nodeValue :: a, children :: Map k (Tree k a) }
19:09:21 <lambdabot> Parse failed: newtype declaration constructor must have exactly one parameter.
19:09:26 <dminuoso> @let data Tree k a = Node { nodeValue :: a, children :: Map k (Tree k a) }
19:09:27 <lambdabot> /sandbox/tmp/.L.hs:164:50: error:
19:09:27 <lambdabot> Not in scope: type constructor or class ‘Map’
19:09:27 <lambdabot> Perhaps you meant ‘M.Map’ (imported from Data.Map)
19:09:31 <dminuoso> @let data Tree k a = Node { nodeValue :: a, children :: M.Map k (Tree k a) }
19:09:32 <lambdabot> /sandbox/tmp/.L.hs:165:43: error:
19:09:32 <lambdabot> Ambiguous occurrence ‘Tree’
19:09:32 <lambdabot> It could refer to
19:09:40 <dminuoso> @let data MyTree k a = Node { nodeValue :: a, children :: M.Map k (MyTree k a) }
19:09:41 <lambdabot> Defined.
19:09:46 tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
19:09:51 <dminuoso> VOID[m]: So you see how this is a tree?
19:10:06 Alex_test joins (~al_test@178.34.161.14)
19:10:19 <VOID[m]> Yes
19:10:38 <VOID[m]> And keys in DB would be the same as crumbs in my tree, right?
19:10:44 <dminuoso> Yes
19:10:46 <VOID[m]> *keys in map
19:10:50 AlexZenon joins (~alzenon@178.34.161.14)
19:10:53 <VOID[m]> great
19:11:58 <dminuoso> @let type instance IxValue (MyTree k a) = a
19:12:00 <lambdabot> Defined.
19:12:23 <dminuoso> @let type instance Index (MyTree k a) = k
19:12:24 <lambdabot> Defined.
19:12:42 <dminuoso> These are just type family instances, think of them as just definitions for a type level function. This type family is used in Ixed.
19:13:07 <dminuoso> Feel free to gloss over it (they just help Ixed understand what the Key and Value types of `MyTree k a` are
19:13:38 freeside joins (~mengwong@pd907d273.dip0.t-ipconnect.de)
19:13:39 × biberu quits (~biberu@user/biberu) (Read error: Connection reset by peer)
19:14:00 biberu joins (~biberu@user/biberu)
19:14:08 <VOID[m]> I won't say that I could write something like this myself, but I get the idea
19:16:50 <dminuoso> gah I need to redo the above type due to more conflicts
19:17:03 <dminuoso> @let data MyTree k a = Node { myTreeValue :: a, myTreeChildren :: M.Map k (MyTree k a) }
19:17:04 <lambdabot> /sandbox/tmp/.L.hs:171:1: error:
19:17:04 <lambdabot> Multiple declarations of ‘MyTree’
19:17:04 <lambdabot> Declared at: /sandbox/tmp/.L.hs:164:1
19:17:07 <dminuoso> @undef
19:17:07 <lambdabot> Undefined.
19:17:09 <dminuoso> @let data MyTree k a = Node { myTreeValue :: a, myTreeChildren :: M.Map k (MyTree k a) }
19:17:10 <lambdabot> Defined.
19:17:12 <dminuoso> @let type instance IxValue (MyTree k a) = a
19:17:13 <lambdabot> Defined.
19:17:15 <dsal> Yeah, blow it all up.
19:17:16 <dminuoso> @let type instance Index (MyTree k a) = k
19:17:17 <lambdabot> Defined.
19:17:25 <dsal> (we all share the same lambdabot)
19:17:41 <dminuoso> @let childrenLens = lens (\m -> myTreeChildren m) (\m v -> m{myTreeChildren = v}
19:17:41 <lambdabot> Parse failed: Parse error: EOF
19:17:46 <dminuoso> @let childrenLens = lens (\m -> myTreeChildren m) (\m v -> m{myTreeChildren = v}
19:17:46 <lambdabot> Parse failed: Parse error: EOF
19:17:47 × zer0bitz quits (~zer0bitz@196.244.192.60) (Read error: Connection reset by peer)
19:17:49 <dminuoso> @let childrenLens = lens (\m -> myTreeChildren m) (\m v -> m{myTreeChildren = v})
19:17:50 <lambdabot> Defined.
19:18:03 <dminuoso> VOID[m]: ^- here, can be TH generated, I just made it by hand. a lens for the children side.
19:18:11 × merijn quits (~merijn@c-001-001-007.client.esciencecenter.eduvpn.nl) (Ping timeout: 264 seconds)
19:18:24 <dsal> lambdabot can't TH
19:18:31 zer0bitz joins (~zer0bitz@196.244.192.60)
19:19:14 <dminuoso> @let instance Ord k => Ixed (MyTree k a) where ix i = childrenLens . at i
19:19:15 <lambdabot> /sandbox/tmp/.L.hs:168:16: error:
19:19:15 <lambdabot> • Occurs check: cannot construct the infinite type:
19:19:15 <lambdabot> a ~ Maybe (MyTree k a)
19:19:21 <dminuoso> Ah huh.
19:19:36 <dminuoso> Maybe we do need to go through Plated here
19:20:10 × freeside quits (~mengwong@pd907d273.dip0.t-ipconnect.de) (Ping timeout: 252 seconds)
19:20:18 <dminuoso> Ah no, this is incompatible with the above type instance heh
19:20:29 <dminuoso> @let type instance Index (MyTree k a) = MyTree k a
19:20:30 <lambdabot> /sandbox/tmp/.L.hs:161:15: error:
19:20:30 <lambdabot> Conflicting family instance declarations:
19:20:30 <lambdabot> Index (MyTree k a) = k -- Defined at /sandbox/tmp/.L.hs:161:15
19:21:11 freeside joins (~mengwong@pd907d273.dip0.t-ipconnect.de)
19:21:36 <monochrom> Yikes you may have to @undefine and define everything all over again :( :)
19:21:52 <dminuoso> lambdabot is getting spammed in query :)
19:22:36 <dminuoso> @let instance Ord k => Ixed (MyTree1 k a) where ix i = childrenLens1 . at i
19:22:37 <lambdabot> /sandbox/tmp/.L.hs:175:16: error:
19:22:37 <lambdabot> • Couldn't match type ‘MyTree k a0’ with ‘MyTree1 k a’
19:22:37 <lambdabot> Expected type: (IxValue (MyTree1 k a) -> f (IxValue (MyTree1 k a)))
19:23:18 <monochrom> I wonder if you could merge into a looong single line @let { data MyTree = ... ; instance Foo ... ; type Bar = ... }
19:23:18 <VOID[m]> I'll try to do it myself, I think I saw enough?
19:23:18 <VOID[m]> I have some questions about the process though
19:23:46 <geekosaur> just leave off the braces
19:23:47 <dsal> Normal process is doing it in a file and :r -- but lambda bot doesn't support :r
19:24:03 <dminuoso> @let instance Ord k => Ixed (MyTree1 k a) where ix i = __childrenLens1 . at i
19:24:04 <lambdabot> /sandbox/tmp/.L.hs:177:16: error:
19:24:04 <lambdabot> • Couldn't match type ‘MyTree1 k a’ with ‘Maybe (MyTree k a)’
19:24:04 <lambdabot> Expected type: (IxValue (MyTree1 k a) -> f (IxValue (MyTree1 k a)))
19:24:16 <dminuoso> Oh hah. Not again.
19:24:21 <monochrom> @where playground
19:24:21 <lambdabot> I know nothing about playground.
19:24:44 <geekosaur> https://play-haskell.tomsmeding.com/
19:24:52 <VOID[m]> I miss knowledge about composition
19:24:52 <VOID[m]> I couldn't come up with using Ixed by myself
19:25:01 <VOID[m]> I have to learn composition stuff
19:25:06 <dminuoso> VOID[m]: Sorry Im messing up with slight typos. Im almost there. Hang tight
19:25:09 <dsal> Oh wow. This is cool. I needed this yesterday.
19:25:25 <dminuoso> @let data MyTree2 k a = Node { myTree2Value :: a, myTree1Children :: M.Map k (MyTree2 k a)
19:25:25 <lambdabot> Parse failed: Parse error: EOF
19:25:27 <dminuoso> @let data MyTree2 k a = Node { myTree2Value :: a, myTree1Children :: M.Map k (MyTree2 k a) }
19:25:28 <lambdabot> /sandbox/tmp/.L.hs:176:20: error:
19:25:28 <lambdabot> Multiple declarations of ‘Node’
19:25:28 <lambdabot> Declared at: /sandbox/tmp/.L.hs:156:19
19:25:30 <monochrom> Thanks. That. You may find it more usable when you need so many lines of definitions.
19:25:34 <dminuoso> Heh
19:25:39 <dminuoso> monochrom: does it have lens, though?
19:25:56 <dsal> Could not find module ‘Control.Lens’
19:26:02 × freeside quits (~mengwong@pd907d273.dip0.t-ipconnect.de) (Ping timeout: 272 seconds)
19:26:12 <monochrom> Hrm probably not.
19:26:42 <geekosaur> figured. neither does yahb2 as far as I can tell
19:27:18 <monochrom> I might just copy-paste the content of lens >:)
19:27:38 k8yun joins (~k8yun@user/k8yun)
19:27:50 <VOID[m]> I don't get type instance Index (MyTree k a) = MyTree k a
19:27:51 <VOID[m]> Isn't Index just the k?
19:28:01 <VOID[m]> Or is this not what that means
19:28:43 <dminuoso> VOID[m]: https://gist.github.com/dminuoso/45d3126e303ff90b111232320022b022 success, finally
19:29:08 <dminuoso> So now we have a Tree, and we can build a traversal that looks one level using `at`
19:29:11 <geekosaur> @where+ playground https://play-haskell.tomsmeding.com/
19:29:11 <lambdabot> Good to know.
19:29:55 <monochrom> Yeah should be type instance Index (MyTree4 k a) = k
19:30:02 <dsal> @playground+ lens
19:30:02 <lambdabot> Unknown command, try @list
19:30:34 <monochrom> Ugh MyTree4 haha. "This is the 4th attempt"
19:30:35 <geekosaur> wrong bot anyway, it'd be yahb2 if it worked at all
19:31:11 ballast joins (~ballast@cpe-104-32-238-223.socal.res.rr.com)
19:31:11 <dminuoso> @let ats = appEndo . foldMap (Endo . at)
19:31:12 <lambdabot> Defined.
19:31:15 <dminuoso> :t ats
19:31:16 <dsal> That's an awesome site anyway. I like the core button.
19:31:16 <lambdabot> (Foldable t1, Functor f) => t1 () -> (Maybe t2 -> f (Maybe t2)) -> Maybe t2 -> f (Maybe t2)
19:31:23 <[exa]> actuellement, can we put the playground into the topic?
19:31:41 <dminuoso> Uh, where did that () come from?
19:32:02 <[exa]> dminuoso: looks like default ()
19:32:10 <mauke> :t foldMap
19:32:11 <lambdabot> (Foldable t, Monoid m) => (a -> m) -> t a -> m
19:33:10 <mauke> :t let ats x = (appEndo . foldMap (Endo . at)) x in ats
19:33:11 <monochrom> I'm going to put it right after the downloads.haskell.org link.
19:33:11 <lambdabot> (Foldable t1, Functor f) => t1 () -> (Maybe t2 -> f (Maybe t2)) -> Maybe t2 -> f (Maybe t2)
19:33:14 ChanServ sets mode +o monochrom
19:33:37 <dminuoso> Ah at is wrong anyway here
19:33:39 <dminuoso> @let ixes''' = appEndo . foldMap (Endo . ix) :: At m => [Index m] -> Traversal' m (IxValue m)
19:33:40 <lambdabot> /sandbox/tmp/.L.hs:202:31: error:
19:33:40 <lambdabot> • Couldn't match type ‘m1’ with ‘IxValue m1’
19:33:40 <lambdabot> ‘m1’ is a rigid type variable bound by
19:33:57 monochrom sets topic to "https://www.reddit.com/r/haskell | Admin: #haskell-ops | Offtopic: #haskell-offtopic | https://downloads.haskell.org https://play-haskell.tomsmeding.com/ | Paste code/errors: https://paste.tomsmeding.com | Logs: https://ircbrowse.tomsmeding.com/browse/lchaskell | AoC Leaderboard: 43100-84040706"
19:34:07 × zer0bitz quits (~zer0bitz@196.244.192.60) (Read error: Connection reset by peer)
19:34:33 monochrom sets mode -o monochrom
19:34:39 <dminuoso> I gotta run, though
19:34:46 <monochrom> Feel free to optimize it though, heh.
19:34:51 <dminuoso> VOID[m]: Anyway, you can do it along this way
19:35:11 <dminuoso> And you can upgrade to `At`, which expresses modifying whatever the optic points at.
19:35:45 zer0bitz joins (~zer0bitz@196.244.192.60)
19:36:00 <VOID[m]> Do the docs have a tree with short descriptions maybe?
19:36:12 <dminuoso> (Or you can just use `unsafeSingular` with whatever this produces and be done with it)
19:36:14 <VOID[m]> How does one gain knowledge about stuff like "Ixed", "At" etc
19:36:21 × zer0bitz quits (~zer0bitz@196.244.192.60) (Read error: Connection reset by peer)
19:36:33 <dminuoso> No, you are expected to just magically understand from the type signatures and the short examples
19:36:46 <monochrom> I think the lens front page has a huge UML class hierarchy.
19:36:57 zer0bitz joins (~zer0bitz@196.244.192.60)
19:37:22 <ballast> I've reached a point in my application where I've put an auxiliary function into my state data type that isn't meaningfully a part of the state, i.e. it never changes. Is it time to use a ReaderT or is it OK to just let it kick around as part of the state?
19:38:08 × califax quits (~califax@user/califx) (Ping timeout: 255 seconds)
19:38:18 <monochrom> https://hackage.haskell.org/package/lens and scroll down
19:38:51 <monochrom> Oh, https://hackage.haskell.org/package/lens#readme
19:39:10 × malte quits (~malte@mal.tc) (Ping timeout: 256 seconds)
19:39:44 × melonai- quits (~mel@rnrd.eu) (Ping timeout: 256 seconds)
19:39:49 melonai joins (~mel@rnrd.eu)
19:39:52 <VOID[m]> And you se Ixed on that graph?
19:39:59 <monochrom> No.
19:39:59 [exa]_ joins (~exa@srv3n.blesmrt.net)
19:40:06 × [exa]_ quits (~exa@srv3n.blesmrt.net) (Changing host)
19:40:06 [exa]_ joins (~exa@user/exa/x-3587197)
19:40:18 × [exa] quits (~exa@user/exa/x-3587197) (Ping timeout: 256 seconds)
19:40:18 × crns quits (~netcrns@user/crns) (Ping timeout: 256 seconds)
19:40:24 [exa]_ is now known as [exa]
19:40:49 <VOID[m]> I am trying to get Ixed for my type, but how am I supposed to implement something that has "Minimal complete definition: Nothing"
19:40:49 <VOID[m]> I know enough to copy and modify, not enough to actually implement
19:40:49 <VOID[m]> Gotta get back to books...
19:40:52 × hrberg quits (~quassel@171.79-160-161.customer.lyse.net) (Ping timeout: 256 seconds)
19:40:52 × adium quits (adium@user/adium) (Ping timeout: 256 seconds)
19:41:27 califax joins (~califax@user/califx)
19:41:27 hrberg joins (~quassel@171.79-160-161.customer.lyse.net)
19:41:56 crns joins (~netcrns@p4ff5e521.dip0.t-ipconnect.de)
19:41:56 × crns quits (~netcrns@p4ff5e521.dip0.t-ipconnect.de) (Changing host)
19:41:56 crns joins (~netcrns@user/crns)
19:42:18 malte joins (~malte@mal.tc)
19:42:27 <[exa]> VOID[m]: sadly the common advanced lens tutorials simply let you reinvent the whole thing and then obviously you kinda get it
19:43:17 adium joins (adium@user/adium)
19:43:59 <monochrom> Egomaniac opinion: The lens world suffers poor doc because I haven't become interested. >:)
19:44:00 × zer0bitz quits (~zer0bitz@196.244.192.60) (Read error: Connection reset by peer)
19:44:16 <dminuoso> VOID[m]: Well, Ixed is not a part of that hierarchy
19:44:25 <dminuoso> Ixed is a class of traversals
19:44:30 merijn joins (~merijn@c-001-002-026.client.esciencecenter.eduvpn.nl)
19:44:43 <dminuoso> The hierarchy denotes relationships of types of optics and how they can degrade
19:44:49 × califax quits (~califax@user/califx) (Remote host closed the connection)
19:44:49 <dminuoso> And how they can be composed
19:44:54 <dminuoso> optics is a lot stronger in that respect
19:45:13 califax joins (~califax@user/califx)
19:45:29 <[exa]> VOID[m]: but the type of `ix` should be kinda guiding: `Index m -> Traversal' m (IxValue m)`... you just take the index and convert it to a traversal through the corresponding value (if it's there)
19:45:52 zer0bitz joins (~zer0bitz@196.244.192.60)
19:47:34 <EvanR> ballast, there's nothing fundamentally wrong with having something in your state that never changes. If it's already like a big record of stuff
19:48:16 <[exa]> VOID[m]: and the traversal you can make using the normal lens machinery, e.g. https://hackage.haskell.org/package/lens-5.2/docs/Control-Lens-Combinators.html#v:traversal which is just a slightly more generic version of the usual `lens` that makes a lens from a getter and a setter
19:48:22 <EvanR> if there is something that really really will never change you could do ReaderT and access it easier though
19:48:33 <[exa]> oh noes I used "is just a", apologies.
19:48:49 <EvanR> [exa], what's the problem?!?!
19:49:10 gmg joins (~user@user/gehmehgeh)
19:49:14 <ballast> EvanR: yeah it is a big record.
19:49:18 <[exa]> I hate tutorials that say "you see, this is just a [insert a term from page 9478 of author's fav category theory book here]"
19:49:47 <[exa]> the just is plain out condescending if you read it as a newbie
19:50:37 <ballast> I realize though that since I have `MyState a` and my function is `a -> Foo` I could also make a typeclass `HasFoo` but not sure if that's better or worse than the other options.
19:50:58 × festive_kurbus quits (~festive_k@user/kurbus) (Ping timeout: 260 seconds)
19:51:14 <VOID[m]> I just want an Optic made from `(a -> Maybe b)` and `(b -> a)` ;_;
19:51:23 <ballast> Then I'd write `statefulFn :: HasFoo a => MyState a -> MyState a`
19:51:34 <[exa]> VOID[m]: that sounds like a prism
19:51:52 <VOID[m]> Prism has to do the re-smth that creates a Tree, no?
19:51:58 <EvanR> ballast, that just seems suspiciously like overengineering or "not gonna need it" territory. But who knows
19:52:27 <monochrom> I am OK with "just a $FOO", when the audience is familar with $FOO.
19:52:29 <[exa]> VOID[m]: prism is a lens for 1 element that might be missing (I'd say precisely your case)
19:52:41 <EvanR> I try to keep things at a basic level of language features until a critical 13.7 eV necessity appears to require something more fancy
19:52:51 <[exa]> VOID[m]: oh look, there's your function: https://hackage.haskell.org/package/lens-5.2/docs/Control-Lens-Combinators.html#v:prism-39-
19:52:52 <ballast> EvanR: Yeah I mean I've already resisted using a state monad to KISS...
19:53:19 <VOID[m]> > A Prism l is a Traversal that can also be turned around with re to obtain a Getter in the opposite direction
19:53:21 <lambdabot> <hint>:1:84: error: parse error on input ‘in’
19:53:33 <VOID[m]> This sounds like traversal should be easier, and I don't want the re
19:53:43 <[exa]> VOID[m]: (you may assume the `b` and `a` in the signature there ^ are the same)
19:54:10 <ballast> EvanR: Not sure what "critical 13.7 eV necessity" means though
19:54:25 <EvanR> ground state haskell vs excited state haskell
19:54:30 <[exa]> VOID[m]: that's a fancy way of saying that the prism points to a single thing (to invert it, you need uniqueness)
19:54:51 <EvanR> nevermind
19:54:56 <VOID[m]> As I understand it, a Prism requires the re, no?
19:55:04 <monochrom> Heh EvanR I get your joke, no worries!
19:55:06 <ballast> Ah... I missed that joke
19:55:41 <EvanR> ballast, HasFoo is apparently a popular way to make "real" apps with many monads coexisting but that share some features
19:55:41 <monochrom> Although I think you want 13.7 MeV or even GeV. Right? 13.7 eV is very small.
19:56:00 <[exa]> VOID[m]: not really, `re` is derived from the 2 functions (partial getter and setter) that you give to `prism`
19:56:54 <ballast> Also looking at the linked comment about prisms, I must admit that I don't know how to feel about `isn't` being a function name
19:57:09 <[exa]> VOID[m]: there's a lens tutorial that uses prisms as a kinda generalized first-class patternmatches. You get for example `left_` that you can use to check if the Either is `Left something`, and if you reverse it with `re`, you can actually construct the `Left something` from a value
19:57:26 <EvanR> it's also wrong, 13.7 eV is how much it costs to totally break up hydrogen as opposed to go up 1 energy level
19:57:42 <VOID[m]> Thank you all very much
19:57:42 <VOID[m]> I got a lot of great advice
19:57:42 <VOID[m]> I'll read more into Ixed stuff, and will try the prism' solution
19:57:42 <VOID[m]> Y'all were great <3
19:58:10 <EvanR> ballast, acme-don't package is great
19:58:18 <EvanR> it enables don't notation
19:58:51 <[exa]> VOID[m]: btw for practical software engineering reasons, you might want to start with writing some trivial Ixed instance (like an ix for a list or Identity or so)
19:59:03 <ballast> haha, I like that though
19:59:16 <[exa]> VOID[m]: getting custom types into the mix right from the start tends to generate headache
19:59:40 <[exa]> anyway yeah, good luck. :]
20:00:00 <VOID[m]> So I should try implementing Ixed for something like a list, got it
20:00:00 <VOID[m]> Thank you very much for tips <3
20:00:54 <mauke> use Acme::Don't; don't { print "hi\n"; } while (1 == 1); # I think it works better in perl
20:02:29 <EvanR> I find the asymmetry a bit annoying though
20:02:34 <EvanR> in the haskell version
20:02:52 <EvanR> returns () instead of a
20:06:59 ub joins (~Thunderbi@p200300ecdf264e2fdb144bfb5fa7f064.dip0.t-ipconnect.de)
20:07:04 × ubert quits (~Thunderbi@p548c9ce5.dip0.t-ipconnect.de) (Ping timeout: 260 seconds)
20:07:04 ub is now known as ubert
20:10:06 <jackdk> It's the best we can do, but at least it now supports `-XApplicativeDo` (`-XApplicativeDont`?)
20:11:45 × johnw quits (~johnw@2600:1700:cf00:db0:d426:be2d:331:cdc5) (Quit: ZNC - http://znc.in)
20:14:00 <dsal> At least there's no `-XApplicativeTry`
20:14:52 <mauke> don't do something you'll regret -- potentially valid haskell code
20:18:50 × merijn quits (~merijn@c-001-002-026.client.esciencecenter.eduvpn.nl) (Ping timeout: 252 seconds)
20:24:56 <mniip> is there a way to enable a ghc plugin using only the --ghc-options interface of stack/cabal?
20:25:13 <mniip> the problem is of course that the plugin resides in a package that is not in the dependencies list
20:30:38 × doyougnu quits (~doyougnu@cpe-74-69-132-225.stny.res.rr.com) (Ping timeout: 272 seconds)
20:30:43 merijn joins (~merijn@c-001-002-026.client.esciencecenter.eduvpn.nl)
20:31:38 freeside joins (~mengwong@pd907d273.dip0.t-ipconnect.de)
20:32:18 <mniip> apparently not
20:33:17 <geekosaur> does -package not work?
20:33:39 <geekosaur> hm, probably not because cabal/stack won't expose it
20:34:21 × eggplantade quits (~Eggplanta@2600:1700:38c5:d800:a84a:2d35:f948:fe07) (Remote host closed the connection)
20:34:58 × merijn quits (~merijn@c-001-002-026.client.esciencecenter.eduvpn.nl) (Ping timeout: 252 seconds)
20:35:20 Tuplanolla joins (~Tuplanoll@91-159-68-152.elisa-laajakaista.fi)
20:35:59 <mniip> yup
20:36:32 <mniip> https://downloads.haskell.org/~ghc/9.4.2/docs/users_guide/extending_ghc.html#:~:text=At%20the%20moment%2C%20the%20only%20way%20to%20specify%20a%20dependency%20on%20a%20plugin
20:37:39 <EvanR> unsprisingly a dumbass recursive descent version of the day 13 parser is slightly bigger than a megaparsec parser. Surprisingly a dumbass tokenizer + parser on tokens is smaller than both xD
20:39:46 kenran joins (~user@user/kenran)
20:41:04 × kenran quits (~user@user/kenran) (Remote host closed the connection)
20:42:11 <mniip> with 50-odd packages manually editing cabal files does not seem fun
20:46:14 jmdaemon joins (~jmdaemon@user/jmdaemon)
20:48:29 <EvanR> https://paste.tomsmeding.com/HlaE2uLj 😎
20:51:28 × zer0bitz quits (~zer0bitz@196.244.192.60) (Ping timeout: 252 seconds)
20:52:19 <SrPx> Hello! Is anyone here familiar with Cardano? I'm trying to compile and run a "Hello, world" offline using Plutus, but I can't find how. Is that possible?
21:05:05 × fserucas quits (~fserucas@2001:818:e376:a400:fb92:70c1:dd88:c7d7) (Ping timeout: 246 seconds)
21:06:22 × Katarushisu quits (~Katarushi@cpc147790-finc20-2-0-cust502.4-2.cable.virginm.net) (Quit: The Lounge - https://thelounge.chat)
21:09:42 zer0bitz joins (~zer0bitz@196.244.192.57)
21:09:52 pavonia joins (~user@user/siracusa)
21:15:16 × nut quits (~nut@roc37-h01-176-170-197-243.dsl.sta.abo.bbox.fr) (Ping timeout: 268 seconds)
21:15:55 × son0p quits (~ff@2604:3d08:5b7f:5540::64ea) (Ping timeout: 248 seconds)
21:18:22 <SrPx> hmm in case anyone does: https://cardano.stackexchange.com/questions/9625/how-to-run-a-simple-fib-function-offline
21:22:53 merijn joins (~merijn@c-001-001-007.client.esciencecenter.eduvpn.nl)
21:28:06 jargon joins (~jargon@174-22-192-24.phnx.qwest.net)
21:31:18 × freeside quits (~mengwong@pd907d273.dip0.t-ipconnect.de) (Ping timeout: 268 seconds)
21:34:53 eggplantade joins (~Eggplanta@2600:1700:38c5:d800:a84a:2d35:f948:fe07)
21:37:43 <xerox> is it possible to use OverloadedLists through read, or is it just for source contents
21:37:49 × trev quits (~trev@user/trev) (Remote host closed the connection)
21:38:05 <mniip> that's a weird question. What do you mean?
21:38:39 <geekosaur> source contents. read can't know about extensions and its behavior is fixed when the base library os built
21:38:40 <xerox> just had a strange idea to parse today's aoc input
21:38:41 <geekosaur> *is
21:39:32 × eggplantade quits (~Eggplanta@2600:1700:38c5:d800:a84a:2d35:f948:fe07) (Ping timeout: 255 seconds)
21:39:39 <xerox> data P = N Int | L [P] deriving (Read,Show); instance Num P where fromInteger = N . fromInteger; instance IsList P where type Item P = P; fromList = L
21:39:44 <geekosaur> this does not preclude running the result through fromList
21:40:16 <geekosaur> it just means the runtime won't do so automatically
21:40:43 <xerox> geekosaur: how do you do it, I'm at a loss
21:40:56 <geekosaur> eh? fromList . read
21:41:43 <geekosaur> if it's more complex than that then IsList is probably the wrong answer anyway
21:43:46 <xerox> geekosaur: https://pastebin.com/raw/1jmxEEwy
21:44:08 freeside joins (~mengwong@pd907d273.dip0.t-ipconnect.de)
21:44:37 <geekosaur> that wasn't going to work even with IsList, the list still has to have the same type
21:45:12 <xerox> but it does work with IsList, it's the first example
21:45:15 <geekosaur> hm, I guess you were hoping the inner lists would get promoted to Ps. no, read will never do that oribably
21:45:24 <geekosaur> *probably
21:45:36 <geekosaur> for the same reason we're unlikely to get a Unicode Show instance
21:46:01 <geekosaur> changing the behavior of those at runtime would cause all sorts of problems
21:46:46 × lisbeths quits (uid135845@id-135845.lymington.irccloud.com) (Quit: Connection closed for inactivity)
21:48:40 × freeside quits (~mengwong@pd907d273.dip0.t-ipconnect.de) (Ping timeout: 252 seconds)
21:48:57 MajorBiscuit joins (~MajorBisc@2001:1c00:2404:ed00:28e1:ad14:ec67:539e)
21:49:27 <mauke> just run your input through perl -pe 's/\b(?=\d)/N /g; s/\[/L [/g'
21:50:50 <xerox> yeah :)
21:50:59 <mauke> alternatively, define a custom Read instance
21:51:07 × nschoe quits (~q@2a01:e0a:8e:a190:7d4a:1795:de80:8cc7) (Ping timeout: 265 seconds)
21:51:16 <mauke> but IsList won't help here
21:52:09 × merijn quits (~merijn@c-001-001-007.client.esciencecenter.eduvpn.nl) (Ping timeout: 256 seconds)
21:53:02 <EvanR> "just use json lol"
21:54:21 hsw_ joins (~hsw@112-104-142-182.adsl.dynamic.seed.net.tw)
21:54:32 <mauke> hmm. this happens to be PDN (perl data notation)
21:54:43 <mauke> my $input = do "./input"; # literally run it as perl code, lol
21:55:27 <mauke> that suggests you might be able to to shenanigans with CPP and #include
21:55:35 <mauke> s/to to/to do/
21:55:49 × califax quits (~califax@user/califx) (Remote host closed the connection)
21:55:52 × hsw quits (~hsw@2001-b030-2303-0104-0172-0025-0012-0132.hinet-ip6.hinet.net) (Ping timeout: 252 seconds)
21:56:52 califax joins (~califax@user/califx)
21:57:30 × takuan quits (~takuan@178-116-218-225.access.telenet.be) (Remote host closed the connection)
21:59:30 <xerox> interesting idea
22:01:58 freeside joins (~mengwong@pd907d273.dip0.t-ipconnect.de)
22:02:09 <ballast> getting this error when I try to use `lens` from microlens: https://paste.tomsmeding.com/3FKZuSbY . Am I missing an extension? I'm confused why it's asking for a specific `f` when the type of `Lens` is `forall f.`.
22:02:37 <ballast> (error message has been edited to slim down the definitions/types)
22:03:22 <jackdk> Can you paste a bit more context?
22:04:05 <mauke> does myState have a type signature in your code?
22:04:28 <ballast> mauke: no, I'll add ScopedTypeVariables and try adding one
22:04:52 <ballast> jackdk: it's a bit messy with the context but I can do that if adding a signature doesn't work
22:05:21 <jackdk> Yeah you'll need a type signature
22:06:15 <ballast> I'm passing it to a function that expects a `Lens' s (CalendarState a)` , how come it won't unify?
22:06:31 <ballast> Adding the signature though and checking
22:07:03 nut joins (~nut@roc37-h01-176-170-197-243.dsl.sta.abo.bbox.fr)
22:07:33 Unhammer parts (~Unhammer@user/unhammer) (ERC (IRC client for Emacs) with WeeChat)
22:07:38 <ballast> OK I've learned my lesson. I won't put my lens definitions in where clauses. Thanks mauke and jackdk
22:07:57 <[exa]> ballast: the let-bindings can't unify "back" from the uses
22:08:15 <[exa]> (there's the forall in the way that prevents it)
22:08:57 <ballast> [exa]: bet it would make sense if I looked at the unification rules, I assume I'm asking for something undecidable
22:09:01 waleee joins (~waleee@2001:9b0:213:7200:cc36:a556:b1e8:b340)
22:09:24 <ballast> Also it's curious that GHC suggests to add RankNTypes instead of Rank2Types when I use the type `type Lens s t a b = forall f. -- etc.`
22:09:40 <ballast> Ah. I see Rank2Types is obsolete, never mind.
22:09:42 <jackdk> Rank2Types is obsolete
22:09:43 <jackdk> yeah
22:09:55 <ballast> So many of my questions are answered by just typing the name of the thing into google ha
22:09:57 <mauke> would 'myState x = lens getMy setMy x' fix it?
22:09:58 <dsal> Rank3Types ought to be enough for anybody.
22:10:02 <mauke> or is the forall the issue?
22:10:03 <[exa]> ballast: actually not undecidable, but the hindley-milner and all similar systems precisely aim to prevent the "use" types from leaking to let-definitions
22:10:47 <[exa]> ballast: if you didn't read about that, consider someone happily defining `id x = x` and going `id "asd"` and `id 5` in 2 parts of the program.
22:11:29 <ballast> [exa]: my intuition for type inference when it comes to polymorphism is lacking to say the least. I usually need to write the judgements out by hands to be sure I understand what's going on.
22:11:52 emmanuelux joins (~emmanuelu@user/emmanuelux)
22:12:39 <ballast> mauke: that works it seems
22:12:40 <[exa]> btw what you got there looked a bit like monomorphism restriction to me, but hard to say without seeing the rest of the program
22:13:02 <[exa]> ah yes, mauke confirmed. :]
22:13:04 <mauke> ballast: if it works with an explicit parameter but not without, then you got bitten by the monomorphism restriction
22:13:07 <ballast> mauke: Then HLS says to eta reduce and it fails to type check haha
22:13:22 <mauke> which is turnoffable
22:13:39 <ballast> is this a like "here be dragons" kind of disable-able feature?
22:13:50 <mauke> not really dragons, no
22:14:27 <mauke> it just might make some "constants" more polymorphic than you expect, so it might result in less efficient code
22:15:25 <[exa]> ballast: in very specific cases it can do very specific ugly things with thunks, iirc something like that you'd expect the value `x=something` to be memoized but it can't be memoized because it's lacking the invisible typeclass argument
22:15:56 Lycurgus joins (~juan@user/Lycurgus)
22:16:04 <monochrom> I am still blissfully ignorant about how HLS gives hlint recommendations, and hlint recommendations are of questionable applicability.
22:16:05 × MajorBiscuit quits (~MajorBisc@2001:1c00:2404:ed00:28e1:ad14:ec67:539e) (Ping timeout: 246 seconds)
22:16:36 <monochrom> Or more pointedly, how most beginners don't know that legacy.
22:16:42 <ballast> I think I'll stick to keeping it on then, especially since it's not too ugly to just inline my use of `lens`
22:16:57 <Lycurgus> applicability or worth?
22:17:06 <monochrom> perhaps both
22:17:30 <monochrom> perhaps value too
22:17:45 <monochrom> perhaps benefit too
22:17:48 <monochrom> should I go on?
22:18:23 <Lycurgus> prolly not
22:18:26 <mauke> https://www.haskell.org/onlinereport/haskell2010/haskellch4.html#x10-930004.5.5
22:18:28 <monochrom> figured
22:19:28 fizbin joins (~fizbin@user/fizbin)
22:21:32 szkl joins (uid110435@id-110435.uxbridge.irccloud.com)
22:24:39 × biberu quits (~biberu@user/biberu) (Read error: Connection reset by peer)
22:24:40 × tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
22:26:08 CodeKiwi is now known as DigitalKiwi
22:27:23 × michalz quits (~michalz@185.246.204.65) (Remote host closed the connection)
22:28:00 × opqdonut quits (opqdonut@pseudo.fixme.fi) (Ping timeout: 260 seconds)
22:28:10 opqdonut joins (opqdonut@pseudo.fixme.fi)
22:31:56 biberu joins (~biberu@user/biberu)
22:32:11 × gmg quits (~user@user/gehmehgeh) (Quit: Leaving)
22:36:06 tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
22:39:19 × chexum quits (~quassel@gateway/tor-sasl/chexum) (Remote host closed the connection)
22:43:38 × fizbin quits (~fizbin@user/fizbin) (Ping timeout: 272 seconds)
22:44:10 × Lycurgus quits (~juan@user/Lycurgus) (Quit: Exeunt: personae.ai-integration.biz)
22:45:45 chexum joins (~quassel@gateway/tor-sasl/chexum)
22:46:47 × __monty__ quits (~toonn@user/toonn) (Quit: leaving)
22:47:58 × k8yun quits (~k8yun@user/k8yun) (Quit: Leaving)
22:48:48 merijn joins (~merijn@c-001-001-007.client.esciencecenter.eduvpn.nl)
22:50:42 × euandreh quits (~Thunderbi@179.214.113.107) (Ping timeout: 256 seconds)
22:53:54 × ubert quits (~Thunderbi@p200300ecdf264e2fdb144bfb5fa7f064.dip0.t-ipconnect.de) (Quit: ubert)
22:53:55 ubert1 is now known as ubert
22:56:17 × tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
22:59:05 euandreh joins (~Thunderbi@179.214.113.107)
23:02:58 jakalx parts (~jakalx@base.jakalx.net) ()
23:03:04 jakalx joins (~jakalx@base.jakalx.net)
23:04:12 × freeside quits (~mengwong@pd907d273.dip0.t-ipconnect.de) (Ping timeout: 252 seconds)
23:08:55 × coot quits (~coot@2a02:a310:e241:1b00:ec1a:e9df:79ac:66ba) (Quit: coot)
23:10:44 × bontaq quits (~user@ool-45779fe5.dyn.optonline.net) (Ping timeout: 246 seconds)
23:13:58 × avicenzi quits (~avicenzi@2a00:ca8:a1f:b004::c32) (Ping timeout: 252 seconds)
23:16:29 freeside joins (~mengwong@pd907d273.dip0.t-ipconnect.de)
23:17:37 × ubert quits (~Thunderbi@p200300ecdf264e2f50477ceb302d227f.dip0.t-ipconnect.de) (Remote host closed the connection)
23:23:00 × merijn quits (~merijn@c-001-001-007.client.esciencecenter.eduvpn.nl) (Ping timeout: 256 seconds)
23:25:22 fizbin joins (~fizbin@user/fizbin)
23:26:26 son0p joins (~ff@2604:3d08:5b7f:5540::64ea)
23:27:39 bitdex joins (~bitdex@gateway/tor-sasl/bitdex)
23:38:35 × forell quits (~forell@user/forell) (Ping timeout: 264 seconds)
23:44:32 × albet70 quits (~xxx@2400:8902::f03c:92ff:fe60:98d8) (Remote host closed the connection)
23:46:00 × fizbin quits (~fizbin@user/fizbin) (Ping timeout: 252 seconds)
23:46:51 × acidjnk quits (~acidjnk@p200300d6e7137a81910d6d9ee28ee6f1.dip0.t-ipconnect.de) (Ping timeout: 248 seconds)
23:50:41 albet70 joins (~xxx@2400:8902::f03c:92ff:fe60:98d8)
23:55:32 × azimut quits (~azimut@gateway/tor-sasl/azimut) (Ping timeout: 255 seconds)
23:55:59 × ec quits (~ec@gateway/tor-sasl/ec) (Ping timeout: 255 seconds)
23:56:26 × bitdex quits (~bitdex@gateway/tor-sasl/bitdex) (Ping timeout: 255 seconds)
23:56:26 × ChaiTRex quits (~ChaiTRex@user/chaitrex) (Ping timeout: 255 seconds)
23:57:07 azimut joins (~azimut@gateway/tor-sasl/azimut)
23:57:20 ec joins (~ec@gateway/tor-sasl/ec)
23:58:21 bitdex joins (~bitdex@gateway/tor-sasl/bitdex)
23:59:01 ChaiTRex joins (~ChaiTRex@user/chaitrex)

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