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> | <Inst> Is there? |
| 09:28:05 | <haskellbridge> | <Inst> 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> | <Inst> i'm guessing what's going on is that they have an exception set up on CI |
| 09:34:12 | <haskellbridge> | <Inst> 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> | <Inst> 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> | <Inst> not quite sure what's going on, tbh |
| 10:16:28 | <haskellbridge> | <Inst> 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> | <Inst> 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> | <tewuzij> 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> | <Inst> 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> | <Inst> 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> | <Inst> 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> | <Inst> https://github.com/ganeti/ganeti |
| 14:17:42 | <cheater> | what are you talking about inst |
| 14:18:08 | <haskellbridge> | <Inst> 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.