Home liberachat/#haskell: Logs Calendar

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> <f​endor> 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> <f​endor> 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.