Home liberachat/#haskell: Logs Calendar

Logs on 2023-10-15 (liberachat/#haskell)

00:00:53 × Tuplanolla quits (~Tuplanoll@91-159-68-236.elisa-laajakaista.fi) (Quit: Leaving.)
00:04:53 × califax quits (~califax@user/califx) (Remote host closed the connection)
00:06:34 califax joins (~califax@user/califx)
00:10:39 × arahael quits (~arahael@119-18-2-212.771202.syd.nbn.aussiebb.net) (Ping timeout: 240 seconds)
00:12:44 hugo joins (znc@verdigris.lysator.liu.se)
00:23:02 × ddellacosta quits (~ddellacos@ool-44c738de.dyn.optonline.net) (Ping timeout: 255 seconds)
00:23:43 ddellacosta joins (~ddellacos@ool-44c738de.dyn.optonline.net)
00:27:15 <EvanR> is Just 'A' an application of function Just to char 'A', or a data object ready to be case analyzed, not applicated
00:27:43 eggplantade joins (~Eggplanta@2600:1700:38c5:d800:189c:98ad:f16d:aaa6)
00:27:55 × hugo quits (znc@verdigris.lysator.liu.se) (Ping timeout: 258 seconds)
00:28:30 <geekosaur> both
00:29:06 <geekosaur> well, technically it's only the latter but ghc treats `Just` as a function that can be applied
00:30:07 <EvanR> both at once, or could be either and there's no way to know
00:33:22 <EvanR> only just now realized how confusing that could be
00:37:38 <geekosaur> once you have `Just 'A'` you have a data object, not a function that can't be case analyzed
00:37:59 <geekosaur> but `Just` exists as both a data object creator and as a partially applied function
00:38:44 <EvanR> so Just 'A' written anywhere doesn't correspond to an "app node"
00:38:45 <geekosaur> I think you have to look at Core to see this though
00:38:47 <hpc> or perhaps it's better to say, the same word refers to both
00:39:09 <roboguy_> One name for two things that could be considered conceptually different. Sorta reminds me of how something like Maybe is a function that sends a type to another type, but that other type doesn't have a "separate name". So, Maybe sends Int to "Maybe Int". That actually confused me for a while when I was trying to figure out how Haskell `Functor`s relate to category theory functors
00:39:14 hugo joins (znc@verdigris.lysator.liu.se)
00:39:26 <hpc> imagine if data constructors were special, but you didn't have to write (\x -> Just x) all the time
00:40:19 × [itchyjunk] quits (~itchyjunk@user/itchyjunk/x-7353470) (Ping timeout: 252 seconds)
00:40:19 <geekosaur> that is, if you declare your own `data MyMaybe a = MyNothing | MyJust a` then ghc declares both `MyJust a` and partially applied `MyJust`. I seem to recall a `W$` being in the name of the latter, but would have to inspect Core to be certain
00:40:48 <geekosaur> this leads to speedups when you write `MyJust 'A'` while still supporting using `MyJust` as a function
00:42:00 <c_wraith> there's also the CONLIKE pragma to tell the optimizer (simplifier, I think?) that a particular function can be treated much like a constructor
00:42:56 <c_wraith> I don't know exactly when it fires, but I presume it requires the definition to reduce to a constructor without branching or recursing
00:44:21 [itchyjunk] joins (~itchyjunk@user/itchyjunk/x-7353470)
00:44:50 Alleria joins (~JohnGalt@user/alleria)
00:44:58 <geekosaur> https://downloads.haskell.org/ghc/9.8.1/docs/users_guide/exts/rewrite_rules.html#conlike
00:45:21 <geekosaur> it actually moodifies the INLINE pragma and affects how rules treat it
00:45:52 <geekosaur> (rules "see through" constructors but not functions, unless the function is INLINABLE/INLINE and CONLIKE)
00:45:56 <geekosaur> iirc
00:47:26 × machinedgod quits (~machinedg@d198-53-218-113.abhsia.telus.net) (Ping timeout: 255 seconds)
00:53:50 L29Ah joins (~L29Ah@wikipedia/L29Ah)
00:55:57 × Lord_of_Life quits (~Lord@user/lord-of-life/x-2819915) (Ping timeout: 260 seconds)
00:55:59 Lord_of_Life_ joins (~Lord@user/lord-of-life/x-2819915)
00:56:43 × dtman34 quits (~dtman34@c-76-156-89-180.hsd1.mn.comcast.net) (Ping timeout: 255 seconds)
00:57:19 Lord_of_Life_ is now known as Lord_of_Life
01:00:30 × wroathe quits (~wroathe@user/wroathe) (Ping timeout: 258 seconds)
01:00:36 × alphacentauri quits (alphacenta@gateway/vpn/protonvpn/alphacentauri) (Quit: WeeChat 4.0.5)
01:09:33 × hugo quits (znc@verdigris.lysator.liu.se) (Ping timeout: 248 seconds)
01:14:20 × coot quits (~coot@89-69-206-216.dynamic.chello.pl) (Quit: coot)
01:14:34 coot joins (~coot@89-69-206-216.dynamic.chello.pl)
01:23:26 × otto_s quits (~user@p4ff27101.dip0.t-ipconnect.de) (Ping timeout: 255 seconds)
01:25:07 otto_s joins (~user@p4ff27012.dip0.t-ipconnect.de)
01:31:21 Pozyomka joins (~pyon@user/pyon)
01:31:30 × jmorris quits (uid604645@id-604645.hampstead.irccloud.com) (Quit: Connection closed for inactivity)
01:34:26 hugo joins (znc@verdigris.lysator.liu.se)
01:35:32 aforemny joins (~aforemny@2001:9e8:6cda:1500:6f40:15a2:ac09:312c)
01:35:35 × aforemny_ quits (~aforemny@i59F516EA.versanet.de) (Ping timeout: 255 seconds)
01:39:01 × otto_s quits (~user@p4ff27012.dip0.t-ipconnect.de) (Ping timeout: 260 seconds)
01:40:27 otto_s joins (~user@p5de2f3ed.dip0.t-ipconnect.de)
01:41:34 × hugo quits (znc@verdigris.lysator.liu.se) (Ping timeout: 255 seconds)
01:46:45 Unicorn_Princess joins (~Unicorn_P@user/Unicorn-Princess/x-3540542)
01:48:56 bilegeek_ joins (~bilegeek@230.sub-174-228-97.myvzw.com)
01:51:34 × bilegeek quits (~bilegeek@2600:1008:b094:3e4e:83d7:cfc2:3666:8d15) (Ping timeout: 272 seconds)
01:54:57 nate2 joins (~nate@c-98-45-169-16.hsd1.ca.comcast.net)
01:55:24 hgolden joins (~hgolden@2603-8000-9d00-3ed1-1ee4-1b7c-94a7-8fa7.res6.spectrum.com)
01:57:59 × L29Ah quits (~L29Ah@wikipedia/L29Ah) (Ping timeout: 245 seconds)
01:59:53 × nate2 quits (~nate@c-98-45-169-16.hsd1.ca.comcast.net) (Ping timeout: 255 seconds)
02:00:02 × azimut quits (~azimut@gateway/tor-sasl/azimut) (Remote host closed the connection)
02:00:30 azimut joins (~azimut@gateway/tor-sasl/azimut)
02:00:35 L29Ah joins (~L29Ah@wikipedia/L29Ah)
02:02:50 hugo joins (znc@verdigris.lysator.liu.se)
02:24:20 vglfr joins (~vglfr@88.155.159.184)
02:25:55 × chexum quits (~quassel@gateway/tor-sasl/chexum) (Ping timeout: 252 seconds)
02:28:49 × hugo quits (znc@verdigris.lysator.liu.se) (Ping timeout: 255 seconds)
02:33:01 × roboguy_ quits (~roboguy_@2605:a601:ac4a:2700:d466:7d9:bddf:805) (Quit: Leaving...)
02:38:45 × azimut quits (~azimut@gateway/tor-sasl/azimut) (Ping timeout: 252 seconds)
02:39:37 finn_elija joins (~finn_elij@user/finn-elija/x-0085643)
02:39:37 × FinnElija quits (~finn_elij@user/finn-elija/x-0085643) (Killed (NickServ (Forcing logout FinnElija -> finn_elija)))
02:39:37 finn_elija is now known as FinnElija
02:46:44 hugo joins (znc@verdigris.lysator.liu.se)
02:47:50 × waleee quits (~waleee@h-176-10-137-138.NA.cust.bahnhof.se) (Ping timeout: 258 seconds)
02:48:08 chexum joins (~quassel@gateway/tor-sasl/chexum)
02:52:01 × bilegeek_ quits (~bilegeek@230.sub-174-228-97.myvzw.com) (Remote host closed the connection)
02:52:25 bilegeek_ joins (~bilegeek@230.sub-174-228-97.myvzw.com)
02:57:23 alphacentauri joins (alphacenta@gateway/vpn/protonvpn/alphacentauri)
02:59:31 × td_ quits (~td@i5387092A.versanet.de) (Ping timeout: 260 seconds)
02:59:49 sm joins (~sm@plaintextaccounting/sm)
03:00:03 × sm quits (~sm@plaintextaccounting/sm) (Client Quit)
03:00:56 td_ joins (~td@i53870930.versanet.de)
03:04:58 nilradical joins (~nilradica@user/naso)
03:08:26 × nilradical quits (~nilradica@user/naso) (Client Quit)
03:11:53 aforemny_ joins (~aforemny@2001:9e8:6ce4:3000:9219:c90e:a79a:8713)
03:12:21 × aforemny quits (~aforemny@2001:9e8:6cda:1500:6f40:15a2:ac09:312c) (Ping timeout: 260 seconds)
03:22:40 arahael joins (~arahael@119-18-2-212.771202.syd.nbn.aussiebb.net)
03:23:12 × privacy quits (~privacy@user/privacy) (Quit: Leaving)
03:23:47 × vglfr quits (~vglfr@88.155.159.184) (Read error: Connection reset by peer)
03:24:07 vglfr joins (vglfr@gateway/vpn/protonvpn/vglfr)
03:51:30 × vglfr quits (vglfr@gateway/vpn/protonvpn/vglfr) (Remote host closed the connection)
03:52:15 vglfr joins (vglfr@gateway/vpn/protonvpn/vglfr)
03:58:02 nate2 joins (~nate@c-98-45-169-16.hsd1.ca.comcast.net)
03:59:15 × vglfr quits (vglfr@gateway/vpn/protonvpn/vglfr) (Remote host closed the connection)
04:00:01 vglfr joins (vglfr@gateway/vpn/protonvpn/vglfr)
04:02:25 × nate2 quits (~nate@c-98-45-169-16.hsd1.ca.comcast.net) (Ping timeout: 255 seconds)
04:07:06 × vglfr quits (vglfr@gateway/vpn/protonvpn/vglfr) (Ping timeout: 272 seconds)
04:07:16 vglfr joins (~vglfr@88.155.159.184)
04:20:13 × sabino quits (~sabino@user/sabino) (Quit: Lambda _ -> x)
04:24:30 × [itchyjunk] quits (~itchyjunk@user/itchyjunk/x-7353470) (Remote host closed the connection)
04:26:16 × hugo quits (znc@verdigris.lysator.liu.se) (Ping timeout: 255 seconds)
04:35:46 × xff0x quits (~xff0x@ai101218.d.east.v6connect.net) (Ping timeout: 260 seconds)
04:36:17 hugo joins (znc@verdigris.lysator.liu.se)
04:37:36 xff0x joins (~xff0x@178.255.149.135)
04:47:06 × xff0x quits (~xff0x@178.255.149.135) (Ping timeout: 255 seconds)
04:48:42 × hugo quits (znc@verdigris.lysator.liu.se) (Ping timeout: 260 seconds)
04:48:55 xff0x joins (~xff0x@2405:6580:b080:900:4eda:e939:15a9:23d7)
04:55:30 hugo joins (znc@verdigris.lysator.liu.se)
05:03:44 × ensyde quits (~ensyde@2600:381:f429:4668:5188:5a77:b1c6:d864) (Read error: Connection reset by peer)
05:09:39 × hugo quits (znc@verdigris.lysator.liu.se) (Ping timeout: 245 seconds)
05:10:05 glguy is now known as ghoulguy
05:21:09 Inst joins (~Inst@120.244.192.250)
05:22:00 hugo joins (znc@verdigris.lysator.liu.se)
05:31:31 × hugo quits (znc@verdigris.lysator.liu.se) (Ping timeout: 258 seconds)
05:33:53 hugo joins (znc@verdigris.lysator.liu.se)
06:02:59 takuan joins (~takuan@178-116-218-225.access.telenet.be)
06:07:32 zaquest joins (~notzaques@5.130.79.72)
06:18:31 × Inst quits (~Inst@120.244.192.250) (Ping timeout: 260 seconds)
06:30:11 sm joins (~sm@plaintextaccounting/sm)
06:30:17 emmanuelux joins (~emmanuelu@user/emmanuelux)
06:32:05 califax_ joins (~califax@user/califx)
06:32:41 × chexum quits (~quassel@gateway/tor-sasl/chexum) (Ping timeout: 252 seconds)
06:32:41 × califax quits (~califax@user/califx) (Ping timeout: 252 seconds)
06:33:18 chexum joins (~quassel@gateway/tor-sasl/chexum)
06:33:21 califax_ is now known as califax
06:40:49 akyv13 joins (~akyv13@157.40.97.94)
06:48:45 × eggplantade quits (~Eggplanta@2600:1700:38c5:d800:189c:98ad:f16d:aaa6) (Remote host closed the connection)
06:49:39 × emmanuelux quits (~emmanuelu@user/emmanuelux) (Quit: au revoir)
06:51:54 Inst joins (~Inst@120.244.192.250)
06:52:46 dtman34 joins (~dtman34@c-76-156-89-180.hsd1.mn.comcast.net)
06:54:40 azimut joins (~azimut@gateway/tor-sasl/azimut)
06:56:45 × bilegeek_ quits (~bilegeek@230.sub-174-228-97.myvzw.com) (Quit: Leaving)
07:04:13 × akyv13 quits (~akyv13@157.40.97.94) (Read error: Connection reset by peer)
07:12:02 acidjnk joins (~acidjnk@p200300d6e7072f17652bd3d039ad030c.dip0.t-ipconnect.de)
07:14:12 idgaen joins (~idgaen@2a01:e0a:498:fd50:fcc6:bb5d:489a:ce8c)
07:17:44 × sm quits (~sm@plaintextaccounting/sm) (Quit: sm)
07:19:50 eggplantade joins (~Eggplanta@2600:1700:38c5:d800:189c:98ad:f16d:aaa6)
07:24:39 gmg joins (~user@user/gehmehgeh)
07:41:58 <tomsmeding> EvanR: the term `Just 'A'` is an application of the function Just to the char 'A'. It evaluates to a data object ready to be case-analysed.
07:42:34 <tomsmeding> (if you Show that data object, you do get a string equal to "Just 'A'", but that is neither here nor there.)
07:45:52 sm joins (~sm@plaintextaccounting/sm)
07:48:28 <mauke> IIRC ocaml doesn't functionize constructors, so you always have to fully apply them syntactically
07:49:00 Jackneill joins (~Jackneill@20014C4E1E021C0053F19F32A19511C4.dsl.pool.telekom.hu)
07:50:41 × Vajb quits (~Vajb@2001:999:584:acfe:2adf:4620:2462:b0dd) (Ping timeout: 246 seconds)
07:55:06 × hugo quits (znc@verdigris.lysator.liu.se) (Ping timeout: 272 seconds)
07:55:16 × xff0x quits (~xff0x@2405:6580:b080:900:4eda:e939:15a9:23d7) (Ping timeout: 258 seconds)
07:55:55 cpressey joins (~cpressey@host-2-102-87-108.as13285.net)
07:56:33 × kantokuen quits (~kantokuen@user/kantokuen) (Ping timeout: 255 seconds)
07:57:16 xff0x joins (~xff0x@ai101218.d.east.v6connect.net)
07:59:03 nate2 joins (~nate@c-98-45-169-16.hsd1.ca.comcast.net)
08:01:06 Kuttenbrunzer joins (~Kuttenbru@2a02:8108:8b80:1d48::ac91)
08:03:43 × califax quits (~califax@user/califx) (Remote host closed the connection)
08:04:02 califax joins (~califax@user/califx)
08:04:04 × nate2 quits (~nate@c-98-45-169-16.hsd1.ca.comcast.net) (Ping timeout: 255 seconds)
08:09:52 Tuplanolla joins (~Tuplanoll@91-159-68-236.elisa-laajakaista.fi)
08:10:46 fendor joins (~fendor@2a02:8388:1640:be00:aab:1226:f274:5021)
08:10:57 kantokuen joins (~kantokuen@user/kantokuen)
08:16:04 hugo joins (znc@verdigris.lysator.liu.se)
08:18:49 × econo_ quits (uid147250@id-147250.tinside.irccloud.com) (Quit: Connection closed for inactivity)
08:21:23 × cpressey quits (~cpressey@host-2-102-87-108.as13285.net) (Ping timeout: 245 seconds)
08:29:27 × idgaen quits (~idgaen@2a01:e0a:498:fd50:fcc6:bb5d:489a:ce8c) (Quit: WeeChat 4.0.5)
08:30:24 × rgw quits (~R@2605:a601:a0df:5600:2810:3d3e:92e6:48c8) (Quit: rgw)
08:30:51 × wootehfoot quits (~wootehfoo@user/wootehfoot) (Quit: Leaving)
08:34:29 × sm quits (~sm@plaintextaccounting/sm) (Quit: sm)
08:37:44 ludat joins (~ludat@2800:810:5ea:34e:1c56:e7eb:4664:3b36)
08:40:14 waleee joins (~waleee@2001:9b0:21c:e600:f2f3:f744:435d:137c)
08:41:45 sm joins (~sm@plaintextaccounting/sm)
08:46:11 Vajb joins (~Vajb@85-76-98-119-nat.elisa-mobile.fi)
08:48:46 × tzh quits (~tzh@c-71-193-181-0.hsd1.or.comcast.net) (Quit: zzz)
08:50:42 × ludat quits (~ludat@2800:810:5ea:34e:1c56:e7eb:4664:3b36) (Quit: Client closed)
08:50:51 × Xe quits (~cadey@perl/impostor/xe) (Ping timeout: 258 seconds)
08:51:09 cpressey joins (~cpressey@host-92-21-195-194.as13285.net)
08:53:10 Xe joins (~cadey@perl/impostor/xe)
08:53:25 finn_elija joins (~finn_elij@user/finn-elija/x-0085643)
08:53:25 × FinnElija quits (~finn_elij@user/finn-elija/x-0085643) (Killed (NickServ (Forcing logout FinnElija -> finn_elija)))
08:53:25 finn_elija is now known as FinnElija
08:55:58 × aforemny_ quits (~aforemny@2001:9e8:6ce4:3000:9219:c90e:a79a:8713) (Quit: ZNC 1.8.2 - https://znc.in)
08:56:31 × kantokuen quits (~kantokuen@user/kantokuen) (Ping timeout: 260 seconds)
08:57:05 aforemny joins (~aforemny@i59F516EA.versanet.de)
08:57:29 × Vajb quits (~Vajb@85-76-98-119-nat.elisa-mobile.fi) (Ping timeout: 255 seconds)
08:57:45 × waleee quits (~waleee@2001:9b0:21c:e600:f2f3:f744:435d:137c) (Ping timeout: 258 seconds)
08:59:11 Vajb joins (~Vajb@2001:999:609:2930:4ab0:3772:15e9:4ad9)
09:03:05 kantokuen joins (~kantokuen@user/kantokuen)
09:04:04 billchenchina joins (~billchenc@2a0d:2580:ff0c:1:e3c9:c52b:a429:5bfe)
09:05:11 × NinjaTrappeur quits (~ninja@about/aquilenet/vodoo/NinjaTrappeur) (Quit: WeeChat 4.0.5)
09:06:01 × sm quits (~sm@plaintextaccounting/sm) (Quit: sm)
09:08:26 NinjaTrappeur joins (~ninja@about/aquilenet/vodoo/NinjaTrappeur)
09:10:04 _ht joins (~Thunderbi@28-52-174-82.ftth.glasoperator.nl)
09:13:14 × dtman34 quits (~dtman34@c-76-156-89-180.hsd1.mn.comcast.net) (Ping timeout: 255 seconds)
09:20:54 <Inst> Does anyone use a lot of fourmolu? Do people custom-config fourmolu to support $ at the end of a line instead of at the start?
09:21:00 dtman34 joins (~dtman34@c-76-156-89-180.hsd1.mn.comcast.net)
09:24:55 <[exa]> wow there's an option to do that?
09:27:44 <haskellbridge> <I​nst> Is there?
09:28:05 <haskellbridge> <I​nst> I'm sort of freaked out because I ended up submitting 5 PRs and closing them within 10 minutes because it wouldn't pass Fourmolu CI
09:29:29 <[exa]> can you use their fourmolu config to just format it locally?
09:29:32 <[exa]> (if not I'd complain)
09:31:00 × Kuttenbrunzer quits (~Kuttenbru@2a02:8108:8b80:1d48::ac91) (Remote host closed the connection)
09:33:36 biberu joins (~biberu@user/biberu)
09:34:01 <haskellbridge> <I​nst> i'm guessing what's going on is that they have an exception set up on CI
09:34:12 <haskellbridge> <I​nst> that certain files that haven't been moved to fourmolu are trying to respect an older format
09:35:53 <[exa]> is it public somewhere?
09:43:46 <haskellbridge> <I​nst> exa, do you really want to help me? I'm just comment appending to Cabal right now
09:44:53 KBar parts (kbar@is.drunk.and.ready-to.party) ()
09:45:51 <Inst> notice verbosity
09:45:52 <Inst> $ pkg_descr_file
09:45:52 <Inst> ++ " has been changed. "
09:45:52 <Inst> ++ "Re-configuring with most recently used options. "
09:45:52 <Inst> ++ "If this fails, please run configure manually.\n"
09:46:02 <Inst> this is what fourmolu is supposed to do, right?
09:46:51 <mauke> I guess people don't like string gaps
09:47:24 <Inst> i'll wait for their team, etc
09:48:16 <Inst> this is embarrassing, everyone's probably complaining about spam now
09:53:52 × alphacentauri quits (alphacenta@gateway/vpn/protonvpn/alphacentauri) (Quit: WeeChat 4.0.5)
09:54:21 × ddellacosta quits (~ddellacos@ool-44c738de.dyn.optonline.net) (Ping timeout: 260 seconds)
09:56:00 ddellacosta joins (~ddellacos@ool-44c738de.dyn.optonline.net)
09:56:04 <Inst> actual question
09:56:05 × Vajb quits (~Vajb@2001:999:609:2930:4ab0:3772:15e9:4ad9) (Ping timeout: 240 seconds)
09:56:21 <Inst> does anyone use VLC + fourmolu toolchain?
09:57:03 <Inst> erm, VSC
09:57:21 alphacentauri joins (alphacenta@gateway/vpn/protonvpn/alphacentauri)
09:57:22 <Inst> VSC + haskell extension + fourmolu? is it possible my problem is with VSC trying to load fourmolu and failing?
09:57:30 <Inst> then defaulting to another formatter?
09:59:19 × Sgeo_ quits (~Sgeo@user/sgeo) (Read error: Connection reset by peer)
10:03:43 superbil_ joins (~superbil@1-34-176-171.hinet-ip.hinet.net)
10:06:48 × superbil quits (~superbil@1-34-176-171.hinet-ip.hinet.net) (Ping timeout: 252 seconds)
10:09:21 <[exa]> Inst: yeah I was trying to find what is actually wrong
10:09:46 <[exa]> anyway yeah VSC tends to do wild things by default
10:10:55 <Inst> does fourmolu not actually look like that? And fourmolu is sold as "ormolu, but less opinionated"
10:11:43 <[exa]> Inst: usually when sending code to ci-formatchecked repositories I just run the formatter manually in the terminal before committing anything; trusting any IDE-originating formatters isn't usually a good bet
10:14:06 × alphacentauri quits (alphacenta@gateway/vpn/protonvpn/alphacentauri) (Quit: WeeChat 4.0.5)
10:14:10 <[exa]> Inst: btw might be worth checking your local fourmolu version against this here: https://github.com/haskell/cabal/actions/runs/6523316413/job/17713831514?pr=9340#step:3:10
10:15:09 × cpressey quits (~cpressey@host-92-21-195-194.as13285.net) (Quit: Client closed)
10:16:18 <haskellbridge> <I​nst> not quite sure what's going on, tbh
10:16:28 <haskellbridge> <I​nst> do you know how to point fourmolu at a fourmolu.yaml?
10:21:03 <[exa]> good question, failed to google that
10:21:13 <[exa]> --help doesn't say anything usable?
10:23:21 hiyori joins (~hiyori@user/hiyori)
10:27:39 <Inst> tryng on a tooling channel right now
10:32:40 alphacentauri joins (alphacenta@gateway/vpn/protonvpn/alphacentauri)
10:42:47 × hugo quits (znc@verdigris.lysator.liu.se) (Ping timeout: 258 seconds)
10:58:13 hugo joins (znc@verdigris.lysator.liu.se)
10:58:46 × Unicorn_Princess quits (~Unicorn_P@user/Unicorn-Princess/x-3540542) (Remote host closed the connection)
11:01:13 × mrmr155 quits (~mrmr@user/mrmr) (Quit: Bye, See ya later!)
11:01:36 × euleritian quits (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) (Read error: Connection reset by peer)
11:02:09 euleritian joins (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de)
11:03:42 Guest80 joins (~Guest80@149.167.36.31)
11:04:38 × Guest80 quits (~Guest80@149.167.36.31) (Client Quit)
11:05:10 mrmr155 joins (~mrmr@user/mrmr)
11:05:13 <sshine> curious, does fourmolu and ormolu only differ on one constant? :-D
11:05:55 misterfish joins (~misterfis@84-53-85-146.bbserv.nl)
11:08:42 kimiamania46 joins (~b4f4a2ab@user/kimiamania)
11:10:30 × kimiamania4 quits (~b4f4a2ab@user/kimiamania) (Ping timeout: 255 seconds)
11:10:31 kimiamania46 is now known as kimiamania4
11:12:02 × Inst quits (~Inst@120.244.192.250) (Ping timeout: 255 seconds)
11:13:02 <probie> Ormolu is opinionated, and wants to be like `go fmt`, `rustfmt` or Python's `black`. Fourmolu is based on Ormolu, but allows the user to specify a style
11:14:52 <probie> They're similar in that they're both code formatters, but ideologically, they're very far apart
11:15:56 sm joins (~sm@plaintextaccounting/sm)
11:17:07 × misterfish quits (~misterfis@84-53-85-146.bbserv.nl) (Ping timeout: 264 seconds)
11:22:42 Inst joins (~Inst@120.244.192.250)
11:23:38 <Inst> Trying to figure out right now
11:23:44 <Inst> what the actual formatter is
11:24:04 <Inst> the problem seems to be that fourmolu is unhooked, cabal install fourmolu provides a binary that outputs the correct output
11:26:26 <[exa]> ah nice
11:26:45 <[exa]> btw might be good to squash the commits so that you don't have extraneous edits on the (un)formatted fields
11:30:01 <haskellbridge> <I​nst> Not quite sure how to do that :(
11:31:01 <[exa]> usually `git rebase -i <branch_starting_point>`... I usually do `git rebase -i origin/main` or so
11:31:56 <[exa]> SO is surprisingly quite right on this one https://stackoverflow.com/questions/5189560/how-do-i-squash-my-last-n-commits-together#5201642
11:33:11 <Inst> Thank you :)
11:33:29 <[exa]> TIl the `git reset --soft` way. actually good idea.
11:34:10 rawles joins (~rawles@user/rawles)
11:37:37 privacy joins (~privacy@user/privacy)
11:39:26 Pickchea joins (~private@user/pickchea)
11:50:07 × hugo quits (znc@verdigris.lysator.liu.se) (Ping timeout: 264 seconds)
11:56:22 hugo joins (znc@verdigris.lysator.liu.se)
11:56:56 akyv13 joins (~akyv13@2409:4060:2e12:cf5d:1b2:b5f1:edb8:22a6)
11:57:10 × alphacentauri quits (alphacenta@gateway/vpn/protonvpn/alphacentauri) (Ping timeout: 255 seconds)
12:00:33 nate2 joins (~nate@c-98-45-169-16.hsd1.ca.comcast.net)
12:02:21 × akyv13 quits (~akyv13@2409:4060:2e12:cf5d:1b2:b5f1:edb8:22a6) (Read error: Connection reset by peer)
12:06:02 × nate2 quits (~nate@c-98-45-169-16.hsd1.ca.comcast.net) (Ping timeout: 255 seconds)
12:06:21 × Square quits (~Square@user/square) (Ping timeout: 258 seconds)
12:07:09 × patrl quits (~patrl@user/patrl) (Remote host closed the connection)
12:09:36 patrl joins (~patrl@user/patrl)
12:09:41 × hugo quits (znc@verdigris.lysator.liu.se) (Ping timeout: 246 seconds)
12:13:14 × arahael quits (~arahael@119-18-2-212.771202.syd.nbn.aussiebb.net) (Ping timeout: 255 seconds)
12:13:22 × patrl quits (~patrl@user/patrl) (Remote host closed the connection)
12:15:48 patrl joins (~patrl@user/patrl)
12:15:49 × patrl quits (~patrl@user/patrl) (Read error: Connection reset by peer)
12:18:17 patrl joins (~patrl@user/patrl)
12:19:39 × aforemny quits (~aforemny@i59F516EA.versanet.de) (Quit: ZNC 1.8.2 - https://znc.in)
12:21:22 mc47 joins (~mc47@xmonad/TheMC47)
12:21:35 aforemny joins (~aforemny@2001:9e8:6ce4:3000:710b:6622:3257:ead)
12:23:46 × patrl quits (~patrl@user/patrl) (Remote host closed the connection)
12:26:14 patrl joins (~patrl@user/patrl)
12:27:49 × marienz quits (~marienz@libera/staff/marienz) (Ping timeout: 622 seconds)
12:28:06 <haskellbridge> <t​ewuzij> Maybe
12:28:39 Square joins (~Square@user/square)
12:30:09 thyriaen joins (~thyriaen@2a01:aea0:dd4:7157:6245:cbff:fe9f:48b1)
12:35:42 Lycurgus joins (~juan@user/Lycurgus)
12:36:15 mmhat joins (~mmh@p200300f1c73a9525ee086bfffe095315.dip0.t-ipconnect.de)
12:36:42 × mmhat quits (~mmh@p200300f1c73a9525ee086bfffe095315.dip0.t-ipconnect.de) (Client Quit)
12:37:23 × Lycurgus quits (~juan@user/Lycurgus) (Client Quit)
12:38:14 hugo joins (znc@verdigris.lysator.liu.se)
12:41:35 × Inst quits (~Inst@120.244.192.250) (Ping timeout: 255 seconds)
12:41:45 × qqq quits (~qqq@92.43.167.61) (Quit: leaving)
12:42:00 Inst joins (~Inst@120.244.192.250)
12:50:56 × Square quits (~Square@user/square) (Ping timeout: 255 seconds)
13:00:50 qqq joins (~qqq@92.43.167.61)
13:04:37 × sm quits (~sm@plaintextaccounting/sm) (Quit: sm)
13:06:30 × ames quits (~amelia@offtopia/offtopian/amelia) (Quit: Bye!)
13:07:31 <cheater> hello
13:08:26 alphacentauri joins (alphacenta@gateway/vpn/protonvpn/alphacentauri)
13:08:50 <cheater> i would like to create a simple desktop application gui system. so stuff like layout, contents, etc. i'd like to have various backends so it can spit out javascript, java, or c++ depending on need. what's the best way to do this?
13:10:35 × yuuta quits (~YuutaW@mail.yuuta.moe) (Ping timeout: 240 seconds)
13:11:58 YuutaW joins (~YuutaW@mail.yuuta.moe)
13:12:00 lisbeths joins (uid135845@id-135845.lymington.irccloud.com)
13:15:29 [itchyjunk] joins (~itchyjunk@user/itchyjunk/x-7353470)
13:23:26 × haskellbridge quits (~haskellbr@069-135-003-034.biz.spectrum.com) (Ping timeout: 255 seconds)
13:23:56 × rawles quits (~rawles@user/rawles) (Quit: Textual IRC Client: www.textualapp.com)
13:29:31 ames joins (~amelia@offtopia/offtopian/amelia)
13:30:42 Unicorn_Princess joins (~Unicorn_P@user/Unicorn-Princess/x-3540542)
13:35:28 <duncan> cheater: https://wiki.haskell.org/Applications_and_libraries/GUI_libraries
13:35:51 <cheater> duncan: that's not what i'm trying to do.
13:36:19 <duncan> you want to build the UI framework?
13:36:23 <cheater> i want to create a generic DSL that is agnostic of any specific gui library.
13:37:29 <duncan> GTK, Xorg, TCLtk, QT all have wildlydifferent paradigms, so it's unlikely to produce the result which you want.
13:37:52 <cheater> that's ok
13:37:58 <cheater> i'll figure it out
13:38:07 × euleritian quits (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) (Ping timeout: 264 seconds)
13:38:15 × Pickchea quits (~private@user/pickchea) (Ping timeout: 240 seconds)
13:38:16 <Inst> good luck, i wanted to do this, but skill issue :(
13:38:17 euleritian joins (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de)
13:38:24 <duncan> I wish I had your Dutch courage.
13:38:31 <cheater> uh
13:39:11 <cheater> here's what you think: i want to do an all-encompassing DSL that can create the most beautiful output in every backend, which is able to take advantage of every special-purpose functionality in each GUI library
13:39:38 <cheater> here's what i think: something to make some simple boxes and buttons. whatever is not possible in a backend just doesn't work / doesn't compile.
13:39:53 <cheater> few features, no fireworks.
13:42:04 fweht joins (uid404746@id-404746.lymington.irccloud.com)
13:42:57 × hugo quits (znc@verdigris.lysator.liu.se) (Ping timeout: 258 seconds)
13:44:37 <cheater> see where i'm coming from
13:45:02 <srk> cheater: for some inspiration, check out brick and monomer
13:45:13 <cheater> thanks
13:45:15 <cheater> why?
13:45:45 <srk> I wish there was a generic library for layouting that wasn't tied to TUI or specific toolkit
13:46:13 <srk> the UI model of both is pretty neat
13:46:15 <cheater> that's pretty much what i want to make
13:46:52 haskellbridge joins (~haskellbr@069-135-003-034.biz.spectrum.com)
13:46:52 ChanServ sets mode +v haskellbridge
13:47:04 <cheater> and in parallel to this, a simple dsl for logic and other stuff. like, you don't want to be running haskell code in the browser. it's better to spit out jabbascript.
13:47:51 hugo joins (znc@verdigris.lysator.liu.se)
13:47:54 <cheater> i'd like to be able to create something as complex as, say, uhh, a simple front-end to an email client.
13:48:00 <srk> you can compile to js or wasm
13:48:04 <cheater> yes.
13:48:10 <cheater> i can also grab onto hot embers
13:48:23 <cheater> bot will result in the same amount of pain
13:49:17 <cheater> but i'd rather not do either :)
13:51:35 <[exa]> cheater: +1 for jabbascript
13:53:43 × euleritian quits (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) (Ping timeout: 255 seconds)
13:55:50 euleritian joins (~euleritia@dynamic-046-114-202-145.46.114.pool.telefonica.de)
13:56:09 × John_Ivan__ quits (~John_Ivan@user/john-ivan/x-1515935) (Remote host closed the connection)
13:56:59 John_Ivan__ joins (~John_Ivan@user/john-ivan/x-1515935)
14:03:31 × euleritian quits (~euleritia@dynamic-046-114-202-145.46.114.pool.telefonica.de) (Read error: Connection reset by peer)
14:03:50 euleritian joins (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de)
14:07:02 × alphacentauri quits (alphacenta@gateway/vpn/protonvpn/alphacentauri) (Quit: WeeChat 4.0.5)
14:08:04 <Inst> whoa!
14:08:18 <Inst> guess what you can fmap on in accordance with the functor laws?
14:08:20 <Inst> https://haskell.foundation
14:09:17 alphacentauri joins (alphacenta@gateway/vpn/protonvpn/alphacentauri)
14:12:30 misterfish joins (~misterfis@87.215.131.102)
14:12:55 × jespada quits (~jespada@cpc121308-nmal25-2-0-cust15.19-2.cable.virginm.net) (Ping timeout: 264 seconds)
14:13:58 <haskellbridge> <I​nst> Yeah, Google just signed onto HF as a Functor. :D
14:14:43 <cheater> huh?
14:15:00 <[exa]> kinda wondering what the additional split in the λ in the website logo means there
14:15:25 <haskellbridge> <I​nst> It's probably to generate the F
14:16:01 <c_wraith> oh, that's an F. I kept reading it as \=
14:16:04 <[exa]> OH SOO.
14:16:10 <c_wraith> which.. isn't a thing that exists!
14:16:48 <[exa]> I read it like >,i=
14:17:09 <cheater> bruh
14:17:13 <cheater> programmers making logos >_>
14:17:27 <haskellbridge> <I​nst> This is the Google project I'm aware of, although it seems to be mostly Py these days
14:17:28 jespada joins (~jespada@148.252.141.173)
14:17:29 <haskellbridge> <I​nst> https://github.com/ganeti/ganeti
14:17:42 <cheater> what are you talking about inst
14:18:08 <haskellbridge> <I​nst> Well, I thought people would be happier that Google is donating a pittance to Haskell Foundation these days
14:22:19 <cheater> what's that about "fmap on" ?
14:22:49 <[exa]> like, people aren't generally happy about google touching things.
14:23:25 <cheater> what does any of this have to do with "<Inst> guess what you can fmap on in accordance with the functor laws?"
14:23:27 <Inst> i.e, candy-colored version of Embrace Extend Extinguish?
14:23:34 <Inst> Oh, functor level of donor
14:23:49 <[exa]> cheater: like we can fmap through google now.
14:23:56 <cheater> that makes no fucking sense
14:24:05 <[exa]> no.
14:24:07 <cheater> "functor level of donor"?
14:24:12 <[exa]> :]
14:24:25 <cheater> oh, is that like a funny name for the donation levels like in patreon?
14:24:26 <[exa]> c'mon it's supposed to be programmer-level funny
14:24:33 nate2 joins (~nate@c-98-45-169-16.hsd1.ca.comcast.net)
14:24:36 <cheater> it's funny if it makes sense
14:24:55 <geekosaur> we do the same thing with xmonad donor levels
14:24:59 <cheater> if you're leaving out massive amounts of context, then it doesn't make sense, and it's not funny
14:25:03 <geekosaur> not sure who started it furst
14:25:08 <geekosaur> *first
14:25:18 <cheater> makes sense geekosaur
14:29:39 wroathe joins (~wroathe@207-153-38-140.fttp.usinternet.com)
14:29:39 × wroathe quits (~wroathe@207-153-38-140.fttp.usinternet.com) (Changing host)
14:29:39 wroathe joins (~wroathe@user/wroathe)
14:29:56 × nate2 quits (~nate@c-98-45-169-16.hsd1.ca.comcast.net) (Ping timeout: 255 seconds)
14:30:00 <cheater> i know the ganeti guy
14:30:04 <cheater> wow, he's been working on it for ages
14:30:10 × Alleria quits (~JohnGalt@user/alleria) (Ping timeout: 255 seconds)
14:31:00 Pickchea joins (~private@user/pickchea)
14:31:15 × ames quits (~amelia@offtopia/offtopian/amelia) (Quit: Bye!)
14:33:14 ames joins (~amelia@offtopia/offtopian/amelia)
14:33:51 Alleria joins (~JohnGalt@user/alleria)
14:37:13 × alphacentauri quits (alphacenta@gateway/vpn/protonvpn/alphacentauri) (Quit: WeeChat 4.0.5)
14:37:13 × stites quits (~stites@130.44.147.204) (Read error: Connection reset by peer)
14:38:05 stites joins (~stites@130.44.147.204)
14:39:36 alphacentauri joins (alphacenta@gateway/vpn/protonvpn/alphacentauri)
14:40:13 cpressey joins (~cpressey@host-92-21-195-194.as13285.net)
14:48:00 todi joins (~todi@p4fd1a3e6.dip0.t-ipconnect.de)
14:48:05 sm joins (~sm@plaintextaccounting/sm)
14:49:13 × stites quits (~stites@130.44.147.204) (Ping timeout: 255 seconds)
14:49:51 stites joins (~stites@2607:fb90:ade3:cc85:9fb2:d897:5057:9250)
14:52:26 × euleritian quits (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) (Ping timeout: 260 seconds)
14:52:54 euleritian joins (~euleritia@dynamic-046-114-202-145.46.114.pool.telefonica.de)
14:53:07 × qqq quits (~qqq@92.43.167.61) (Remote host closed the connection)
14:54:53 × jespada quits (~jespada@148.252.141.173) (Read error: Connection reset by peer)
14:55:29 jespada joins (~jespada@148.252.141.173)
14:56:44 × Alleria quits (~JohnGalt@user/alleria) (Read error: Connection reset by peer)
14:59:34 × son0p quits (~ff@181.136.122.143) (Quit: Bye)
14:59:38 Alleria joins (~JohnGalt@user/alleria)
15:03:14 × wroathe quits (~wroathe@user/wroathe) (Ping timeout: 255 seconds)
15:04:35 × Alleria quits (~JohnGalt@user/alleria) (Ping timeout: 240 seconds)
15:09:21 Alleria joins (~JohnGalt@user/alleria)
15:11:33 × euleritian quits (~euleritia@dynamic-046-114-202-145.46.114.pool.telefonica.de) (Read error: Connection reset by peer)
15:11:51 euleritian joins (~euleritia@77.22.252.56)
15:15:36 son0p joins (~ff@181.136.122.143)
15:16:23 × euleritian quits (~euleritia@77.22.252.56) (Ping timeout: 255 seconds)
15:16:49 euleritian joins (~euleritia@dynamic-046-114-202-145.46.114.pool.telefonica.de)
15:19:01 × jespada quits (~jespada@148.252.141.173) (Read error: Connection reset by peer)
15:19:37 × euleritian quits (~euleritia@dynamic-046-114-202-145.46.114.pool.telefonica.de) (Read error: Connection reset by peer)
15:19:55 euleritian joins (~euleritia@77.22.252.56)
15:24:26 × euleritian quits (~euleritia@77.22.252.56) (Ping timeout: 260 seconds)
15:25:15 euleritian joins (~euleritia@dynamic-046-114-202-145.46.114.pool.telefonica.de)
15:25:34 jespada joins (~jespada@cpc121308-nmal25-2-0-cust15.19-2.cable.virginm.net)
15:26:27 × Alleria quits (~JohnGalt@user/alleria) (Ping timeout: 258 seconds)
15:30:20 × vglfr quits (~vglfr@88.155.159.184) (Ping timeout: 255 seconds)
15:31:19 Alleria joins (~JohnGalt@user/alleria)
15:31:40 vglfr joins (~vglfr@88.155.159.184)
15:32:01 × jespada quits (~jespada@cpc121308-nmal25-2-0-cust15.19-2.cable.virginm.net) (Ping timeout: 260 seconds)
15:33:52 × billchenchina quits (~billchenc@2a0d:2580:ff0c:1:e3c9:c52b:a429:5bfe) (Remote host closed the connection)
15:34:07 jespada joins (~jespada@cpc121308-nmal25-2-0-cust15.19-2.cable.virginm.net)
15:34:11 billchenchina joins (~billchenc@2a0d:2580:ff0c:1:e3c9:c52b:a429:5bfe)
15:34:26 econo_ joins (uid147250@id-147250.tinside.irccloud.com)
15:40:35 × Alleria quits (~JohnGalt@user/alleria) (Read error: Connection reset by peer)
15:45:51 Alleria joins (~JohnGalt@user/alleria)
16:02:33 RSCASTILHO joins (~RSCASTILH@187.40.125.21)
16:03:02 finsternis joins (~X@23.226.237.192)
16:13:34 machinedgod joins (~machinedg@d198-53-218-113.abhsia.telus.net)
16:22:03 mango joins (~finn@2001:861:5863:3d50:d9fa:54c2:f74c:ebba)
16:23:40 × Pickchea quits (~private@user/pickchea) (Quit: Leaving)
16:25:30 × machinedgod quits (~machinedg@d198-53-218-113.abhsia.telus.net) (Ping timeout: 255 seconds)
16:36:03 × euleritian quits (~euleritia@dynamic-046-114-202-145.46.114.pool.telefonica.de) (Read error: Connection reset by peer)
16:36:20 euleritian joins (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de)
16:45:04 michalz joins (~michalz@185.246.207.221)
16:46:11 × hugo quits (znc@verdigris.lysator.liu.se) (Ping timeout: 258 seconds)
16:48:46 × Unicorn_Princess quits (~Unicorn_P@user/Unicorn-Princess/x-3540542) (Remote host closed the connection)
16:58:42 × krei-se quits (~krei-se@p50874770.dip0.t-ipconnect.de) (Quit: ZNC 1.8.2 - https://znc.in)
16:58:42 × euleritian quits (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) (Read error: Connection reset by peer)
16:59:23 euleritian joins (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de)
17:00:14 <monochrom> I propose the highest donor level to be named "pointfree level". And the 2nd highest, "pointed level" haha.
17:00:20 hugo joins (znc@verdigris.lysator.liu.se)
17:01:36 × lisbeths quits (uid135845@id-135845.lymington.irccloud.com) (Quit: Connection closed for inactivity)
17:02:16 × stites quits (~stites@2607:fb90:ade3:cc85:9fb2:d897:5057:9250) (Read error: Connection reset by peer)
17:02:18 <monochrom> ("Pointed" comes from the hypothetical "class Pointed f where pure :: a -> f a" if we were to separate it out from Applicative.)
17:02:22 krei-se joins (~krei-se@p50874770.dip0.t-ipconnect.de)
17:02:36 stites joins (~stites@130.44.147.204)
17:10:31 <ncf> pointed types are fun too (but i guess there's less point in having a typeclass for them)
17:11:11 <geekosaur> edwardk pointed out (no pun intended) the problems with Pointed at one point
17:11:46 × eggplantade quits (~Eggplanta@2600:1700:38c5:d800:189c:98ad:f16d:aaa6) (Remote host closed the connection)
17:11:51 <geekosaur> specifically since there's no way to tie them to Applicative or Monad, it would be possible to declare a lawful Pointed and use it to make a non-lawful Applicative
17:12:02 eggplantade joins (~Eggplanta@2600:1700:38c5:d800:189c:98ad:f16d:aaa6)
17:12:21 <ncf> what's a lawful Pointed?
17:12:31 <geekosaur> that's the problem
17:13:32 <ncf> i don't follow
17:14:30 <geekosaur> Pointed has no laws, if you can define one then it's valid. but iirc at most one Pointed makes for a legal Applicative
17:15:24 <ncf> i expect that to be true by a similar argument to "being a monoid is a property of a semigroup", but why is that a problem?
17:17:04 tzh joins (~tzh@c-71-193-181-0.hsd1.or.comcast.net)
17:18:23 <geekosaur> mm, I think I need edwardk here to explain it, I'm not an expert on these things. I think the point was that there is no way for the Applicative to prove that the Pointed you declared is valid for it, whereas for Monoid you always know the Semigroup is valid, you're just adding an identity to it
17:19:05 × pavonia quits (~user@user/siracusa) (Quit: Bye!)
17:19:48 × euleritian quits (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) (Ping timeout: 240 seconds)
17:20:26 <geekosaur> that is, it's always on the Monoid to "know" that the identity it's adding is an identity, but an Applicative can't likewise "know" that its "apply" (<*>) is valid for the "pure". Something like that. (and yes I know we can't provide proofs for our typeclasses anyway)
17:20:39 <geekosaur> this may be more relevant in the context of lens or something
17:31:06 <monochrom> Basically all laws for pure are stated with <*>.
17:32:20 <monochrom> The *-kind analogy is imagine if people wrote "class Default a where mempty :: a; class Default a => Monoid a where mappend :: a -> a -> a". >:)
17:35:46 × Alleria quits (~JohnGalt@user/alleria) (Quit: Textual IRC Client: www.textualapp.com)
17:39:12 × fendor quits (~fendor@2a02:8388:1640:be00:aab:1226:f274:5021) (Remote host closed the connection)
17:47:10 wroathe joins (~wroathe@207-153-38-140.fttp.usinternet.com)
17:47:10 × wroathe quits (~wroathe@207-153-38-140.fttp.usinternet.com) (Changing host)
17:47:10 wroathe joins (~wroathe@user/wroathe)
17:48:09 <tomsmeding> I don't see any inherent problems with that imaginary Default superclass of Monoid
17:48:15 × smalltalkman quits (uid545680@id-545680.hampstead.irccloud.com) (Quit: Connection closed for inactivity)
17:48:43 <tomsmeding> it's just that the choice of Default instance determines, to a large extent, the Monoid that can be built on top of it -- and sometimes (often?) there is even no such Monoid instance
17:49:03 <tomsmeding> but it's the same with Semigroup => Monoid, the ratios of occurrence are just a bit different
17:49:13 <tomsmeding> (less different valid Semigroups per valid corresponding Monoid)
17:50:14 <tomsmeding> this thing about "ratios of occurrence" (which is honestly BS because what's Infinity/Infinity) is perhaps just a way to say "Monoid adds few laws over Semigroup, but Monoid adds many laws over Default"
17:50:27 <tomsmeding> because Default has no laws to speak of, but that's somewhat missing the point
17:51:13 <tomsmeding> and no, I don't _practically_ think it's a good idea at all to make Default a superclass of Monoid :p
17:52:01 <tomsmeding> even though I expect many types that are both Monoid and Default to satisfy 'default == mempty'
17:53:21 <EvanR> to answer what infinity over infinity is, see graphical linear algebra blog
17:54:09 rawles joins (~rawles@user/rawles)
18:07:32 × stites quits (~stites@130.44.147.204) (Remote host closed the connection)
18:10:51 × alphacentauri quits (alphacenta@gateway/vpn/protonvpn/alphacentauri) (Quit: WeeChat 4.0.5)
18:11:22 waleee joins (~waleee@2001:9b0:21c:e600:f2f3:f744:435d:137c)
18:13:22 × ystael quits (~ystael@user/ystael) (Ping timeout: 255 seconds)
18:13:35 × hugo quits (znc@verdigris.lysator.liu.se) (Ping timeout: 258 seconds)
18:19:03 alphacentauri joins (alphacenta@gateway/vpn/protonvpn/alphacentauri)
18:19:27 <c_wraith> tomsmeding: I think of it from a different perspective. what useful code can you write that abstracts over an instance of the class? I can write a good number of things that use semigroup. I'm not sure I can write anything interesting that abstracts over Default instances
18:20:29 × Inst quits (~Inst@120.244.192.250) (Ping timeout: 258 seconds)
18:20:52 <c_wraith> ok, I can see a few things interesting resulting from Default, like Default a => Maybe a -> a
18:21:07 <c_wraith> so it's not a complete wasteland.
18:23:24 × mango quits (~finn@2001:861:5863:3d50:d9fa:54c2:f74c:ebba) (Ping timeout: 245 seconds)
18:23:40 idgaen joins (~idgaen@2a01:e0a:498:fd50:fcc6:bb5d:489a:ce8c)
18:24:10 × dcoutts quits (~duncan@cpc69402-oxfd27-2-0-cust903.4-3.cable.virginm.net) (Ping timeout: 255 seconds)
18:26:02 <davean> c_wraith: Just a lone tree in a desert, I expect many accidents.
18:26:20 nate2 joins (~nate@c-98-45-169-16.hsd1.ca.comcast.net)
18:26:51 <c_wraith> it's only one tree. how do so many people manage to crash into it?
18:27:45 <geekosaur> Default is built on sand. defaults are contextual, not a property of a type
18:28:29 × sm quits (~sm@plaintextaccounting/sm) (Quit: sm)
18:30:50 × nate2 quits (~nate@c-98-45-169-16.hsd1.ca.comcast.net) (Ping timeout: 246 seconds)
18:32:21 <ncf> few typeclasses represent properties
18:33:02 <monochrom> "What have I started?!" >:)
18:33:03 <ncf> it's kind of a dialectical thing anyway
18:34:04 <geekosaur> you have not answered "defaults are contextual"
18:34:52 hugo joins (znc@verdigris.lysator.liu.se)
18:34:59 <davean> geekosaur: I mean I tihnk many defaults are contextual, I think they have a more real nature for some types.
18:36:13 <davean> I think the name leans away from that generally.
18:36:19 × ddellacosta quits (~ddellacos@ool-44c738de.dyn.optonline.net) (Ping timeout: 245 seconds)
18:39:27 <tomsmeding> c_wraith: right, good point
18:40:00 <tomsmeding> which is I guess also a complaint against Pointed, but that's quite different from what geekosaur was saying that ekmett apparently said
18:49:30 rgw joins (~R@2605:a601:a0df:5600:a4a0:a66c:3431:6e78)
18:53:48 × waleee quits (~waleee@2001:9b0:21c:e600:f2f3:f744:435d:137c) (Ping timeout: 240 seconds)
18:54:17 waleee joins (~waleee@h-176-10-137-138.NA.cust.bahnhof.se)
18:54:44 Inst joins (~Inst@120.244.192.250)
18:57:48 × Inst quits (~Inst@120.244.192.250) (Read error: Connection reset by peer)
18:58:01 Sgeo joins (~Sgeo@user/sgeo)
18:59:10 × wroathe quits (~wroathe@user/wroathe) (Quit: leaving)
18:59:26 Vajb joins (~Vajb@85-76-115-250-nat.elisa-mobile.fi)
19:01:25 × Vajb quits (~Vajb@85-76-115-250-nat.elisa-mobile.fi) (Read error: Connection reset by peer)
19:03:18 <dolio> I don't really get the argument, either. If you want to require laws about superficially unrelated type classes, you just do it. It's all social convention anyway.
19:06:49 <dolio> I think Default is still probably a poor type class due to some of the other reasons people have given.
19:10:08 <dolio> If you're thinking about pointed types, many don't have a 'notable' choice of point that is worth distinguishing from others as 'the' point for that type.
19:10:11 <davean> dolio: which argument?
19:11:20 <dolio> 'Separate class X is bad because it doesn't satisfy laws unless combined with class Y.'
19:11:46 <dolio> Or, you can't talk about the laws without Y.
19:12:39 <Alex_test> 2377
19:12:39 <Alex_test> +5
19:12:39 <Alex_test> 56%
19:12:39 <Alex_test> 1:07
19:12:39 <Alex_test> ������� ������ (#1904720)
19:12:39 × yahb2 quits (~yahb2@2a01:4f8:c0c:5c7b::2) (Remote host closed the connection)
19:12:39 <Alex_test> 2082
19:12:40 <Alex_test> ������� �����
19:12:40 <Alex_test> 0:26
19:12:56 <davean> Hum, thats a bit different than the arguments I've heard. I'm not sure you're fairly characturizing them, at least if you mean the referenced Pointed arguments.
19:13:01 yahb2 joins (~yahb2@2a01:4f8:c0c:5c7b::2)
19:13:01 ChanServ sets mode +v yahb2
19:13:34 <tomsmeding> davean: https://ircbrowse.tomsmeding.com/day/lchaskell/2023/10/15?id=1107511#trid1107511
19:13:56 <tomsmeding> see also the context a few messages above that
19:14:27 <geekosaur> Alex_test, did that have a point?
19:14:38 <davean> tomsmeding: I mean yes I read that? Many reference the external, historical arguments about Pointed which I am also familiar with
19:14:41 tomsmeding suspects clipboard paste in the wrong window
19:15:02 <[exa]> geekosaur: I don't see any variables captured there :)
19:15:04 <davean> which I believe dolio is missrepresenting, at least from my perspective on them
19:15:17 <tomsmeding> ah, then ignore mme :)
19:15:19 <Alex_test> ����������
19:15:19 × yahb2 quits (~yahb2@2a01:4f8:c0c:5c7b::2) (Remote host closed the connection)
19:15:20 <tomsmeding> *me
19:15:25 <tomsmeding> @where ops
19:15:26 <lambdabot> byorgey Cale conal copumpkin dcoutts dibblego dolio edwardk geekosaur glguy jmcarthur johnw mniip monochrom quicksilver shachaf shapr ski
19:15:31 <Alex_test> 62.7%
19:15:35 ChanServ sets mode +o dolio
19:15:35 dolio sets mode +b Alex_test!*@*
19:15:41 yahb2 joins (~yahb2@2a01:4f8:c0c:5c7b::2)
19:15:41 ChanServ sets mode +v yahb2
19:15:47 <ncf> davean: if you can characterise them better then please do because that is also how i interpreted what geekosaur said above
19:15:49 <tomsmeding> thanks!
19:15:51 <geekosaur> they've done this before
19:15:55 zenstoic joins (uid461840@id-461840.hampstead.irccloud.com)
19:15:56 <tomsmeding> ah
19:16:08 ChanServ sets mode +o ghoulguy
19:16:08 ghoulguy sets mode +b *!*@178.34.151.245
19:16:13 dolio sets mode -o dolio
19:16:16 <geekosaur> also you might check what in that is clobbering yahb2
19:16:42 <tomsmeding> geekosaur: hm? What do you mean?
19:16:46 <davean> My feeling is that more of the Pointed argument comes down to all the laws taht are interesting reference the other classes that already include pointed's capabilities, and Pointed fails to unify any ideas, so it ends up adding nothing semanticly.
19:17:11 <geekosaur> thta's more or less how I understand it as well
19:17:12 <davean> Complexity for no gain is a loss
19:17:33 <tomsmeding> the context was "if we were to separate it out of Applicative"
19:17:36 <geekosaur> tomsmeding, looks to me like yahb2 falls out of channel when it gets the unicode?
19:17:52 <monochrom> Nooooooooo
19:17:57 <tomsmeding> hence I read what geekosaur wrote as "put 'pure' in Pointed, make Pointed a superclass of Applicative, and _remove_ 'pure' from Applicative"
19:18:04 <ncf> yeah that one makes sense i think
19:18:16 <davean> tomsmeding: right but to what gain?
19:18:18 <monochrom> The context was "if we were to make funny names for donor levels" >:)
19:18:24 <tomsmeding> geekosaur: _oh oops_
19:18:27 <dolio> I mean, I've definitely seen this argument before.
19:18:41 <davean> monochrom: I mean I already made funny names for donor levels :)
19:18:57 <davean> I had more names!
19:19:06 <ncf> lol, did Alex_test find an RCE in yahb or something
19:19:08 <davean> Thats just how many we found useful.
19:19:34 <tomsmeding> ncf: nah, "yahb2: Cannot decode byte '\xd0': Data.Text.Internal.Encoding: Invalid UTF-8 stream" and it exits
19:19:40 <davean> And no, it wasn't point free
19:19:43 <ncf> hah
19:19:53 <ncf> probably a good idea to use a lenient decoding there :p
19:19:56 <tomsmeding> yes
19:19:59 × FinnElija quits (~finn_elij@user/finn-elija/x-0085643) (Remote host closed the connection)
19:20:07 <dolio> Like, suppose you split Applicative into two classes: Pointed and Ap. People often say you "can't" impose the Applicative laws for types that have instances for both, so you can't factor them that way. But there's really no reason that you can't impose requirements like that.
19:20:32 <davean> I think I still have my list of donor level naming scheme options around here somewhere ...
19:20:35 FinnElija joins (~finn_elij@user/finn-elija/x-0085643)
19:20:51 <dolio> Now, factoring it that way might not be useful, but that's a separate question.
19:21:20 <dolio> The only concrete use I know of is supporting lens stuff, which is probably not worthwhile.
19:21:50 <geekosaur> re yahb2, this being ORC it should try to decode as utf8 and if it fails try iso8859-1
19:22:03 <geekosaur> *being IRC
19:22:12 <geekosaur> rather than lenient per-char
19:22:19 <davean> No, no, I like Obsolete Relay Chat
19:22:36 <ncf> ah yeah i guess you get AffineTraversal from Pointed and Traversal1 from Ap
19:22:57 <monochrom> Obsolete Reactionacy Chat >:)
19:23:33 <monochrom> or maybe Retrograde is better? :)
19:24:08 <tomsmeding> https://tomsmeding.com/abbrgen/orc/50
19:25:04 <tomsmeding> I'm afraid this is not yahb2 code https://github.com/barrucadu/irc-client/blob/b4490b126e69257d94df2f7750937c5319c4ff2e/Network/IRC/Client/Internal.hs#L173
19:25:14 <geekosaur> sad
19:25:28 <monochrom> outlandishly ruthless >:)
19:31:55 × thyriaen quits (~thyriaen@2a01:aea0:dd4:7157:6245:cbff:fe9f:48b1) (Remote host closed the connection)
19:39:11 × jrm quits (~jrm@user/jrm) (Quit: ciao)
19:40:36 jrm joins (~jrm@user/jrm)
19:42:07 × jrm quits (~jrm@user/jrm) (Client Quit)
19:43:03 × hgolden quits (~hgolden@2603-8000-9d00-3ed1-1ee4-1b7c-94a7-8fa7.res6.spectrum.com) (Remote host closed the connection)
19:43:15 <tomsmeding> but we shall not be discouraged https://git.tomsmeding.com/yahb2/commit/?id=5976161a7649cca7cd56d4335316179031a364ab
19:43:36 jrm joins (~jrm@user/jrm)
19:47:03 × takuan quits (~takuan@178-116-218-225.access.telenet.be) (Remote host closed the connection)
19:49:13 <int-e> what the fork
19:49:57 × yahb2 quits (~yahb2@2a01:4f8:c0c:5c7b::2) (Remote host closed the connection)
19:50:09 yahb2 joins (~yahb2@2a01:4f8:c0c:5c7b::2)
19:50:09 ChanServ sets mode +v yahb2
19:50:23 <tomsmeding> % 1
19:50:23 <yahb2> 1
19:50:32 <tomsmeding> now we just need some invalid utf8
19:51:04 <geekosaur> hm, sadly my client translates so if I copy and paste it'll be utf8
19:51:19 <tomsmeding> that is why I asked, I honestly have no clue how :p
19:51:24 <geekosaur> [15 19:15:19] <Alex_test> Ñïðàâèëèñü
19:53:43 <geekosaur> I have to disconnect and reconnect to switch charset, it seems
19:55:55 sabino joins (~sabino@user/sabino)
19:58:16 dcoutts joins (~duncan@212.187.244.86)
20:05:46 × dcoutts quits (~duncan@212.187.244.86) (Ping timeout: 252 seconds)
20:06:40 Inst joins (~Inst@120.244.192.250)
20:14:34 Guest33 joins (~Guest10@87-119-179-51.tll.elisa.ee)
20:16:12 × _ht quits (~Thunderbi@28-52-174-82.ftth.glasoperator.nl) (Quit: _ht)
20:16:31 × Guest33 quits (~Guest10@87-119-179-51.tll.elisa.ee) (Client Quit)
20:18:21 × alphacentauri quits (alphacenta@gateway/vpn/protonvpn/alphacentauri) (Quit: WeeChat 4.0.5)
20:24:52 × jrm quits (~jrm@user/jrm) (Quit: ciao)
20:27:25 jrm joins (~jrm@user/jrm)
20:29:09 × mc47 quits (~mc47@xmonad/TheMC47) (Remote host closed the connection)
20:30:19 alphacentauri joins (alphacenta@gateway/vpn/protonvpn/alphacentauri)
20:33:16 × Pozyomka quits (~pyon@user/pyon) (Quit: Pozyomka, my beloved: https://i.imgur.com/BMmVfTq.png)
20:35:43 <nullie> ü
20:36:14 <nullie>
20:46:08 × ghoulpine quits (xfnw@tilde.team) (Quit: Connection reset by purr)
20:46:28 × finsternis quits (~X@23.226.237.192) (Ping timeout: 252 seconds)
20:46:46 × RSCASTILHO quits (~RSCASTILH@187.40.125.21) ()
20:47:17 finsternis joins (~X@23.226.237.192)
20:50:15 × Jackneill quits (~Jackneill@20014C4E1E021C0053F19F32A19511C4.dsl.pool.telekom.hu) (Ping timeout: 240 seconds)
20:53:37 × hugo quits (znc@verdigris.lysator.liu.se) (Ping timeout: 252 seconds)
20:55:26 vulpine joins (xfnw@tilde.team)
20:57:44 vulpine is now known as ghoulpine
20:58:24 <tomsmeding> yahb2 survived! :)
20:58:45 <monochrom> \∩/
20:59:06 hugo joins (znc@verdigris.lysator.liu.se)
20:59:17 × idgaen quits (~idgaen@2a01:e0a:498:fd50:fcc6:bb5d:489a:ce8c) (Quit: WeeChat 4.0.5)
21:05:35 × michalz quits (~michalz@185.246.207.221) (Remote host closed the connection)
21:06:38 <tomsmeding> I cannot even check whether it was a proper test
21:07:13 <tomsmeding> my client logs as well as ircbrowse convert it to a unicode replacement character U+FFFD
21:10:24 <geekosaur> mine converted to ü
21:11:07 <tomsmeding> for me the first message is ü and the second message is the replacement character
21:11:23 <tomsmeding> ircbrowse does the same
21:12:01 <tomsmeding> geekosaur: if they're both ü for you, then I guess that means that the test did succeed
21:12:16 <tomsmeding> and my clients just do lenient UTF8 decoding without Latin1 fallback
21:12:36 × acidjnk quits (~acidjnk@p200300d6e7072f17652bd3d039ad030c.dip0.t-ipconnect.de) (Ping timeout: 258 seconds)
21:13:07 <geekosaur> yes, both are ü
21:13:14 <monochrom> I think the first line was 0xc3 0xbc, the 2nd line was 0xfc. (My log system stores uninterpreted bytes.)
21:13:30 <tomsmeding> yay!
21:13:49 × hugo quits (znc@verdigris.lysator.liu.se) (Ping timeout: 255 seconds)
21:14:25 <monochrom> Oh interesting, 0xc3 0xbc is UTF-8 for U+00FC.
21:14:36 dcoutts joins (~duncan@host86-146-194-46.range86-146.btcentralplus.com)
21:14:49 <tomsmeding> isn't kind of the point that Latin1 is just embedded in unicode in the first 256 codepoints?
21:14:51 privacy parts (~privacy@user/privacy) (Leaving)
21:14:55 <geekosaur> yes
21:14:59 <geekosaur> so that's expected
21:15:09 <tomsmeding> nullie: thanks :)
21:15:31 <geekosaur> my client converted before logging so I can't see what they were originally
21:17:41 tomsmeding is off to bed
21:18:45 <nullie> I had the same problem with my python bot
21:24:23 × cpressey quits (~cpressey@host-92-21-195-194.as13285.net) (Quit: Client closed)
21:27:54 <Inst> here's an interesting question
21:28:33 <Inst> https://paste.tomsmeding.com/Hceu0Hp4
21:29:27 <Inst> so, in this case, it is, imo, a bit ugly
21:29:37 <geekosaur> did you intend to ask in #hackage?
21:30:05 × eggplantade quits (~Eggplanta@2600:1700:38c5:d800:189c:98ad:f16d:aaa6) (Remote host closed the connection)
21:30:08 <Inst> oh no, i was more asking, how do you refactor away the 0 term?
21:30:50 <geekosaur> (confHook hooks epkg_descr flags') {…}
21:30:53 <Inst> I'm not planning to, I'm not planning to make any changes for a while
21:30:58 hugo joins (znc@verdigris.lysator.liu.se)
21:31:00 <Inst> no, but it's monadic code
21:31:02 <geekosaur> but naming it so it can be a record update is easier
21:31:25 <monochrom> Um I thought localbuildinfo0 was the refactoring?
21:31:25 <Inst> the above shouldn't work because you're trying to record update an IO action, which shouldn't support record updates
21:31:37 <geekosaur> oh. you lose, if it's a record update. you could use lens but I doubt that's admitted into the cabal codebase
21:32:00 <Inst> only thing I can imagine is <&> \u -> u {..}
21:32:08 <monochrom> localbuildinfo <- (\x -> x{pkg...}) <$> confHook hooks epkg_descr flags'
21:32:32 <geekosaur> well, I guess there's that
21:32:33 <Inst> tbh my antipathy for let is that it's sort of a lie, isn't it?
21:32:39 <geekosaur> no?
21:32:44 <geekosaur> it expands to… a let
21:32:49 <Inst> you're thinking it's strict, and the term will be evaluated to at least WHNF
21:33:05 <geekosaur> I'm certainly not
21:33:06 <Inst> but in reality, it's not a variable assignment, it's a thunk creation
21:33:06 <monochrom> Sometimes, giving subexpressions names is the refactoring.
21:33:12 <Inst> i guess you're used to it
21:33:30 <Inst> but it's deceptive because now laziness is factored into do notation
21:33:39 <geekosaur> I'm thinking it's giving an expression a name for convenience
21:33:48 <geekosaur> and nothing more
21:33:54 <monochrom> Huh everyone already understands that "let" means that.
21:33:55 <Inst> i don't mean you, btw
21:34:08 <Inst> just, meaning people in general, people coming in from imperative languages
21:34:28 <Inst> where is, at least, more honest, because it doesn't pretend to be a variable assignment
21:34:39 <geekosaur> so? do we always have to code in pseudo-javascript because a newcomer might see it?
21:34:59 <monochrom> No one is pretending.
21:35:15 <geekosaur> this got us fmap instead of map, it got us return instead of pure, it got us RecordDotSyntax
21:35:28 <geekosaur> it gets us Haskell as a worse JavaScript
21:35:48 <Inst> oh no, i'm not arguing for "real" variable assignment
21:36:04 mikoto-chan joins (~mikoto-ch@ip-212-239-236-59.dsl.scarlet.be)
21:36:06 <Inst> and imo fmap is still better than map
21:36:14 <Inst> map doesn't imply laws
21:36:45 <Inst> i'm just trying to explain why i dislike usage of let in do notation unless you can't avoid it
21:37:40 <monochrom> Now, once upon a time there were people who proposed, unsuccessfully (thank God), automatic detection of for example "getChar : getLine" being Applicative and auto-desugar to "liftA2 (:) getChar getLine" "because it looks more like mainstream syntax". Now that would be pretending.
21:39:25 <monochrom> Here in Haskell, we define what "class", "type", "let" mean for Haskell, and we don't care what other people think what they would mean in other languages. Well, at least I don't,.
21:39:48 <Inst> i guess it's more that i just ended up on the side of the fence that prefers where over let whenever possible
21:39:57 <Inst> and having to see it back in do notation, because where can't see bindings, is annoying
21:40:26 <monochrom> And no one is pretending OOP when Haskell uses the word "class" for whatever purpose Haskell actually uses it for.
21:40:51 <monochrom> Oh but in this example, "where" is impossible.
21:41:00 <Inst> yup, since it's referring to a bind result
21:41:26 <Inst> and apparently people poo-poohed my attempt to try to push monadic code with or without do with heavy point-free
21:41:32 <Inst> erm, with where
21:41:49 <davean> Inst: I mean, if you think of the desugaring then what you say doesn't make sense anymore
21:42:07 <davean> Inst: let can do the same things as where, you're just being confused about what the equivilent lets and wheres are
21:42:22 <Inst> where iirc desugars to a top-level let before any other code
21:42:32 eggplantade joins (~Eggplanta@2600:1700:38c5:d800:58fe:b85d:458c:ca9c)
21:43:48 <monochrom> No, I believe that what people poo-poohed was your syntax nitpicking.
21:45:16 <Inst> i did see an example of someone's code for their production codebase that was like, lolwut in the exact other direction, though
21:45:23 <Inst> so many monad chains
21:45:27 <mauke> (\u -> u{ ... } -> localbuildinfo) <- confHook hooks epkg_descr flags'
21:45:47 <monochrom> Haha mauke wins.
21:45:52 <Inst> that actually works?
21:45:59 <mauke> yes :-(
21:46:17 <Inst> viewpattern
21:46:27 <dolio> View patterns are that loose?
21:46:38 <mauke> loose?
21:46:59 <dolio> How is that parsing?
21:47:27 <mauke> (fn -> pat)
21:47:34 <mauke> where fn = lambda
21:47:45 <dolio> Okay, yeah.
21:48:00 <dolio> So, the view pattern -> is looser than the lambda ->.
21:48:15 <mauke> lambda body extends as far right as possible, but no further
21:48:22 <Inst> hmmm, does this work without the parens?
21:48:31 <mauke> -> can't be part of the expression
21:48:44 <mauke> Inst: it would surprise me
21:50:02 <Inst> monochrom: about syntax, the point is more, I think I have a reasonable idea of how to do pure style, I just don't have a similar idea of how to do it when you have the option of using do
21:50:28 <Inst> i was just shocked everyone just preferred making all intermediate results explicit, although when I think about it, it's actually not that bad
21:50:57 <Inst> same reason when someone told me "avoid lambdas when possible, even if it cuts down on concision", and it made sense
21:51:39 <monochrom> You will never get a consensus over whether one should write "x * (y + z)" or one should write "x * tmp where tmp = y + z".
21:52:43 <monochrom> Even for my small example, there are OOP extremists who genuinely swear that they believe in the latter. (And obviously, conversely, FP extremists who swear by the former.)
21:53:37 <monochrom> Oh and programming attracts religious extremists so reasonable people in the middle ground are actually the silent minorit
21:55:53 <Inst> what happened to Oxford style, anyways?
21:58:42 <EvanR> Inst, in let or where (which desugars to let), the order of definitions doesn't matter and are also recursive. So it will be tough to fooled into thinking it's imperative, side effecting, eager, assignment with a totally different syntax for long
21:59:42 <EvanR> if something is confusing then how bad that is could be measured in the decay rate of confusion
22:00:12 <Inst> well, actually, multiple let blocks
22:00:29 <Inst> erm, let expressions, multiple let expressions, order of definitions do matter :)
22:00:52 <EvanR> are can't even tell if you're contradicting
22:01:10 <Inst> name shadowing
22:01:25 <Inst> but only across multiple let expressions
22:01:27 <EvanR> I*
22:01:38 <EvanR> what
22:01:50 <EvanR> one where desugars to one let
22:01:51 <monochrom> Yes the order of two blocks matters. But I bet EvanR was referring to within one single block.
22:02:15 <Inst> yeah, i know, was just nitpicking, which i guess gets annoying fast :(
22:02:25 <Inst> but i've seen people spam let as though it were JS
22:02:52 <monochrom> Oh I have also seen people using JS as C, or C as JS.
22:03:00 <EvanR> as soon as someone does let x = x + 1 in something and it totally doesn't work, they know something's different, we're not in kansas anymore
22:03:05 <monochrom> This is a people problem.
22:04:09 <EvanR> haskell 101 day 1 is haskell doesn't have assignment
22:04:18 <monochrom> OK I lied as JS as C. But I have seen people using shell scripting as C or Python.
22:04:44 <monochrom> Namely, when I taught shell scripting to students who have only seen Python and C. >:)
22:05:03 <Inst> EvanR: I THINK, but am unsure, as to whether Chalmers is the one experimenting with IO first
22:05:05 <geekosaur> they coud be usin it as algol 60 😛
22:05:21 <monochrom> Very first mistake would be syntactic, for example "x = 1" instead of "x=1".
22:05:53 <monochrom> And of course later there are more semantic mistakes about data types, how to concat two strings, etc.
22:06:17 <EvanR> introducing IO as part of any other topic is easy, >> is an IO action combiner, >>= is the same thing but you can use the intermediate value (via callback), and you have whatever primitive actions
22:06:28 <Inst> no, i mean, in total intro courses
22:06:59 <EvanR> if necessary, do notation is a straightforward translation into >> and >>=
22:07:11 <EvanR> all of the above is not even wrong
22:09:03 × mikoto-chan quits (~mikoto-ch@ip-212-239-236-59.dsl.scarlet.be) (Ping timeout: 240 seconds)
22:10:45 <Inst> well, someone stumbled into a discord while being totally confused because they didn't get it because let allowed them to pretend it was something else
22:12:41 <EvanR> the only difference with javascript let is javascript is eager and evaluating expressions can cause side effects. If you're writing haskell code and don't know it's lazy and pure, I really think that's an unstable situation
22:13:42 <Inst> yeah, I'm unsure as to what some people are doing, and if you look at Nick of NeoHaskell, he's going through insane lengths to hide what's going on to make it approachable
22:14:10 × gmg quits (~user@user/gehmehgeh) (Quit: Leaving)
22:14:18 <Inst> the let a = 3; let b = 4; a + b example was cribbed from him, but he added a return that had its definition overwritten to mean id
22:14:21 <EvanR> there's that word again
22:14:39 <EvanR> I wonder what "approachable" itself is hiding
22:15:11 <EvanR> you're doing a good job anti-selling NeoHaskell
22:15:24 <Inst> I'm not trying to sell it at this point
22:18:43 <Inst> just trying to point out that, in search of accessibility, it's possible to hide that it's lazy and pure, with predictable results
22:19:43 <EvanR> it's a theorem that any program that successfully evaluates to x with eager evaluation also evaluates to x with lazy evaluation, which is good
22:20:08 <EvanR> so the hiding is 100% there
22:21:23 <monochrom> Please don't make Haskell "approachable", at least not in your sense.
22:21:27 machinedgod joins (~machinedg@d198-53-218-113.abhsia.telus.net)
22:21:30 <Inst> unsafeInterleaveIO
22:21:44 <monochrom> You are instead always welcome to create another language to your liking.
22:22:14 <monochrom> And then watch how people join your new community and then go on to change it to your disliking.
22:23:30 <monochrom> Because obviously even under the banner of "more approachable" different people have opposite ideas.
22:24:16 <cheater> my "approachable" is clearly superior to your "approachable"
22:24:18 <monochrom> We know because even under the very simple "Simple Haskell" banner people already ground to a halt and have to accept that they have to leave it undefined.
22:24:54 <Inst> ehhh, re NH: I was more expecting the project to fail, but Nick to produce some useful libraries before it went under
22:25:15 <Inst> and some useful brainstorming for others to eventually sift through for good ideas
22:25:56 <Inst> i got annoyed when I asked him whether he has some private deadlines, and he just claimed noope
22:26:09 <Inst> re approachable, I don't really care about that that much anymore, I don't treat it as my problem
22:26:18 <EvanR> going out on a limb thinking it would be easier to just use haskell than to create a language which is slightly different from haskell and rebuild the ecosystem
22:26:37 <EvanR> and not sure what the benefit would be
22:27:39 Vajb joins (~Vajb@207.61.167.122)
22:27:39 <Inst> the bigger problem with something like NH, is that it'd be a complicated social, not technical or design-oriented, problem
22:27:50 nate2 joins (~nate@c-98-45-169-16.hsd1.ca.comcast.net)
22:27:53 <Inst> that was what I was originally planning to post, not mentioning NH at all
22:29:00 <Inst> like, my initial response was "screw NeoHaskell" because I thought Nick was a crazy person who wanted to try to split the community, and when I take a gander at NH server, I still feel that way once in a while
22:29:56 <Inst> it requires careful management so that some kind of accessible Haskell dialect / prelude / GHC frontend doesn't ruin Haskell proper, but rather works as training wheels to access users Haskell has trouble serving
22:30:25 <Inst> I don't get the feeling that thinking in this direction is happening with NH
22:30:38 <EvanR> we do have like 100 alternative preludes, I guess 1 more can't hurt
22:31:19 <Inst> it seems as though the discussion was toward GHC plugin
22:31:29 × rawles quits (~rawles@user/rawles) (Quit: Textual IRC Client: www.textualapp.com)
22:31:52 <Inst> I'd love, however, if all the concerns were properly addressed, to see Haskellers together try to design a Go
22:31:58 <EvanR> if there are valuable changes to how GHC works which makes things actually easier, that should be included in actual GHC
22:32:05 <Inst> I would prefer it not to be under NH banner
22:32:33 <Inst> but with people I wouldn't have any questions about
22:33:10 × nate2 quits (~nate@c-98-45-169-16.hsd1.ca.comcast.net) (Ping timeout: 255 seconds)
22:33:55 jumper joins (~jumper@mobile-access-6df060-90.dhcp.inet.fi)
22:34:31 × hugo quits (znc@verdigris.lysator.liu.se) (Ping timeout: 255 seconds)
22:34:47 <Inst> as for Nick, his line is, he's doing it for himself and his friends, and seems to be just having an attitude of doing it for fun, as a personal project
22:35:25 <monochrom> Go already exists. If I want to use it, I can already use it here and now. Why should Haskellers try to design a Go.
22:35:53 <Inst> because Haskellers could, one, do it better, and two, hook it up into GHC ecosystem?
22:35:54 <monochrom> Please stop advocating Haskell to become something else.
22:35:58 <monochrom> Hell, please just stop.
22:36:28 <EvanR> once again, Go and approachable keeps coming up in the same discussion. Like, was that a design goal of Go? Because that's contributing to my understanding that approachable = C syntax, and it would be a lot simpler to just call it that
22:36:39 × aforemny quits (~aforemny@2001:9e8:6ce4:3000:710b:6622:3257:ead) (Quit: ZNC 1.8.2 - https://znc.in)
22:36:44 × Tuplanolla quits (~Tuplanoll@91-159-68-236.elisa-laajakaista.fi) (Quit: Leaving.)
22:36:48 <EvanR> C syntax is great but not for haskell
22:37:05 <dibblego> it's great for Simon PJ :)
22:37:11 <jumper> hi, may a newbie interject and ask a few questions about haskell syntax?
22:37:50 <monochrom> As an anecdotal data point, I write and use some shell scripts instead of changing Haskell to be like shell scripts, I write and use some C programs instead of changing Haskell to become C (not even trying to become a better C).
22:37:58 aforemny joins (~aforemny@2001:9e8:6ce4:3000:fb34:5497:c705:b99)
22:38:04 <monochrom> A better C is not going to look like Haskell at all.
22:38:13 <Inst> Well, I tried, and the only reason I brought up the NH example was as something to be detested
22:38:33 <EvanR> well the 2 minutes detesting is over for today I hope
22:38:42 <monochrom> And depending on what "better" means, Go and Rust and even ATS already exist.
22:38:47 <EvanR> jumper, go ahead!
22:39:47 <jumper> EvanR, I'm a bit puzzled about arrows in Haskell, are they as a means for declaring the structure of a function or an implementational path
22:40:02 <Inst> What do you mean by arrows?
22:40:17 <jumper> f: a -> b -> c
22:40:21 <monochrom> Do you have sample code to show what you mean?
22:40:34 emmanuelux joins (~emmanuelu@user/emmanuelux)
22:40:48 <EvanR> at the type level the -> is the function type constructor, so A -> B is a type, where A and B are types
22:41:05 <EvanR> it associates to the right, so a -> b -> c is to be construed as a -> (b -> c)
22:41:16 <monochrom> OK I don't think I understand the question (are you sure you are not overthinking?), but I guess the answer is "just declaring".
22:42:27 <jumper> so if I have: "myFunc :: Int -> Int", does it mean that myFunc returns Int?
22:42:34 <monochrom> Yes
22:42:34 <EvanR> yes
22:42:52 <jumper> oh okay
22:42:53 <EvanR> and takes an Int
22:43:13 <EvanR> no more no less!
22:43:38 × alphacentauri quits (alphacenta@gateway/vpn/protonvpn/alphacentauri) (Quit: WeeChat 4.0.5)
22:43:59 <jumper> does haskell support the regular C type datatypes? char, short int, int, int long, float, double etc...
22:44:30 <EvanR> those are represented in the Foreign.C.Types module, which is used for doing FFI to e.g. C libraries
22:45:34 <Inst> you have some datatypes which are like that, though
22:45:39 <EvanR> CChar, CShort, CInt, CLong, CFloat, CDouble, ...
22:46:06 × Vajb quits (~Vajb@207.61.167.122) (Ping timeout: 260 seconds)
22:46:21 <EvanR> Int, Float, and Double are standard haskell types which may or may not correspond to the C versions
22:46:33 <monochrom> Or perhaps you just use native Haskell types: Char, Int, Integer, Float, Double, Complex Float, Complex Double.
22:47:14 <jumper> Is it possible to ask questions about lambda calculus? I've read that it supposedly is Turing complete, but can't seem to be able to understand the syntax properly.
22:47:15 <monochrom> I forgot Rational.
22:47:20 <Inst> the funnier thing about Int, Integer (bigInt), Char, Float, etc... is that they're not even primitive, but I guess you're just getting into the lang
22:47:22 alphacentauri joins (alphacenta@gateway/vpn/protonvpn/alphacentauri)
22:47:44 hugo joins (znc@verdigris.lysator.liu.se)
22:47:46 <EvanR> they're not technically primitive but close
22:48:01 <Inst> they're just wrappers over actual primitives, and used as standard
22:48:31 <EvanR> they're boxed which is important to know
22:48:46 <monochrom> I am not sure why you brought that up. Especially given that you depict yourself as caring so much about pedagogy.
22:48:50 <EvanR> when you're trying to do optimizations
22:49:15 <EvanR> other than that, the wrapper isn't that interesting
22:49:28 <monochrom> Premature getting into low-level details is the true cause of being unapproachable, obviously.
22:49:57 <EvanR> in other languages I've noticed people really wanting to get directly into the low level
22:50:12 <EvanR> and the lack of relative importance of low level details in haskell can be confusing
22:50:22 <monochrom> Well you just can't do that for Haskell, or even Scheme, Prolog.
22:50:37 <Inst> jumper: what specific questions might you have about lambda calculus?
22:51:01 <monochrom> You learn a high-level language, you accept that you have to stay high level for the first 6 weeks or something.
22:51:42 <EvanR> C being a high level language, I wish I had learned that first xd
22:51:46 <monochrom> Even a C beginner cannot worry about cache locality that early.
22:52:03 <EvanR> the portable assembly meme does a lot of damage
22:52:30 <Inst> Well, the reason I brought that up was because there seemed to have been something wrong about the question "does Haskell support the regular C type datatypes"
22:53:12 <jumper> Inst, the symbol '\' i'll use as lambda symbol. The syntax of "\i.o", as I've understood it, means 'i' as argument to be injected into the function, and 'o' being the "output/declaration" of the function
22:53:28 <EvanR> turns out it does, but yeah you would use the usual haskell types usually
22:53:32 <monochrom> Yes that's right.
22:53:52 <jumper> Inst, but what confuses me is the possibility of having characters after the lambda function which imply either "True" or "False".
22:54:00 <monochrom> You should think "anonymous function". I can write a function without giving it a name. THE END.
22:54:47 <EvanR> unless you use parentheses, there's no "after the lambda function"
22:54:55 <monochrom> So you don't have to write "f x = x + 1" if you don't feel like giving it the name "f". Just write "(\x -> x + 1)" in-place where you use it.
22:54:57 <EvanR> \i . o x y z w is all inside the same lambda
22:55:13 <Inst> say, \i.o, that's what we'd call "const o", no?
22:55:22 <monochrom> Yeah add parentheses to help, if you need.
22:55:23 <Inst> as in, if you apply the lambda \i.o to a value, you'll just get back o
22:55:58 <monochrom> No, as in, "\foo . bar", place holders for actual code.
22:56:19 <EvanR> o could contain i, or not
22:56:39 <EvanR> if it does, replacing with const would fail
22:56:39 <Inst> tbh, I'm not really qualified to discuss lambda calculus, others here are more conversant, but I'd like to ask
22:56:54 <Inst> jumper: could you show me an example of having characters after the lambda function which imply either "True" or "False"?
22:57:07 <Inst> /s/me/us
22:57:48 <jumper> Inst, \ i . \ o . i o i
22:58:52 <EvanR> it's a lambda nested within a lambda
22:59:12 <monochrom> Wait, actually Haskell syntax is \i -> o, no?
22:59:25 <jumper> but what about the 2 last characters, o and i
22:59:35 <jumper> If I have: \i.o i o
22:59:36 <EvanR> they're inside the inner lambda (the second lambda)
23:00:02 <EvanR> (\i . \o . i) o i, now they're not
23:00:15 <EvanR> and the second o is free
23:00:19 <EvanR> and the second i
23:01:13 <EvanR> and yeah the haskell version is \i -> o i o
23:01:17 <jumper> EvanR, when you mean "free" what does it entail? Is there any operation to be done after?
23:01:39 <EvanR> variables are either free variables or bound variables introduced by lambda
23:02:34 <Inst> that's supposed to be Lambda Calculus
23:02:34 <EvanR> by itself \i -> o i o is just a lambda, and we don't know what o is, so nothing can be done
23:02:51 <geekosaur> you can't say anything about a free variable. you can substitute a bound variable
23:02:51 <Inst> also, jumper, don't be scared, talk as much as you want, people here are generally helpful and friendly
23:02:52 × hugo quits (znc@verdigris.lysator.liu.se) (Ping timeout: 252 seconds)
23:03:29 <yin> λi.λo.ioi = \i -> \o -> (i o) i
23:03:50 × YoungFrog quits (~youngfrog@39.129-180-91.adsl-dyn.isp.belgacom.be) (Ping timeout: 246 seconds)
23:04:05 Square joins (~Square@user/square)
23:04:23 <Inst> jumper: just curious, what's the context of your questions? What do you know so far?
23:04:40 <Inst> Are you studying Haskell and Lambda Calculus for a course? Or are you doing this on your own?
23:05:36 <yin> which is the same as (\i o -> i o i)
23:05:53 <jumper> Inst, beginner level, I just recently noticed the turing completeness of boolean algebra and want to understand the syntax
23:06:17 <jumper> from the lower bools to the higher functional abstractions
23:06:30 <yin> jumper: what languages are you most familiar with?
23:06:38 <jumper> C and C++ is familiar to me
23:06:45 <yin> javascript?
23:06:50 <EvanR> expanding the bare lambda calculus a bit, you can see implied in \i -> 1 + i that without parentheses stuff to the right of -> is supposed to be all in the same lambda body, not (\i -> 1) + i, where i is free and comes out of nowhere
23:06:51 <jumper> and assembler
23:07:22 <ncf> turing completeness of boolean algebra??
23:07:45 <EvanR> lambda calculus is turing complete and you can encode boolean algebra in it
23:08:08 <EvanR> but that's not to say boolean algebra is turing complete
23:08:36 <jumper> well not basic boolean algebra ofc
23:09:04 <yin> i did wrote this when i was starting out, maybe you can find it useful: https://github.com/jrvieira/fun/blob/main/pwn.js
23:14:30 × jumper quits (~jumper@mobile-access-6df060-90.dhcp.inet.fi) (Ping timeout: 258 seconds)
23:16:30 jumper joins (~jumper@mobile-access-2e844c-234.dhcp.inet.fi)
23:16:56 <jumper> hello?
23:17:07 <yin> hello
23:17:52 × dsrt^ quits (~cd@76.145.193.217) (Remote host closed the connection)
23:17:52 × cuiltb^ quits (~cd@76.145.193.217) (Remote host closed the connection)
23:18:09 cuiltb^ joins (~cd@76.145.193.217)
23:18:09 dsrt^ joins (~cd@76.145.193.217)
23:18:27 <Inst> https://ircbrowse.tomsmeding.com/browse/lchaskell
23:18:30 <Inst> if you missed anything
23:18:53 <Inst> message sent by yin about 28 seconds after your last message
23:19:06 × NinjaTrappeur quits (~ninja@about/aquilenet/vodoo/NinjaTrappeur) (Ping timeout: 258 seconds)
23:21:18 <jumper> Should I fork my lambda calculus questions to #lambdacalculus?
23:21:25 YoungFrog joins (~youngfrog@39.129-180-91.adsl-dyn.isp.belgacom.be)
23:21:47 × fweht quits (uid404746@id-404746.lymington.irccloud.com) (Quit: Connection closed for inactivity)
23:22:43 NinjaTrappeur joins (~ninja@about/aquilenet/vodoo/NinjaTrappeur)
23:22:49 <jumper> Or is #haskell-offtopic better? The questions are kinda intermixed
23:23:29 <Inst> #lambdacalculus is dead
23:23:58 <Inst> monochrom has moderator access here, so if he feels your questions are off-topic, let him point it out
23:24:36 <geekosaur> we do discuss lambda calculus here
23:24:42 <Inst> and, lambda calculus is the first chapter of Haskell Programming from First Principles, so it's sort of relevant to Haskell?
23:24:50 <geekosaur> and #lambdacalculus is a new channe, it'l grow faster if people use it
23:25:45 <Inst> it's not registered?
23:25:55 <geekosaur> that means little
23:26:45 Vajb joins (~Vajb@207.61.167.122)
23:28:14 <geekosaur> hm, doesn't look like lisbeths is around right now
23:30:59 <jumper> yin, is the => operator in js a similar construct to haskells arrow?
23:31:00 × Vajb quits (~Vajb@207.61.167.122) (Read error: Connection reset by peer)
23:31:19 <monochrom> No. Haskell's lambda.
23:31:27 <jumper> oh
23:31:43 <Inst> Haskell has like 3 syntactical arrows
23:31:45 <monochrom> They write "x => x + 1", we write "\x -> x + 1", Python's is "lambda x: x + 1".
23:31:50 Vajb joins (~Vajb@207.61.167.122)
23:32:17 <monochrom> A long time ago, JS's was "function (x) { return x+1; }" :)
23:32:42 <monochrom> I bet you've also seen C++ lambdas.
23:33:33 <jumper> monochrom, and in C++ it would be equivalent to, [](x){ return x + 1; }?
23:33:43 <monochrom> Yeah.
23:34:26 <Inst> you'll see -> and <- a lot, and they mean different things depending on the context
23:35:09 <jumper> Inst, <-, a different operator all together?
23:35:49 <geekosaur> it's sort of a lambda
23:36:09 <geekosaur> foo <- bar, in a do expression, expands to: bar >>= \foo ->
23:36:10 <jumper> but backwards?
23:36:15 <jackdk> `<-` is used when desuraging `do`-notation, which creates a syntactic sugar: `x <- e` desugars into `e >>= \x -> ...`
23:36:22 <monochrom> Let's not get ahead of ourselves.
23:36:29 <jackdk> oh geekosaur is faster and monochrom is correct
23:36:50 <Inst> yeah, not too advanced, i guess the point was to emphasize that talking about Haskell arrows is imprecise
23:37:20 <jumper> What about => in haskell?
23:37:45 <monochrom> A long time ago, Inst talked about teaching Haskell but had not learned Haskell. I thought, OK the only bad thing is thinking about teaching something else without having learnin it first, but I trust that at least they had already learned how to teach in general.
23:37:59 <monochrom> Today, I see ample evidence that they don't even know how to teach.
23:38:20 <geekosaur> sadly I'd say that's true of a lot of teachers
23:39:11 <Inst> monochrom: thanks for the frank assessment :)
23:40:37 hugo joins (znc@verdigris.lysator.liu.se)
23:41:02 <jumper> Is there some kind of a Rosetta stone for haskell?
23:41:21 <geekosaur> I think Haskell's too different for one to be useful
23:41:30 <geekosaur> I mean, what would the entry for assignment be?
23:41:48 <jackdk> What sort of questions would you ask of that rosetta stone?
23:42:12 <Inst> yeah, i mean, the way i should have addressed the question about C types, should have been, to ask what was meant by c types
23:42:25 <monochrom> Cheat sheets though are possible, just aiming at reading the syntax quickly. I know of https://soupi.github.io/rfc/reading_simple_haskell/
23:42:56 <monochrom> I think there are a few more cheat sheets out there. I just didn't care enough to bookmark them.
23:43:21 <Inst> => is hard to explain, <- shouldn't have been brought up in detail, because it concerns some advanced stuff that's better for you to get to later
23:44:29 <Inst> the arrow stuff, I should have just specified that -> gets used for separate things, and arrows as a term can mean different things in a Haskell context so using arrows to describe -> isn't accurate
23:45:36 <jumper> Inst, I don't mind it, I actually prefer harder topics than novice learning curves
23:46:53 <Inst> in the context of a type signature, like foo :: Int -> Int, you'll sometimes have lowercase things, for instance, id : a -> a
23:47:09 <jumper> Is the => operator simply a declarative constraint?
23:47:11 <Inst> this usually means that a can stand for any normal type
23:47:22 <Inst> id :: a -> a
23:47:51 × hugo quits (znc@verdigris.lysator.liu.se) (Ping timeout: 240 seconds)
23:48:09 <Inst> the lowercase things are called type variables
23:48:44 <Inst> sometimes, you'll see a type signature like "show :: Show a => a -> String"
23:49:24 <Inst> what the => is doing is that it's indicating that what's on the left is the constraint on the allowed types for the type variables
23:49:33 <geekosaur> re "advanced topics", monochrom and I prefer teaching >>= first
23:49:51 <geekosaur> teach do notation once it will make sense
23:50:25 hugo joins (znc@verdigris.lysator.liu.se)
23:50:56 <jumper> Inst, is haskell case insensitive?
23:51:00 × Vajb quits (~Vajb@207.61.167.122) (Ping timeout: 255 seconds)
23:51:12 <Inst> haskell is case sensitive
23:51:18 <monochrom> Ugh there hasn't been a case insensitive language for a long long time...
23:51:42 <Inst> monochrom: the hard thing for me, is, when a learner has a misconception, and you want to correct them
23:52:06 <Inst> but to correct them, you want to delve into things that are probably not appropriate for them at their stage of learning
23:52:34 <jumper> Inst, so your example "show :: Show a => a String", Show is other type declared somewhere else?
23:53:12 <jumper> show :: Show a => a -> String *
23:53:18 <Inst> Show is a constraint
23:53:32 <jumper> yes, but the constraint is of type "Show"
23:55:17 <geekosaur> calling it "type" is asking for confusion
23:55:50 <Inst> well, it's not a type, it's a constraint, but i really shouldn't have brought that up, are you sure you're not doing this in an academic setting?
23:56:26 <monochrom> Um let me correct all of you. >:)
23:56:42 <monochrom> "Show" is not a constraint. It is [the name of] a type class.
23:56:53 <monochrom> Now, "Show a", that's a constraint.
23:57:27 <jumper> so function "show", has to have an "a" which is of type "Show"?
23:57:42 <Inst> the a type has to be a member of the typeclass Show
23:58:05 <Inst> typeclasses are a rabbit hole
23:58:14 <Inst> do you really want to get into that?
23:58:17 <jumper> wait so, Show::a?
23:59:07 <geekosaur> no
23:59:14 <Inst> easier way is whether or not you'll just accept that Show a is a constraint limiting the allowed types that the type variable a can be
23:59:27 <Inst> if you don't, we have to go into typeclasses
23:59:33 <geekosaur> there exists a `instance Show Foo` when `a` unifies with `Foo`

All times are in UTC on 2023-10-15.