2023/10/22

2023-10-22 00:00:04 +0200cpressey(~cpressey@host-92-21-194-169.as13285.net) (Quit: Client closed)
2023-10-22 00:01:00 +0200 <tomsmeding> Unicorn_Princess: `readFile file >>= (return . fixContents) >>= writeFile file` ?
2023-10-22 00:01:36 +0200 <Unicorn_Princess> yeah that works, but return is ugly there :P
2023-10-22 00:04:52 +0200dhruvasagar(~dhruvasag@49.207.194.211)
2023-10-22 00:05:31 +0200 <Unicorn_Princess> hmmm, it's midnight here, i better put away arrows for now
2023-10-22 00:08:15 +0200 <Inst> `readFile file >>= writeFile file . fixContents
2023-10-22 00:09:43 +0200 <Unicorn_Princess> gross. loses the left-to-right flow of data
2023-10-22 00:10:02 +0200dhruvasagar(~dhruvasag@49.207.194.211) (Ping timeout: 272 seconds)
2023-10-22 00:10:04 +0200 <Inst> you can verticalize it
2023-10-22 00:10:08 +0200 <Inst> readFile
2023-10-22 00:10:14 +0200 <Inst> >>= writeFile file . fixContents
2023-10-22 00:10:29 +0200 <Unicorn_Princess> i prefer the version with <&> for now
2023-10-22 00:11:11 +0200 <Inst> also, tbh, having to use different pure and monadic chaining operators isn't necessarily a bad thing, because they help give hints as to what the functions do
2023-10-22 00:11:25 +0200 <geekosaur> ^
2023-10-22 00:12:32 +0200 <Inst> arguably foo =<< bar is less smelly than foo(bar()) because you at least have annotations to point out what's effectful and what's not
2023-10-22 00:13:06 +0200 <Inst> as well as indicate an order of effects
2023-10-22 00:14:09 +0200 <Inst> i'm incredibly depressed, just put together my first game of life, and it's mesmerizing :(
2023-10-22 00:14:21 +0200 <Inst> but missing so many features!
2023-10-22 00:15:47 +0200falafel(~falafel@62.175.113.194.dyn.user.ono.com) (Ping timeout: 255 seconds)
2023-10-22 00:16:15 +0200dhruvasagar(~dhruvasag@49.207.194.211)
2023-10-22 00:19:55 +0200acidjnk_new(~acidjnk@p200300d6e72b93737dc6e69178877b3f.dip0.t-ipconnect.de) (Ping timeout: 252 seconds)
2023-10-22 00:20:48 +0200dhruvasagar(~dhruvasag@49.207.194.211) (Ping timeout: 260 seconds)
2023-10-22 00:21:38 +0200dhruvasagar(~dhruvasag@49.207.194.211)
2023-10-22 00:26:08 +0200dhruvasagar(~dhruvasag@49.207.194.211) (Ping timeout: 255 seconds)
2023-10-22 00:30:41 +0200 <EvanR> to uniformize and potentially make it harder to understand you can use <=< everywhere
2023-10-22 00:31:08 +0200Square(~Square@user/square) (Ping timeout: 248 seconds)
2023-10-22 00:32:27 +0200jargon(~jargon@174-22-221-150.phnx.qwest.net) (Remote host closed the connection)
2023-10-22 00:32:42 +0200dhruvasagar(~dhruvasag@49.207.194.211)
2023-10-22 00:33:10 +0200ChaiTRex(~ChaiTRex@user/chaitrex) (Ping timeout: 256 seconds)
2023-10-22 00:35:02 +0200ChaiTRex(~ChaiTRex@user/chaitrex)
2023-10-22 00:37:13 +0200dhruvasagar(~dhruvasag@49.207.194.211) (Ping timeout: 255 seconds)
2023-10-22 00:37:24 +0200Vajb(~Vajb@207.61.167.122)
2023-10-22 00:38:18 +0200dhruvasagar(~dhruvasag@49.207.194.211)
2023-10-22 00:40:33 +0200sm(~sm@plaintextaccounting/sm) (Quit: sm)
2023-10-22 00:41:26 +0200Inst(~Inst@120.244.192.250) (Ping timeout: 255 seconds)
2023-10-22 00:43:04 +0200dhruvasagar(~dhruvasag@49.207.194.211) (Ping timeout: 255 seconds)
2023-10-22 00:44:05 +0200Vajb(~Vajb@207.61.167.122) (Ping timeout: 240 seconds)
2023-10-22 00:45:35 +0200coot(~coot@89-69-206-216.dynamic.chello.pl) (Quit: coot)
2023-10-22 01:02:46 +0200Alleria(~JohnGalt@user/alleria)
2023-10-22 01:02:50 +0200dy_dy
2023-10-22 01:03:00 +0200Pickchea(~private@user/pickchea) (Quit: Leaving)
2023-10-22 01:03:06 +0200dy(sid3438@id-3438.helmsley.irccloud.com) (Changing host)
2023-10-22 01:03:06 +0200dy(sid3438@user/dy)
2023-10-22 01:05:33 +0200dhruvasagar(~dhruvasag@49.207.194.211)
2023-10-22 01:05:47 +0200migas4(~migas@astra4961.startdedicated.net)
2023-10-22 01:10:22 +0200dhruvasagar(~dhruvasag@49.207.194.211) (Ping timeout: 255 seconds)
2023-10-22 01:11:17 +0200dhruvasagar(~dhruvasag@49.207.194.211)
2023-10-22 01:13:57 +0200 <probie> Why not use `(.)` from Control.Category everywhere (along with `Control.Arrow`)
2023-10-22 01:14:07 +0200 <probie> runKleisli (Kleisli (writeFile file) . arr fixContents . Kleisli readFile) file
2023-10-22 01:15:09 +0200Tuplanolla(~Tuplanoll@91-159-68-236.elisa-laajakaista.fi) (Quit: Leaving.)
2023-10-22 01:15:12 +0200migas9(~migas@static.140.65.63.178.clients.your-server.de) (Quit: The Lounge - https://thelounge.github.io)
2023-10-22 01:15:27 +0200 <probie> (which I guess is morally `>=>` or `<=<` everywhere)
2023-10-22 01:15:34 +0200migas9(~migas@static.140.65.63.178.clients.your-server.de)
2023-10-22 01:16:05 +0200dhruvasagar(~dhruvasag@49.207.194.211) (Ping timeout: 255 seconds)
2023-10-22 01:16:52 +0200 <EvanR> yeah basically, that's even more uniform and more confusing xD
2023-10-22 01:17:18 +0200 <EvanR> different categories at different places in the line of code
2023-10-22 01:18:16 +0200 <Unicorn_Princess> is it just me or is the haskell LSP incredibly janky? on emacs with lsp-haskell, it seems to work, like, 30% of the time :|
2023-10-22 01:22:08 +0200Vajb(~Vajb@207.61.167.122)
2023-10-22 01:27:21 +0200arahael(~arahael@119-18-2-212.771202.syd.nbn.aussiebb.net)
2023-10-22 01:27:35 +0200target_i(~target_i@217.175.14.39) (Quit: leaving)
2023-10-22 01:32:38 +0200 <geekosaur> works well for me but I use VSCode
2023-10-22 01:33:45 +0200 <Unicorn_Princess> what does vscode use under the hood for haskell?
2023-10-22 01:34:08 +0200dhruvasagar(~dhruvasag@49.207.194.211)
2023-10-22 01:34:22 +0200 <geekosaur> it uses the same LSP but has its own built-in LSP support code rather than the LSP support library emacs uses
2023-10-22 01:34:29 +0200 <geekosaur> which might be a bit dubious
2023-10-22 01:35:10 +0200 <Unicorn_Princess> hm. iirc the lsp for rust felt very solid in emacs, which uses the same (i think?) glue code...
2023-10-22 01:35:42 +0200 <Unicorn_Princess> ah no there are some specialized packages in-between. hm
2023-10-22 01:36:31 +0200 <Unicorn_Princess> maybe tomorrow. goodnight
2023-10-22 01:36:40 +0200 <geekosaur> yeh, it uses lsp-rust-servcer instead of lsp-mode
2023-10-22 01:36:49 +0200 <Unicorn_Princess> wait what
2023-10-22 01:37:20 +0200 <Unicorn_Princess> i only have rustic in my emacs init file for rust
2023-10-22 01:37:22 +0200 <probie> In my experience, most of the headaches come from hls, since it's rather picky about what GHC versions its used with. I haven't had too many problems with `lsp-mode` itself
2023-10-22 01:38:13 +0200 <geekosaur> there's a separate one for rustic, yeh
2023-10-22 01:38:32 +0200 <Unicorn_Princess> nah it's too late for this rabbit hole. goodnight!
2023-10-22 01:38:49 +0200nickiminjaj(~nickiminj@user/laxhh) (Read error: Connection reset by peer)
2023-10-22 01:38:51 +0200Unicorn_Princess(~Unicorn_P@user/Unicorn-Princess/x-3540542) (Quit: Leaving)
2023-10-22 01:39:21 +0200 <geekosaur> I have more trouble with rust-analyzer in vscode, for some reason it insists my xmonad config dir needs a cargo config file
2023-10-22 01:39:48 +0200 <geekosaur> (no, my rust stuff isn't even on the same drive, idiot)
2023-10-22 01:40:39 +0200nickiminjaj(~nickiminj@188.146.126.78)
2023-10-22 01:40:39 +0200nickiminjaj(~nickiminj@188.146.126.78) (Changing host)
2023-10-22 01:40:39 +0200nickiminjaj(~nickiminj@user/laxhh)
2023-10-22 01:44:07 +0200dhruvasagar(~dhruvasag@49.207.194.211) (Ping timeout: 264 seconds)
2023-10-22 01:49:07 +0200nate2(~nate@c-98-45-169-16.hsd1.ca.comcast.net)
2023-10-22 01:53:53 +0200nate2(~nate@c-98-45-169-16.hsd1.ca.comcast.net) (Ping timeout: 255 seconds)
2023-10-22 02:01:46 +0200pavonia(~user@user/siracusa)
2023-10-22 02:03:04 +0200[_](~itchyjunk@user/itchyjunk/x-7353470)
2023-10-22 02:06:16 +0200tromp(~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
2023-10-22 02:06:51 +0200[itchyjunk](~itchyjunk@user/itchyjunk/x-7353470) (Ping timeout: 260 seconds)
2023-10-22 02:10:14 +0200tromp(~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Client Quit)
2023-10-22 02:12:48 +0200Vajb(~Vajb@207.61.167.122) (Ping timeout: 260 seconds)
2023-10-22 02:24:25 +0200dhruvasagar(~dhruvasag@49.207.194.211)
2023-10-22 02:28:40 +0200dhruvasagar(~dhruvasag@49.207.194.211) (Ping timeout: 255 seconds)
2023-10-22 02:35:22 +0200dhruvasagar(~dhruvasag@49.207.194.211)
2023-10-22 02:40:03 +0200dhruvasagar(~dhruvasag@49.207.194.211) (Ping timeout: 255 seconds)
2023-10-22 02:40:37 +0200dhruvasagar(~dhruvasag@49.207.194.211)
2023-10-22 02:45:11 +0200dhruvasagar(~dhruvasag@49.207.194.211) (Ping timeout: 255 seconds)
2023-10-22 02:51:32 +0200dhruvasagar(~dhruvasag@49.207.194.211)
2023-10-22 02:54:54 +0200elkcl(~elkcl@broadband-95-84-226-240.ip.moscow.rt.ru) (Ping timeout: 255 seconds)
2023-10-22 02:55:05 +0200elkcl(~elkcl@broadband-95-84-226-240.ip.moscow.rt.ru)
2023-10-22 02:56:07 +0200waleee(~waleee@2001:9b0:21c:e600:f2f3:f744:435d:137c) (Ping timeout: 264 seconds)
2023-10-22 02:56:07 +0200dhruvasagar(~dhruvasag@49.207.194.211) (Ping timeout: 255 seconds)
2023-10-22 02:57:14 +0200dhruvasagar(~dhruvasag@49.207.194.211)
2023-10-22 02:58:21 +0200pretty_dumm_guy(trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655)
2023-10-22 02:58:22 +0200Lord_of_Life(~Lord@user/lord-of-life/x-2819915) (Ping timeout: 255 seconds)
2023-10-22 03:00:12 +0200Lord_of_Life(~Lord@user/lord-of-life/x-2819915)
2023-10-22 03:02:10 +0200dhruvasagar(~dhruvasag@49.207.194.211) (Ping timeout: 252 seconds)
2023-10-22 03:08:10 +0200dhruvasagar(~dhruvasag@49.207.194.211)
2023-10-22 03:09:46 +0200hrberg(~quassel@171.79-160-161.customer.lyse.net) (Remote host closed the connection)
2023-10-22 03:09:58 +0200otto_s(~user@p5b044cbd.dip0.t-ipconnect.de) (Ping timeout: 260 seconds)
2023-10-22 03:11:01 +0200hrberg(~quassel@171.79-160-161.customer.lyse.net)
2023-10-22 03:11:33 +0200otto_s(~user@p4ff27d6b.dip0.t-ipconnect.de)
2023-10-22 03:12:54 +0200dhruvasagar(~dhruvasag@49.207.194.211) (Ping timeout: 258 seconds)
2023-10-22 03:19:13 +0200xff0x(~xff0x@ai101218.d.east.v6connect.net) (Ping timeout: 252 seconds)
2023-10-22 03:19:14 +0200dhruvasagar(~dhruvasag@49.207.194.211)
2023-10-22 03:21:21 +0200xff0x(~xff0x@178.255.149.135)
2023-10-22 03:28:14 +0200Typedfern(~Typedfern@220.red-83-37-25.dynamicip.rima-tde.net) (Ping timeout: 258 seconds)
2023-10-22 03:29:01 +0200Typedfern(~Typedfern@220.red-83-37-25.dynamicip.rima-tde.net)
2023-10-22 03:36:44 +0200xff0x(~xff0x@178.255.149.135) (Ping timeout: 245 seconds)
2023-10-22 03:38:33 +0200xff0x(~xff0x@2405:6580:b080:900:6ad:7a7d:8b93:6038)
2023-10-22 03:42:48 +0200arahael(~arahael@119-18-2-212.771202.syd.nbn.aussiebb.net) (Ping timeout: 258 seconds)
2023-10-22 03:45:23 +0200pretty_dumm_guy(trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655) (Quit: WeeChat 3.5)
2023-10-22 03:47:30 +0200emmanuelux(~emmanuelu@user/emmanuelux) (Quit: au revoir)
2023-10-22 03:52:20 +0200xff0x(~xff0x@2405:6580:b080:900:6ad:7a7d:8b93:6038) (Ping timeout: 272 seconds)
2023-10-22 03:52:43 +0200xff0x(~xff0x@ai101218.d.east.v6connect.net)
2023-10-22 04:15:21 +0200finn_elija(~finn_elij@user/finn-elija/x-0085643)
2023-10-22 04:15:21 +0200FinnElija(~finn_elij@user/finn-elija/x-0085643) (Killed (NickServ (Forcing logout FinnElija -> finn_elija)))
2023-10-22 04:15:21 +0200finn_elijaFinnElija
2023-10-22 04:16:52 +0200nate2(~nate@c-98-45-169-16.hsd1.ca.comcast.net)
2023-10-22 04:21:54 +0200nate2(~nate@c-98-45-169-16.hsd1.ca.comcast.net) (Ping timeout: 258 seconds)
2023-10-22 04:23:40 +0200johnw(~johnw@69.62.242.138) (Quit: ZNC - http://znc.in)
2023-10-22 04:30:39 +0200td_(~td@i5387091E.versanet.de) (Ping timeout: 240 seconds)
2023-10-22 04:32:41 +0200td_(~td@i53870939.versanet.de)
2023-10-22 04:43:01 +0200Friendship(~Friendshi@user/Friendship)
2023-10-22 04:54:41 +0200arahael(~arahael@119-18-2-212.771202.syd.nbn.aussiebb.net)
2023-10-22 04:57:36 +0200Vajb(~Vajb@207.61.167.122)
2023-10-22 04:59:34 +0200sm(~sm@plaintextaccounting/sm)
2023-10-22 05:03:55 +0200sm(~sm@plaintextaccounting/sm) (Ping timeout: 255 seconds)
2023-10-22 05:15:02 +0200aforemny(~aforemny@i59F516CF.versanet.de)
2023-10-22 05:15:56 +0200aforemny_(~aforemny@i59F516C8.versanet.de) (Ping timeout: 272 seconds)
2023-10-22 05:25:50 +0200azimut(~azimut@gateway/tor-sasl/azimut)
2023-10-22 05:30:57 +0200sm(~sm@plaintextaccounting/sm)
2023-10-22 05:38:06 +0200sm(~sm@plaintextaccounting/sm) (Ping timeout: 272 seconds)
2023-10-22 05:52:32 +0200sm(~sm@plaintextaccounting/sm)
2023-10-22 05:59:08 +0200sm(~sm@plaintextaccounting/sm) (Ping timeout: 248 seconds)
2023-10-22 06:09:27 +0200Fischmiep(~Fischmiep@user/Fischmiep) (Ping timeout: 240 seconds)
2023-10-22 06:11:28 +0200Fischmiep(~Fischmiep@user/Fischmiep)
2023-10-22 06:11:39 +0200johnw(~johnw@69.62.242.138)
2023-10-22 06:21:16 +0200Fischmiep(~Fischmiep@user/Fischmiep) (Ping timeout: 252 seconds)
2023-10-22 06:26:26 +0200Vajb(~Vajb@207.61.167.122) (Ping timeout: 260 seconds)
2023-10-22 06:28:40 +0200sm(~sm@plaintextaccounting/sm)
2023-10-22 06:35:05 +0200sm(~sm@plaintextaccounting/sm) (Ping timeout: 240 seconds)
2023-10-22 06:45:32 +0200qqq(~qqq@92.43.167.61)
2023-10-22 06:51:38 +0200sm(~sm@plaintextaccounting/sm)
2023-10-22 06:53:49 +0200nate2(~nate@c-98-45-169-16.hsd1.ca.comcast.net)
2023-10-22 06:56:17 +0200sm(~sm@plaintextaccounting/sm) (Ping timeout: 255 seconds)
2023-10-22 06:58:41 +0200nate2(~nate@c-98-45-169-16.hsd1.ca.comcast.net) (Ping timeout: 258 seconds)
2023-10-22 07:00:23 +0200sm(~sm@plaintextaccounting/sm)
2023-10-22 07:09:02 +0200sm(~sm@plaintextaccounting/sm) (Ping timeout: 258 seconds)
2023-10-22 07:11:28 +0200rosco(~rosco@yp-150-69.tm.net.my)
2023-10-22 07:14:22 +0200Alleria(~JohnGalt@user/alleria) (Read error: Connection reset by peer)
2023-10-22 07:16:04 +0200Alleria(~JohnGalt@user/alleria)
2023-10-22 07:23:05 +0200rgw(~R@2605:a601:a0df:5600:5007:462b:c57d:9381) (Read error: Connection reset by peer)
2023-10-22 07:25:14 +0200sm(~sm@plaintextaccounting/sm)
2023-10-22 07:29:43 +0200sm(~sm@plaintextaccounting/sm) (Ping timeout: 255 seconds)
2023-10-22 07:31:18 +0200machinedgod(~machinedg@d198-53-218-113.abhsia.telus.net) (Ping timeout: 260 seconds)
2023-10-22 07:33:08 +0200takuan(~takuan@178-116-218-225.access.telenet.be)
2023-10-22 07:40:31 +0200Lycurgus(~georg@user/Lycurgus)
2023-10-22 07:41:46 +0200Lycurgus(~georg@user/Lycurgus) (Client Quit)
2023-10-22 07:54:34 +0200sm(~sm@plaintextaccounting/sm)
2023-10-22 08:03:23 +0200sm(~sm@plaintextaccounting/sm) (Ping timeout: 260 seconds)
2023-10-22 08:07:38 +0200Fischmiep(~Fischmiep@user/Fischmiep)
2023-10-22 08:10:31 +0200notzmv(~zmv@user/notzmv) (Ping timeout: 264 seconds)
2023-10-22 08:19:43 +0200sm(~sm@plaintextaccounting/sm)
2023-10-22 08:23:06 +0200vglfr(~vglfr@88.155.246.162)
2023-10-22 08:24:16 +0200sm(~sm@plaintextaccounting/sm) (Ping timeout: 260 seconds)
2023-10-22 08:26:22 +0200sm(~sm@plaintextaccounting/sm)
2023-10-22 08:26:25 +0200Fischmiep(~Fischmiep@user/Fischmiep) (Ping timeout: 255 seconds)
2023-10-22 08:29:17 +0200Fischmiep(~Fischmiep@user/Fischmiep)
2023-10-22 08:34:50 +0200sm(~sm@plaintextaccounting/sm) (Ping timeout: 255 seconds)
2023-10-22 08:36:32 +0200vglfr(~vglfr@88.155.246.162) (Remote host closed the connection)
2023-10-22 08:37:27 +0200vglfr(~vglfr@88.155.246.162)
2023-10-22 08:51:28 +0200sm(~sm@plaintextaccounting/sm)
2023-10-22 08:56:20 +0200sm(~sm@plaintextaccounting/sm) (Ping timeout: 272 seconds)
2023-10-22 09:01:25 +0200sm(~sm@plaintextaccounting/sm)
2023-10-22 09:02:21 +0200[_](~itchyjunk@user/itchyjunk/x-7353470) (Read error: Connection reset by peer)
2023-10-22 09:06:22 +0200nek0(~nek0@2a01:4f8:222:2b41::12) (Quit: The Lounge - https://thelounge.chat)
2023-10-22 09:10:05 +0200sm(~sm@plaintextaccounting/sm) (Ping timeout: 240 seconds)
2023-10-22 09:14:26 +0200fendor(~fendor@2a02:8388:1640:be00:aab:1226:f274:5021)
2023-10-22 09:20:19 +0200gmg(~user@user/gehmehgeh)
2023-10-22 09:27:51 +0200Fischmiep(~Fischmiep@user/Fischmiep) (Ping timeout: 260 seconds)
2023-10-22 09:34:55 +0200Pickchea(~private@user/pickchea)
2023-10-22 09:35:43 +0200todi(~todi@p4fd1a3e6.dip0.t-ipconnect.de) (Ping timeout: 255 seconds)
2023-10-22 09:41:47 +0200sm(~sm@plaintextaccounting/sm)
2023-10-22 09:42:04 +0200acidjnk_new(~acidjnk@p200300d6e72b938125cc9ae0c91bfe8f.dip0.t-ipconnect.de)
2023-10-22 09:42:27 +0200Jackneill(~Jackneill@20014C4E1E0E6F004BDEA8A1DAB424C0.dsl.pool.telekom.hu)
2023-10-22 09:44:21 +0200vglfr(~vglfr@88.155.246.162) (Read error: Connection reset by peer)
2023-10-22 09:44:42 +0200vglfr(vglfr@gateway/vpn/protonvpn/vglfr)
2023-10-22 09:47:52 +0200cpressey(~cpressey@host-2-102-12-88.as13285.net)
2023-10-22 09:48:27 +0200sm(~sm@plaintextaccounting/sm) (Ping timeout: 255 seconds)
2023-10-22 09:53:54 +0200tromp(~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
2023-10-22 09:54:18 +0200Square(~Square@user/square)
2023-10-22 09:58:29 +0200eggplantade(~Eggplanta@2600:1700:38c5:d800:49ec:9442:e7af:3828) (Remote host closed the connection)
2023-10-22 09:59:39 +0200todi(~todi@p4fd1a3e6.dip0.t-ipconnect.de)
2023-10-22 10:00:09 +0200vglfr(vglfr@gateway/vpn/protonvpn/vglfr) (Ping timeout: 255 seconds)
2023-10-22 10:02:48 +0200Inst(~Inst@120.244.192.250)
2023-10-22 10:03:37 +0200dcoutts(~duncan@cpc69402-oxfd27-2-0-cust903.4-3.cable.virginm.net) (Ping timeout: 255 seconds)
2023-10-22 10:03:47 +0200sm(~sm@plaintextaccounting/sm)
2023-10-22 10:06:41 +0200tzh(~tzh@c-71-193-181-0.hsd1.or.comcast.net) (Quit: zzz)
2023-10-22 10:11:10 +0200coot(~coot@89-69-206-216.dynamic.chello.pl)
2023-10-22 10:11:30 +0200_ht(~Thunderbi@28-52-174-82.ftth.glasoperator.nl)
2023-10-22 10:11:34 +0200phma(phma@2001:5b0:210d:e0f8:4b17:f518:800e:b47e) (Read error: Connection reset by peer)
2023-10-22 10:11:51 +0200sm(~sm@plaintextaccounting/sm) (Ping timeout: 240 seconds)
2023-10-22 10:12:22 +0200phma(~phma@host-67-44-208-184.hnremote.net)
2023-10-22 10:13:49 +0200vglfr(~vglfr@88.155.246.162)
2023-10-22 10:19:55 +0200notzmv(~zmv@user/notzmv)
2023-10-22 10:30:33 +0200eggplantade(~Eggplanta@2600:1700:38c5:d800:49ec:9442:e7af:3828)
2023-10-22 10:42:47 +0200sm(~sm@plaintextaccounting/sm)
2023-10-22 10:47:16 +0200sm(~sm@plaintextaccounting/sm) (Ping timeout: 255 seconds)
2023-10-22 10:48:17 +0200Unicorn_Princess(~Unicorn_P@user/Unicorn-Princess/x-3540542)
2023-10-22 10:49:19 +0200sm(~sm@plaintextaccounting/sm)
2023-10-22 10:51:52 +0200absence(torgeihe@hildring.pvv.ntnu.no) (Ping timeout: 252 seconds)
2023-10-22 10:55:07 +0200Fischmiep(~Fischmiep@user/Fischmiep)
2023-10-22 10:55:19 +0200nate2(~nate@c-98-45-169-16.hsd1.ca.comcast.net)
2023-10-22 10:55:36 +0200Fischmiep(~Fischmiep@user/Fischmiep) (Remote host closed the connection)
2023-10-22 10:57:25 +0200absence(torgeihe@hildring.pvv.ntnu.no)
2023-10-22 10:58:08 +0200 <Inst> EvanR: defaulting to >=> seems saner, no? Do notation is written effectively in (&), it implies a forward order of effects and computation.
2023-10-22 11:00:00 +0200 <probie> :t (>=>)
2023-10-22 11:00:01 +0200nate2(~nate@c-98-45-169-16.hsd1.ca.comcast.net) (Ping timeout: 255 seconds)
2023-10-22 11:00:02 +0200 <lambdabot> Monad m => (a -> m b) -> (b -> m c) -> a -> m c
2023-10-22 11:05:52 +0200harveypwca(~harveypwc@2601:246:c280:6a90:837d:db39:3eea:f7db)
2023-10-22 11:06:48 +0200 <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?
2023-10-22 11:07:44 +0200sm(~sm@plaintextaccounting/sm) (Ping timeout: 255 seconds)
2023-10-22 11:08:06 +0200dibblego(~dibblego@haskell/developer/dibblego) (Ping timeout: 255 seconds)
2023-10-22 11:10:08 +0200Tuplanolla(~Tuplanoll@91-159-68-236.elisa-laajakaista.fi)
2023-10-22 11:10:17 +0200 <Inst> Because I like hybrid do notation, i.e, direct use of bind etc in do notation, use of where to define subfunctions, etc
2023-10-22 11:10:39 +0200 <Inst> the idea is that the do level is specification of your algorithm, whereas the direct binds / wheres are implementation.
2023-10-22 11:11:44 +0200dibblego(~dibblego@122-199-1-93.ip4.superloop.au)
2023-10-22 11:11:44 +0200dibblego(~dibblego@122-199-1-93.ip4.superloop.au) (Changing host)
2023-10-22 11:11:44 +0200dibblego(~dibblego@haskell/developer/dibblego)
2023-10-22 11:18:13 +0200oo_miguel(~Thunderbi@78-11-179-96.static.ip.netia.com.pl)
2023-10-22 11:25:13 +0200ubert1(~Thunderbi@77.119.202.255.wireless.dyn.drei.com)
2023-10-22 11:26:17 +0200ubert(~Thunderbi@91.141.58.4.wireless.dyn.drei.com) (Ping timeout: 255 seconds)
2023-10-22 11:26:17 +0200ubert1ubert
2023-10-22 11:32:39 +0200 <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
2023-10-22 11:33:16 +0200 <Inst> the rest of the program getLines, and then dies
2023-10-22 11:33:44 +0200 <Inst> Is this the only way to do it?
2023-10-22 11:34:08 +0200 <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)
2023-10-22 11:34:21 +0200 <Inst> cpressey, for instance, in Cabal
2023-10-22 11:34:25 +0200 <Rembane> Inst: Do you have a minimum example of the crash?
2023-10-22 11:34:55 +0200 <Inst> cabal install, rather
2023-10-22 11:34:57 +0200 <Inst> what crash?
2023-10-22 11:35:11 +0200 <Inst> die is an IO action in System.Exit
2023-10-22 11:36:44 +0200 <Inst> Check out main
2023-10-22 11:36:45 +0200 <Inst> https://github.com/haskell/cabal/blob/master/cabal-install/src/Distribution/Client/Main.hs
2023-10-22 11:36:55 +0200 <Inst> cabal codebase is probalby not the best example, but it exists
2023-10-22 11:37:22 +0200 <Inst> check out main, and how mainWorker is called
2023-10-22 11:37:50 +0200 <Inst> I'd rather write
2023-10-22 11:37:51 +0200 <Inst> mainWorker =<< (++ args1) <$> expandResponse args0
2023-10-22 11:38:19 +0200 <Inst> as expandResponse args0 <&> (<> args1) >>= mainWorker, though
2023-10-22 11:38:50 +0200 <Inst> or even (<> args1) <$> expandResponse args0 >>= mainWorker
2023-10-22 11:39:48 +0200 <Inst> expandResponse args0 >>= mainWorker . (<> args1)
2023-10-22 11:40:47 +0200 <Inst> mainWorker . (<> args1) =<< expandResponse args0 is probably the best for what's being expressed, though
2023-10-22 11:43:36 +0200 <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"
2023-10-22 11:44:02 +0200emmanuelux(~emmanuelu@user/emmanuelux)
2023-10-22 11:44:24 +0200Pickchea(~private@user/pickchea) (Quit: Leaving)
2023-10-22 11:44:49 +0200 <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
2023-10-22 11:45:04 +0200 <Rembane> rosco: IIRC brick doesn't have any executables, what are you going to use it for?
2023-10-22 11:48:07 +0200 <rosco> Rembane: my bad, the executables are demos that are not built by default. I managed to get it installed using the --lib flag.
2023-10-22 11:48:40 +0200 <Rembane> rosco: Good stuff!
2023-10-22 12:00:33 +0200isekaijin(~user@user/isekaijin)
2023-10-22 12:00:47 +0200waleee(~waleee@2001:9b0:21c:e600:f2f3:f744:435d:137c)
2023-10-22 12:00:58 +0200pretty_dumm_guy(trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655)
2023-10-22 12:02:44 +0200Inst(~Inst@120.244.192.250) (Ping timeout: 255 seconds)
2023-10-22 12:07:33 +0200emmanuelux(~emmanuelu@user/emmanuelux) (Read error: Connection reset by peer)
2023-10-22 12:08:07 +0200emmanuelux(~emmanuelu@user/emmanuelux)
2023-10-22 12:08:51 +0200Fischmiep(~Fischmiep@user/Fischmiep)
2023-10-22 12:14:20 +0200vglfr(~vglfr@88.155.246.162) (Read error: Connection reset by peer)
2023-10-22 12:15:22 +0200Inst(~Inst@120.244.192.250)
2023-10-22 12:17:18 +0200Unicorn_Princess(~Unicorn_P@user/Unicorn-Princess/x-3540542) (Remote host closed the connection)
2023-10-22 12:18:32 +0200gmg(~user@user/gehmehgeh) (Remote host closed the connection)
2023-10-22 12:19:21 +0200gmg(~user@user/gehmehgeh)
2023-10-22 12:26:36 +0200CiaoSen(~Jura@2a05:5800:2be:1b00:664b:f0ff:fe37:9ef)
2023-10-22 12:32:18 +0200eggplantade(~Eggplanta@2600:1700:38c5:d800:49ec:9442:e7af:3828) (Ping timeout: 272 seconds)
2023-10-22 12:33:38 +0200emmanuelux(~emmanuelu@user/emmanuelux) (Read error: Connection reset by peer)
2023-10-22 12:34:20 +0200nickiminjaj(~nickiminj@user/laxhh) (Read error: Connection reset by peer)
2023-10-22 12:34:33 +0200emmanuelux(~emmanuelu@user/emmanuelux)
2023-10-22 12:34:43 +0200nickiminjaj(~nickiminj@188.146.126.78)
2023-10-22 12:34:43 +0200nickiminjaj(~nickiminj@188.146.126.78) (Changing host)
2023-10-22 12:34:43 +0200nickiminjaj(~nickiminj@user/laxhh)
2023-10-22 12:41:22 +0200 <tomsmeding> rosco: advice: _never_ use 'cabal install --lib' unless you know precisely what that does and that is really what you want
2023-10-22 12:41:25 +0200 <tomsmeding> it does something unexpected
2023-10-22 12:42:02 +0200 <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?
2023-10-22 12:43:18 +0200 <tomsmeding> rosco: if you want to install the demo executables, try 'cabal install brick -f demos'
2023-10-22 12:43:56 +0200 <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
2023-10-22 12:46:10 +0200 <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
2023-10-22 12:46:10 +0200 <tomsmeding> this library, everything will break
2023-10-22 12:46:52 +0200 <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
2023-10-22 12:47:05 +0200 <tomsmeding> then you can declaratively add dependencies and cabal will arrange things so that the right things are available
2023-10-22 12:47:23 +0200 <Inst> if you're lazy, you can use a cabal header in a Haskell file, but this doesn't propagate to multiple files iirc
2023-10-22 12:47:30 +0200 <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)
2023-10-22 12:47:48 +0200 <Inst> And the language server isn't supporting this workflow yet
2023-10-22 12:47:58 +0200 <Inst> https://cabal.readthedocs.io/en/stable/getting-started.html#run-a-single-file-haskell-script
2023-10-22 12:48:02 +0200 <tomsmeding> Inst: right, that's single-file only, but "cabal scripts" as they're called also exist
2023-10-22 12:48:40 +0200_ht(~Thunderbi@28-52-174-82.ftth.glasoperator.nl) (Remote host closed the connection)
2023-10-22 12:48:59 +0200_ht(~Thunderbi@28-52-174-82.ftth.glasoperator.nl)
2023-10-22 12:49:34 +0200 <Inst> I wish HLS team would hurry up and add cabal script support
2023-10-22 12:49:43 +0200 <Inst> It'd be a great standard workflow for newbies
2023-10-22 12:59:00 +0200nek0(~nek0@2a01:4f8:222:2b41::12)
2023-10-22 13:01:08 +0200Sgeo(~Sgeo@user/sgeo) (Read error: Connection reset by peer)
2023-10-22 13:01:25 +0200mrmr155(~mrmr@user/mrmr) (Read error: Connection reset by peer)
2023-10-22 13:05:29 +0200vglfr(~vglfr@88.154.70.142)
2023-10-22 13:08:45 +0200mrmr155(~mrmr@user/mrmr)
2023-10-22 13:11:12 +0200vglfr(~vglfr@88.154.70.142) (Read error: Connection reset by peer)
2023-10-22 13:11:32 +0200vglfr(~vglfr@149.102.244.114)
2023-10-22 13:15:02 +0200Pickchea(~private@user/pickchea)
2023-10-22 13:15:30 +0200waleee(~waleee@2001:9b0:21c:e600:f2f3:f744:435d:137c) (Ping timeout: 258 seconds)
2023-10-22 13:28:05 +0200vglfr(~vglfr@149.102.244.114) (Ping timeout: 240 seconds)
2023-10-22 13:28:17 +0200vglfr(~vglfr@88.154.70.142)
2023-10-22 13:29:43 +0200emmanuelux(~emmanuelu@user/emmanuelux) (Read error: Connection reset by peer)
2023-10-22 13:30:19 +0200harveypwca(~harveypwc@2601:246:c280:6a90:837d:db39:3eea:f7db) (Quit: Leaving)
2023-10-22 13:30:33 +0200emmanuelux(~emmanuelu@user/emmanuelux)
2023-10-22 13:33:56 +0200 <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
2023-10-22 13:49:39 +0200 <Inst> I should feel bad because I'm scraping all the irc logs off via a Haskell script @tomsmeding
2023-10-22 14:04:04 +0200 <Inst> grrr, bugged out with an exception
2023-10-22 14:05:43 +0200__monty__(~toonn@user/toonn)
2023-10-22 14:07:22 +0200 <Inst> i'll stop until tomsmeding gives me permission
2023-10-22 14:08:01 +0200Vajb(~Vajb@207.61.167.122)
2023-10-22 14:08:15 +0200 <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.
2023-10-22 14:08:24 +0200 <arahael> BUt I'm just a lurker here.
2023-10-22 14:08:37 +0200 <Inst> I mean he's running public logs in the topic
2023-10-22 14:10:16 +0200 <arahael> Ah, yeah, that's the exception, that's generally fine too as long as it's explicit.
2023-10-22 14:10:35 +0200 <arahael> I see what you mean now, though.
2023-10-22 14:10:38 +0200 <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.
2023-10-22 14:10:56 +0200 <arahael> Rembane: Yeah, I realise now that what he's not sure about is whether he can use tomsmeding's logs in this way.
2023-10-22 14:12:35 +0200 <Rembane> arahael: I think it's one of those: it depends
2023-10-22 14:14:03 +0200[itchyjunk](~itchyjunk@user/itchyjunk/x-7353470)
2023-10-22 14:14:21 +0200 <Inst> it's probably 100 MB a pop
2023-10-22 14:17:44 +0200 <Inst> ummmm, tomsmeding, do you have a paypal or scribe for me to transfer money?
2023-10-22 14:18:10 +0200 <Inst> it looks like the full download is 500 mb
2023-10-22 14:18:30 +0200cheater_(~Username@user/cheater)
2023-10-22 14:19:54 +0200cheater(~Username@user/cheater) (Ping timeout: 258 seconds)
2023-10-22 14:19:56 +0200cheater_cheater
2023-10-22 14:29:38 +0200eggplantade(~Eggplanta@2600:1700:38c5:d800:49ec:9442:e7af:3828)
2023-10-22 14:32:26 +0200[exa](~exa@user/exa/x-3587197)
2023-10-22 14:33:03 +0200JuanDaugherty(~juan@user/JuanDaugherty)
2023-10-22 14:34:11 +0200Lycurgus(~georg@user/Lycurgus)
2023-10-22 14:38:21 +0200vglfr(~vglfr@88.154.70.142) (Read error: Connection reset by peer)
2023-10-22 14:38:41 +0200vglfr(vglfr@gateway/vpn/protonvpn/vglfr)
2023-10-22 14:39:51 +0200eggplantade(~Eggplanta@2600:1700:38c5:d800:49ec:9442:e7af:3828) (Ping timeout: 240 seconds)
2023-10-22 14:43:45 +0200 <tomsmeding> Inst: what do you want, do you want the ircbrowse logs :p
2023-10-22 14:43:56 +0200 <Inst> I want to pay you for the bandwidth I wasted
2023-10-22 14:44:09 +0200 <Inst> and I found out I can just do this via haskellbridge instead and not bang your server with a DDOS
2023-10-22 14:44:13 +0200 <Inst> well, DOS
2023-10-22 14:47:40 +0200Vajb(~Vajb@207.61.167.122) (Ping timeout: 248 seconds)
2023-10-22 14:48:07 +0200 <tomsmeding> Inst: are we talking about that 200 KBps stuff from like 10 minutes ago?
2023-10-22 14:48:18 +0200 <tomsmeding> er, wait
2023-10-22 14:48:26 +0200 <tomsmeding> about 70 minutes ago
2023-10-22 14:48:28 +0200 <tomsmeding> reading graphs is hard
2023-10-22 14:48:51 +0200 <tomsmeding> I'm not sure that even registers in the bandwidth budget I have :D
2023-10-22 14:49:22 +0200 <tomsmeding> it's running on one of these https://www.hetzner.com/cloud (x86, a CX21) with 20 TB bandwidth per month
2023-10-22 14:49:56 +0200 <Inst> oh nice, so I only took up about 0.005% of your bandwidth budget
2023-10-22 14:50:08 +0200 <tomsmeding> Inst: I'm willing to just zip up the full znc logs for you, that's 94 MB :p
2023-10-22 14:50:39 +0200 <tomsmeding> that ought to make things easier
2023-10-22 14:51:34 +0200 <Rembane> Inst: Out of curiosity, what are you going to do with the logs?
2023-10-22 14:54:51 +0200nate2(~nate@c-98-45-169-16.hsd1.ca.comcast.net)
2023-10-22 14:55:48 +0200CiaoSen(~Jura@2a05:5800:2be:1b00:664b:f0ff:fe37:9ef) (Ping timeout: 240 seconds)
2023-10-22 14:56:12 +0200 <Inst> Rembane: It doesn't matter, it's more convenient to search via HaskellBridge
2023-10-22 14:57:01 +0200 <tomsmeding> sure :p
2023-10-22 14:58:41 +0200random-jellyfish(~tiber@user/random-jellyfish)
2023-10-22 14:59:35 +0200nate2(~nate@c-98-45-169-16.hsd1.ca.comcast.net) (Ping timeout: 255 seconds)
2023-10-22 15:02:56 +0200 <Inst> by the way, with fix, here's another weirdness of the type system
2023-10-22 15:03:15 +0200 <Inst> fix f = let u = f u in u
2023-10-22 15:03:22 +0200 <Inst> whoops, need to be more polite with my variables here
2023-10-22 15:04:17 +0200 <Inst> ah, if fix :: (a -> a) -> a, then the type of u is a
2023-10-22 15:05:00 +0200 <Inst> myFix gets inferred as (t -> t) -> t
2023-10-22 15:05:47 +0200 <Inst> there's an implicit promise that u is a value of form t, via the type system
2023-10-22 15:05:58 +0200 <Rembane> Inst: Oh, got it!
2023-10-22 15:06:54 +0200 <Inst> i should still write some code to append the bytestrings together, though
2023-10-22 15:07:12 +0200cheater_(~Username@user/cheater)
2023-10-22 15:07:27 +0200Lycurgus(~georg@user/Lycurgus) (Quit: leaving)
2023-10-22 15:08:36 +0200cheater(~Username@user/cheater) (Ping timeout: 240 seconds)
2023-10-22 15:08:38 +0200cheater_cheater
2023-10-22 15:09:08 +0200 <Inst> by the way, just curious, main :: IO a, not main :: IO ()
2023-10-22 15:09:17 +0200 <Inst> is there any way to make use of the a, or is it just needless flexibility?
2023-10-22 15:09:39 +0200dcoutts(~duncan@cpc69402-oxfd27-2-0-cust903.4-3.cable.virginm.net)
2023-10-22 15:10:22 +0200JuanDaugherty(~juan@user/JuanDaugherty) (Quit: JuanDaugherty)
2023-10-22 15:10:58 +0200vglfr(vglfr@gateway/vpn/protonvpn/vglfr) (Ping timeout: 260 seconds)
2023-10-22 15:11:19 +0200 <tomsmeding> Inst: see the second paragraph here https://www.haskell.org/onlinereport/haskell2010/haskellch5.html#x11-980005
2023-10-22 15:11:36 +0200vglfr(~vglfr@88.154.70.142)
2023-10-22 15:15:31 +0200dcoutts(~duncan@cpc69402-oxfd27-2-0-cust903.4-3.cable.virginm.net) (Ping timeout: 260 seconds)
2023-10-22 15:19:44 +0200tromp(~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
2023-10-22 15:21:17 +0200Vajb(~Vajb@207.61.167.122)
2023-10-22 15:24:45 +0200tromp(~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
2023-10-22 15:25:19 +0200 <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
2023-10-22 15:25:28 +0200 <Inst> but probably someone has thought about it already and it's just not convenient
2023-10-22 15:26:05 +0200 <tomsmeding> then it would be inconsistent with (), because then it would need to show "()" too
2023-10-22 15:26:27 +0200 <tomsmeding> if it's inconsistent that way, you're breaking parametricity which can be surprising
2023-10-22 15:27:24 +0200Alleria(~JohnGalt@user/alleria) (Ping timeout: 240 seconds)
2023-10-22 15:27:44 +0200 <tomsmeding> the fact that that does different stuff depending on whether there is a Show instance available can also be surprising
2023-10-22 15:33:16 +0200Alleria(~JohnGalt@user/alleria)
2023-10-22 15:34:40 +0200 <Inst> the only real point, I suspect
2023-10-22 15:34:54 +0200 <Inst> might be if someone replaced () with some other unit-like type
2023-10-22 15:37:35 +0200 <Inst> the typeclass monad is privileged (because >> and >>=), the type IO a is also privileged, but no point in giving unit privileges as well
2023-10-22 15:38:34 +0200Alleria(~JohnGalt@user/alleria) (Ping timeout: 255 seconds)
2023-10-22 15:38:43 +0200 <cpressey> I don't think I could agree with the assertion that the monad typeclass is "privileged (because >> and >>=)", can you elaborate Inst?
2023-10-22 15:38:55 +0200 <tomsmeding> do-notation uses it
2023-10-22 15:39:03 +0200 <Inst> iirc the do desugaring, which is baked in, uses >> and >>=
2023-10-22 15:39:28 +0200 <cpressey> That doesn't seem like a huge "privilege" to me, but OK
2023-10-22 15:39:31 +0200 <tomsmeding> also MonadFail, and with ApplicativeDo it even uses Applicative
2023-10-22 15:39:54 +0200 <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
2023-10-22 15:40:24 +0200arahael(~arahael@119-18-2-212.771202.syd.nbn.aussiebb.net) (Ping timeout: 258 seconds)
2023-10-22 15:40:35 +0200 <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
2023-10-22 15:41:02 +0200 <tomsmeding> there's a variety of such things in base, in particular almost everything in GHC.Exts
2023-10-22 15:41:24 +0200 <tomsmeding> (see also the "reinstallable base" project)
2023-10-22 15:57:55 +0200alphacentauri(alphacenta@gateway/vpn/protonvpn/alphacentauri) (Quit: WeeChat 4.1.0)
2023-10-22 16:09:09 +0200random-jellyfish(~tiber@user/random-jellyfish) (Ping timeout: 258 seconds)
2023-10-22 16:17:58 +0200 <albet70> what's the difference between tuple list and Map?
2023-10-22 16:18:01 +0200billchenchina(~billchenc@103.152.35.21)
2023-10-22 16:18:20 +0200 <albet70> just missing a 'fromList'?
2023-10-22 16:20:16 +0200 <ncf> they're different types with different interfaces and different representations
2023-10-22 16:24:49 +0200Pickchea(~private@user/pickchea) (Quit: Leaving)
2023-10-22 16:30:28 +0200 <EvanR> Inst, "forward" being left to right is subjective
2023-10-22 16:30:39 +0200 <EvanR> culturally specific
2023-10-22 16:31:04 +0200machinedgod(~machinedg@d198-53-218-113.abhsia.telus.net)
2023-10-22 16:31:15 +0200 <Inst> Was briefly thinking about weird indigenous cultures that lacked a notion of subjective direction.
2023-10-22 16:32:25 +0200 <Inst> but what's objective is that there's a notion of forward within the lexer, no?
2023-10-22 16:34:42 +0200Guest70(~Guest70@2a02:26f7:ec44:6600:0:d918:28ea:6bec)
2023-10-22 16:36:48 +0200Guest70(~Guest70@2a02:26f7:ec44:6600:0:d918:28ea:6bec) (Client Quit)
2023-10-22 16:38:47 +0200 <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.
2023-10-22 16:39:20 +0200 <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?
2023-10-22 16:39:29 +0200 <hololeap> (in cabal.project)
2023-10-22 16:40:02 +0200 <hololeap> if I use a sha sum, it will update if it gets changed, but with "head" it doesn't seem to
2023-10-22 16:45:35 +0200cpressey(~cpressey@host-2-102-12-88.as13285.net) (Ping timeout: 248 seconds)
2023-10-22 16:46:31 +0200drdo(~drdo@bl14-14-49.dsl.telepac.pt) (Ping timeout: 260 seconds)
2023-10-22 16:48:28 +0200eggplantade(~Eggplanta@2600:1700:38c5:d800:49ec:9442:e7af:3828)
2023-10-22 16:48:34 +0200tzh(~tzh@c-71-193-181-0.hsd1.or.comcast.net)
2023-10-22 16:48:44 +0200 <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
2023-10-22 16:49:28 +0200 <EvanR> ordering is one thing and "left vs right" is entirely something else
2023-10-22 16:50:38 +0200 <EvanR> in =<< ordering is also from previous to next, whatever you mean because it does the same thing just reverses the arguments
2023-10-22 16:51:20 +0200 <EvanR> you're still implicitly calling left previous and right next
2023-10-22 16:52:02 +0200 <EvanR> compare the "order" of "effects" in f(g(h(x)))
2023-10-22 16:53:48 +0200 <albet70> what's the function name of f [True, False, False] == True?
2023-10-22 16:54:30 +0200 <mauke> head
2023-10-22 16:54:34 +0200 <Inst> any?
2023-10-22 16:54:36 +0200 <albet70> any (== True)
2023-10-22 16:54:40 +0200 <mauke> or
2023-10-22 16:55:04 +0200 <mauke> maximum
2023-10-22 16:55:05 +0200 <albet70> or it is
2023-10-22 16:55:14 +0200 <mauke> (== True) is id
2023-10-22 16:55:22 +0200 <EvanR> @src or
2023-10-22 16:55:22 +0200 <lambdabot> or = foldr (||) False
2023-10-22 16:55:28 +0200 <dolio> any id is or
2023-10-22 16:55:46 +0200 <mauke> > maximum [True, False, False]
2023-10-22 16:55:47 +0200 <lambdabot> True
2023-10-22 16:55:56 +0200 <dolio> const True
2023-10-22 16:56:01 +0200 <mauke> nice
2023-10-22 16:56:32 +0200 <mauke> > pure maxBound [True, False, False] == True
2023-10-22 16:56:34 +0200 <lambdabot> True
2023-10-22 16:56:39 +0200 <Inst> EvanR: (.) comes from mathematical f o g o h... >>='s left to right ordering is essentially imperative
2023-10-22 16:57:26 +0200 <Inst> I suppose Wadler et al must have been considering reverse state monad as the basis for IO at some stage
2023-10-22 16:57:36 +0200 <EvanR> many monads have nothing to do with imperative programming
2023-10-22 16:59:40 +0200zincy(~tom@2a00:23c8:970c:4801:5b6a:e81b:79dc:f684)
2023-10-22 16:59:48 +0200 <Inst> Which example are you thinking of?
2023-10-22 17:00:45 +0200 <Inst> let's say, for instance, Maybe, for you
2023-10-22 17:00:55 +0200 <Inst> it'd be more useful to think of a chain of functions keyed to maybe
2023-10-22 17:01:14 +0200 <Inst> via <=< and =<< instead of >=> or >>=?
2023-10-22 17:01:41 +0200 <dolio> Expression trees are monads where (>>=) is substitution.
2023-10-22 17:02:38 +0200 <ncf> Identity is a monad where (>>=) is function application. can't get more functional than that
2023-10-22 17:02:38 +0200 <Inst> back to the free monad tutorial joke?
2023-10-22 17:03:00 +0200 <ncf> (i guess you can...)
2023-10-22 17:03:28 +0200fendor(~fendor@2a02:8388:1640:be00:aab:1226:f274:5021) (Remote host closed the connection)
2023-10-22 17:03:50 +0200 <dolio> What?
2023-10-22 17:04:15 +0200 <albet70> what's the doNothing name in if-the-else? like "pass" in python?
2023-10-22 17:04:24 +0200 <albet70> return ()?
2023-10-22 17:04:42 +0200 <EvanR> maybe you want when?
2023-10-22 17:04:45 +0200 <EvanR> :t when
2023-10-22 17:04:46 +0200 <lambdabot> Applicative f => Bool -> f () -> f ()
2023-10-22 17:04:48 +0200 <EvanR> :t unless
2023-10-22 17:04:49 +0200 <lambdabot> Applicative f => Bool -> f () -> f ()
2023-10-22 17:04:50 +0200 <Inst> it depends on what context the if the else exists in?
2023-10-22 17:06:09 +0200 <EvanR> they include the pure () for you
2023-10-22 17:17:50 +0200 <Inst> there's something deceptive about it, though, because it's not "return" as with if (cond) {return u}
2023-10-22 17:18:51 +0200 <Inst> whereas if then else can do so easily
2023-10-22 17:19:29 +0200 <Inst> i guess, you can `when cond $ do` if block arguments are off
2023-10-22 17:19:39 +0200 <Inst> or `unless cond $ do`
2023-10-22 17:20:25 +0200tromp(~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
2023-10-22 17:28:13 +0200vglfr(~vglfr@88.154.70.142) (Remote host closed the connection)
2023-10-22 17:30:20 +0200Vajb(~Vajb@207.61.167.122) (Ping timeout: 255 seconds)
2023-10-22 17:33:35 +0200vglfr(~vglfr@88.154.70.142)
2023-10-22 17:45:35 +0200tromp(~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
2023-10-22 17:46:48 +0200alphacentauri(alphacenta@gateway/vpn/protonvpn/alphacentauri)
2023-10-22 17:50:26 +0200michalz(~michalz@185.246.207.221)
2023-10-22 17:53:46 +0200vglfr(~vglfr@88.154.70.142) (Read error: Connection reset by peer)
2023-10-22 17:54:06 +0200vglfr(~vglfr@149.102.244.109)
2023-10-22 17:56:10 +0200blomberg(~default_u@117.248.77.218)
2023-10-22 17:56:40 +0200 <blomberg> can i use do outside main/functions in the file , and guards inside main
2023-10-22 17:56:53 +0200 <monochrom> Yes.
2023-10-22 17:57:18 +0200 <blomberg> i have never seen guards inside main
2023-10-22 17:57:44 +0200 <blomberg> they use if else in the learnyouahaskell book
2023-10-22 17:57:46 +0200 <monochrom> Sure. Many more people have never seen this either:
2023-10-22 17:57:50 +0200 <EvanR> Inst, return is not involved in when / unless, no one expects it to return, what are you talking about
2023-10-22 17:57:50 +0200 <monochrom> > let in 5+3
2023-10-22 17:57:52 +0200 <lambdabot> 8
2023-10-22 17:58:08 +0200 <monochrom> i.e., you can have 0 bindings in let-in.
2023-10-22 17:58:32 +0200 <Inst> i mean, in imperative languages i'll do early return with boolean guards
2023-10-22 17:58:54 +0200 <EvanR> pass doesn't do early return, no one's talking about early return
2023-10-22 17:59:18 +0200 <Inst> it was a derail
2023-10-22 17:59:46 +0200 <mauke> EvanR: Inst was talking about early return
2023-10-22 17:59:52 +0200 <EvanR> "there's something deceptive about" when or unless regarding early return? except it doesn't do that
2023-10-22 18:00:14 +0200 <mauke> because albet70 suggested 'return ()' as a solution, which is misleading if you're coming from other languages
2023-10-22 18:00:20 +0200 <monochrom> There is something deceptive ("deceptive") about every foreign language.
2023-10-22 18:01:12 +0200 <blomberg> monochrom: what about let x=4; without the in
2023-10-22 18:01:22 +0200 <blomberg> > let x=4;
2023-10-22 18:01:24 +0200 <lambdabot> <no location info>: error: not an expression: ‘let x=4;’
2023-10-22 18:01:28 +0200 <monochrom> That one is a syntax error.
2023-10-22 18:01:37 +0200 <mauke> only allowed in do notation
2023-10-22 18:01:39 +0200 <Inst> ban return, use pure :)
2023-10-22 18:01:49 +0200 <blomberg> i have seen let without in, inside main let x = 5 ; the book said it works
2023-10-22 18:01:58 +0200 <geekosaur> do syntax allows it, and expands it to let-in
2023-10-22 18:02:06 +0200 <Inst> iirc you can also use top-level let, no?
2023-10-22 18:02:13 +0200 <blomberg> let in ...what
2023-10-22 18:02:13 +0200 <geekosaur> no
2023-10-22 18:02:13 +0200 <EvanR> no
2023-10-22 18:02:30 +0200 <geekosaur> blomberg, the rest of the do expression
2023-10-22 18:02:54 +0200billchenchina(~billchenc@103.152.35.21) (Ping timeout: 272 seconds)
2023-10-22 18:02:55 +0200 <monochrom> "do x<-getLine ; let {y=x++x}; putStrLn y"
2023-10-22 18:03:17 +0200 <mauke> do { let x = 42; ... } becomes let x = 42 in do { ... }
2023-10-22 18:03:34 +0200 <Inst> weird, I guess I remembered wrong
2023-10-22 18:03:47 +0200YoungFrog(~youngfrog@39.129-180-91.adsl-dyn.isp.belgacom.be) (Quit: ZNC 1.7.x-git-3-96481995 - https://znc.in)
2023-10-22 18:03:53 +0200 <monochrom> This is why I KISS and just answered "no". The context did not have "do". :)
2023-10-22 18:03:54 +0200 <EvanR> what would a top level let..in even do
2023-10-22 18:04:07 +0200 <mauke> you can do it in ghci because it pretends to be an interactive do block, sort of
2023-10-22 18:04:20 +0200 <geekosaur> think "open module" in SML, maybe
2023-10-22 18:04:27 +0200 <geekosaur> parameterized
2023-10-22 18:04:39 +0200 <Inst> iirc that was a depreciated feature in ghci
2023-10-22 18:04:44 +0200 <Inst> well, not depreciated
2023-10-22 18:04:55 +0200 <Inst> you used to only be able to do let foo = x in ghci, as in, very old ghcis
2023-10-22 18:05:03 +0200 <EvanR> deprecated?
2023-10-22 18:05:11 +0200 <Inst> deprecated :(
2023-10-22 18:05:14 +0200 <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
2023-10-22 18:05:23 +0200vglfr(~vglfr@149.102.244.109) (Ping timeout: 260 seconds)
2023-10-22 18:05:44 +0200vglfr(~vglfr@88.154.70.142)
2023-10-22 18:06:19 +0200Tlsx(~rscastilh@187.40.125.21)
2023-10-22 18:08:20 +0200econo_(uid147250@id-147250.tinside.irccloud.com)
2023-10-22 18:08:21 +0200 <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
2023-10-22 18:08:43 +0200 <blomberg> did you know that fold is the same as for loop
2023-10-22 18:09:03 +0200 <geekosaur> actually for loop is map, not fold
2023-10-22 18:09:16 +0200 <geekosaur> in fact it's flip map
2023-10-22 18:09:39 +0200 <geekosaur> although I think in Haskell we expect it to be effectful to be useful, so for is flip traverse
2023-10-22 18:10:14 +0200 <Inst> what is a fold, in your context?
2023-10-22 18:10:46 +0200 <EvanR> :t unfold
2023-10-22 18:10:47 +0200 <lambdabot> error:
2023-10-22 18:10:47 +0200 <lambdabot> • Variable not in scope: unfold
2023-10-22 18:10:47 +0200 <lambdabot> • Perhaps you meant one of these:
2023-10-22 18:10:50 +0200 <monochrom> For (pun!) that matter, what are "while" and "for". :)
2023-10-22 18:10:56 +0200 <EvanR> :t unfoldr
2023-10-22 18:10:56 +0200 <lambdabot> (b -> Maybe (a, b)) -> b -> [a]
2023-10-22 18:10:58 +0200 <Inst> there's a function in std lib called fold, with a type of (Foldable t, Monoid m) => t m -> m
2023-10-22 18:11:13 +0200 <monochrom> Because next someone would argue that traverse is the for-loop.
2023-10-22 18:11:27 +0200 <monochrom> Err you already did haha.
2023-10-22 18:11:35 +0200 <Inst> okay, i'll go claim that traverse is a foreach loop :)
2023-10-22 18:11:52 +0200 <monochrom> Did you know that different cultures simply dichotomize things differently.
2023-10-22 18:12:11 +0200 <EvanR> :t for_
2023-10-22 18:12:12 +0200 <lambdabot> (Foldable t, Applicative f) => t a -> (a -> f b) -> f ()
2023-10-22 18:12:20 +0200 <EvanR> @src for_
2023-10-22 18:12:20 +0200 <lambdabot> Source not found. Listen, broccoli brains, I don't have time to listen to this trash.
2023-10-22 18:13:01 +0200 <EvanR> @botsnack
2023-10-22 18:13:01 +0200 <lambdabot> :)
2023-10-22 18:13:14 +0200 <Inst> @src forM
2023-10-22 18:13:14 +0200 <lambdabot> forM = flip mapM
2023-10-22 18:13:22 +0200 <Inst> @src for_
2023-10-22 18:13:22 +0200 <lambdabot> Source not found. And you call yourself a Rocket Surgeon!
2023-10-22 18:13:27 +0200 <monochrom> Did you know that the Chinese language didn't even have or need a word for the orange colour for thousands of years.
2023-10-22 18:13:28 +0200 <Inst> @botsnack
2023-10-22 18:13:28 +0200 <lambdabot> :)
2023-10-22 18:13:46 +0200 <Inst> I was thinking more 青
2023-10-22 18:15:17 +0200 <EvanR> for_ = flip traverse_, traverse_ f = foldr c (pure ())
2023-10-22 18:15:20 +0200 <Inst> sorry blomberg, it's hard to understand what you're asserting
2023-10-22 18:15:37 +0200 <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
2023-10-22 18:15:58 +0200 <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
2023-10-22 18:16:18 +0200 <EvanR> since traditional for loops are for effects only and no results, for_ which is based on Foldable is closest in spirit
2023-10-22 18:16:25 +0200 <Inst> traverse_ f should be foldl', no?
2023-10-22 18:16:53 +0200 <dolio> No.
2023-10-22 18:16:55 +0200 <EvanR> that would be bad
2023-10-22 18:18:00 +0200 <EvanR> ... where c x k = f x *> k
2023-10-22 18:18:40 +0200 <Inst> huh, so that does work
2023-10-22 18:18:41 +0200machinedgod(~machinedg@d198-53-218-113.abhsia.telus.net) (Ping timeout: 260 seconds)
2023-10-22 18:20:39 +0200 <Inst> so traverse_ and for_ can actually short circuit
2023-10-22 18:21:04 +0200 <EvanR> depends on the Applicative
2023-10-22 18:21:22 +0200 <Inst> well, no it can't
2023-10-22 18:21:24 +0200 <EvanR> e.g. in IO something half way could throw an exception
2023-10-22 18:22:17 +0200 <monochrom> In fact, just depends on the Functor. :)
2023-10-22 18:22:33 +0200 <EvanR> :t (*>)
2023-10-22 18:22:35 +0200 <lambdabot> Applicative f => f a -> f b -> f b
2023-10-22 18:23:12 +0200 <monochrom> Err nevermind, it's Applicative.
2023-10-22 18:23:50 +0200 <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
2023-10-22 18:24:24 +0200 <Inst> since you can implement for_ / traverse_ / for / traverse etc with foldr
2023-10-22 18:24:29 +0200 <Inst> as well as bake in short circuiting, etc
2023-10-22 18:24:47 +0200 <monochrom> "foldr is the equivalent of a for loop" proves misunderstanding of at least one of: foldr, for loop.
2023-10-22 18:24:51 +0200 <EvanR> you were kind of on the right track with the fold operation
2023-10-22 18:25:02 +0200 <monochrom> equivalence
2023-10-22 18:25:04 +0200 <Inst> a for each loop, then
2023-10-22 18:25:14 +0200 <EvanR> which pertains to reducing a tree, which there are many ways to go about doing
2023-10-22 18:25:31 +0200 <EvanR> when the reduction is a monoid, all the ways get the same answer
2023-10-22 18:25:37 +0200 <monochrom> I already had for each loop in mind.
2023-10-22 18:25:40 +0200 <EvanR> foldr and foldl are other ways
2023-10-22 18:26:19 +0200 <Inst> fold wasn't me, though, it was blomberg
2023-10-22 18:26:38 +0200 <monochrom> <monochrom> Did you know that different cultures simply dichotomize things differently.
2023-10-22 18:26:41 +0200 <EvanR> you mentioned the real fold, blomberg was referencing fan haskell or something
2023-10-22 18:26:54 +0200eggplantade(~Eggplanta@2600:1700:38c5:d800:49ec:9442:e7af:3828) (Remote host closed the connection)
2023-10-22 18:27:14 +0200eggplantade(~Eggplanta@2600:1700:38c5:d800:7c71:e1a2:664b:2a25)
2023-10-22 18:27:16 +0200 <monochrom> In Haskell we have catamorphisms, Foldable, Traversable, many other recursion schemes, and above all general recursion.
2023-10-22 18:27:43 +0200 <Inst> what's the proof that recursion is equivalent to while?
2023-10-22 18:27:44 +0200 <monochrom> You will not have much luck concorting an isomorphism from those to C or even Java.
2023-10-22 18:27:55 +0200 <Inst> and I'd indulge blomberg all day if he wanted me to
2023-10-22 18:28:31 +0200 <monochrom> Apart from mapping general recursion to general recursion. :)
2023-10-22 18:29:22 +0200 <monochrom> Java hasn't even discovered Monoid.
2023-10-22 18:29:31 +0200 <monochrom> (hence no Foldable)
2023-10-22 18:30:04 +0200 <monochrom> Scala is doing better in this regard actually.
2023-10-22 18:30:05 +0200 <EvanR> clojure is the merlin to java's arthur
2023-10-22 18:30:15 +0200 <blomberg> what are some functions for traversable, catamorphism
2023-10-22 18:30:47 +0200 <Inst> I'm probably going to spend at least one day every week whether someone knows what a typeclass is :(
2023-10-22 18:30:49 +0200 <monochrom> Traversable has traverse.
2023-10-22 18:31:20 +0200 <monochrom> Catamorphism is... just look it up. Or look up initial algebras.
2023-10-22 18:31:50 +0200 <blomberg> i thought it provided haskell functions
2023-10-22 18:32:20 +0200 <Inst> blomberg: how long have you been learning Haskell, what's the context you're learning it in, and what materials are you using?
2023-10-22 18:32:27 +0200 <Inst> I think you mentioned "Learn You A Haskell"?
2023-10-22 18:32:39 +0200 <Inst> Just so we can understand what you know already.
2023-10-22 18:32:46 +0200Vajb(~Vajb@207.61.167.122)
2023-10-22 18:34:27 +0200 <Inst> Traversable is a typeclass, Catamorphism is a concept (not a language feature) that describes a pattern of recursion
2023-10-22 18:34:38 +0200 <Inst> Catamorphism is just a fancy term for reduce
2023-10-22 18:34:39 +0200rosco(~rosco@yp-150-69.tm.net.my) (Quit: Lost terminal)
2023-10-22 18:35:31 +0200 <monochrom> No. Foldable's fold is.
2023-10-22 18:36:11 +0200 <monochrom> This is what's wrong with non-rigorous intuition.
2023-10-22 18:36:29 +0200 <monochrom> https://www.vex.net/~trebla/humour/tautologies.html #0
2023-10-22 18:36:37 +0200 <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
2023-10-22 18:36:57 +0200 <EvanR> :t traverse
2023-10-22 18:36:58 +0200 <lambdabot> (Traversable t, Applicative f) => (a -> f b) -> t a -> f (t b)
2023-10-22 18:37:14 +0200 <EvanR> actions are the f b
2023-10-22 18:37:27 +0200 <EvanR> so IO whatever is a possible example
2023-10-22 18:37:32 +0200 <mauke> blomberg: any sort of applicative functor, including IO
2023-10-22 18:40:22 +0200 <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 `* -> *`)
2023-10-22 18:40:51 +0200 <probie> :t traverse (*) [1..5 :: Int]
2023-10-22 18:40:52 +0200 <lambdabot> Int -> [Int]
2023-10-22 18:41:07 +0200 <probie> > traverse (*) [1..5::Int] 42
2023-10-22 18:41:09 +0200 <lambdabot> [42,84,126,168,210]
2023-10-22 18:41:14 +0200phma(~phma@host-67-44-208-184.hnremote.net) (Read error: Connection reset by peer)
2023-10-22 18:42:13 +0200phma(phma@2001:5b0:212a:ca38:321f:39d3:cfb3:6c89)
2023-10-22 18:46:12 +0200 <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
2023-10-22 18:49:54 +0200alphacentauri(alphacenta@gateway/vpn/protonvpn/alphacentauri) (Quit: WeeChat 4.1.0)
2023-10-22 18:51:36 +0200drdo(~drdo@bl14-14-49.dsl.telepac.pt)
2023-10-22 18:52:55 +0200waleee(~waleee@2001:9b0:21c:e600:f2f3:f744:435d:137c)
2023-10-22 18:54:16 +0200Inst(~Inst@120.244.192.250) (Ping timeout: 260 seconds)
2023-10-22 18:56:21 +0200nate2(~nate@c-98-45-169-16.hsd1.ca.comcast.net)
2023-10-22 18:58:35 +0200notzmv(~zmv@user/notzmv) (Ping timeout: 258 seconds)
2023-10-22 19:01:16 +0200nate2(~nate@c-98-45-169-16.hsd1.ca.comcast.net) (Ping timeout: 258 seconds)
2023-10-22 19:04:54 +0200notzmv(~zmv@user/notzmv)
2023-10-22 19:06:13 +0200 <mauke> :t foldr (\x z -> Just (x, maybe [] (uncurry (:)) z)) Nothing
2023-10-22 19:06:14 +0200 <lambdabot> Foldable t => t a -> Maybe (a, [a])
2023-10-22 19:08:07 +0200emmanuelux(~emmanuelu@user/emmanuelux) (Read error: Connection reset by peer)
2023-10-22 19:08:20 +0200 <mauke> > foldr (\x z -> Just (x, maybe [] (uncurry (:)) z)) Nothing [0 ..]
2023-10-22 19:08:22 +0200 <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...
2023-10-22 19:09:03 +0200emmanuelux(~emmanuelu@user/emmanuelux)
2023-10-22 19:16:51 +0200Inst(~Inst@120.244.192.250)
2023-10-22 19:17:21 +0200 <Inst> EvanR: my analogy is more that foldr on lists is too powerful
2023-10-22 19:17:29 +0200 <Inst> in the same way for is too powerful
2023-10-22 19:18:04 +0200 <Inst> you can even implement use foldr in such a way that you're storing two lists besides the list being deconstructed
2023-10-22 19:18:54 +0200 <Inst> and you can mimic for each's ability to modify elements of the data structure that you're not looping over
2023-10-22 19:21:04 +0200 <Inst> probie knows all the neat tricks with higher order functions, hahaha
2023-10-22 19:21:45 +0200 <EvanR> if you think for loops are too powerful you don't want me to tell you about goto
2023-10-22 19:22:00 +0200 <EvanR> which was used before for was a thing
2023-10-22 19:22:31 +0200 <Inst> i knew gotos when i was a whee kid, then stopped programming. Hopefully my brain damage has recovered by now.
2023-10-22 19:22:36 +0200 <Inst> *wee
2023-10-22 19:22:58 +0200 <EvanR> yeah me too, little did I know my BASIC implementation had subroutines
2023-10-22 19:23:12 +0200 <EvanR> mind blown
2023-10-22 19:23:54 +0200 <Inst> that said, there's tons of cool tricks you can do with traverse, that are a lot less obvious with for / for each
2023-10-22 19:23:59 +0200 <monochrom> Did its subroutine have paramter passing? Return values?
2023-10-22 19:24:16 +0200 <monochrom> Because subroutines are annoying instead of helpful without them.
2023-10-22 19:24:19 +0200ProgKea(~ProgKea@p5081b776.dip0.t-ipconnect.de)
2023-10-22 19:24:21 +0200 <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
2023-10-22 19:24:22 +0200 <lambdabot> 16
2023-10-22 19:24:38 +0200 <Inst> traverse unsetEnv ["HTTP_PROXY", "HTTPS_PROXY"]
2023-10-22 19:24:51 +0200 <monochrom> Err actually now I realize that by your time, they did. So, cool.
2023-10-22 19:24:51 +0200 <Inst> people don't do this in imperative languages, right?
2023-10-22 19:25:32 +0200 <Inst> at least, it looks better thanfor u in
2023-10-22 19:25:34 +0200 <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
2023-10-22 19:25:38 +0200tromp(~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
2023-10-22 19:25:48 +0200 <Inst> for u in [literals, moreliterals]:
2023-10-22 19:25:50 +0200 <Inst> someAct(u)
2023-10-22 19:26:09 +0200simendsjo(~user@84.211.91.241)
2023-10-22 19:26:10 +0200 <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"
2023-10-22 19:26:27 +0200 <Inst> you can trigger recursion within the lambda @ probies
2023-10-22 19:26:56 +0200 <Inst> *probie
2023-10-22 19:27:29 +0200Vajb(~Vajb@207.61.167.122) (Ping timeout: 246 seconds)
2023-10-22 19:27:54 +0200 <probie> True, but at that point the power isn't coming from `foldr`, but from general recursion
2023-10-22 19:29:18 +0200 <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"?
2023-10-22 19:29:36 +0200 <monochrom> (at which point can't even give the credit to C, no?)
2023-10-22 19:29:45 +0200ProgKea(~ProgKea@p5081b776.dip0.t-ipconnect.de) (Quit: leaving)
2023-10-22 19:29:56 +0200 <probie> That said, if have `foldr` and `unfoldr`, we have general recursion
2023-10-22 19:30:25 +0200simendsjo(~user@84.211.91.241) (Remote host closed the connection)
2023-10-22 19:31:05 +0200Vajb(~Vajb@207.61.167.122)
2023-10-22 19:31:11 +0200 <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.)
2023-10-22 19:31:20 +0200 <Inst> wait, can't foldr be used to implement unfoldr?
2023-10-22 19:32:41 +0200elevenkb(elevenkb@thunix.net)
2023-10-22 19:32:53 +0200ChaiTRex(~ChaiTRex@user/chaitrex) (Quit: ChaiTRex)
2023-10-22 19:33:56 +0200 <EvanR> monochrom, apparently it did not have parameter passing or return value
2023-10-22 19:34:03 +0200 <monochrom> :(
2023-10-22 19:34:16 +0200 <EvanR> still would have been better than emulating such a thing with goto xD
2023-10-22 19:34:35 +0200 <monochrom> Eventually QuickBASIC had them. (And by extension, Visual BASIC later.)
2023-10-22 19:35:29 +0200 <EvanR> ST_BASIC_Sourcebook_and_Tutorial-1986 on archive.org holy crap... I will not get sucked into this
2023-10-22 19:35:43 +0200Vajb(~Vajb@207.61.167.122) (Ping timeout: 264 seconds)
2023-10-22 19:36:10 +0200 <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?
2023-10-22 19:36:35 +0200 <monochrom> For each subroutine, have a static location to store the return address.
2023-10-22 19:36:42 +0200 <mauke> well, obviously
2023-10-22 19:36:53 +0200 <mauke> you'd allocate a static block of "locals" for each subroutine
2023-10-22 19:37:00 +0200dcoutts(~duncan@cpc69402-oxfd27-2-0-cust903.4-3.cable.virginm.net)
2023-10-22 19:37:02 +0200 <monochrom> (Right, only Peter Naur thought of using a stack when implementing Algol.)
2023-10-22 19:37:17 +0200 <mauke> and then you can implement parameters as local variables: just set them before the call
2023-10-22 19:37:24 +0200 <mauke> and then the return address is just another parameter
2023-10-22 19:37:28 +0200 <monochrom> So yeah reentrance was considered impossible for a while.
2023-10-22 19:38:03 +0200 <monochrom> So yeah also how I would do in BASIC. But even I knew there ought to be a better way.
2023-10-22 19:38:21 +0200 <mauke> and ever since, subroutines have been slow because they have to use indirect addressing for all variables :-(
2023-10-22 19:38:37 +0200 <EvanR> I wonder if you could make your own stack and use it that way in basic
2023-10-22 19:38:47 +0200 <monochrom> BASIC did not damage me. Instead it annoyed me and prepared me for heaven later. :)
2023-10-22 19:39:30 +0200tromp(~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
2023-10-22 19:39:44 +0200 <geekosaur> I got about halfway through implementing that by stealing a variable, then I found Tiny-C
2023-10-22 19:39:55 +0200dhruvasagar(~dhruvasag@49.207.194.211) (Ping timeout: 264 seconds)
2023-10-22 19:40:25 +0200 <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.
2023-10-22 19:41:05 +0200 <monochrom> Like, "whaddaya mean SIN and COS are built-in functions but there is no user-defined functions"
2023-10-22 19:41:18 +0200 <EvanR> then nirvana must be ruby where even classes are first class
2023-10-22 19:41:38 +0200kilian(~kilian@2a01:4b00:89ca:2a00:f172:7938:df2a:8c6c)
2023-10-22 19:41:40 +0200 <monochrom> Well, it isn't statically typed. :)
2023-10-22 19:41:41 +0200 <geekosaur> ruby's a cheap knockoff of smalltalk
2023-10-22 19:41:58 +0200 <mauke> hey, that's pretty much how it is in perl
2023-10-22 19:42:12 +0200 <monochrom> Smalltalk is the only dynamically typed or untyped language I truly respect. :)
2023-10-22 19:42:27 +0200 <monochrom> OK OK, Scheme is pretty cool too.
2023-10-22 19:42:53 +0200 <mauke> the "perlfunc" manual page is called that because it documents the built-in functions of perl
2023-10-22 19:43:04 +0200 <mauke> whereas the user-defined stuff is in "perlsub": they're subroutines!
2023-10-22 19:44:09 +0200Guest18(~Guest18@p200300db7f09bb00b26088fffe123eaa.dip0.t-ipconnect.de)
2023-10-22 19:44:31 +0200 <monochrom> Oh hey, "the return address is just another parameter" is why I don't draw a line between JSR and CPS. :)
2023-10-22 19:44:48 +0200 <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
2023-10-22 19:45:02 +0200Guest18(~Guest18@p200300db7f09bb00b26088fffe123eaa.dip0.t-ipconnect.de) ()
2023-10-22 19:45:55 +0200_xor(~xor@72.49.199.93) (Ping timeout: 264 seconds)
2023-10-22 19:46:18 +0200Unicorn_Princess(~Unicorn_P@user/Unicorn-Princess/x-3540542)
2023-10-22 19:46:22 +0200 <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)
2023-10-22 19:47:13 +0200 <mauke> monochrom: would be fun if you could natively pass multiple return addresses for success and error cases
2023-10-22 19:47:37 +0200 <Inst> it's back to how, while you can get foldr to override the limit on number of evaluations
2023-10-22 19:48:02 +0200 <geekosaur> mauke, snobol beat you to it
2023-10-22 19:48:12 +0200 <monochrom> I think they call that "exceptions" and "stack unwinding" ... :)
2023-10-22 19:48:17 +0200 <Inst> hmmm, you probably can still implement unfoldr in terms of foldr using an infinite list
2023-10-22 19:48:46 +0200 <monochrom> But oh cool so snobol had bicountinuoations haha
2023-10-22 19:48:58 +0200_xor(~xor@72.49.199.93)
2023-10-22 19:48:59 +0200 <EvanR> you can place a useless unused foldr call anywhere in your implementation if you want
2023-10-22 19:49:17 +0200 <monochrom> Someone needs to write the paper "COBOL, The Ultimate Lambda" hahaha
2023-10-22 19:50:24 +0200 <EvanR> but it's really missing the point of these "you can construct a thing with limited tools" demos
2023-10-22 19:50:34 +0200 <mauke> BOL, the prime lambda
2023-10-22 19:50:45 +0200 <monochrom> Inst, I tried that silently, it ended up begging the question. I could be wrong.
2023-10-22 19:50:45 +0200kilian(~kilian@2a01:4b00:89ca:2a00:f172:7938:df2a:8c6c) (Quit: Client closed)
2023-10-22 19:51:30 +0200 <EvanR> i meant to say unrelated to unfoldr's implementation
2023-10-22 19:51:49 +0200 <EvanR> which is basically lambda calculus + analyzing a Maybe
2023-10-22 19:52:04 +0200dhruvasagar(~dhruvasag@49.207.194.211)
2023-10-22 19:52:05 +0200Square(~Square@user/square) (Remote host closed the connection)
2023-10-22 19:52:49 +0200 <probie> :t \f z -> foldr (\() k x -> case f x of { Nothing -> []; Just (y,x') -> y: k x'}) (const []) (repeat ()) z
2023-10-22 19:52:50 +0200 <lambdabot> (t -> Maybe (a, t)) -> t -> [a]
2023-10-22 19:52:51 +0200 <monochrom> Well, I still haven't ruled out making foldr and unfoldr a mutually recursive pair...
2023-10-22 19:53:34 +0200 <Inst> https://paste.tomsmeding.com/mmlPjQKA
2023-10-22 19:53:46 +0200Vajb(~Vajb@207.61.167.122)
2023-10-22 19:54:02 +0200 <Inst> derp
2023-10-22 19:54:06 +0200 <Inst> got there faster than I did
2023-10-22 19:54:45 +0200Square(~Square@user/square)
2023-10-22 19:54:51 +0200simendsjo(~user@84.211.91.241)
2023-10-22 19:54:54 +0200 <monochrom> OK, that will be on the exam next time I teach. >:D
2023-10-22 19:55:41 +0200doyougnu(~doyougnu@45.46.170.68) (Ping timeout: 255 seconds)
2023-10-22 19:55:59 +0200 <EvanR> not sure what specific criteria this satisfies, other than "uses foldr somehow" xD
2023-10-22 19:56:36 +0200 <monochrom> It satifies your criteria if you also allow a "repeat ()" as an extra axiom.
2023-10-22 19:56:40 +0200 <probie> Given `foldr` and a single infinite list, I have general recursion
2023-10-22 19:56:56 +0200dhruvasagar(~dhruvasag@49.207.194.211) (Ping timeout: 255 seconds)
2023-10-22 19:57:05 +0200 <monochrom> So it begs the question a little bit. Who ordered that? :)
2023-10-22 19:57:30 +0200 <Inst> redundant
2023-10-22 19:57:32 +0200 <Inst> https://paste.tomsmeding.com/5aXScpQu
2023-10-22 19:57:48 +0200 <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
2023-10-22 19:58:10 +0200 <Inst> whoops
2023-10-22 19:58:12 +0200 <Inst> forgot default :(
2023-10-22 19:58:29 +0200 <monochrom> But I have obtained recursion with less. data D a = MkD (D a -> a)
2023-10-22 19:58:40 +0200 <monochrom> err, s/data/newtype/ is better
2023-10-22 19:58:47 +0200John_Ivan(~John_Ivan@user/john-ivan/x-1515935)
2023-10-22 19:59:32 +0200 <John_Ivan> hi, anyone know where "import Data.Text.Metrics (levenshtein)" is located? in what package?
2023-10-22 19:59:51 +0200 <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"
2023-10-22 19:59:51 +0200 <Inst> hoogle.haskell.org ?
2023-10-22 20:00:09 +0200 <Inst> https://hoogle.haskell.org/?hoogle=levenshtein
2023-10-22 20:00:37 +0200 <monochrom> perhaps https://hackage.haskell.org/package/text-metrics-0.3.2/docs/Data-Text-Metrics.html
2023-10-22 20:01:08 +0200 <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`)
2023-10-22 20:01:49 +0200_xor(~xor@72.49.199.93) (Read error: Connection reset by peer)
2023-10-22 20:02:03 +0200 <monochrom> What I did: https://hackage.haskell.org/packages/search?terms=metrics
2023-10-22 20:02:20 +0200 <EvanR> a system which allows repeat (), or a system which allows repeat to be implemented somehow with something else
2023-10-22 20:02:49 +0200 <monochrom> (Yeah, "Data.Text.Metrics" didn't work. Not very happy that hackage lost search-for-module-name a long time ago.)
2023-10-22 20:02:56 +0200dhruvasagar(~dhruvasag@49.207.194.211)
2023-10-22 20:03:38 +0200 <monochrom> Yeah EvanR it needs a seeding infinite list to generate other infinite lists. :)
2023-10-22 20:03:56 +0200 <EvanR> the axiom of infinity
2023-10-22 20:04:08 +0200_xor(~xor@72.49.199.93)
2023-10-22 20:04:09 +0200 <monochrom> which is a pun at the meta level :)
2023-10-22 20:04:16 +0200_xor(~xor@72.49.199.93) (Client Quit)
2023-10-22 20:04:36 +0200Pickchea(~private@user/pickchea)
2023-10-22 20:04:36 +0200 <monochrom> "To understand infinite lists, first you need to understand infinite lists"
2023-10-22 20:04:52 +0200_xor(~xor@72.49.199.93)
2023-10-22 20:05:02 +0200Vajb(~Vajb@207.61.167.122) (Ping timeout: 255 seconds)
2023-10-22 20:07:46 +0200dhruvasagar(~dhruvasag@49.207.194.211) (Ping timeout: 260 seconds)
2023-10-22 20:08:06 +0200 <John_Ivan> monochrom, , Inst found it. thanks. it's indeed in "text-metrics"
2023-10-22 20:08:11 +0200 <John_Ivan> cabal install --lib text-metrics
2023-10-22 20:08:13 +0200 <John_Ivan> did the trick.
2023-10-22 20:09:12 +0200 <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
2023-10-22 20:09:54 +0200 <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
2023-10-22 20:10:31 +0200 <John_Ivan> tomsmeding, I'll have a read, thanks.
2023-10-22 20:14:39 +0200 <monochrom> :(
2023-10-22 20:14:53 +0200_xor(~xor@72.49.199.93) (Ping timeout: 260 seconds)
2023-10-22 20:15:35 +0200 <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
2023-10-22 20:16:37 +0200Square(~Square@user/square) (Remote host closed the connection)
2023-10-22 20:18:14 +0200 <EvanR> are you referring to cabal script
2023-10-22 20:18:25 +0200Square(~Square@user/square)
2023-10-22 20:18:26 +0200 <Inst> *cabal script
2023-10-22 20:18:44 +0200 <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
2023-10-22 20:18:56 +0200 <ncf> lambdabot still gives infinite type errors so maybe it's not on GHC 9 yet? (int-e?)
2023-10-22 20:18:56 +0200 <Inst> https://cabal.readthedocs.io/en/stable/getting-started.html#run-a-single-file-haskell-script
2023-10-22 20:19:08 +0200 <monochrom> Nah, "cabal headers" is fine, "cabal script" just means having cabal headers :)
2023-10-22 20:19:18 +0200 <int-e> ncf: yeah it's not
2023-10-22 20:19:22 +0200 <EvanR> now that I know what that means
2023-10-22 20:19:32 +0200segfaultfizzbuzz(~segfaultf@23-93-74-212.fiber.dynamic.sonic.net)
2023-10-22 20:19:47 +0200 <Inst> I'm trying to find where fendor has the issue that HLS doesn't support cabal scripts
2023-10-22 20:19:56 +0200 <Inst> cabal scripts are really the solution to all the install --lib problems
2023-10-22 20:20:10 +0200dhruvasagar(~dhruvasag@49.207.194.211)
2023-10-22 20:20:26 +0200 <Inst> you can already cabal repl -b what you need if you're playing in repl, but compiled...
2023-10-22 20:20:27 +0200 <EvanR> making a cabal project is probably a good "standard procedure for noobs"
2023-10-22 20:20:54 +0200 <EvanR> cabal script when you know what you're doing
2023-10-22 20:21:10 +0200 <Inst> depends on your definition of noob, some people might be coming with little previous programming experience
2023-10-22 20:21:25 +0200 <Inst> and having to navigate the manifest can be a headache
2023-10-22 20:21:27 +0200 <Inst> cabal init
2023-10-22 20:21:31 +0200 <monochrom> When I teach type inference, I rely on the compiler saying "infinite type occurs check" :(
2023-10-22 20:22:35 +0200 <monochrom> Unpopular opinion: s/standard procedure/cargo-culting, fake it until you make it/
2023-10-22 20:23:03 +0200 <haskellbridge> <f​endor> Not quite accurate, it works if you know how :)
2023-10-22 20:23:39 +0200 <monochrom> Because that's exactly what we tell Java beginners about "public class MyMain { public static void main(String[] args)"
2023-10-22 20:23:58 +0200 <haskellbridge> <f​endor> Like, HLS works with cabal scripts if you can trick it
2023-10-22 20:23:59 +0200 <tomsmeding> {}}
2023-10-22 20:24:17 +0200 <Inst> btw, speaking of sinophone affairs, have you seen this, monochrom?
2023-10-22 20:24:19 +0200 <Inst> http://www.tup.tsinghua.edu.cn/bookscenter/book_08868201.html
2023-10-22 20:24:24 +0200 <Inst> http://www.tup.tsinghua.edu.cn/booksCenter/bookcatalog.html?id=08868201
2023-10-22 20:24:37 +0200dhruvasagar(~dhruvasag@49.207.194.211) (Ping timeout: 255 seconds)
2023-10-22 20:24:57 +0200tomsmedingis unnerved by booksCenter vs bookscenter
2023-10-22 20:25:44 +0200 <EvanR> the internet is cases sensitive? smh
2023-10-22 20:26:20 +0200 <monochrom> My DNS can't resolve that.
2023-10-22 20:26:41 +0200_xor(~xor@72.49.199.93)
2023-10-22 20:26:54 +0200 <tomsmeding> monochrom: http://124.17.26.243/bookscenter/book_08868201.html
2023-10-22 20:27:03 +0200 <tomsmeding> get a better DNS resolver :p
2023-10-22 20:27:10 +0200 <Inst> no, could be political blocking
2023-10-22 20:27:22 +0200 <EvanR> banned bookscenter
2023-10-22 20:27:46 +0200 <Inst> i mean tsinghua could also be blocking the outside
2023-10-22 20:28:07 +0200 <monochrom> OK yeah Google's 8.8.8.8 resolves it fine.
2023-10-22 20:28:07 +0200 <Inst> either case, looks like it's a peking u professor on the authors page
2023-10-22 20:28:24 +0200 <monochrom> But I already tried my own bind9 install...
2023-10-22 20:28:36 +0200_xor(~xor@72.49.199.93) (Read error: Connection reset by peer)
2023-10-22 20:28:41 +0200 <Inst> really cheap, 49 RMB / ~7 USD
2023-10-22 20:29:13 +0200_xor(~xor@72.49.199.93)
2023-10-22 20:29:27 +0200 <ncf> you don't need to install bind9 to change your local dns servers :)
2023-10-22 20:31:06 +0200 <monochrom> Haha they gave up translating Applicative to Chinese :)
2023-10-22 20:31:10 +0200dhruvasagar(~dhruvasag@49.207.194.211)
2023-10-22 20:31:38 +0200 <tomsmeding> monochrom: did they phonetically render it, or just write in latin characters?
2023-10-22 20:31:51 +0200doyougnu(~doyougnu@45.46.170.68)
2023-10-22 20:32:15 +0200 <monochrom> Latin/English word verbatim.
2023-10-22 20:32:42 +0200 <EvanR> need an acme latin prelude
2023-10-22 20:32:44 +0200 <Inst> actually, i don't think it's pek professor, one of the authors seems to be at zhongshan in guangzhou
2023-10-22 20:33:18 +0200 <EvanR> there's a roman numerals type in there somewhere, so
2023-10-22 20:35:44 +0200dhruvasagar(~dhruvasag@49.207.194.211) (Ping timeout: 255 seconds)
2023-10-22 20:36:24 +0200 <Inst> Both of them are at Zhongshan, sigh.
2023-10-22 20:37:23 +0200 <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"
2023-10-22 20:38:43 +0200dcoutts(~duncan@cpc69402-oxfd27-2-0-cust903.4-3.cable.virginm.net) (Ping timeout: 252 seconds)
2023-10-22 20:39:38 +0200 <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
2023-10-22 20:39:48 +0200 <Inst> just thought it'd be more favorable to your pedagogical approach / philosophy
2023-10-22 20:42:08 +0200dhruvasagar(~dhruvasag@49.207.194.211)
2023-10-22 20:42:53 +0200fakenullie(~nullie@2a01:4f8:c2c:6177::1)
2023-10-22 20:44:17 +0200nullie(~nullie@amsterdam.nullie.name) (Quit: WeeChat 2.8)
2023-10-22 20:44:36 +0200fakenullienullie
2023-10-22 20:46:58 +0200dhruvasagar(~dhruvasag@49.207.194.211) (Ping timeout: 252 seconds)
2023-10-22 20:47:29 +0200dhruvasagar(~dhruvasag@49.207.194.211)
2023-10-22 20:47:47 +0200ChaiTRex(~ChaiTRex@user/chaitrex)
2023-10-22 20:52:03 +0200dhruvasagar(~dhruvasag@49.207.194.211) (Ping timeout: 258 seconds)
2023-10-22 20:54:35 +0200Batzy(~quassel@user/batzy) (Ping timeout: 240 seconds)
2023-10-22 20:55:02 +0200Batzy(~quassel@user/batzy)
2023-10-22 20:58:23 +0200dhruvasagar(~dhruvasag@49.207.194.211)
2023-10-22 21:02:05 +0200wootehfoot(~wootehfoo@user/wootehfoot)
2023-10-22 21:02:59 +0200dhruvasagar(~dhruvasag@49.207.194.211) (Ping timeout: 245 seconds)
2023-10-22 21:04:06 +0200dhruvasagar(~dhruvasag@49.207.194.211)
2023-10-22 21:05:00 +0200notzmv(~zmv@user/notzmv) (Ping timeout: 240 seconds)
2023-10-22 21:05:49 +0200rgw(~R@2605:a601:a0df:5600:28a6:bcb9:bb55:dff5)
2023-10-22 21:08:10 +0200euleritian(~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de)
2023-10-22 21:08:36 +0200dhruvasagar(~dhruvasag@49.207.194.211) (Ping timeout: 240 seconds)
2023-10-22 21:09:38 +0200Benzi-Junior(~BenziJuni@88-149-64-112.du.xdsl.is) (Quit: ZNC 1.8.2 - https://znc.in)
2023-10-22 21:10:34 +0200 <John_Ivan> https://hackage.haskell.org/package/process-1.6.18.0/docs/System-Process.html
2023-10-22 21:10:48 +0200 <John_Ivan> Anything in this package to "suspend" a process? And by suspend, I mean pause, not stop.
2023-10-22 21:10:56 +0200 <John_Ivan> I suspect it should be here.
2023-10-22 21:11:00 +0200 <dminuoso> What do you even mean by "suspent"
2023-10-22 21:11:17 +0200 <John_Ivan> Pause. Put a process in a temporary pause until resumed explicitly.
2023-10-22 21:11:27 +0200 <dminuoso> SIGSTOP is the general mechanism.
2023-10-22 21:11:40 +0200 <dminuoso> https://www.gnu.org/software/libc/manual/html_node/Job-Control-Signals.html
2023-10-22 21:11:42 +0200 <geekosaur> SIGSTOP/SIGCONT, I suspect. That would be in System.Posix.Process
2023-10-22 21:11:59 +0200 <John_Ivan> I see, that will do. Only for POSIX systems I take it?
2023-10-22 21:12:05 +0200 <geekosaur> yes
2023-10-22 21:12:09 +0200Benzi-Junior(~BenziJuni@88-149-64-112.du.xdsl.is)
2023-10-22 21:12:09 +0200 <John_Ivan> Thanks.
2023-10-22 21:12:15 +0200 <geekosaur> I have no idea whether this can even be done on Windows
2023-10-22 21:12:25 +0200 <dminuoso> FSVO of "POSIX" systems, given that there arent really any truly compliant systems out there.
2023-10-22 21:12:32 +0200 <John_Ivan> It's fine, at least I know which direction to take next. FFI-Win32
2023-10-22 21:12:34 +0200 <geekosaur> if it can it would be somewhere in the Win32 package
2023-10-22 21:13:02 +0200 <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?
2023-10-22 21:13:08 +0200falafel(~falafel@62.175.113.194.dyn.user.ono.com)
2023-10-22 21:15:13 +0200notzmv(~zmv@user/notzmv)
2023-10-22 21:15:38 +0200dhruvasagar(~dhruvasag@49.207.194.211)
2023-10-22 21:15:49 +0200 <_d0t> is there a way to stop GHC from removing temporary files after compilation? I
2023-10-22 21:16:01 +0200tromp(~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
2023-10-22 21:17:30 +0200 <geekosaur> -keep-tmp-files
2023-10-22 21:17:54 +0200 <_d0t> thanks!
2023-10-22 21:18:06 +0200 <monochrom> I think every textbook satisfies "the author thinks it's self-contained, but in reality you always need an instructor" :D
2023-10-22 21:22:47 +0200 <John_Ivan> geekosaur, seems I can't install the "unix" package from which System.Posix comes from
2023-10-22 21:22:53 +0200 <John_Ivan> this is on a windows build of ghc
2023-10-22 21:23:06 +0200 <John_Ivan> I will look into win32 alternatives
2023-10-22 21:23:44 +0200 <geekosaur> there's a unix-compat but it probably doesn't convert that
2023-10-22 21:24:02 +0200notzmv(~zmv@user/notzmv) (Ping timeout: 246 seconds)
2023-10-22 21:24:02 +0200 <John_Ivan> geekosaur, I'm fine with picking a different packages. i just wanna know if haskell supports conditional compilation
2023-10-22 21:24:23 +0200 <John_Ivan> so I can make the code install the appropriate package on the appropriate platform
2023-10-22 21:24:37 +0200 <mauke> yes, but it's a pile of hacks
2023-10-22 21:24:56 +0200dhruvasagar(~dhruvasag@49.207.194.211) (Ping timeout: 272 seconds)
2023-10-22 21:24:57 +0200 <John_Ivan> it is? so how do they do it in their own packages?
2023-10-22 21:24:57 +0200 <mauke> well, the CPP part is at least
2023-10-22 21:25:18 +0200 <mauke> but you can use package flags to select different sets of dependencies
2023-10-22 21:25:36 +0200 <John_Ivan> that would do
2023-10-22 21:25:40 +0200 <John_Ivan> thanks
2023-10-22 21:26:17 +0200 <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)
2023-10-22 21:26:48 +0200 <Inst> I was hoping that Tsinghua decided to pick up Haskell
2023-10-22 21:27:24 +0200 <mauke> https://cabal.readthedocs.io/en/stable/cabal-package.html#configurations
2023-10-22 21:28:27 +0200 <John_Ivan> mauke, that is good. can cabal detect what platform it's installed on?
2023-10-22 21:28:39 +0200 <John_Ivan> so maybe some of those flags trigger automatically
2023-10-22 21:29:30 +0200 <Inst> I think it should be able to.
2023-10-22 21:29:45 +0200wootehfoot(~wootehfoo@user/wootehfoot) (Read error: Connection reset by peer)
2023-10-22 21:29:47 +0200tromp(~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
2023-10-22 21:29:54 +0200 <Inst> There's if os == ... booleans in some cabal files I've seen
2023-10-22 21:30:48 +0200 <sclv> John_Ivan: see the conditionals section of docs https://cabal.readthedocs.io/en/stable/cabal-package.html#conditions
2023-10-22 21:31:09 +0200 <mauke> the example file has 'if !os(windows)'
2023-10-22 21:31:15 +0200 <John_Ivan> cheers
2023-10-22 21:37:02 +0200CiaoSen(~Jura@2a05:5800:2be:1b00:664b:f0ff:fe37:9ef)
2023-10-22 21:41:59 +0200 <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
2023-10-22 21:41:59 +0200euleritian(~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) (Read error: Connection reset by peer)
2023-10-22 21:42:15 +0200 <Inst> good luck! :(
2023-10-22 21:42:36 +0200euleritian(~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de)
2023-10-22 21:44:20 +0200santiagopim(~user@90.167.66.131)
2023-10-22 21:47:49 +0200 <Inst> have you tried Effective Haskell?
2023-10-22 21:51:07 +0200yoyofreeman(~yoyofreem@176.97.76.178) (Read error: Connection reset by peer)
2023-10-22 21:51:48 +0200yoyofreeman(~yoyofreem@176.97.76.178)
2023-10-22 21:52:59 +0200puke(~puke@user/puke) (Quit: puke)
2023-10-22 21:53:02 +0200vglfr(~vglfr@88.154.70.142) (Ping timeout: 255 seconds)
2023-10-22 21:53:16 +0200Pixi(~Pixi@user/pixi) (Quit: Leaving)
2023-10-22 21:53:53 +0200Sgeo(~Sgeo@user/sgeo)
2023-10-22 21:54:28 +0200Pixi(~Pixi@user/pixi)
2023-10-22 21:56:17 +0200vglfr(~vglfr@88.154.70.142)
2023-10-22 21:57:39 +0200puke(~puke@user/puke)
2023-10-22 22:00:28 +0200takuan(~takuan@178-116-218-225.access.telenet.be) (Remote host closed the connection)
2023-10-22 22:05:23 +0200 <Inst> totally my fault, ugh
2023-10-22 22:05:24 +0200 <Inst> https://cabal.readthedocs.io/en/stable/cabal-commands.html#cabal-run
2023-10-22 22:05:30 +0200 <Inst> wasn't familiar with how the -- worked :(
2023-10-22 22:05:58 +0200machinedgod(~machinedg@d198-53-218-113.abhsia.telus.net)
2023-10-22 22:10:41 +0200Pickchea(~private@user/pickchea) (Quit: Leaving)
2023-10-22 22:10:43 +0200dhruvasagar(~dhruvasag@49.207.194.211)
2023-10-22 22:15:08 +0200dhruvasagar(~dhruvasag@49.207.194.211) (Ping timeout: 248 seconds)
2023-10-22 22:16:44 +0200drewjose3(~drewjose@129.154.40.88)
2023-10-22 22:16:51 +0200coot(~coot@89-69-206-216.dynamic.chello.pl) (Quit: coot)
2023-10-22 22:17:07 +0200_ht(~Thunderbi@28-52-174-82.ftth.glasoperator.nl) (Ping timeout: 255 seconds)
2023-10-22 22:17:26 +0200_ht(~Thunderbi@28-52-174-82.ftth.glasoperator.nl)
2023-10-22 22:18:28 +0200drewjose(~drewjose@129.154.40.88) (Ping timeout: 255 seconds)
2023-10-22 22:18:28 +0200Hecate(~mariposa@user/hecate) (Ping timeout: 255 seconds)
2023-10-22 22:18:29 +0200drewjose3drewjose
2023-10-22 22:18:44 +0200random-jellyfish(~tiber@2a02:2f04:11e:c600:f12e:ec08:e2cf:6f5d)
2023-10-22 22:18:44 +0200random-jellyfish(~tiber@2a02:2f04:11e:c600:f12e:ec08:e2cf:6f5d) (Changing host)
2023-10-22 22:18:44 +0200random-jellyfish(~tiber@user/random-jellyfish)
2023-10-22 22:20:18 +0200Hecate(~mariposa@user/hecate)
2023-10-22 22:20:57 +0200_ht(~Thunderbi@28-52-174-82.ftth.glasoperator.nl) (Client Quit)
2023-10-22 22:21:09 +0200haveo(~haveo@sl35.iuwt.fr) (Remote host closed the connection)
2023-10-22 22:22:06 +0200dhruvasagar(~dhruvasag@49.207.194.211)
2023-10-22 22:25:22 +0200haveo(~haveo@sl35.iuwt.fr)
2023-10-22 22:26:31 +0200 <elevenkb> Does anyone do data science in haskell?
2023-10-22 22:26:43 +0200dhruvasagar(~dhruvasag@49.207.194.211) (Ping timeout: 260 seconds)
2023-10-22 22:32:09 +0200blomberg(~default_u@117.248.77.218) (Ping timeout: 245 seconds)
2023-10-22 22:32:47 +0200dhruvasagar(~dhruvasag@49.207.194.211)
2023-10-22 22:33:33 +0200nickiminjaj(~nickiminj@user/laxhh) (Quit: My MacBook has gone to sleep. ZZZzzz…)
2023-10-22 22:34:11 +0200nickiminjaj(~nickiminj@188.146.126.78)
2023-10-22 22:34:11 +0200nickiminjaj(~nickiminj@188.146.126.78) (Changing host)
2023-10-22 22:34:11 +0200nickiminjaj(~nickiminj@user/laxhh)
2023-10-22 22:37:41 +0200falafel(~falafel@62.175.113.194.dyn.user.ono.com) (Ping timeout: 260 seconds)
2023-10-22 22:37:46 +0200dhruvasagar(~dhruvasag@49.207.194.211) (Ping timeout: 272 seconds)
2023-10-22 22:43:56 +0200simendsjo(~user@84.211.91.241) (Ping timeout: 248 seconds)
2023-10-22 22:44:20 +0200dhruvasagar(~dhruvasag@49.207.194.211)
2023-10-22 22:45:58 +0200Tlsx(~rscastilh@187.40.125.21) ()
2023-10-22 22:46:19 +0200pretty_dumm_guy(trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655) (Ping timeout: 252 seconds)
2023-10-22 22:47:35 +0200Square(~Square@user/square) (Ping timeout: 240 seconds)
2023-10-22 22:48:23 +0200pretty_dumm_guy(trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655)
2023-10-22 22:48:58 +0200dhruvasagar(~dhruvasag@49.207.194.211) (Ping timeout: 258 seconds)
2023-10-22 22:49:35 +0200dhruvasagar(~dhruvasag@49.207.194.211)
2023-10-22 22:49:56 +0200azimut(~azimut@gateway/tor-sasl/azimut) (Ping timeout: 256 seconds)
2023-10-22 22:50:19 +0200driib5(~driib@vmi931078.contaboserver.net) (Quit: The Lounge - https://thelounge.chat)
2023-10-22 22:50:35 +0200falafel(~falafel@62.175.113.194.dyn.user.ono.com)
2023-10-22 22:52:08 +0200driib5(~driib@vmi931078.contaboserver.net)
2023-10-22 22:52:57 +0200dcoutts(~duncan@cpc69402-oxfd27-2-0-cust903.4-3.cable.virginm.net)
2023-10-22 22:54:28 +0200dhruvasagar(~dhruvasag@49.207.194.211) (Ping timeout: 255 seconds)
2023-10-22 22:56:44 +0200Jackneill(~Jackneill@20014C4E1E0E6F004BDEA8A1DAB424C0.dsl.pool.telekom.hu) (Ping timeout: 245 seconds)
2023-10-22 22:57:17 +0200benjaminl(~benjaminl@user/benjaminl) (Read error: Connection reset by peer)
2023-10-22 22:57:32 +0200benjaminl(~benjaminl@user/benjaminl)
2023-10-22 22:57:51 +0200nate2(~nate@c-98-45-169-16.hsd1.ca.comcast.net)
2023-10-22 23:01:32 +0200falafel(~falafel@62.175.113.194.dyn.user.ono.com) (Ping timeout: 248 seconds)
2023-10-22 23:02:06 +0200ystael(~ystael@user/ystael)
2023-10-22 23:02:34 +0200nate2(~nate@c-98-45-169-16.hsd1.ca.comcast.net) (Ping timeout: 255 seconds)
2023-10-22 23:02:51 +0200coot(~coot@89-69-206-216.dynamic.chello.pl)
2023-10-22 23:07:32 +0200td_(~td@i53870939.versanet.de) (Ping timeout: 272 seconds)
2023-10-22 23:09:23 +0200masterbuilder(~masterbui@user/masterbuilder) (Read error: Connection reset by peer)
2023-10-22 23:12:37 +0200 <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
2023-10-22 23:13:15 +0200 <EvanR> in case you somehow can't get by with just trig and hyperbolic trig
2023-10-22 23:16:08 +0200driib5(~driib@vmi931078.contaboserver.net) (Quit: The Lounge - https://thelounge.chat)
2023-10-22 23:18:09 +0200brandly(~brandly@c-73-68-15-46.hsd1.ma.comcast.net)
2023-10-22 23:18:33 +0200isekaijin(~user@user/isekaijin) (Quit: brb test)
2023-10-22 23:19:05 +0200 <[exa]> elevenkb: I did some actual science-ish computing in repa, but that's it. Still no ggplot alternative. :(
2023-10-22 23:19:31 +0200tromp(~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
2023-10-22 23:22:44 +0200coot(~coot@89-69-206-216.dynamic.chello.pl) (Quit: coot)
2023-10-22 23:22:48 +0200 <elevenkb> [exa] https://hackage.haskell.org/package/hvega ?
2023-10-22 23:23:53 +0200stefan-__(~m-ohzqow@42dots.de) (Remote host closed the connection)
2023-10-22 23:24:10 +0200td_(~td@i5387091E.versanet.de)
2023-10-22 23:24:17 +0200stefan-__(~m-ohzqow@42dots.de)
2023-10-22 23:25:53 +0200emmanuelux(~emmanuelu@user/emmanuelux) (Read error: Connection reset by peer)
2023-10-22 23:26:33 +0200emmanuelux(~emmanuelu@user/emmanuelux)
2023-10-22 23:26:47 +0200gmg(~user@user/gehmehgeh) (Quit: Leaving)
2023-10-22 23:28:40 +0200td_(~td@i5387091E.versanet.de) (Ping timeout: 255 seconds)
2023-10-22 23:30:46 +0200random-jellyfish(~tiber@user/random-jellyfish) (Ping timeout: 260 seconds)
2023-10-22 23:31:06 +0200stefan-__(~m-ohzqow@42dots.de) (Remote host closed the connection)
2023-10-22 23:31:32 +0200stefan-__(~m-ohzqow@42dots.de)
2023-10-22 23:33:08 +0200stefan-__(~m-ohzqow@42dots.de) (Remote host closed the connection)
2023-10-22 23:33:34 +0200stefan-__(~m-ohzqow@42dots.de)
2023-10-22 23:33:44 +0200notzmv(~zmv@user/notzmv)
2023-10-22 23:35:21 +0200driib5(~driib@vmi931078.contaboserver.net)
2023-10-22 23:36:19 +0200vglfr(~vglfr@88.154.70.142) (Read error: Connection reset by peer)
2023-10-22 23:37:34 +0200stefan-__(~m-ohzqow@42dots.de) (Remote host closed the connection)
2023-10-22 23:38:02 +0200masterbuilder(~masterbui@user/masterbuilder)
2023-10-22 23:38:02 +0200stefan-__(~m-ohzqow@42dots.de)
2023-10-22 23:39:07 +0200stefan-__(~m-ohzqow@42dots.de) (Remote host closed the connection)
2023-10-22 23:39:51 +0200stefan-__(~m-ohzqow@42dots.de)
2023-10-22 23:40:47 +0200emmanuelux(~emmanuelu@user/emmanuelux) (Read error: Connection reset by peer)
2023-10-22 23:41:35 +0200emmanuelux(~emmanuelu@user/emmanuelux)
2023-10-22 23:43:47 +0200stefan-__(~m-ohzqow@42dots.de) (Remote host closed the connection)
2023-10-22 23:44:14 +0200stefan-__(~m-ohzqow@42dots.de)
2023-10-22 23:45:19 +0200 <Inst> baad
2023-10-22 23:45:23 +0200td_(~td@i5387090E.versanet.de)
2023-10-22 23:45:43 +0200 <Inst> right now, I'm trying to parse a text file, such that it throws two different types of exceptions
2023-10-22 23:45:56 +0200stefan-__(~m-ohzqow@42dots.de) (Remote host closed the connection)
2023-10-22 23:45:57 +0200 <Inst> it's trying to parse something into a maze
2023-10-22 23:46:22 +0200stefan-__(~m-ohzqow@42dots.de)
2023-10-22 23:47:34 +0200 <Inst> it feels like StateT (StartPosition, EndPosition) Maybe a
2023-10-22 23:47:55 +0200stefan-__(~m-ohzqow@42dots.de) (Remote host closed the connection)
2023-10-22 23:48:21 +0200stefan-__(~m-ohzqow@42dots.de)
2023-10-22 23:49:47 +0200dhruvasagar(~dhruvasag@49.207.194.211)
2023-10-22 23:50:56 +0200td_(~td@i5387090E.versanet.de) (Ping timeout: 255 seconds)
2023-10-22 23:51:14 +0200stefan-__(~m-ohzqow@42dots.de) (Remote host closed the connection)
2023-10-22 23:51:53 +0200stefan-__(~m-ohzqow@42dots.de)
2023-10-22 23:51:55 +0200 <Inst> maybe it should be MaybeT (State (Start Position, EndPosition) Maze?
2023-10-22 23:51:56 +0200isekaijin(~user@user/isekaijin)
2023-10-22 23:52:37 +0200td_(~td@i53870910.versanet.de)
2023-10-22 23:54:05 +0200stefan-__(~m-ohzqow@42dots.de) (Remote host closed the connection)
2023-10-22 23:54:30 +0200stefan-__(~m-ohzqow@42dots.de)
2023-10-22 23:55:05 +0200dhruvasagar(~dhruvasag@49.207.194.211) (Ping timeout: 255 seconds)
2023-10-22 23:56:15 +0200machinedgod(~machinedg@d198-53-218-113.abhsia.telus.net) (Ping timeout: 240 seconds)