Logs on 2023-10-22 (liberachat/#haskell)
| 00:01:46 | → | pavonia joins (~user@user/siracusa) |
| 00:03:04 | → | [_] joins (~itchyjunk@user/itchyjunk/x-7353470) |
| 00:06:16 | → | tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) |
| 00:06:51 | × | [itchyjunk] quits (~itchyjunk@user/itchyjunk/x-7353470) (Ping timeout: 260 seconds) |
| 00:10:14 | × | tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Client Quit) |
| 00:12:48 | × | Vajb quits (~Vajb@207.61.167.122) (Ping timeout: 260 seconds) |
| 00:24:25 | → | dhruvasagar joins (~dhruvasag@49.207.194.211) |
| 00:28:40 | × | dhruvasagar quits (~dhruvasag@49.207.194.211) (Ping timeout: 255 seconds) |
| 00:35:22 | → | dhruvasagar joins (~dhruvasag@49.207.194.211) |
| 00:40:03 | × | dhruvasagar quits (~dhruvasag@49.207.194.211) (Ping timeout: 255 seconds) |
| 00:40:37 | → | dhruvasagar joins (~dhruvasag@49.207.194.211) |
| 00:45:11 | × | dhruvasagar quits (~dhruvasag@49.207.194.211) (Ping timeout: 255 seconds) |
| 00:51:32 | → | dhruvasagar joins (~dhruvasag@49.207.194.211) |
| 00:54:54 | × | elkcl quits (~elkcl@broadband-95-84-226-240.ip.moscow.rt.ru) (Ping timeout: 255 seconds) |
| 00:55:05 | → | elkcl joins (~elkcl@broadband-95-84-226-240.ip.moscow.rt.ru) |
| 00:56:07 | × | waleee quits (~waleee@2001:9b0:21c:e600:f2f3:f744:435d:137c) (Ping timeout: 264 seconds) |
| 00:56:07 | × | dhruvasagar quits (~dhruvasag@49.207.194.211) (Ping timeout: 255 seconds) |
| 00:57:14 | → | dhruvasagar joins (~dhruvasag@49.207.194.211) |
| 00:58:21 | → | pretty_dumm_guy joins (trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655) |
| 00:58:22 | × | Lord_of_Life quits (~Lord@user/lord-of-life/x-2819915) (Ping timeout: 255 seconds) |
| 01:00:12 | → | Lord_of_Life joins (~Lord@user/lord-of-life/x-2819915) |
| 01:02:10 | × | dhruvasagar quits (~dhruvasag@49.207.194.211) (Ping timeout: 252 seconds) |
| 01:08:10 | → | dhruvasagar joins (~dhruvasag@49.207.194.211) |
| 01:09:46 | × | hrberg quits (~quassel@171.79-160-161.customer.lyse.net) (Remote host closed the connection) |
| 01:09:58 | × | otto_s quits (~user@p5b044cbd.dip0.t-ipconnect.de) (Ping timeout: 260 seconds) |
| 01:11:01 | → | hrberg joins (~quassel@171.79-160-161.customer.lyse.net) |
| 01:11:33 | → | otto_s joins (~user@p4ff27d6b.dip0.t-ipconnect.de) |
| 01:12:54 | × | dhruvasagar quits (~dhruvasag@49.207.194.211) (Ping timeout: 258 seconds) |
| 01:19:13 | × | xff0x quits (~xff0x@ai101218.d.east.v6connect.net) (Ping timeout: 252 seconds) |
| 01:19:14 | → | dhruvasagar joins (~dhruvasag@49.207.194.211) |
| 01:21:21 | → | xff0x joins (~xff0x@178.255.149.135) |
| 01:28:14 | × | Typedfern quits (~Typedfern@220.red-83-37-25.dynamicip.rima-tde.net) (Ping timeout: 258 seconds) |
| 01:29:01 | → | Typedfern joins (~Typedfern@220.red-83-37-25.dynamicip.rima-tde.net) |
| 01:36:44 | × | xff0x quits (~xff0x@178.255.149.135) (Ping timeout: 245 seconds) |
| 01:38:33 | → | xff0x joins (~xff0x@2405:6580:b080:900:6ad:7a7d:8b93:6038) |
| 01:42:48 | × | arahael quits (~arahael@119-18-2-212.771202.syd.nbn.aussiebb.net) (Ping timeout: 258 seconds) |
| 01:45:23 | × | pretty_dumm_guy quits (trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655) (Quit: WeeChat 3.5) |
| 01:47:30 | × | emmanuelux quits (~emmanuelu@user/emmanuelux) (Quit: au revoir) |
| 01:52:20 | × | xff0x quits (~xff0x@2405:6580:b080:900:6ad:7a7d:8b93:6038) (Ping timeout: 272 seconds) |
| 01:52:43 | → | xff0x joins (~xff0x@ai101218.d.east.v6connect.net) |
| 02:15:21 | → | finn_elija joins (~finn_elij@user/finn-elija/x-0085643) |
| 02:15:21 | × | FinnElija quits (~finn_elij@user/finn-elija/x-0085643) (Killed (NickServ (Forcing logout FinnElija -> finn_elija))) |
| 02:15:21 | finn_elija | is now known as FinnElija |
| 02:16:52 | → | nate2 joins (~nate@c-98-45-169-16.hsd1.ca.comcast.net) |
| 02:21:54 | × | nate2 quits (~nate@c-98-45-169-16.hsd1.ca.comcast.net) (Ping timeout: 258 seconds) |
| 02:23:40 | × | johnw quits (~johnw@69.62.242.138) (Quit: ZNC - http://znc.in) |
| 02:30:39 | × | td_ quits (~td@i5387091E.versanet.de) (Ping timeout: 240 seconds) |
| 02:32:41 | → | td_ joins (~td@i53870939.versanet.de) |
| 02:43:01 | → | Friendship joins (~Friendshi@user/Friendship) |
| 02:54:41 | → | arahael joins (~arahael@119-18-2-212.771202.syd.nbn.aussiebb.net) |
| 02:57:36 | → | Vajb joins (~Vajb@207.61.167.122) |
| 02:59:34 | → | sm joins (~sm@plaintextaccounting/sm) |
| 03:03:55 | × | sm quits (~sm@plaintextaccounting/sm) (Ping timeout: 255 seconds) |
| 03:15:02 | → | aforemny joins (~aforemny@i59F516CF.versanet.de) |
| 03:15:56 | × | aforemny_ quits (~aforemny@i59F516C8.versanet.de) (Ping timeout: 272 seconds) |
| 03:25:50 | → | azimut joins (~azimut@gateway/tor-sasl/azimut) |
| 03:30:57 | → | sm joins (~sm@plaintextaccounting/sm) |
| 03:38:06 | × | sm quits (~sm@plaintextaccounting/sm) (Ping timeout: 272 seconds) |
| 03:52:32 | → | sm joins (~sm@plaintextaccounting/sm) |
| 03:59:08 | × | sm quits (~sm@plaintextaccounting/sm) (Ping timeout: 248 seconds) |
| 04:09:27 | × | Fischmiep quits (~Fischmiep@user/Fischmiep) (Ping timeout: 240 seconds) |
| 04:11:28 | → | Fischmiep joins (~Fischmiep@user/Fischmiep) |
| 04:11:39 | → | johnw joins (~johnw@69.62.242.138) |
| 04:21:16 | × | Fischmiep quits (~Fischmiep@user/Fischmiep) (Ping timeout: 252 seconds) |
| 04:26:26 | × | Vajb quits (~Vajb@207.61.167.122) (Ping timeout: 260 seconds) |
| 04:28:40 | → | sm joins (~sm@plaintextaccounting/sm) |
| 04:35:05 | × | sm quits (~sm@plaintextaccounting/sm) (Ping timeout: 240 seconds) |
| 04:45:32 | → | qqq joins (~qqq@92.43.167.61) |
| 04:51:38 | → | sm joins (~sm@plaintextaccounting/sm) |
| 04:53:49 | → | nate2 joins (~nate@c-98-45-169-16.hsd1.ca.comcast.net) |
| 04:56:17 | × | sm quits (~sm@plaintextaccounting/sm) (Ping timeout: 255 seconds) |
| 04:58:41 | × | nate2 quits (~nate@c-98-45-169-16.hsd1.ca.comcast.net) (Ping timeout: 258 seconds) |
| 05:00:23 | → | sm joins (~sm@plaintextaccounting/sm) |
| 05:09:02 | × | sm quits (~sm@plaintextaccounting/sm) (Ping timeout: 258 seconds) |
| 05:11:28 | → | rosco joins (~rosco@yp-150-69.tm.net.my) |
| 05:14:22 | × | Alleria quits (~JohnGalt@user/alleria) (Read error: Connection reset by peer) |
| 05:16:04 | → | Alleria joins (~JohnGalt@user/alleria) |
| 05:23:05 | × | rgw quits (~R@2605:a601:a0df:5600:5007:462b:c57d:9381) (Read error: Connection reset by peer) |
| 05:25:14 | → | sm joins (~sm@plaintextaccounting/sm) |
| 05:29:43 | × | sm quits (~sm@plaintextaccounting/sm) (Ping timeout: 255 seconds) |
| 05:31:18 | × | machinedgod quits (~machinedg@d198-53-218-113.abhsia.telus.net) (Ping timeout: 260 seconds) |
| 05:33:08 | → | takuan joins (~takuan@178-116-218-225.access.telenet.be) |
| 05:40:31 | → | Lycurgus joins (~georg@user/Lycurgus) |
| 05:41:46 | × | Lycurgus quits (~georg@user/Lycurgus) (Client Quit) |
| 05:54:34 | → | sm joins (~sm@plaintextaccounting/sm) |
| 06:03:23 | × | sm quits (~sm@plaintextaccounting/sm) (Ping timeout: 260 seconds) |
| 06:07:38 | → | Fischmiep joins (~Fischmiep@user/Fischmiep) |
| 06:10:31 | × | notzmv quits (~zmv@user/notzmv) (Ping timeout: 264 seconds) |
| 06:19:43 | → | sm joins (~sm@plaintextaccounting/sm) |
| 06:23:06 | → | vglfr joins (~vglfr@88.155.246.162) |
| 06:24:16 | × | sm quits (~sm@plaintextaccounting/sm) (Ping timeout: 260 seconds) |
| 06:26:22 | → | sm joins (~sm@plaintextaccounting/sm) |
| 06:26:25 | × | Fischmiep quits (~Fischmiep@user/Fischmiep) (Ping timeout: 255 seconds) |
| 06:29:17 | → | Fischmiep joins (~Fischmiep@user/Fischmiep) |
| 06:34:50 | × | sm quits (~sm@plaintextaccounting/sm) (Ping timeout: 255 seconds) |
| 06:36:32 | × | vglfr quits (~vglfr@88.155.246.162) (Remote host closed the connection) |
| 06:37:27 | → | vglfr joins (~vglfr@88.155.246.162) |
| 06:51:28 | → | sm joins (~sm@plaintextaccounting/sm) |
| 06:56:20 | × | sm quits (~sm@plaintextaccounting/sm) (Ping timeout: 272 seconds) |
| 07:01:25 | → | sm joins (~sm@plaintextaccounting/sm) |
| 07:02:21 | × | [_] quits (~itchyjunk@user/itchyjunk/x-7353470) (Read error: Connection reset by peer) |
| 07:06:22 | × | nek0 quits (~nek0@2a01:4f8:222:2b41::12) (Quit: The Lounge - https://thelounge.chat) |
| 07:10:05 | × | sm quits (~sm@plaintextaccounting/sm) (Ping timeout: 240 seconds) |
| 07:14:26 | → | fendor joins (~fendor@2a02:8388:1640:be00:aab:1226:f274:5021) |
| 07:20:19 | → | gmg joins (~user@user/gehmehgeh) |
| 07:27:51 | × | Fischmiep quits (~Fischmiep@user/Fischmiep) (Ping timeout: 260 seconds) |
| 07:34:55 | → | Pickchea joins (~private@user/pickchea) |
| 07:35:43 | × | todi quits (~todi@p4fd1a3e6.dip0.t-ipconnect.de) (Ping timeout: 255 seconds) |
| 07:41:47 | → | sm joins (~sm@plaintextaccounting/sm) |
| 07:42:04 | → | acidjnk_new joins (~acidjnk@p200300d6e72b938125cc9ae0c91bfe8f.dip0.t-ipconnect.de) |
| 07:42:27 | → | Jackneill joins (~Jackneill@20014C4E1E0E6F004BDEA8A1DAB424C0.dsl.pool.telekom.hu) |
| 07:44:21 | × | vglfr quits (~vglfr@88.155.246.162) (Read error: Connection reset by peer) |
| 07:44:42 | → | vglfr joins (vglfr@gateway/vpn/protonvpn/vglfr) |
| 07:47:52 | → | cpressey joins (~cpressey@host-2-102-12-88.as13285.net) |
| 07:48:27 | × | sm quits (~sm@plaintextaccounting/sm) (Ping timeout: 255 seconds) |
| 07:53:54 | → | tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) |
| 07:54:18 | → | Square joins (~Square@user/square) |
| 07:58:29 | × | eggplantade quits (~Eggplanta@2600:1700:38c5:d800:49ec:9442:e7af:3828) (Remote host closed the connection) |
| 07:59:39 | → | todi joins (~todi@p4fd1a3e6.dip0.t-ipconnect.de) |
| 08:00:09 | × | vglfr quits (vglfr@gateway/vpn/protonvpn/vglfr) (Ping timeout: 255 seconds) |
| 08:02:48 | → | Inst joins (~Inst@120.244.192.250) |
| 08:03:37 | × | dcoutts quits (~duncan@cpc69402-oxfd27-2-0-cust903.4-3.cable.virginm.net) (Ping timeout: 255 seconds) |
| 08:03:47 | → | sm joins (~sm@plaintextaccounting/sm) |
| 08:06:41 | × | tzh quits (~tzh@c-71-193-181-0.hsd1.or.comcast.net) (Quit: zzz) |
| 08:11:10 | → | coot joins (~coot@89-69-206-216.dynamic.chello.pl) |
| 08:11:30 | → | _ht joins (~Thunderbi@28-52-174-82.ftth.glasoperator.nl) |
| 08:11:34 | × | phma quits (phma@2001:5b0:210d:e0f8:4b17:f518:800e:b47e) (Read error: Connection reset by peer) |
| 08:11:51 | × | sm quits (~sm@plaintextaccounting/sm) (Ping timeout: 240 seconds) |
| 08:12:22 | → | phma joins (~phma@host-67-44-208-184.hnremote.net) |
| 08:13:49 | → | vglfr joins (~vglfr@88.155.246.162) |
| 08:19:55 | → | notzmv joins (~zmv@user/notzmv) |
| 08:30:33 | → | eggplantade joins (~Eggplanta@2600:1700:38c5:d800:49ec:9442:e7af:3828) |
| 08:42:47 | → | sm joins (~sm@plaintextaccounting/sm) |
| 08:47:16 | × | sm quits (~sm@plaintextaccounting/sm) (Ping timeout: 255 seconds) |
| 08:48:17 | → | Unicorn_Princess joins (~Unicorn_P@user/Unicorn-Princess/x-3540542) |
| 08:49:19 | → | sm joins (~sm@plaintextaccounting/sm) |
| 08:51:52 | × | absence quits (torgeihe@hildring.pvv.ntnu.no) (Ping timeout: 252 seconds) |
| 08:55:07 | → | Fischmiep joins (~Fischmiep@user/Fischmiep) |
| 08:55:19 | → | nate2 joins (~nate@c-98-45-169-16.hsd1.ca.comcast.net) |
| 08:55:36 | × | Fischmiep quits (~Fischmiep@user/Fischmiep) (Remote host closed the connection) |
| 08:57:25 | → | absence joins (torgeihe@hildring.pvv.ntnu.no) |
| 08:58:08 | <Inst> | EvanR: defaulting to >=> seems saner, no? Do notation is written effectively in (&), it implies a forward order of effects and computation. |
| 09:00:00 | <probie> | :t (>=>) |
| 09:00:01 | × | nate2 quits (~nate@c-98-45-169-16.hsd1.ca.comcast.net) (Ping timeout: 255 seconds) |
| 09:00:02 | <lambdabot> | Monad m => (a -> m b) -> (b -> m c) -> a -> m c |
| 09:05:52 | → | harveypwca joins (~harveypwc@2601:246:c280:6a90:837d:db39:3eea:f7db) |
| 09:06:48 | <probie> | Inst: I'm not sure mirroring do notation is a strong argument. If you want do notation, then use do notation, if you don't want it, why try and mirror it? |
| 09:07:44 | × | sm quits (~sm@plaintextaccounting/sm) (Ping timeout: 255 seconds) |
| 09:08:06 | × | dibblego quits (~dibblego@haskell/developer/dibblego) (Ping timeout: 255 seconds) |
| 09:10:08 | → | Tuplanolla joins (~Tuplanoll@91-159-68-236.elisa-laajakaista.fi) |
| 09:10:17 | <Inst> | Because I like hybrid do notation, i.e, direct use of bind etc in do notation, use of where to define subfunctions, etc |
| 09:10:39 | <Inst> | the idea is that the do level is specification of your algorithm, whereas the direct binds / wheres are implementation. |
| 09:11:44 | → | dibblego joins (~dibblego@122-199-1-93.ip4.superloop.au) |
| 09:11:44 | × | dibblego quits (~dibblego@122-199-1-93.ip4.superloop.au) (Changing host) |
| 09:11:44 | → | dibblego joins (~dibblego@haskell/developer/dibblego) |
| 09:18:13 | → | oo_miguel joins (~Thunderbi@78-11-179-96.static.ip.netia.com.pl) |
| 09:25:13 | → | ubert1 joins (~Thunderbi@77.119.202.255.wireless.dyn.drei.com) |
| 09:26:17 | × | ubert quits (~Thunderbi@91.141.58.4.wireless.dyn.drei.com) (Ping timeout: 255 seconds) |
| 09:26:17 | ubert1 | is now known as ubert |
| 09:32:39 | <Inst> | just curious, playing with my toy conway, but I have it set so it forkIOs (I know it's smelly, I just forget why) a display loop |
| 09:33:16 | <Inst> | the rest of the program getLines, and then dies |
| 09:33:44 | <Inst> | Is this the only way to do it? |
| 09:34:08 | <cpressey> | Inst: Is hybrid do notation "a thing" or is it just something you personally like? I can't recall many examples of seeing it (then again I don't send a lot of time reading Haskell code that's out there) |
| 09:34:21 | <Inst> | cpressey, for instance, in Cabal |
| 09:34:25 | <Rembane> | Inst: Do you have a minimum example of the crash? |
| 09:34:55 | <Inst> | cabal install, rather |
| 09:34:57 | <Inst> | what crash? |
| 09:35:11 | <Inst> | die is an IO action in System.Exit |
| 09:36:44 | <Inst> | Check out main |
| 09:36:45 | <Inst> | https://github.com/haskell/cabal/blob/master/cabal-install/src/Distribution/Client/Main.hs |
| 09:36:55 | <Inst> | cabal codebase is probalby not the best example, but it exists |
| 09:37:22 | <Inst> | check out main, and how mainWorker is called |
| 09:37:50 | <Inst> | I'd rather write |
| 09:37:51 | <Inst> | mainWorker =<< (++ args1) <$> expandResponse args0 |
| 09:38:19 | <Inst> | as expandResponse args0 <&> (<> args1) >>= mainWorker, though |
| 09:38:50 | <Inst> | or even (<> args1) <$> expandResponse args0 >>= mainWorker |
| 09:39:48 | <Inst> | expandResponse args0 >>= mainWorker . (<> args1) |
| 09:40:47 | <Inst> | mainWorker . (<> args1) =<< expandResponse args0 is probably the best for what's being expressed, though |
| 09:43:36 | <rosco> | Hello, I can't seem to install brick using cabal install brick, it "cannot build the executables because they are marked as buildable = False" |
| 09:44:02 | → | emmanuelux joins (~emmanuelu@user/emmanuelux) |
| 09:44:24 | × | Pickchea quits (~private@user/pickchea) (Quit: Leaving) |
| 09:44:49 | <probie> | In your favourite C-syntax language with effects all over the place, you'd get `mainWorker(append(expandResponse(args0), args1))`, so it's at least not particularly unusual to have `mainWorker` first |
| 09:45:04 | <Rembane> | rosco: IIRC brick doesn't have any executables, what are you going to use it for? |
| 09:48:07 | <rosco> | Rembane: my bad, the executables are demos that are not built by default. I managed to get it installed using the --lib flag. |
| 09:48:40 | <Rembane> | rosco: Good stuff! |
| 10:00:33 | → | isekaijin joins (~user@user/isekaijin) |
| 10:00:47 | → | waleee joins (~waleee@2001:9b0:21c:e600:f2f3:f744:435d:137c) |
| 10:00:58 | → | pretty_dumm_guy joins (trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655) |
| 10:02:44 | × | Inst quits (~Inst@120.244.192.250) (Ping timeout: 255 seconds) |
| 10:07:33 | × | emmanuelux quits (~emmanuelu@user/emmanuelux) (Read error: Connection reset by peer) |
| 10:08:07 | → | emmanuelux joins (~emmanuelu@user/emmanuelux) |
| 10:08:51 | → | Fischmiep joins (~Fischmiep@user/Fischmiep) |
| 10:14:20 | × | vglfr quits (~vglfr@88.155.246.162) (Read error: Connection reset by peer) |
| 10:15:22 | → | Inst joins (~Inst@120.244.192.250) |
| 10:17:18 | × | Unicorn_Princess quits (~Unicorn_P@user/Unicorn-Princess/x-3540542) (Remote host closed the connection) |
| 10:18:32 | × | gmg quits (~user@user/gehmehgeh) (Remote host closed the connection) |
| 10:19:21 | → | gmg joins (~user@user/gehmehgeh) |
| 10:26:36 | → | CiaoSen joins (~Jura@2a05:5800:2be:1b00:664b:f0ff:fe37:9ef) |
| 10:32:18 | × | eggplantade quits (~Eggplanta@2600:1700:38c5:d800:49ec:9442:e7af:3828) (Ping timeout: 272 seconds) |
| 10:33:38 | × | emmanuelux quits (~emmanuelu@user/emmanuelux) (Read error: Connection reset by peer) |
| 10:34:20 | × | nickiminjaj quits (~nickiminj@user/laxhh) (Read error: Connection reset by peer) |
| 10:34:33 | → | emmanuelux joins (~emmanuelu@user/emmanuelux) |
| 10:34:43 | → | nickiminjaj joins (~nickiminj@188.146.126.78) |
| 10:34:43 | × | nickiminjaj quits (~nickiminj@188.146.126.78) (Changing host) |
| 10:34:43 | → | nickiminjaj joins (~nickiminj@user/laxhh) |
| 10:41:22 | <tomsmeding> | rosco: advice: _never_ use 'cabal install --lib' unless you know precisely what that does and that is really what you want |
| 10:41:25 | <tomsmeding> | it does something unexpected |
| 10:42:02 | <tomsmeding> | do you want to use the brick library in one of your own haskell programs? Or do you want to try out the demos? |
| 10:43:18 | <tomsmeding> | rosco: if you want to install the demo executables, try 'cabal install brick -f demos' |
| 10:43:56 | <tomsmeding> | that turns on the 'demos' flag, which, as you can see at https://hackage.haskell.org/package/brick under the Automatic Flags folder (you need to click to open it), enables the demo executable components |
| 10:46:10 | <tomsmeding> | with 'cabal install --lib' you didn't get the demos, you just built the library and registered it to be available when you run 'ghc' or 'ghci' outside of a cabal project (if I'm not mistaken). This sounds like a useful thing, but it's not: it's useful for now, but you cannot easily _unregister_ something here. So any time you want to install a new version, or something that's incompatible with |
| 10:46:10 | <tomsmeding> | this library, everything will break |
| 10:46:52 | <tomsmeding> | the way to work with haskell libraries, these days, is to create a project, i.e. a <project>.cabal file, and work inside that project |
| 10:47:05 | <tomsmeding> | then you can declaratively add dependencies and cabal will arrange things so that the right things are available |
| 10:47:23 | <Inst> | if you're lazy, you can use a cabal header in a Haskell file, but this doesn't propagate to multiple files iirc |
| 10:47:30 | <tomsmeding> | (you can also use stack, in which case you'll also need a stack.yaml file in the project folder, and can optionally use package.yaml instead of the <project>.cabal) |
| 10:47:48 | <Inst> | And the language server isn't supporting this workflow yet |
| 10:47:58 | <Inst> | https://cabal.readthedocs.io/en/stable/getting-started.html#run-a-single-file-haskell-script |
| 10:48:02 | <tomsmeding> | Inst: right, that's single-file only, but "cabal scripts" as they're called also exist |
| 10:48:40 | × | _ht quits (~Thunderbi@28-52-174-82.ftth.glasoperator.nl) (Remote host closed the connection) |
| 10:48:59 | → | _ht joins (~Thunderbi@28-52-174-82.ftth.glasoperator.nl) |
| 10:49:34 | <Inst> | I wish HLS team would hurry up and add cabal script support |
| 10:49:43 | <Inst> | It'd be a great standard workflow for newbies |
| 10:59:00 | → | nek0 joins (~nek0@2a01:4f8:222:2b41::12) |
| 11:01:08 | × | Sgeo quits (~Sgeo@user/sgeo) (Read error: Connection reset by peer) |
| 11:01:25 | × | mrmr155 quits (~mrmr@user/mrmr) (Read error: Connection reset by peer) |
| 11:05:29 | → | vglfr joins (~vglfr@88.154.70.142) |
| 11:08:45 | → | mrmr155 joins (~mrmr@user/mrmr) |
| 11:11:12 | × | vglfr quits (~vglfr@88.154.70.142) (Read error: Connection reset by peer) |
| 11:11:32 | → | vglfr joins (~vglfr@149.102.244.114) |
| 11:15:02 | → | Pickchea joins (~private@user/pickchea) |
| 11:15:30 | × | waleee quits (~waleee@2001:9b0:21c:e600:f2f3:f744:435d:137c) (Ping timeout: 258 seconds) |
| 11:28:05 | × | vglfr quits (~vglfr@149.102.244.114) (Ping timeout: 240 seconds) |
| 11:28:17 | → | vglfr joins (~vglfr@88.154.70.142) |
| 11:29:43 | × | emmanuelux quits (~emmanuelu@user/emmanuelux) (Read error: Connection reset by peer) |
| 11:30:19 | × | harveypwca quits (~harveypwc@2601:246:c280:6a90:837d:db39:3eea:f7db) (Quit: Leaving) |
| 11:30:33 | → | emmanuelux joins (~emmanuelu@user/emmanuelux) |
| 11:33:56 | <rosco> | tomsmeding: Thank you, I figured it out. Putting brick as a dependency in the package.yaml of my stack project worked out. It's clearly explained in the docs, I should have read them more throughly |
| 11:49:39 | <Inst> | I should feel bad because I'm scraping all the irc logs off via a Haskell script @tomsmeding |
| 12:04:04 | <Inst> | grrr, bugged out with an exception |
| 12:05:43 | → | __monty__ joins (~toonn@user/toonn) |
| 12:07:22 | <Inst> | i'll stop until tomsmeding gives me permission |
| 12:08:01 | → | Vajb joins (~Vajb@207.61.167.122) |
| 12:08:15 | <arahael> | Inst: I feel the convention is that as long as the logs arent' public, it's generally fine. Most people have logs automatically captured. Personally I prefer not having logs public. |
| 12:08:24 | <arahael> | BUt I'm just a lurker here. |
| 12:08:37 | <Inst> | I mean he's running public logs in the topic |
| 12:10:16 | <arahael> | Ah, yeah, that's the exception, that's generally fine too as long as it's explicit. |
| 12:10:35 | <arahael> | I see what you mean now, though. |
| 12:10:38 | <Rembane> | Inst: Sure, but tomsmeding's logs are stated in the topic. This makes it very clear that they exist and where to find them. |
| 12:10:56 | <arahael> | Rembane: Yeah, I realise now that what he's not sure about is whether he can use tomsmeding's logs in this way. |
| 12:12:35 | <Rembane> | arahael: I think it's one of those: it depends |
| 12:14:03 | → | [itchyjunk] joins (~itchyjunk@user/itchyjunk/x-7353470) |
| 12:14:21 | <Inst> | it's probably 100 MB a pop |
| 12:17:44 | <Inst> | ummmm, tomsmeding, do you have a paypal or scribe for me to transfer money? |
| 12:18:10 | <Inst> | it looks like the full download is 500 mb |
| 12:18:30 | → | cheater_ joins (~Username@user/cheater) |
| 12:19:54 | × | cheater quits (~Username@user/cheater) (Ping timeout: 258 seconds) |
| 12:19:56 | cheater_ | is now known as cheater |
| 12:29:38 | → | eggplantade joins (~Eggplanta@2600:1700:38c5:d800:49ec:9442:e7af:3828) |
| 12:32:26 | → | [exa] joins (~exa@user/exa/x-3587197) |
| 12:33:03 | → | JuanDaugherty joins (~juan@user/JuanDaugherty) |
| 12:34:11 | → | Lycurgus joins (~georg@user/Lycurgus) |
| 12:38:21 | × | vglfr quits (~vglfr@88.154.70.142) (Read error: Connection reset by peer) |
| 12:38:41 | → | vglfr joins (vglfr@gateway/vpn/protonvpn/vglfr) |
| 12:39:51 | × | eggplantade quits (~Eggplanta@2600:1700:38c5:d800:49ec:9442:e7af:3828) (Ping timeout: 240 seconds) |
| 12:43:45 | <tomsmeding> | Inst: what do you want, do you want the ircbrowse logs :p |
| 12:43:56 | <Inst> | I want to pay you for the bandwidth I wasted |
| 12:44:09 | <Inst> | and I found out I can just do this via haskellbridge instead and not bang your server with a DDOS |
| 12:44:13 | <Inst> | well, DOS |
| 12:47:40 | × | Vajb quits (~Vajb@207.61.167.122) (Ping timeout: 248 seconds) |
| 12:48:07 | <tomsmeding> | Inst: are we talking about that 200 KBps stuff from like 10 minutes ago? |
| 12:48:18 | <tomsmeding> | er, wait |
| 12:48:26 | <tomsmeding> | about 70 minutes ago |
| 12:48:28 | <tomsmeding> | reading graphs is hard |
| 12:48:51 | <tomsmeding> | I'm not sure that even registers in the bandwidth budget I have :D |
| 12:49:22 | <tomsmeding> | it's running on one of these https://www.hetzner.com/cloud (x86, a CX21) with 20 TB bandwidth per month |
| 12:49:56 | <Inst> | oh nice, so I only took up about 0.005% of your bandwidth budget |
| 12:50:08 | <tomsmeding> | Inst: I'm willing to just zip up the full znc logs for you, that's 94 MB :p |
| 12:50:39 | <tomsmeding> | that ought to make things easier |
| 12:51:34 | <Rembane> | Inst: Out of curiosity, what are you going to do with the logs? |
| 12:54:51 | → | nate2 joins (~nate@c-98-45-169-16.hsd1.ca.comcast.net) |
| 12:55:48 | × | CiaoSen quits (~Jura@2a05:5800:2be:1b00:664b:f0ff:fe37:9ef) (Ping timeout: 240 seconds) |
| 12:56:12 | <Inst> | Rembane: It doesn't matter, it's more convenient to search via HaskellBridge |
| 12:57:01 | <tomsmeding> | sure :p |
| 12:58:41 | → | random-jellyfish joins (~tiber@user/random-jellyfish) |
| 12:59:35 | × | nate2 quits (~nate@c-98-45-169-16.hsd1.ca.comcast.net) (Ping timeout: 255 seconds) |
| 13:02:56 | <Inst> | by the way, with fix, here's another weirdness of the type system |
| 13:03:15 | <Inst> | fix f = let u = f u in u |
| 13:03:22 | <Inst> | whoops, need to be more polite with my variables here |
| 13:04:17 | <Inst> | ah, if fix :: (a -> a) -> a, then the type of u is a |
| 13:05:00 | <Inst> | myFix gets inferred as (t -> t) -> t |
| 13:05:47 | <Inst> | there's an implicit promise that u is a value of form t, via the type system |
| 13:05:58 | <Rembane> | Inst: Oh, got it! |
| 13:06:54 | <Inst> | i should still write some code to append the bytestrings together, though |
| 13:07:12 | → | cheater_ joins (~Username@user/cheater) |
| 13:07:27 | × | Lycurgus quits (~georg@user/Lycurgus) (Quit: leaving) |
| 13:08:36 | × | cheater quits (~Username@user/cheater) (Ping timeout: 240 seconds) |
| 13:08:38 | cheater_ | is now known as cheater |
| 13:09:08 | <Inst> | by the way, just curious, main :: IO a, not main :: IO () |
| 13:09:17 | <Inst> | is there any way to make use of the a, or is it just needless flexibility? |
| 13:09:39 | → | dcoutts joins (~duncan@cpc69402-oxfd27-2-0-cust903.4-3.cable.virginm.net) |
| 13:10:22 | × | JuanDaugherty quits (~juan@user/JuanDaugherty) (Quit: JuanDaugherty) |
| 13:10:58 | × | vglfr quits (vglfr@gateway/vpn/protonvpn/vglfr) (Ping timeout: 260 seconds) |
| 13:11:19 | <tomsmeding> | Inst: see the second paragraph here https://www.haskell.org/onlinereport/haskell2010/haskellch5.html#x11-980005 |
| 13:11:36 | → | vglfr joins (~vglfr@88.154.70.142) |
| 13:15:31 | × | dcoutts quits (~duncan@cpc69402-oxfd27-2-0-cust903.4-3.cable.virginm.net) (Ping timeout: 260 seconds) |
| 13:19:44 | × | tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…) |
| 13:21:17 | → | Vajb joins (~Vajb@207.61.167.122) |
| 13:24:45 | → | tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) |
| 13:25:19 | <Inst> | It's just needless convenience, then, which is a bit disappointing because it'd be nice if the runtime automatically "showed" the data at least, then dumped it to stderr or something |
| 13:25:28 | <Inst> | but probably someone has thought about it already and it's just not convenient |
| 13:26:05 | <tomsmeding> | then it would be inconsistent with (), because then it would need to show "()" too |
| 13:26:27 | <tomsmeding> | if it's inconsistent that way, you're breaking parametricity which can be surprising |
| 13:27:24 | × | Alleria quits (~JohnGalt@user/alleria) (Ping timeout: 240 seconds) |
| 13:27:44 | <tomsmeding> | the fact that that does different stuff depending on whether there is a Show instance available can also be surprising |
| 13:33:16 | → | Alleria joins (~JohnGalt@user/alleria) |
| 13:34:40 | <Inst> | the only real point, I suspect |
| 13:34:54 | <Inst> | might be if someone replaced () with some other unit-like type |
| 13:37:35 | <Inst> | the typeclass monad is privileged (because >> and >>=), the type IO a is also privileged, but no point in giving unit privileges as well |
| 13:38:34 | × | Alleria quits (~JohnGalt@user/alleria) (Ping timeout: 255 seconds) |
| 13:38:43 | <cpressey> | I don't think I could agree with the assertion that the monad typeclass is "privileged (because >> and >>=)", can you elaborate Inst? |
| 13:38:55 | <tomsmeding> | do-notation uses it |
| 13:39:03 | <Inst> | iirc the do desugaring, which is baked in, uses >> and >>= |
| 13:39:28 | <cpressey> | That doesn't seem like a huge "privilege" to me, but OK |
| 13:39:31 | <tomsmeding> | also MonadFail, and with ApplicativeDo it even uses Applicative |
| 13:39:54 | <tomsmeding> | Inst: the things you're mentioning (Monad, IO) sound to me like the wired-in types: the types that GHC knows something about explicitly |
| 13:40:24 | × | arahael quits (~arahael@119-18-2-212.771202.syd.nbn.aussiebb.net) (Ping timeout: 258 seconds) |
| 13:40:35 | <tomsmeding> | in GHC there's something called "wired-in", and something else called "known-key" -- I'm not sure which means what exactly, but it's to do with this |
| 13:41:02 | <tomsmeding> | there's a variety of such things in base, in particular almost everything in GHC.Exts |
| 13:41:24 | <tomsmeding> | (see also the "reinstallable base" project) |
| 13:57:55 | × | alphacentauri quits (alphacenta@gateway/vpn/protonvpn/alphacentauri) (Quit: WeeChat 4.1.0) |
| 14:09:09 | × | random-jellyfish quits (~tiber@user/random-jellyfish) (Ping timeout: 258 seconds) |
| 14:17:58 | <albet70> | what's the difference between tuple list and Map? |
| 14:18:01 | → | billchenchina joins (~billchenc@103.152.35.21) |
| 14:18:20 | <albet70> | just missing a 'fromList'? |
| 14:20:16 | <ncf> | they're different types with different interfaces and different representations |
| 14:24:49 | × | Pickchea quits (~private@user/pickchea) (Quit: Leaving) |
| 14:30:28 | <EvanR> | Inst, "forward" being left to right is subjective |
| 14:30:39 | <EvanR> | culturally specific |
| 14:31:04 | → | machinedgod joins (~machinedg@d198-53-218-113.abhsia.telus.net) |
| 14:31:15 | <Inst> | Was briefly thinking about weird indigenous cultures that lacked a notion of subjective direction. |
| 14:32:25 | <Inst> | but what's objective is that there's a notion of forward within the lexer, no? |
| 14:34:42 | → | Guest70 joins (~Guest70@2a02:26f7:ec44:6600:0:d918:28ea:6bec) |
| 14:36:48 | × | Guest70 quits (~Guest70@2a02:26f7:ec44:6600:0:d918:28ea:6bec) (Client Quit) |
| 14:38:47 | <cpressey> | I'm not deeply familiar with it, but from a glance it doesn't look like the Haskell spec specifies the direction of lexing. Nor can I think of a good reason that it should specify that. |
| 14:39:20 | <hololeap> | if I set a 'tag' field in 'source-repository-package' to "head", is there a way to get it to manually sync with the upstream git repo? |
| 14:39:29 | <hololeap> | (in cabal.project) |
| 14:40:02 | <hololeap> | if I use a sha sum, it will update if it gets changed, but with "head" it doesn't seem to |
| 14:45:35 | × | cpressey quits (~cpressey@host-2-102-12-88.as13285.net) (Ping timeout: 248 seconds) |
| 14:46:31 | × | drdo quits (~drdo@bl14-14-49.dsl.telepac.pt) (Ping timeout: 260 seconds) |
| 14:48:28 | → | eggplantade joins (~Eggplanta@2600:1700:38c5:d800:49ec:9442:e7af:3828) |
| 14:48:34 | → | tzh joins (~tzh@c-71-193-181-0.hsd1.or.comcast.net) |
| 14:48:44 | <Inst> | it's more that if you use default >>=, the order is from previous to next, in terms of effects executed, and >=> (reverse fish) follows this order |
| 14:49:28 | <EvanR> | ordering is one thing and "left vs right" is entirely something else |
| 14:50:38 | <EvanR> | in =<< ordering is also from previous to next, whatever you mean because it does the same thing just reverses the arguments |
| 14:51:20 | <EvanR> | you're still implicitly calling left previous and right next |
| 14:52:02 | <EvanR> | compare the "order" of "effects" in f(g(h(x))) |
| 14:53:48 | <albet70> | what's the function name of f [True, False, False] == True? |
| 14:54:30 | <mauke> | head |
| 14:54:34 | <Inst> | any? |
| 14:54:36 | <albet70> | any (== True) |
| 14:54:40 | <mauke> | or |
| 14:55:04 | <mauke> | maximum |
| 14:55:05 | <albet70> | or it is |
| 14:55:14 | <mauke> | (== True) is id |
| 14:55:22 | <EvanR> | @src or |
| 14:55:22 | <lambdabot> | or = foldr (||) False |
| 14:55:28 | <dolio> | any id is or |
| 14:55:46 | <mauke> | > maximum [True, False, False] |
| 14:55:47 | <lambdabot> | True |
| 14:55:56 | <dolio> | const True |
| 14:56:01 | <mauke> | nice |
| 14:56:32 | <mauke> | > pure maxBound [True, False, False] == True |
| 14:56:34 | <lambdabot> | True |
| 14:56:39 | <Inst> | EvanR: (.) comes from mathematical f o g o h... >>='s left to right ordering is essentially imperative |
| 14:57:26 | <Inst> | I suppose Wadler et al must have been considering reverse state monad as the basis for IO at some stage |
| 14:57:36 | <EvanR> | many monads have nothing to do with imperative programming |
| 14:59:40 | → | zincy joins (~tom@2a00:23c8:970c:4801:5b6a:e81b:79dc:f684) |
| 14:59:48 | <Inst> | Which example are you thinking of? |
| 15:00:45 | <Inst> | let's say, for instance, Maybe, for you |
| 15:00:55 | <Inst> | it'd be more useful to think of a chain of functions keyed to maybe |
| 15:01:14 | <Inst> | via <=< and =<< instead of >=> or >>=? |
| 15:01:41 | <dolio> | Expression trees are monads where (>>=) is substitution. |
| 15:02:38 | <ncf> | Identity is a monad where (>>=) is function application. can't get more functional than that |
| 15:02:38 | <Inst> | back to the free monad tutorial joke? |
| 15:03:00 | <ncf> | (i guess you can...) |
| 15:03:28 | × | fendor quits (~fendor@2a02:8388:1640:be00:aab:1226:f274:5021) (Remote host closed the connection) |
| 15:03:50 | <dolio> | What? |
| 15:04:15 | <albet70> | what's the doNothing name in if-the-else? like "pass" in python? |
| 15:04:24 | <albet70> | return ()? |
| 15:04:42 | <EvanR> | maybe you want when? |
| 15:04:45 | <EvanR> | :t when |
| 15:04:46 | <lambdabot> | Applicative f => Bool -> f () -> f () |
| 15:04:48 | <EvanR> | :t unless |
| 15:04:49 | <lambdabot> | Applicative f => Bool -> f () -> f () |
| 15:04:50 | <Inst> | it depends on what context the if the else exists in? |
| 15:06:09 | <EvanR> | they include the pure () for you |
| 15:17:50 | <Inst> | there's something deceptive about it, though, because it's not "return" as with if (cond) {return u} |
| 15:18:51 | <Inst> | whereas if then else can do so easily |
| 15:19:29 | <Inst> | i guess, you can `when cond $ do` if block arguments are off |
| 15:19:39 | <Inst> | or `unless cond $ do` |
| 15:20:25 | × | tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…) |
| 15:28:13 | × | vglfr quits (~vglfr@88.154.70.142) (Remote host closed the connection) |
| 15:30:20 | × | Vajb quits (~Vajb@207.61.167.122) (Ping timeout: 255 seconds) |
| 15:33:35 | → | vglfr joins (~vglfr@88.154.70.142) |
| 15:45:35 | → | tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) |
| 15:46:48 | → | alphacentauri joins (alphacenta@gateway/vpn/protonvpn/alphacentauri) |
| 15:50:26 | → | michalz joins (~michalz@185.246.207.221) |
| 15:53:46 | × | vglfr quits (~vglfr@88.154.70.142) (Read error: Connection reset by peer) |
| 15:54:06 | → | vglfr joins (~vglfr@149.102.244.109) |
| 15:56:10 | → | blomberg joins (~default_u@117.248.77.218) |
| 15:56:40 | <blomberg> | can i use do outside main/functions in the file , and guards inside main |
| 15:56:53 | <monochrom> | Yes. |
| 15:57:18 | <blomberg> | i have never seen guards inside main |
| 15:57:44 | <blomberg> | they use if else in the learnyouahaskell book |
| 15:57:46 | <monochrom> | Sure. Many more people have never seen this either: |
| 15:57:50 | <EvanR> | Inst, return is not involved in when / unless, no one expects it to return, what are you talking about |
| 15:57:50 | <monochrom> | > let in 5+3 |
| 15:57:52 | <lambdabot> | 8 |
| 15:58:08 | <monochrom> | i.e., you can have 0 bindings in let-in. |
| 15:58:32 | <Inst> | i mean, in imperative languages i'll do early return with boolean guards |
| 15:58:54 | <EvanR> | pass doesn't do early return, no one's talking about early return |
| 15:59:18 | <Inst> | it was a derail |
| 15:59:46 | <mauke> | EvanR: Inst was talking about early return |
| 15:59:52 | <EvanR> | "there's something deceptive about" when or unless regarding early return? except it doesn't do that |
| 16:00:14 | <mauke> | because albet70 suggested 'return ()' as a solution, which is misleading if you're coming from other languages |
| 16:00:20 | <monochrom> | There is something deceptive ("deceptive") about every foreign language. |
| 16:01:12 | <blomberg> | monochrom: what about let x=4; without the in |
| 16:01:22 | <blomberg> | > let x=4; |
| 16:01:24 | <lambdabot> | <no location info>: error: not an expression: ‘let x=4;’ |
| 16:01:28 | <monochrom> | That one is a syntax error. |
| 16:01:37 | <mauke> | only allowed in do notation |
| 16:01:39 | <Inst> | ban return, use pure :) |
| 16:01:49 | <blomberg> | i have seen let without in, inside main let x = 5 ; the book said it works |
| 16:01:58 | <geekosaur> | do syntax allows it, and expands it to let-in |
| 16:02:06 | <Inst> | iirc you can also use top-level let, no? |
| 16:02:13 | <blomberg> | let in ...what |
| 16:02:13 | <geekosaur> | no |
| 16:02:13 | <EvanR> | no |
| 16:02:30 | <geekosaur> | blomberg, the rest of the do expression |
| 16:02:54 | × | billchenchina quits (~billchenc@103.152.35.21) (Ping timeout: 272 seconds) |
| 16:02:55 | <monochrom> | "do x<-getLine ; let {y=x++x}; putStrLn y" |
| 16:03:17 | <mauke> | do { let x = 42; ... } becomes let x = 42 in do { ... } |
| 16:03:34 | <Inst> | weird, I guess I remembered wrong |
| 16:03:47 | × | YoungFrog quits (~youngfrog@39.129-180-91.adsl-dyn.isp.belgacom.be) (Quit: ZNC 1.7.x-git-3-96481995 - https://znc.in) |
| 16:03:53 | <monochrom> | This is why I KISS and just answered "no". The context did not have "do". :) |
| 16:03:54 | <EvanR> | what would a top level let..in even do |
| 16:04:07 | <mauke> | you can do it in ghci because it pretends to be an interactive do block, sort of |
| 16:04:20 | <geekosaur> | think "open module" in SML, maybe |
| 16:04:27 | <geekosaur> | parameterized |
| 16:04:39 | <Inst> | iirc that was a depreciated feature in ghci |
| 16:04:44 | <Inst> | well, not depreciated |
| 16:04:55 | <Inst> | you used to only be able to do let foo = x in ghci, as in, very old ghcis |
| 16:05:03 | <EvanR> | deprecated? |
| 16:05:11 | <Inst> | deprecated :( |
| 16:05:14 | <geekosaur> | or for that matter I could imagine it to provide scoped definitions for top level functions, not that that's a feature that has been requested often |
| 16:05:23 | × | vglfr quits (~vglfr@149.102.244.109) (Ping timeout: 260 seconds) |
| 16:05:44 | → | vglfr joins (~vglfr@88.154.70.142) |
| 16:06:19 | → | Tlsx joins (~rscastilh@187.40.125.21) |
| 16:08:20 | → | econo_ joins (uid147250@id-147250.tinside.irccloud.com) |
| 16:08:21 | <blomberg> | did you know that while loop is the same as fold (f list) where list=(unfold head tail) ; while head;body; i=tail ; like i+1 |
| 16:08:43 | <blomberg> | did you know that fold is the same as for loop |
| 16:09:03 | <geekosaur> | actually for loop is map, not fold |
| 16:09:16 | <geekosaur> | in fact it's flip map |
| 16:09:39 | <geekosaur> | although I think in Haskell we expect it to be effectful to be useful, so for is flip traverse |
| 16:10:14 | <Inst> | what is a fold, in your context? |
| 16:10:46 | <EvanR> | :t unfold |
| 16:10:47 | <lambdabot> | error: |
| 16:10:47 | <lambdabot> | • Variable not in scope: unfold |
| 16:10:47 | <lambdabot> | • Perhaps you meant one of these: |
| 16:10:50 | <monochrom> | For (pun!) that matter, what are "while" and "for". :) |
| 16:10:56 | <EvanR> | :t unfoldr |
| 16:10:56 | <lambdabot> | (b -> Maybe (a, b)) -> b -> [a] |
| 16:10:58 | <Inst> | there's a function in std lib called fold, with a type of (Foldable t, Monoid m) => t m -> m |
| 16:11:13 | <monochrom> | Because next someone would argue that traverse is the for-loop. |
| 16:11:27 | <monochrom> | Err you already did haha. |
| 16:11:35 | <Inst> | okay, i'll go claim that traverse is a foreach loop :) |
| 16:11:52 | <monochrom> | Did you know that different cultures simply dichotomize things differently. |
| 16:12:11 | <EvanR> | :t for_ |
| 16:12:12 | <lambdabot> | (Foldable t, Applicative f) => t a -> (a -> f b) -> f () |
| 16:12:20 | <EvanR> | @src for_ |
| 16:12:20 | <lambdabot> | Source not found. Listen, broccoli brains, I don't have time to listen to this trash. |
| 16:13:01 | <EvanR> | @botsnack |
| 16:13:01 | <lambdabot> | :) |
| 16:13:14 | <Inst> | @src forM |
| 16:13:14 | <lambdabot> | forM = flip mapM |
| 16:13:22 | <Inst> | @src for_ |
| 16:13:22 | <lambdabot> | Source not found. And you call yourself a Rocket Surgeon! |
| 16:13:27 | <monochrom> | Did you know that the Chinese language didn't even have or need a word for the orange colour for thousands of years. |
| 16:13:28 | <Inst> | @botsnack |
| 16:13:28 | <lambdabot> | :) |
| 16:13:46 | <Inst> | I was thinking more 青 |
| 16:15:17 | <EvanR> | for_ = flip traverse_, traverse_ f = foldr c (pure ()) |
| 16:15:20 | <Inst> | sorry blomberg, it's hard to understand what you're asserting |
| 16:15:37 | <Inst> | if you mean, something that repeats an action multiple times, there are tons of Haskell higher-order functions that do the work of a for loop |
| 16:15:58 | <Inst> | and also, you have to specify whether it's a C-for loop or a Python for loop, since in the latter language for is a foreach loop |
| 16:16:18 | <EvanR> | since traditional for loops are for effects only and no results, for_ which is based on Foldable is closest in spirit |
| 16:16:25 | <Inst> | traverse_ f should be foldl', no? |
| 16:16:53 | <dolio> | No. |
| 16:16:55 | <EvanR> | that would be bad |
| 16:18:00 | <EvanR> | ... where c x k = f x *> k |
| 16:18:40 | <Inst> | huh, so that does work |
| 16:18:41 | × | machinedgod quits (~machinedg@d198-53-218-113.abhsia.telus.net) (Ping timeout: 260 seconds) |
| 16:20:39 | <Inst> | so traverse_ and for_ can actually short circuit |
| 16:21:04 | <EvanR> | depends on the Applicative |
| 16:21:22 | <Inst> | well, no it can't |
| 16:21:24 | <EvanR> | e.g. in IO something half way could throw an exception |
| 16:22:17 | <monochrom> | In fact, just depends on the Functor. :) |
| 16:22:33 | <EvanR> | :t (*>) |
| 16:22:35 | <lambdabot> | Applicative f => f a -> f b -> f b |
| 16:23:12 | <monochrom> | Err nevermind, it's Applicative. |
| 16:23:50 | <Inst> | i keep on trying to argue though that foldr is the equivalent of a for loop, but get derided for purportedly not understanding what a fold is |
| 16:24:24 | <Inst> | since you can implement for_ / traverse_ / for / traverse etc with foldr |
| 16:24:29 | <Inst> | as well as bake in short circuiting, etc |
| 16:24:47 | <monochrom> | "foldr is the equivalent of a for loop" proves misunderstanding of at least one of: foldr, for loop. |
| 16:24:51 | <EvanR> | you were kind of on the right track with the fold operation |
| 16:25:02 | <monochrom> | equivalence |
| 16:25:04 | <Inst> | a for each loop, then |
| 16:25:14 | <EvanR> | which pertains to reducing a tree, which there are many ways to go about doing |
| 16:25:31 | <EvanR> | when the reduction is a monoid, all the ways get the same answer |
| 16:25:37 | <monochrom> | I already had for each loop in mind. |
| 16:25:40 | <EvanR> | foldr and foldl are other ways |
| 16:26:19 | <Inst> | fold wasn't me, though, it was blomberg |
| 16:26:38 | <monochrom> | <monochrom> Did you know that different cultures simply dichotomize things differently. |
| 16:26:41 | <EvanR> | you mentioned the real fold, blomberg was referencing fan haskell or something |
| 16:26:54 | × | eggplantade quits (~Eggplanta@2600:1700:38c5:d800:49ec:9442:e7af:3828) (Remote host closed the connection) |
| 16:27:14 | → | eggplantade joins (~Eggplanta@2600:1700:38c5:d800:7c71:e1a2:664b:2a25) |
| 16:27:16 | <monochrom> | In Haskell we have catamorphisms, Foldable, Traversable, many other recursion schemes, and above all general recursion. |
| 16:27:43 | <Inst> | what's the proof that recursion is equivalent to while? |
| 16:27:44 | <monochrom> | You will not have much luck concorting an isomorphism from those to C or even Java. |
| 16:27:55 | <Inst> | and I'd indulge blomberg all day if he wanted me to |
| 16:28:31 | <monochrom> | Apart from mapping general recursion to general recursion. :) |
| 16:29:22 | <monochrom> | Java hasn't even discovered Monoid. |
| 16:29:31 | <monochrom> | (hence no Foldable) |
| 16:30:04 | <monochrom> | Scala is doing better in this regard actually. |
| 16:30:05 | <EvanR> | clojure is the merlin to java's arthur |
| 16:30:15 | <blomberg> | what are some functions for traversable, catamorphism |
| 16:30:47 | <Inst> | I'm probably going to spend at least one day every week whether someone knows what a typeclass is :( |
| 16:30:49 | <monochrom> | Traversable has traverse. |
| 16:31:20 | <monochrom> | Catamorphism is... just look it up. Or look up initial algebras. |
| 16:31:50 | <blomberg> | i thought it provided haskell functions |
| 16:32:20 | <Inst> | blomberg: how long have you been learning Haskell, what's the context you're learning it in, and what materials are you using? |
| 16:32:27 | <Inst> | I think you mentioned "Learn You A Haskell"? |
| 16:32:39 | <Inst> | Just so we can understand what you know already. |
| 16:32:46 | → | Vajb joins (~Vajb@207.61.167.122) |
| 16:34:27 | <Inst> | Traversable is a typeclass, Catamorphism is a concept (not a language feature) that describes a pattern of recursion |
| 16:34:38 | <Inst> | Catamorphism is just a fancy term for reduce |
| 16:34:39 | × | rosco quits (~rosco@yp-150-69.tm.net.my) (Quit: Lost terminal) |
| 16:35:31 | <monochrom> | No. Foldable's fold is. |
| 16:36:11 | <monochrom> | This is what's wrong with non-rigorous intuition. |
| 16:36:29 | <monochrom> | https://www.vex.net/~trebla/humour/tautologies.html #0 |
| 16:36:37 | <blomberg> | traverse : Map each element of a structure to an action, evaluate these actions from left to right, and collect the results. --what action ? IO or just functions |
| 16:36:57 | <EvanR> | :t traverse |
| 16:36:58 | <lambdabot> | (Traversable t, Applicative f) => (a -> f b) -> t a -> f (t b) |
| 16:37:14 | <EvanR> | actions are the f b |
| 16:37:27 | <EvanR> | so IO whatever is a possible example |
| 16:37:32 | <mauke> | blomberg: any sort of applicative functor, including IO |
| 16:40:22 | <probie> | but `f` could be something more mundane like `(->) a`. (`(->) a b` is just the prefix form of `a -> b`, `(->) a` is how you write it if you want something of kind `* -> *`) |
| 16:40:51 | <probie> | :t traverse (*) [1..5 :: Int] |
| 16:40:52 | <lambdabot> | Int -> [Int] |
| 16:41:07 | <probie> | > traverse (*) [1..5::Int] 42 |
| 16:41:09 | <lambdabot> | [42,84,126,168,210] |
| 16:41:14 | × | phma quits (~phma@host-67-44-208-184.hnremote.net) (Read error: Connection reset by peer) |
| 16:42:13 | → | phma joins (phma@2001:5b0:212a:ca38:321f:39d3:cfb3:6c89) |
| 16:46:12 | <EvanR> | Inst, you can't be derided on the grounds of foldr (on list) being able to implement for_, traverse_, for, traverse on list, since foldr can be used to implement any function on lists. Similar to the functions maybe, either, bool for Maybe, Either, Bool respectively. So it is everything |
| 16:49:54 | × | alphacentauri quits (alphacenta@gateway/vpn/protonvpn/alphacentauri) (Quit: WeeChat 4.1.0) |
| 16:51:36 | → | drdo joins (~drdo@bl14-14-49.dsl.telepac.pt) |
| 16:52:55 | → | waleee joins (~waleee@2001:9b0:21c:e600:f2f3:f744:435d:137c) |
| 16:54:16 | × | Inst quits (~Inst@120.244.192.250) (Ping timeout: 260 seconds) |
| 16:56:21 | → | nate2 joins (~nate@c-98-45-169-16.hsd1.ca.comcast.net) |
| 16:58:35 | × | notzmv quits (~zmv@user/notzmv) (Ping timeout: 258 seconds) |
| 17:01:16 | × | nate2 quits (~nate@c-98-45-169-16.hsd1.ca.comcast.net) (Ping timeout: 258 seconds) |
| 17:04:54 | → | notzmv joins (~zmv@user/notzmv) |
| 17:06:13 | <mauke> | :t foldr (\x z -> Just (x, maybe [] (uncurry (:)) z)) Nothing |
| 17:06:14 | <lambdabot> | Foldable t => t a -> Maybe (a, [a]) |
| 17:08:07 | × | emmanuelux quits (~emmanuelu@user/emmanuelux) (Read error: Connection reset by peer) |
| 17:08:20 | <mauke> | > foldr (\x z -> Just (x, maybe [] (uncurry (:)) z)) Nothing [0 ..] |
| 17:08:22 | <lambdabot> | Just (0,[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,2... |
| 17:09:03 | → | emmanuelux joins (~emmanuelu@user/emmanuelux) |
| 17:16:51 | → | Inst joins (~Inst@120.244.192.250) |
| 17:17:21 | <Inst> | EvanR: my analogy is more that foldr on lists is too powerful |
| 17:17:29 | <Inst> | in the same way for is too powerful |
| 17:18:04 | <Inst> | you can even implement use foldr in such a way that you're storing two lists besides the list being deconstructed |
| 17:18:54 | <Inst> | and you can mimic for each's ability to modify elements of the data structure that you're not looping over |
| 17:21:04 | <Inst> | probie knows all the neat tricks with higher order functions, hahaha |
| 17:21:45 | <EvanR> | if you think for loops are too powerful you don't want me to tell you about goto |
| 17:22:00 | <EvanR> | which was used before for was a thing |
| 17:22:31 | <Inst> | i knew gotos when i was a whee kid, then stopped programming. Hopefully my brain damage has recovered by now. |
| 17:22:36 | <Inst> | *wee |
| 17:22:58 | <EvanR> | yeah me too, little did I know my BASIC implementation had subroutines |
| 17:23:12 | <EvanR> | mind blown |
| 17:23:54 | <Inst> | that said, there's tons of cool tricks you can do with traverse, that are a lot less obvious with for / for each |
| 17:23:59 | <monochrom> | Did its subroutine have paramter passing? Return values? |
| 17:24:16 | <monochrom> | Because subroutines are annoying instead of helpful without them. |
| 17:24:19 | → | ProgKea joins (~ProgKea@p5081b776.dip0.t-ipconnect.de) |
| 17:24:21 | <probie> | > let until' = \p f z -> foldr (\() k x -> if p x then x else k (f x)) id (repeat ()) z in until (> 10) (* 2) 1 |
| 17:24:22 | <lambdabot> | 16 |
| 17:24:38 | <Inst> | traverse unsetEnv ["HTTP_PROXY", "HTTPS_PROXY"] |
| 17:24:51 | <monochrom> | Err actually now I realize that by your time, they did. So, cool. |
| 17:24:51 | <Inst> | people don't do this in imperative languages, right? |
| 17:25:32 | <Inst> | at least, it looks better thanfor u in |
| 17:25:34 | <probie> | The limit to foldr's power is the length of the list it's run on. It's only all powerful if that list is infinite |
| 17:25:38 | × | tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…) |
| 17:25:48 | <Inst> | for u in [literals, moreliterals]: |
| 17:25:50 | <Inst> | someAct(u) |
| 17:26:09 | → | simendsjo joins (~user@84.211.91.241) |
| 17:26:10 | <monochrom> | The BASIC in my time did not. Fortunately it was a relief that my university back then used Pascal for 1st year. I was very delighted "finally, parameter passing and return values, and recursion too" |
| 17:26:27 | <Inst> | you can trigger recursion within the lambda @ probies |
| 17:26:56 | <Inst> | *probie |
| 17:27:29 | × | Vajb quits (~Vajb@207.61.167.122) (Ping timeout: 246 seconds) |
| 17:27:54 | <probie> | True, but at that point the power isn't coming from `foldr`, but from general recursion |
| 17:29:18 | <monochrom> | Heh, "foldr can drive GPUs because can give it an FFI function that shells out to C to call OpenCL functions to drive GPUs"? |
| 17:29:36 | <monochrom> | (at which point can't even give the credit to C, no?) |
| 17:29:45 | × | ProgKea quits (~ProgKea@p5081b776.dip0.t-ipconnect.de) (Quit: leaving) |
| 17:29:56 | <probie> | That said, if have `foldr` and `unfoldr`, we have general recursion |
| 17:30:25 | × | simendsjo quits (~user@84.211.91.241) (Remote host closed the connection) |
| 17:31:05 | → | Vajb joins (~Vajb@207.61.167.122) |
| 17:31:11 | <monochrom> | (which is why I was pretty annoying by a post on discourse that says "FP is a leaky abstraction, the leak shows when eg ... GPUs ...". Dude, by that standard, even C is a leaky abstraction.) |
| 17:31:20 | <Inst> | wait, can't foldr be used to implement unfoldr? |
| 17:32:41 | → | elevenkb joins (elevenkb@thunix.net) |
| 17:32:53 | × | ChaiTRex quits (~ChaiTRex@user/chaitrex) (Quit: ChaiTRex) |
| 17:33:56 | <EvanR> | monochrom, apparently it did not have parameter passing or return value |
| 17:34:03 | <monochrom> | :( |
| 17:34:16 | <EvanR> | still would have been better than emulating such a thing with goto xD |
| 17:34:35 | <monochrom> | Eventually QuickBASIC had them. (And by extension, Visual BASIC later.) |
| 17:35:29 | <EvanR> | ST_BASIC_Sourcebook_and_Tutorial-1986 on archive.org holy crap... I will not get sucked into this |
| 17:35:43 | × | Vajb quits (~Vajb@207.61.167.122) (Ping timeout: 264 seconds) |
| 17:36:10 | <monochrom> | Did you know how subroutines were supported in the 1950s-60s before Algol came along and added recursion, and this was why people could not believe that recursion was possible? |
| 17:36:35 | <monochrom> | For each subroutine, have a static location to store the return address. |
| 17:36:42 | <mauke> | well, obviously |
| 17:36:53 | <mauke> | you'd allocate a static block of "locals" for each subroutine |
| 17:37:00 | → | dcoutts joins (~duncan@cpc69402-oxfd27-2-0-cust903.4-3.cable.virginm.net) |
| 17:37:02 | <monochrom> | (Right, only Peter Naur thought of using a stack when implementing Algol.) |
| 17:37:17 | <mauke> | and then you can implement parameters as local variables: just set them before the call |
| 17:37:24 | <mauke> | and then the return address is just another parameter |
| 17:37:28 | <monochrom> | So yeah reentrance was considered impossible for a while. |
| 17:38:03 | <monochrom> | So yeah also how I would do in BASIC. But even I knew there ought to be a better way. |
| 17:38:21 | <mauke> | and ever since, subroutines have been slow because they have to use indirect addressing for all variables :-( |
| 17:38:37 | <EvanR> | I wonder if you could make your own stack and use it that way in basic |
| 17:38:47 | <monochrom> | BASIC did not damage me. Instead it annoyed me and prepared me for heaven later. :) |
| 17:39:30 | → | tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) |
| 17:39:44 | <geekosaur> | I got about halfway through implementing that by stealing a variable, then I found Tiny-C |
| 17:39:55 | × | dhruvasagar quits (~dhruvasag@49.207.194.211) (Ping timeout: 264 seconds) |
| 17:40:25 | <monochrom> | Or perhaps it was me who was unwaveringly mathematically minded, so any 2nd-class thing in a language felt like a "language smell", a limitation rather than a role model. |
| 17:41:05 | <monochrom> | Like, "whaddaya mean SIN and COS are built-in functions but there is no user-defined functions" |
| 17:41:18 | <EvanR> | then nirvana must be ruby where even classes are first class |
| 17:41:38 | → | kilian joins (~kilian@2a01:4b00:89ca:2a00:f172:7938:df2a:8c6c) |
| 17:41:40 | <monochrom> | Well, it isn't statically typed. :) |
| 17:41:41 | <geekosaur> | ruby's a cheap knockoff of smalltalk |
| 17:41:58 | <mauke> | hey, that's pretty much how it is in perl |
| 17:42:12 | <monochrom> | Smalltalk is the only dynamically typed or untyped language I truly respect. :) |
| 17:42:27 | <monochrom> | OK OK, Scheme is pretty cool too. |
| 17:42:53 | <mauke> | the "perlfunc" manual page is called that because it documents the built-in functions of perl |
| 17:43:04 | <mauke> | whereas the user-defined stuff is in "perlsub": they're subroutines! |
| 17:44:09 | → | Guest18 joins (~Guest18@p200300db7f09bb00b26088fffe123eaa.dip0.t-ipconnect.de) |
| 17:44:31 | <monochrom> | Oh hey, "the return address is just another parameter" is why I don't draw a line between JSR and CPS. :) |
| 17:44:48 | <mauke> | so it used to be that "function" meant "named built-in operator", but I don't think anyone has been using this terminology strictly in the last 20 years |
| 17:45:02 | ← | Guest18 parts (~Guest18@p200300db7f09bb00b26088fffe123eaa.dip0.t-ipconnect.de) () |
| 17:45:55 | × | _xor quits (~xor@72.49.199.93) (Ping timeout: 264 seconds) |
| 17:46:18 | → | Unicorn_Princess joins (~Unicorn_P@user/Unicorn-Princess/x-3540542) |
| 17:46:22 | <EvanR> | Inst, unfoldr isn't a function "on lists" so that doesn't apply. It builds a list doesn't analyze one (though the callbacks passed to it might, which might themselves use foldr, but it's related to unfoldr's implementation) |
| 17:47:13 | <mauke> | monochrom: would be fun if you could natively pass multiple return addresses for success and error cases |
| 17:47:37 | <Inst> | it's back to how, while you can get foldr to override the limit on number of evaluations |
| 17:48:02 | <geekosaur> | mauke, snobol beat you to it |
| 17:48:12 | <monochrom> | I think they call that "exceptions" and "stack unwinding" ... :) |
| 17:48:17 | <Inst> | hmmm, you probably can still implement unfoldr in terms of foldr using an infinite list |
| 17:48:46 | <monochrom> | But oh cool so snobol had bicountinuoations haha |
| 17:48:58 | → | _xor joins (~xor@72.49.199.93) |
| 17:48:59 | <EvanR> | you can place a useless unused foldr call anywhere in your implementation if you want |
| 17:49:17 | <monochrom> | Someone needs to write the paper "COBOL, The Ultimate Lambda" hahaha |
| 17:50:24 | <EvanR> | but it's really missing the point of these "you can construct a thing with limited tools" demos |
| 17:50:34 | <mauke> | BOL, the prime lambda |
| 17:50:45 | <monochrom> | Inst, I tried that silently, it ended up begging the question. I could be wrong. |
| 17:50:45 | × | kilian quits (~kilian@2a01:4b00:89ca:2a00:f172:7938:df2a:8c6c) (Quit: Client closed) |
| 17:51:30 | <EvanR> | i meant to say unrelated to unfoldr's implementation |
| 17:51:49 | <EvanR> | which is basically lambda calculus + analyzing a Maybe |
| 17:52:04 | → | dhruvasagar joins (~dhruvasag@49.207.194.211) |
| 17:52:05 | × | Square quits (~Square@user/square) (Remote host closed the connection) |
| 17:52:49 | <probie> | :t \f z -> foldr (\() k x -> case f x of { Nothing -> []; Just (y,x') -> y: k x'}) (const []) (repeat ()) z |
| 17:52:50 | <lambdabot> | (t -> Maybe (a, t)) -> t -> [a] |
| 17:52:51 | <monochrom> | Well, I still haven't ruled out making foldr and unfoldr a mutually recursive pair... |
| 17:53:34 | <Inst> | https://paste.tomsmeding.com/mmlPjQKA |
| 17:53:46 | → | Vajb joins (~Vajb@207.61.167.122) |
| 17:54:02 | <Inst> | derp |
| 17:54:06 | <Inst> | got there faster than I did |
| 17:54:45 | → | Square joins (~Square@user/square) |
| 17:54:51 | → | simendsjo joins (~user@84.211.91.241) |
| 17:54:54 | <monochrom> | OK, that will be on the exam next time I teach. >:D |
| 17:55:41 | × | doyougnu quits (~doyougnu@45.46.170.68) (Ping timeout: 255 seconds) |
| 17:55:59 | <EvanR> | not sure what specific criteria this satisfies, other than "uses foldr somehow" xD |
| 17:56:36 | <monochrom> | It satifies your criteria if you also allow a "repeat ()" as an extra axiom. |
| 17:56:40 | <probie> | Given `foldr` and a single infinite list, I have general recursion |
| 17:56:56 | × | dhruvasagar quits (~dhruvasag@49.207.194.211) (Ping timeout: 255 seconds) |
| 17:57:05 | <monochrom> | So it begs the question a little bit. Who ordered that? :) |
| 17:57:30 | <Inst> | redundant |
| 17:57:32 | <Inst> | https://paste.tomsmeding.com/5aXScpQu |
| 17:57:48 | <EvanR> | it feels like you can just crack open the repeat () and grab the general recursion. And get out before the cave of wonders melts around you |
| 17:58:10 | <Inst> | whoops |
| 17:58:12 | <Inst> | forgot default :( |
| 17:58:29 | <monochrom> | But I have obtained recursion with less. data D a = MkD (D a -> a) |
| 17:58:40 | <monochrom> | err, s/data/newtype/ is better |
| 17:58:47 | → | John_Ivan joins (~John_Ivan@user/john-ivan/x-1515935) |
| 17:59:32 | <John_Ivan> | hi, anyone know where "import Data.Text.Metrics (levenshtein)" is located? in what package? |
| 17:59:51 | <John_Ivan> | been trying to install it with cabal but I can't find it. I was told it was "edit-distance" then "text" and then "ghc-text-metrics" |
| 17:59:51 | <Inst> | hoogle.haskell.org ? |
| 18:00:09 | <Inst> | https://hoogle.haskell.org/?hoogle=levenshtein |
| 18:00:37 | <monochrom> | perhaps https://hackage.haskell.org/package/text-metrics-0.3.2/docs/Data-Text-Metrics.html |
| 18:01:08 | <probie> | EvanR: Try it. I can definitely have a system which allows the construction of `repeat ()`, but not general recursion (e.g. just `unfoldr` with no `foldr`) |
| 18:01:49 | × | _xor quits (~xor@72.49.199.93) (Read error: Connection reset by peer) |
| 18:02:03 | <monochrom> | What I did: https://hackage.haskell.org/packages/search?terms=metrics |
| 18:02:20 | <EvanR> | a system which allows repeat (), or a system which allows repeat to be implemented somehow with something else |
| 18:02:49 | <monochrom> | (Yeah, "Data.Text.Metrics" didn't work. Not very happy that hackage lost search-for-module-name a long time ago.) |
| 18:02:56 | → | dhruvasagar joins (~dhruvasag@49.207.194.211) |
| 18:03:38 | <monochrom> | Yeah EvanR it needs a seeding infinite list to generate other infinite lists. :) |
| 18:03:56 | <EvanR> | the axiom of infinity |
| 18:04:08 | → | _xor joins (~xor@72.49.199.93) |
| 18:04:09 | <monochrom> | which is a pun at the meta level :) |
| 18:04:16 | × | _xor quits (~xor@72.49.199.93) (Client Quit) |
| 18:04:36 | → | Pickchea joins (~private@user/pickchea) |
| 18:04:36 | <monochrom> | "To understand infinite lists, first you need to understand infinite lists" |
| 18:04:52 | → | _xor joins (~xor@72.49.199.93) |
| 18:05:02 | × | Vajb quits (~Vajb@207.61.167.122) (Ping timeout: 255 seconds) |
| 18:07:46 | × | dhruvasagar quits (~dhruvasag@49.207.194.211) (Ping timeout: 260 seconds) |
| 18:08:06 | <John_Ivan> | monochrom, , Inst found it. thanks. it's indeed in "text-metrics" |
| 18:08:11 | <John_Ivan> | cabal install --lib text-metrics |
| 18:08:13 | <John_Ivan> | did the trick. |
| 18:09:12 | <tomsmeding> | John_Ivan: earlier today I told someone else not to use 'cabal install --lib', I'll link that to you as well: https://ircbrowse.tomsmeding.com/day/lchaskell/2023/10/22?id=1114546#trid1114546 |
| 18:09:54 | <tomsmeding> | there _is_ a usecase for 'cabal install --lib', but be very sure you want that very specific usecase, and are aware of the downsides, before doing it |
| 18:10:31 | <John_Ivan> | tomsmeding, I'll have a read, thanks. |
| 18:14:39 | <monochrom> | :( |
| 18:14:53 | × | _xor quits (~xor@72.49.199.93) (Ping timeout: 260 seconds) |
| 18:15:35 | <Inst> | I suggest you go with cabal headers and cabal run yourFile if you're working on a single module script, and can bear to live without HLS support |
| 18:16:37 | × | Square quits (~Square@user/square) (Remote host closed the connection) |
| 18:18:14 | <EvanR> | are you referring to cabal script |
| 18:18:25 | → | Square joins (~Square@user/square) |
| 18:18:26 | <Inst> | *cabal script |
| 18:18:44 | <ncf> | did GHC 9 get rid of the "occurs check: cannot construct infinite type" error? i seem to always be getting "couldn't match" errors instead |
| 18:18:56 | <ncf> | lambdabot still gives infinite type errors so maybe it's not on GHC 9 yet? (int-e?) |
| 18:18:56 | <Inst> | https://cabal.readthedocs.io/en/stable/getting-started.html#run-a-single-file-haskell-script |
| 18:19:08 | <monochrom> | Nah, "cabal headers" is fine, "cabal script" just means having cabal headers :) |
| 18:19:18 | <int-e> | ncf: yeah it's not |
| 18:19:22 | <EvanR> | now that I know what that means |
| 18:19:32 | → | segfaultfizzbuzz joins (~segfaultf@23-93-74-212.fiber.dynamic.sonic.net) |
| 18:19:47 | <Inst> | I'm trying to find where fendor has the issue that HLS doesn't support cabal scripts |
| 18:19:56 | <Inst> | cabal scripts are really the solution to all the install --lib problems |
| 18:20:10 | → | dhruvasagar joins (~dhruvasag@49.207.194.211) |
| 18:20:26 | <Inst> | you can already cabal repl -b what you need if you're playing in repl, but compiled... |
| 18:20:27 | <EvanR> | making a cabal project is probably a good "standard procedure for noobs" |
| 18:20:54 | <EvanR> | cabal script when you know what you're doing |
| 18:21:10 | <Inst> | depends on your definition of noob, some people might be coming with little previous programming experience |
| 18:21:25 | <Inst> | and having to navigate the manifest can be a headache |
| 18:21:27 | <Inst> | cabal init |
| 18:21:31 | <monochrom> | When I teach type inference, I rely on the compiler saying "infinite type occurs check" :( |
| 18:22:35 | <monochrom> | Unpopular opinion: s/standard procedure/cargo-culting, fake it until you make it/ |
| 18:23:03 | <haskellbridge> | <fendor> Not quite accurate, it works if you know how :) |
| 18:23:39 | <monochrom> | Because that's exactly what we tell Java beginners about "public class MyMain { public static void main(String[] args)" |
| 18:23:58 | <haskellbridge> | <fendor> Like, HLS works with cabal scripts if you can trick it |
| 18:23:59 | <tomsmeding> | {}} |
| 18:24:17 | <Inst> | btw, speaking of sinophone affairs, have you seen this, monochrom? |
| 18:24:19 | <Inst> | http://www.tup.tsinghua.edu.cn/bookscenter/book_08868201.html |
| 18:24:24 | <Inst> | http://www.tup.tsinghua.edu.cn/booksCenter/bookcatalog.html?id=08868201 |
| 18:24:37 | × | dhruvasagar quits (~dhruvasag@49.207.194.211) (Ping timeout: 255 seconds) |
| 18:24:57 | tomsmeding | is unnerved by booksCenter vs bookscenter |
| 18:25:44 | <EvanR> | the internet is cases sensitive? smh |
| 18:26:20 | <monochrom> | My DNS can't resolve that. |
| 18:26:41 | → | _xor joins (~xor@72.49.199.93) |
| 18:26:54 | <tomsmeding> | monochrom: http://124.17.26.243/bookscenter/book_08868201.html |
| 18:27:03 | <tomsmeding> | get a better DNS resolver :p |
| 18:27:10 | <Inst> | no, could be political blocking |
| 18:27:22 | <EvanR> | banned bookscenter |
| 18:27:46 | <Inst> | i mean tsinghua could also be blocking the outside |
| 18:28:07 | <monochrom> | OK yeah Google's 8.8.8.8 resolves it fine. |
| 18:28:07 | <Inst> | either case, looks like it's a peking u professor on the authors page |
| 18:28:24 | <monochrom> | But I already tried my own bind9 install... |
| 18:28:36 | × | _xor quits (~xor@72.49.199.93) (Read error: Connection reset by peer) |
| 18:28:41 | <Inst> | really cheap, 49 RMB / ~7 USD |
| 18:29:13 | → | _xor joins (~xor@72.49.199.93) |
| 18:29:27 | <ncf> | you don't need to install bind9 to change your local dns servers :) |
| 18:31:06 | <monochrom> | Haha they gave up translating Applicative to Chinese :) |
| 18:31:10 | → | dhruvasagar joins (~dhruvasag@49.207.194.211) |
| 18:31:38 | <tomsmeding> | monochrom: did they phonetically render it, or just write in latin characters? |
| 18:31:51 | → | doyougnu joins (~doyougnu@45.46.170.68) |
| 18:32:15 | <monochrom> | Latin/English word verbatim. |
| 18:32:42 | <EvanR> | need an acme latin prelude |
| 18:32:44 | <Inst> | actually, i don't think it's pek professor, one of the authors seems to be at zhongshan in guangzhou |
| 18:33:18 | <EvanR> | there's a roman numerals type in there somewhere, so |
| 18:35:44 | × | dhruvasagar quits (~dhruvasag@49.207.194.211) (Ping timeout: 255 seconds) |
| 18:36:24 | <Inst> | Both of them are at Zhongshan, sigh. |
| 18:37:23 | <monochrom> | Ah, bind9 has error log "DNS format error from 124.17.26.250#53 resolving www.tup.tsinghua.edu.cn/A for 192.168.1.6#43627: server sent FORMERR" |
| 18:38:43 | × | dcoutts quits (~duncan@cpc69402-oxfd27-2-0-cust903.4-3.cable.virginm.net) (Ping timeout: 252 seconds) |
| 18:39:38 | <Inst> | w/e, i'll pick up the book on my own, since Hudak and Bird have passed on, this is the closest you'll get to having a recent Haskell book published by a tier 1 university's publishing house |
| 18:39:48 | <Inst> | just thought it'd be more favorable to your pedagogical approach / philosophy |
| 18:42:08 | → | dhruvasagar joins (~dhruvasag@49.207.194.211) |
| 18:42:53 | → | fakenullie joins (~nullie@2a01:4f8:c2c:6177::1) |
| 18:44:17 | × | nullie quits (~nullie@amsterdam.nullie.name) (Quit: WeeChat 2.8) |
| 18:44:36 | fakenullie | is now known as nullie |
| 18:46:58 | × | dhruvasagar quits (~dhruvasag@49.207.194.211) (Ping timeout: 252 seconds) |
| 18:47:29 | → | dhruvasagar joins (~dhruvasag@49.207.194.211) |
| 18:47:47 | → | ChaiTRex joins (~ChaiTRex@user/chaitrex) |
| 18:52:03 | × | dhruvasagar quits (~dhruvasag@49.207.194.211) (Ping timeout: 258 seconds) |
| 18:54:35 | × | Batzy quits (~quassel@user/batzy) (Ping timeout: 240 seconds) |
| 18:55:02 | → | Batzy joins (~quassel@user/batzy) |
| 18:58:23 | → | dhruvasagar joins (~dhruvasag@49.207.194.211) |
| 19:02:05 | → | wootehfoot joins (~wootehfoo@user/wootehfoot) |
| 19:02:59 | × | dhruvasagar quits (~dhruvasag@49.207.194.211) (Ping timeout: 245 seconds) |
| 19:04:06 | → | dhruvasagar joins (~dhruvasag@49.207.194.211) |
| 19:05:00 | × | notzmv quits (~zmv@user/notzmv) (Ping timeout: 240 seconds) |
| 19:05:49 | → | rgw joins (~R@2605:a601:a0df:5600:28a6:bcb9:bb55:dff5) |
| 19:08:10 | → | euleritian joins (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) |
| 19:08:36 | × | dhruvasagar quits (~dhruvasag@49.207.194.211) (Ping timeout: 240 seconds) |
| 19:09:38 | × | Benzi-Junior quits (~BenziJuni@88-149-64-112.du.xdsl.is) (Quit: ZNC 1.8.2 - https://znc.in) |
| 19:10:34 | <John_Ivan> | https://hackage.haskell.org/package/process-1.6.18.0/docs/System-Process.html |
| 19:10:48 | <John_Ivan> | Anything in this package to "suspend" a process? And by suspend, I mean pause, not stop. |
| 19:10:56 | <John_Ivan> | I suspect it should be here. |
| 19:11:00 | <dminuoso> | What do you even mean by "suspent" |
| 19:11:17 | <John_Ivan> | Pause. Put a process in a temporary pause until resumed explicitly. |
| 19:11:27 | <dminuoso> | SIGSTOP is the general mechanism. |
| 19:11:40 | <dminuoso> | https://www.gnu.org/software/libc/manual/html_node/Job-Control-Signals.html |
| 19:11:42 | <geekosaur> | SIGSTOP/SIGCONT, I suspect. That would be in System.Posix.Process |
| 19:11:59 | <John_Ivan> | I see, that will do. Only for POSIX systems I take it? |
| 19:12:05 | <geekosaur> | yes |
| 19:12:09 | → | Benzi-Junior joins (~BenziJuni@88-149-64-112.du.xdsl.is) |
| 19:12:09 | <John_Ivan> | Thanks. |
| 19:12:15 | <geekosaur> | I have no idea whether this can even be done on Windows |
| 19:12:25 | <dminuoso> | FSVO of "POSIX" systems, given that there arent really any truly compliant systems out there. |
| 19:12:32 | <John_Ivan> | It's fine, at least I know which direction to take next. FFI-Win32 |
| 19:12:34 | <geekosaur> | if it can it would be somewhere in the Win32 package |
| 19:13:02 | <probie> | Inst: I guess you probably don't know if you haven't bought it yet, but does it work as a self-contained course, or does it need an instructor to go along with it? |
| 19:13:08 | → | falafel joins (~falafel@62.175.113.194.dyn.user.ono.com) |
| 19:15:13 | → | notzmv joins (~zmv@user/notzmv) |
| 19:15:38 | → | dhruvasagar joins (~dhruvasag@49.207.194.211) |
| 19:15:49 | <_d0t> | is there a way to stop GHC from removing temporary files after compilation? I |
| 19:16:01 | × | tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…) |
| 19:17:30 | <geekosaur> | -keep-tmp-files |
| 19:17:54 | <_d0t> | thanks! |
| 19:18:06 | <monochrom> | I think every textbook satisfies "the author thinks it's self-contained, but in reality you always need an instructor" :D |
| 19:22:47 | <John_Ivan> | geekosaur, seems I can't install the "unix" package from which System.Posix comes from |
| 19:22:53 | <John_Ivan> | this is on a windows build of ghc |
| 19:23:06 | <John_Ivan> | I will look into win32 alternatives |
| 19:23:44 | <geekosaur> | there's a unix-compat but it probably doesn't convert that |
| 19:24:02 | × | notzmv quits (~zmv@user/notzmv) (Ping timeout: 246 seconds) |
| 19:24:02 | <John_Ivan> | geekosaur, I'm fine with picking a different packages. i just wanna know if haskell supports conditional compilation |
| 19:24:23 | <John_Ivan> | so I can make the code install the appropriate package on the appropriate platform |
| 19:24:37 | <mauke> | yes, but it's a pile of hacks |
| 19:24:56 | × | dhruvasagar quits (~dhruvasag@49.207.194.211) (Ping timeout: 272 seconds) |
| 19:24:57 | <John_Ivan> | it is? so how do they do it in their own packages? |
| 19:24:57 | <mauke> | well, the CPP part is at least |
| 19:25:18 | <mauke> | but you can use package flags to select different sets of dependencies |
| 19:25:36 | <John_Ivan> | that would do |
| 19:25:40 | <John_Ivan> | thanks |
| 19:26:17 | <Inst> | probie: there's actually a few Chinese Haskell books, one of which is titled "Magical Haskell". I just thought it was nice that Tsinghua published this one, given that Tsinghua is the Chinese equiv of MIT (and once ranked higher because of US News screwing things up) |
| 19:26:48 | <Inst> | I was hoping that Tsinghua decided to pick up Haskell |
| 19:27:24 | <mauke> | https://cabal.readthedocs.io/en/stable/cabal-package.html#configurations |
| 19:28:27 | <John_Ivan> | mauke, that is good. can cabal detect what platform it's installed on? |
| 19:28:39 | <John_Ivan> | so maybe some of those flags trigger automatically |
| 19:29:30 | <Inst> | I think it should be able to. |
| 19:29:45 | × | wootehfoot quits (~wootehfoo@user/wootehfoot) (Read error: Connection reset by peer) |
| 19:29:47 | → | tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) |
| 19:29:54 | <Inst> | There's if os == ... booleans in some cabal files I've seen |
| 19:30:48 | <sclv> | John_Ivan: see the conditionals section of docs https://cabal.readthedocs.io/en/stable/cabal-package.html#conditions |
| 19:31:09 | <mauke> | the example file has 'if !os(windows)' |
| 19:31:15 | <John_Ivan> | cheers |
| 19:37:02 | → | CiaoSen joins (~Jura@2a05:5800:2be:1b00:664b:f0ff:fe37:9ef) |
| 19:41:59 | <probie> | Inst: I'm currently trying to find a (physical) book that's at the same level as LYAH, but more modern and mostly self-contained. English or Chinese work for the intended victim |
| 19:41:59 | × | euleritian quits (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) (Read error: Connection reset by peer) |
| 19:42:15 | <Inst> | good luck! :( |
| 19:42:36 | → | euleritian joins (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) |
| 19:44:20 | → | santiagopim joins (~user@90.167.66.131) |
| 19:47:49 | <Inst> | have you tried Effective Haskell? |
| 19:51:07 | × | yoyofreeman quits (~yoyofreem@176.97.76.178) (Read error: Connection reset by peer) |
| 19:51:48 | → | yoyofreeman joins (~yoyofreem@176.97.76.178) |
| 19:52:59 | × | puke quits (~puke@user/puke) (Quit: puke) |
| 19:53:02 | × | vglfr quits (~vglfr@88.154.70.142) (Ping timeout: 255 seconds) |
| 19:53:16 | × | Pixi quits (~Pixi@user/pixi) (Quit: Leaving) |
| 19:53:53 | → | Sgeo joins (~Sgeo@user/sgeo) |
| 19:54:28 | → | Pixi joins (~Pixi@user/pixi) |
| 19:56:17 | → | vglfr joins (~vglfr@88.154.70.142) |
| 19:57:39 | → | puke joins (~puke@user/puke) |
| 20:00:28 | × | takuan quits (~takuan@178-116-218-225.access.telenet.be) (Remote host closed the connection) |
| 20:05:23 | <Inst> | totally my fault, ugh |
| 20:05:24 | <Inst> | https://cabal.readthedocs.io/en/stable/cabal-commands.html#cabal-run |
| 20:05:30 | <Inst> | wasn't familiar with how the -- worked :( |
| 20:05:58 | → | machinedgod joins (~machinedg@d198-53-218-113.abhsia.telus.net) |
| 20:10:41 | × | Pickchea quits (~private@user/pickchea) (Quit: Leaving) |
| 20:10:43 | → | dhruvasagar joins (~dhruvasag@49.207.194.211) |
| 20:15:08 | × | dhruvasagar quits (~dhruvasag@49.207.194.211) (Ping timeout: 248 seconds) |
| 20:16:44 | → | drewjose3 joins (~drewjose@129.154.40.88) |
| 20:16:51 | × | coot quits (~coot@89-69-206-216.dynamic.chello.pl) (Quit: coot) |
| 20:17:07 | × | _ht quits (~Thunderbi@28-52-174-82.ftth.glasoperator.nl) (Ping timeout: 255 seconds) |
| 20:17:26 | → | _ht joins (~Thunderbi@28-52-174-82.ftth.glasoperator.nl) |
| 20:18:28 | × | drewjose quits (~drewjose@129.154.40.88) (Ping timeout: 255 seconds) |
| 20:18:28 | × | Hecate quits (~mariposa@user/hecate) (Ping timeout: 255 seconds) |
| 20:18:29 | drewjose3 | is now known as drewjose |
| 20:18:44 | → | random-jellyfish joins (~tiber@2a02:2f04:11e:c600:f12e:ec08:e2cf:6f5d) |
| 20:18:44 | × | random-jellyfish quits (~tiber@2a02:2f04:11e:c600:f12e:ec08:e2cf:6f5d) (Changing host) |
| 20:18:44 | → | random-jellyfish joins (~tiber@user/random-jellyfish) |
| 20:20:18 | → | Hecate joins (~mariposa@user/hecate) |
| 20:20:57 | × | _ht quits (~Thunderbi@28-52-174-82.ftth.glasoperator.nl) (Client Quit) |
| 20:21:09 | × | haveo quits (~haveo@sl35.iuwt.fr) (Remote host closed the connection) |
| 20:22:06 | → | dhruvasagar joins (~dhruvasag@49.207.194.211) |
| 20:25:22 | → | haveo joins (~haveo@sl35.iuwt.fr) |
| 20:26:31 | <elevenkb> | Does anyone do data science in haskell? |
| 20:26:43 | × | dhruvasagar quits (~dhruvasag@49.207.194.211) (Ping timeout: 260 seconds) |
| 20:32:09 | × | blomberg quits (~default_u@117.248.77.218) (Ping timeout: 245 seconds) |
| 20:32:47 | → | dhruvasagar joins (~dhruvasag@49.207.194.211) |
| 20:33:33 | × | nickiminjaj quits (~nickiminj@user/laxhh) (Quit: My MacBook has gone to sleep. ZZZzzz…) |
| 20:34:11 | → | nickiminjaj joins (~nickiminj@188.146.126.78) |
| 20:34:11 | × | nickiminjaj quits (~nickiminj@188.146.126.78) (Changing host) |
| 20:34:11 | → | nickiminjaj joins (~nickiminj@user/laxhh) |
| 20:37:41 | × | falafel quits (~falafel@62.175.113.194.dyn.user.ono.com) (Ping timeout: 260 seconds) |
| 20:37:46 | × | dhruvasagar quits (~dhruvasag@49.207.194.211) (Ping timeout: 272 seconds) |
| 20:43:56 | × | simendsjo quits (~user@84.211.91.241) (Ping timeout: 248 seconds) |
| 20:44:20 | → | dhruvasagar joins (~dhruvasag@49.207.194.211) |
| 20:45:58 | × | Tlsx quits (~rscastilh@187.40.125.21) () |
| 20:46:19 | × | pretty_dumm_guy quits (trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655) (Ping timeout: 252 seconds) |
| 20:47:35 | × | Square quits (~Square@user/square) (Ping timeout: 240 seconds) |
| 20:48:23 | → | pretty_dumm_guy joins (trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655) |
| 20:48:58 | × | dhruvasagar quits (~dhruvasag@49.207.194.211) (Ping timeout: 258 seconds) |
| 20:49:35 | → | dhruvasagar joins (~dhruvasag@49.207.194.211) |
| 20:49:56 | × | azimut quits (~azimut@gateway/tor-sasl/azimut) (Ping timeout: 256 seconds) |
| 20:50:19 | × | driib5 quits (~driib@vmi931078.contaboserver.net) (Quit: The Lounge - https://thelounge.chat) |
| 20:50:35 | → | falafel joins (~falafel@62.175.113.194.dyn.user.ono.com) |
| 20:52:08 | → | driib5 joins (~driib@vmi931078.contaboserver.net) |
| 20:52:57 | → | dcoutts joins (~duncan@cpc69402-oxfd27-2-0-cust903.4-3.cable.virginm.net) |
| 20:54:28 | × | dhruvasagar quits (~dhruvasag@49.207.194.211) (Ping timeout: 255 seconds) |
| 20:56:44 | × | Jackneill quits (~Jackneill@20014C4E1E0E6F004BDEA8A1DAB424C0.dsl.pool.telekom.hu) (Ping timeout: 245 seconds) |
| 20:57:17 | × | benjaminl quits (~benjaminl@user/benjaminl) (Read error: Connection reset by peer) |
| 20:57:32 | → | benjaminl joins (~benjaminl@user/benjaminl) |
| 20:57:51 | → | nate2 joins (~nate@c-98-45-169-16.hsd1.ca.comcast.net) |
| 21:01:32 | × | falafel quits (~falafel@62.175.113.194.dyn.user.ono.com) (Ping timeout: 248 seconds) |
| 21:02:06 | → | ystael joins (~ystael@user/ystael) |
| 21:02:34 | × | nate2 quits (~nate@c-98-45-169-16.hsd1.ca.comcast.net) (Ping timeout: 255 seconds) |
| 21:02:51 | → | coot joins (~coot@89-69-206-216.dynamic.chello.pl) |
| 21:07:32 | × | td_ quits (~td@i53870939.versanet.de) (Ping timeout: 272 seconds) |
| 21:09:23 | × | masterbuilder quits (~masterbui@user/masterbuilder) (Read error: Connection reset by peer) |
| 21:12:37 | <EvanR> | monochrom, after reading this manual it seems that while gosubs cannot return anything, there is a separate feature for user-defined functions which take arguments and return a value. DEF FN |
| 21:13:15 | <EvanR> | in case you somehow can't get by with just trig and hyperbolic trig |
| 21:16:08 | × | driib5 quits (~driib@vmi931078.contaboserver.net) (Quit: The Lounge - https://thelounge.chat) |
| 21:18:09 | → | brandly joins (~brandly@c-73-68-15-46.hsd1.ma.comcast.net) |
| 21:18:33 | × | isekaijin quits (~user@user/isekaijin) (Quit: brb test) |
| 21:19:05 | <[exa]> | elevenkb: I did some actual science-ish computing in repa, but that's it. Still no ggplot alternative. :( |
| 21:19:31 | × | tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…) |
| 21:22:44 | × | coot quits (~coot@89-69-206-216.dynamic.chello.pl) (Quit: coot) |
| 21:22:48 | <elevenkb> | [exa] https://hackage.haskell.org/package/hvega ? |
| 21:23:53 | × | stefan-__ quits (~m-ohzqow@42dots.de) (Remote host closed the connection) |
| 21:24:10 | → | td_ joins (~td@i5387091E.versanet.de) |
| 21:24:17 | → | stefan-__ joins (~m-ohzqow@42dots.de) |
| 21:25:53 | × | emmanuelux quits (~emmanuelu@user/emmanuelux) (Read error: Connection reset by peer) |
| 21:26:33 | → | emmanuelux joins (~emmanuelu@user/emmanuelux) |
| 21:26:47 | × | gmg quits (~user@user/gehmehgeh) (Quit: Leaving) |
| 21:28:40 | × | td_ quits (~td@i5387091E.versanet.de) (Ping timeout: 255 seconds) |
| 21:30:46 | × | random-jellyfish quits (~tiber@user/random-jellyfish) (Ping timeout: 260 seconds) |
| 21:31:06 | × | stefan-__ quits (~m-ohzqow@42dots.de) (Remote host closed the connection) |
| 21:31:32 | → | stefan-__ joins (~m-ohzqow@42dots.de) |
| 21:33:08 | × | stefan-__ quits (~m-ohzqow@42dots.de) (Remote host closed the connection) |
| 21:33:34 | → | stefan-__ joins (~m-ohzqow@42dots.de) |
| 21:33:44 | → | notzmv joins (~zmv@user/notzmv) |
| 21:35:21 | → | driib5 joins (~driib@vmi931078.contaboserver.net) |
| 21:36:19 | × | vglfr quits (~vglfr@88.154.70.142) (Read error: Connection reset by peer) |
| 21:37:34 | × | stefan-__ quits (~m-ohzqow@42dots.de) (Remote host closed the connection) |
| 21:38:02 | → | masterbuilder joins (~masterbui@user/masterbuilder) |
| 21:38:02 | → | stefan-__ joins (~m-ohzqow@42dots.de) |
| 21:39:07 | × | stefan-__ quits (~m-ohzqow@42dots.de) (Remote host closed the connection) |
| 21:39:51 | → | stefan-__ joins (~m-ohzqow@42dots.de) |
| 21:40:47 | × | emmanuelux quits (~emmanuelu@user/emmanuelux) (Read error: Connection reset by peer) |
| 21:41:35 | → | emmanuelux joins (~emmanuelu@user/emmanuelux) |
| 21:43:47 | × | stefan-__ quits (~m-ohzqow@42dots.de) (Remote host closed the connection) |
| 21:44:14 | → | stefan-__ joins (~m-ohzqow@42dots.de) |
| 21:45:19 | <Inst> | baad |
| 21:45:23 | → | td_ joins (~td@i5387090E.versanet.de) |
| 21:45:43 | <Inst> | right now, I'm trying to parse a text file, such that it throws two different types of exceptions |
| 21:45:56 | × | stefan-__ quits (~m-ohzqow@42dots.de) (Remote host closed the connection) |
| 21:45:57 | <Inst> | it's trying to parse something into a maze |
| 21:46:22 | → | stefan-__ joins (~m-ohzqow@42dots.de) |
| 21:47:34 | <Inst> | it feels like StateT (StartPosition, EndPosition) Maybe a |
| 21:47:55 | × | stefan-__ quits (~m-ohzqow@42dots.de) (Remote host closed the connection) |
| 21:48:21 | → | stefan-__ joins (~m-ohzqow@42dots.de) |
| 21:49:47 | → | dhruvasagar joins (~dhruvasag@49.207.194.211) |
| 21:50:56 | × | td_ quits (~td@i5387090E.versanet.de) (Ping timeout: 255 seconds) |
| 21:51:14 | × | stefan-__ quits (~m-ohzqow@42dots.de) (Remote host closed the connection) |
| 21:51:53 | → | stefan-__ joins (~m-ohzqow@42dots.de) |
| 21:51:55 | <Inst> | maybe it should be MaybeT (State (Start Position, EndPosition) Maze? |
| 21:51:56 | → | isekaijin joins (~user@user/isekaijin) |
| 21:52:37 | → | td_ joins (~td@i53870910.versanet.de) |
| 21:54:05 | × | stefan-__ quits (~m-ohzqow@42dots.de) (Remote host closed the connection) |
| 21:54:30 | → | stefan-__ joins (~m-ohzqow@42dots.de) |
| 21:55:05 | × | dhruvasagar quits (~dhruvasag@49.207.194.211) (Ping timeout: 255 seconds) |
| 21:56:15 | × | machinedgod quits (~machinedg@d198-53-218-113.abhsia.telus.net) (Ping timeout: 240 seconds) |
| 22:01:45 | → | dhruvasagar joins (~dhruvasag@49.207.194.211) |
| 22:03:59 | × | td_ quits (~td@i53870910.versanet.de) (Ping timeout: 255 seconds) |
| 22:05:57 | → | td_ joins (~td@i5387093D.versanet.de) |
| 22:06:28 | × | acidjnk_new quits (~acidjnk@p200300d6e72b938125cc9ae0c91bfe8f.dip0.t-ipconnect.de) (Ping timeout: 260 seconds) |
| 22:06:28 | × | dhruvasagar quits (~dhruvasag@49.207.194.211) (Ping timeout: 255 seconds) |
| 22:08:58 | <EvanR> | Inst, MaybeT would only let you throw 1 kind of exception. try ExceptT |
| 22:09:26 | <Inst> | see, I'm annoyed because the easy way to do it is just to stuff it into IO :( |
| 22:09:38 | <Inst> | then throwIO and catchIO during the processing |
| 22:09:54 | <Inst> | I'm throwing the second set of exceptions case pattern matching |
| 22:11:18 | <probie> | If you want the ability to randomly throw exceptions, don't want to use `Either`/`ExceptT` or `IO`, how about `Cont`? |
| 22:11:34 | × | thegeekinside quits (~thegeekin@189.180.4.84) (Ping timeout: 255 seconds) |
| 22:11:47 | <Inst> | I'm trying to parse a maze |
| 22:11:59 | <EvanR> | what are the two kinds of exceptions |
| 22:12:13 | <Inst> | the failure indications are: "file characters don't match the specification" |
| 22:12:48 | <Inst> | "start position not included and/or exit position not included" |
| 22:12:50 | → | dhruvasagar joins (~dhruvasag@49.207.194.211) |
| 22:12:58 | <EvanR> | sounds like 1 kind of exception. String. xD |
| 22:13:07 | <Inst> | :( |
| 22:13:24 | <Inst> | but the point is, I want to toss maps over the data |
| 22:13:45 | <EvanR> | those are both parse errors, so you could also make a ParseError type |
| 22:13:48 | <Inst> | and I don't want to pay for GHC Premium Edition |
| 22:14:08 | <Inst> | file characters not matching -> throw the exception immediately and stop parsing |
| 22:14:20 | <Inst> | start position not included and/or exit position not included: you know after you're done parsing |
| 22:14:44 | <EvanR> | either way you need to pass at least those checkpoints to have a Maze |
| 22:15:13 | <Inst> | well, the Maze is stored as Vector (Vector MazeTile) |
| 22:15:49 | → | bitdex joins (~bitdex@gateway/tor-sasl/bitdex) |
| 22:16:28 | <Inst> | i mean, I can trivially just parse the maze twice, i.e, first convert it to a Maybe Maze, then scan the maze for start and exit positions |
| 22:16:34 | <Inst> | but I want to do it in one traversal |
| 22:16:55 | <EvanR> | that's why it's part of the parser |
| 22:17:01 | <EvanR> | not a second pass |
| 22:17:21 | <Inst> | hmmm, I never thought of that, what if there are multiple start positions? :( |
| 22:17:27 | × | dhruvasagar quits (~dhruvasag@49.207.194.211) (Ping timeout: 240 seconds) |
| 22:17:32 | <EvanR> | is that another possible problem? |
| 22:17:39 | <EvanR> | also part of the parser |
| 22:18:15 | <Inst> | I really don't want to dig out attoparsec / megaparsec / flatparse :( |
| 22:18:42 | × | __monty__ quits (~toonn@user/toonn) (Quit: leaving) |
| 22:18:42 | <Inst> | should I? |
| 22:18:44 | <EvanR> | you don't have to, I think it's a big picture point |
| 22:19:12 | <Inst> | if there are multiple start positions, I can store it in a vector of start positions |
| 22:19:12 | <EvanR> | the parser returns a (valid) Maze or not, if not possibly additional info |
| 22:19:28 | <Inst> | https://inventwithpython.com/bigbookpython/project44.html |
| 22:19:52 | <Inst> | it's currently supposed to return start positions, exit positions, and a maze |
| 22:20:01 | <Inst> | well, A start position, A exit position, and a maze |
| 22:20:07 | <EvanR> | well that's all bundled together then |
| 22:20:11 | <Inst> | I can have it return start positions, exit positions, and a maze |
| 22:20:25 | <EvanR> | and you don't get any of it if parsing fails |
| 22:20:31 | <Inst> | the game loop would randomly choose a start position if there's more than one |
| 22:20:56 | <Inst> | do I even need StateT? |
| 22:21:09 | <Inst> | I can just do a straight maybe over data |
| 22:21:25 | <Inst> | and return a 3-tuple of start positions, exit positions, and a maze |
| 22:21:33 | <EvanR> | however it is accomplished, it sounds like you want a FilePath -> IO (Either Problem Maze) , where Maze is the bundle of data not just raw maze tiles |
| 22:21:56 | <Inst> | I have a loadFile :: FilePath -> IO Game right now |
| 22:21:58 | <EvanR> | this 3 tuple sounds like it has moved into the "needs its own record type" phase |
| 22:22:34 | <Inst> | which first tries to load the file using readFile' :: IO String |
| 22:23:01 | <Inst> | and has a catch keyed to IOException on it |
| 22:23:30 | <EvanR> | I guess you can do it that way but none of the issues you mentioned sound like IOExceptions |
| 22:24:07 | <EvanR> | meanwhile after you explicitly return 2 or 3 actual issue with the data, there are still actual IOExceptions possible which is fine and separate |
| 22:24:19 | <EvanR> | like file not found |
| 22:24:29 | → | dhruvasagar joins (~dhruvasag@49.207.194.211) |
| 22:25:12 | <Inst> | oh no, the catch is tossing `putStrLn $ fileName <> " does not exist or cannot be opened." |
| 22:25:21 | <Inst> | then using exitFailure |
| 22:25:23 | <EvanR> | this is all quite formal sounding, and a quick and dirty way would be to return Either String Maze where String is the textual problem explained |
| 22:26:00 | <Inst> | probably makes everything much simpler |
| 22:26:18 | × | michalz quits (~michalz@185.246.207.221) (Remote host closed the connection) |
| 22:26:34 | <Inst> | then I just pattern match over Lefts, toss it into an error throwing function |
| 22:26:41 | <EvanR> | sure |
| 22:27:39 | <EvanR> | throwIO (userError explanation) |
| 22:28:58 | × | dhruvasagar quits (~dhruvasag@49.207.194.211) (Ping timeout: 255 seconds) |
| 22:29:31 | <Inst> | Was it you or Axman6 who came up with the GHC Premium Edition joke? |
| 22:29:42 | <EvanR> | I don't get it |
| 22:29:44 | <Inst> | "Chase Success At All Costs" |
| 22:30:00 | <probie> | You can just implement the parser using `foldr` :p |
| 22:30:13 | <Inst> | GHC is crippled unless you pay for it, and it can't throw exceptions |
| 22:30:16 | <probie> | GHC Premium Edition sounds plausibly like Axman6 |
| 22:30:17 | <Inst> | probie: thank you! <3 |
| 22:31:16 | <probie> | now I'm tempted to actually do that instead of work for $dayjob |
| 22:32:25 | <EvanR> | new languages that can't throw exceptions do brag about it like it's a feature |
| 22:32:50 | <EvanR> | (zig, rust) |
| 22:33:00 | <probie> | go |
| 22:33:44 | <EvanR> | leads people to believe their code can't crash. Ok but then there's infinite loops |
| 22:33:52 | <probie> | although, at least zig and rust aren't just repeating `if err != nil` several thousand times |
| 22:35:26 | → | dhruvasagar joins (~dhruvasag@49.207.194.211) |
| 22:35:39 | <EvanR> | in haskell there's a handy incantation to avoid infinite loops: "ignoring bottoms," xD |
| 22:39:45 | <isekaijin> | EvanR: Proving that a program will terminate at all is muuuch easier than proving that a program will terminate in a specific way (not throwing exceptions). |
| 22:40:12 | × | dhruvasagar quits (~dhruvasag@49.207.194.211) (Ping timeout: 248 seconds) |
| 22:51:49 | → | dhruvasagar joins (~dhruvasag@49.207.194.211) |
| 22:52:00 | × | Tuplanolla quits (~Tuplanoll@91-159-68-236.elisa-laajakaista.fi) (Quit: Leaving.) |
| 22:55:27 | × | notzmv quits (~zmv@user/notzmv) (Remote host closed the connection) |
| 22:56:25 | × | dhruvasagar quits (~dhruvasag@49.207.194.211) (Ping timeout: 255 seconds) |
| 22:57:51 | × | Unicorn_Princess quits (~Unicorn_P@user/Unicorn-Princess/x-3540542) (Quit: Leaving) |
| 23:00:13 | <Inst> | awww |
| 23:02:40 | → | notzmv joins (~zmv@user/notzmv) |
| 23:02:42 | → | dhruvasagar joins (~dhruvasag@49.207.194.211) |
| 23:07:05 | × | dhruvasagar quits (~dhruvasag@49.207.194.211) (Ping timeout: 240 seconds) |
| 23:08:25 | → | dhruvasagar joins (~dhruvasag@49.207.194.211) |
| 23:13:04 | × | dhruvasagar quits (~dhruvasag@49.207.194.211) (Ping timeout: 255 seconds) |
| 23:13:40 | × | tv quits (~tv@user/tv) (Read error: Connection reset by peer) |
| 23:15:15 | <probie> | Inst: https://paste.tomsmeding.com/UCIohO3H complete with a disgusting 5-tuple (sorry for the delay) |
| 23:16:47 | × | xigua quits (~xigua@user/xigua) (Remote host closed the connection) |
| 23:16:56 | <Inst> | I'll github my solution when I'm done |
| 23:17:22 | → | xigua joins (~xigua@user/xigua) |
| 23:18:41 | → | falafel joins (~falafel@62.175.113.194.dyn.user.ono.com) |
| 23:19:20 | → | dhruvasagar joins (~dhruvasag@49.207.194.211) |
| 23:23:46 | <EvanR> | \o/ parsing without parsec |
| 23:23:52 | × | dhruvasagar quits (~dhruvasag@49.207.194.211) (Ping timeout: 255 seconds) |
| 23:25:12 | → | arahael joins (~arahael@119-18-2-212.771202.syd.nbn.aussiebb.net) |
| 23:28:03 | × | ddellacosta quits (~ddellacos@ool-44c738de.dyn.optonline.net) (Ping timeout: 258 seconds) |
| 23:28:42 | → | ddellacosta joins (~ddellacos@ool-44c738de.dyn.optonline.net) |
| 23:30:25 | → | dhruvasagar joins (~dhruvasag@49.207.194.211) |
| 23:30:30 | <monochrom> | "A parser is a disgusting 5-tuple where..." :) |
| 23:30:59 | <monochrom> | Haha I like the wording "foldr go finish". :) |
| 23:32:13 | → | tv joins (~tv@user/tv) |
| 23:32:39 | × | td_ quits (~td@i5387093D.versanet.de) (Ping timeout: 240 seconds) |
| 23:33:42 | × | cuiltb^ quits (~cd@76.145.193.217) (Remote host closed the connection) |
| 23:34:07 | <Axman6> | Inst: probie not sure I can take full credit for GHC-PE, I feel someone (possibily EvanR, sclv or glguy) planted the seed (or, promoted appropriate synergy for us to achieve out corporate targets in bring value to our customers, of as I've come to call them our family) |
| 23:34:13 | <Axman6> | our* |
| 23:34:31 | → | td_ joins (~td@i5387090A.versanet.de) |
| 23:34:57 | × | dhruvasagar quits (~dhruvasag@49.207.194.211) (Ping timeout: 258 seconds) |
| 23:36:37 | <arahael> | What's GHC-PE again? |
| 23:36:47 | arahael | is bad with names. |
| 23:37:07 | <EvanR> | GHC petroleum engineering |
| 23:37:42 | <EvanR> | or premium edition according to the previous discussion |
| 23:38:29 | <Inst> | oh crap, I just reinvented hughes lists |
| 23:38:33 | <Inst> | look what you made me do, probie |
| 23:38:51 | <arahael> | Ah, checked the logs. :) |
| 23:38:59 | <arahael> | Axman6 had me fooled for a bit there. :D |
| 23:41:20 | <monochrom> | GHC Python Edition >:) |
| 23:41:33 | <geekosaur> | that was MissingPy, way back when 😛 |
| 23:41:54 | → | dhruvasagar joins (~dhruvasag@49.207.194.211) |
| 23:46:43 | × | dhruvasagar quits (~dhruvasag@49.207.194.211) (Ping timeout: 252 seconds) |
| 23:46:54 | <probie> | Re GHC PE: Perhaps the Haskell foundation consider paywalling typeclasses? $2 a month for Applicative, $5 for Monads, $10 for Arrows and Comonads (Functors are included in the free plan) |
| 23:48:04 | <geekosaur> | Functor's way too important to be free, and Arrow's not worth that much 😛 |
| 23:48:56 | <geekosaur> | make Monad the free one, with the kicker that to actually use it you need to pay for Functor |
| 23:49:37 | × | yoyofreeman quits (~yoyofreem@176.97.76.178) (Read error: Connection reset by peer) |
| 23:50:16 | <EvanR> | you can use any type class as long as you want but if you want them to follow laws that's extra |
| 23:50:17 | <Axman6> | monochrom: https://www.youtube.com/watch?v=BvECNQRrjCY |
| 23:50:19 | → | yoyofreeman joins (~yoyofreem@176.97.76.178) |
| 23:51:33 | <Axman6> | geekosaur: I wonder how many people actually got that reference; what a fun time it was when there was an idea we just needed one library to add all the missing functionality of the language |
| 23:51:41 | <jackdk> | probie: you gotta bulk out the free tier with janky offerings that might let you do what you want if you can figure them out. I'd put Comonad in the free tier for that reason. Also chuck in Semigroup because if you have to pay for Monoid then you'll tie yourself in knots doing everything with semigroupoids and known-nonempty containers |
| 23:52:32 | <jackdk> | (guess who's spent too much time looking at AWS' list?) |
| 23:52:37 | → | dhruvasagar joins (~dhruvasag@49.207.194.211) |
| 23:54:55 | <monochrom> | Haha I remember Python 5. |
| 23:56:32 | <monochrom> | And don't forget #scalaz /topic has "download Scalaz 10 at https://www.haskell.org/" |
| 23:57:38 | <dibblego> | :) |
| 23:58:21 | × | dhruvasagar quits (~dhruvasag@49.207.194.211) (Ping timeout: 260 seconds) |
All times are in UTC on 2023-10-22.