2022/07/31

2022-07-31 00:03:45 +0200mon_aaraj(~MonAaraj@user/mon-aaraj/x-4416475)
2022-07-31 00:03:59 +0200matthewmosior(~matthewmo@173.170.253.91) (Ping timeout: 244 seconds)
2022-07-31 00:05:41 +0200ChaiTRex(~ChaiTRex@user/chaitrex) (Remote host closed the connection)
2022-07-31 00:06:22 +0200ChaiTRex(~ChaiTRex@user/chaitrex)
2022-07-31 00:06:29 +0200Jeanne-Kamikaze(~Jeanne-Ka@142.147.89.198)
2022-07-31 00:06:41 +0200shailangsa(~shailangs@host86-185-98-81.range86-185.btcentralplus.com)
2022-07-31 00:07:46 +0200johnw(~johnw@76-234-69-149.lightspeed.frokca.sbcglobal.net)
2022-07-31 00:08:57 +0200winny(~weechat@user/winny) (Quit: WeeChat 3.2)
2022-07-31 00:15:21 +0200JannisO(~JannisO@dyndsl-089-166-213-108.ewe-ip-backbone.de) (Ping timeout: 252 seconds)
2022-07-31 00:21:03 +0200JNU99(~JNU99@host-92-30-66-211.as13285.net)
2022-07-31 00:21:58 +0200JNU99(~JNU99@host-92-30-66-211.as13285.net) ()
2022-07-31 00:22:07 +0200yin(~yin@user/zero) (Ping timeout: 245 seconds)
2022-07-31 00:32:27 +0200sonologico(~raphael@dhcp-077-251-118-129.chello.nl) (Ping timeout: 268 seconds)
2022-07-31 00:33:26 +0200matthewmosior(~matthewmo@173.170.253.91)
2022-07-31 00:34:37 +0200vglfr(~vglfr@194.9.14.33) (Ping timeout: 245 seconds)
2022-07-31 00:35:45 +0200yin(~yin@user/zero)
2022-07-31 00:44:09 +0200chomwitt(~chomwitt@2a02:587:dc12:b700:d6f4:2a4f:a8e:737) (Ping timeout: 276 seconds)
2022-07-31 00:46:58 +0200acidjnk(~acidjnk@p200300d6e7058679d19d5270ce8bc1dc.dip0.t-ipconnect.de) (Ping timeout: 240 seconds)
2022-07-31 00:51:39 +0200jpds1(~jpds@gateway/tor-sasl/jpds) (Ping timeout: 268 seconds)
2022-07-31 00:52:39 +0200jpds1(~jpds@gateway/tor-sasl/jpds)
2022-07-31 00:56:09 +0200winny(~weechat@user/winny)
2022-07-31 00:59:58 +0200triteraflops(~triterafl@user/triteraflops) (Ping timeout: 240 seconds)
2022-07-31 01:06:20 +0200infinity0(~infinity0@185.112.146.113) (Remote host closed the connection)
2022-07-31 01:08:31 +0200Tuplanolla(~Tuplanoll@91-159-68-204.elisa-laajakaista.fi) (Quit: Leaving.)
2022-07-31 01:17:33 +0200jespada(~jespada@181.80.249.105) (Read error: Connection reset by peer)
2022-07-31 01:23:02 +0200jespada(~jespada@181.80.249.105)
2022-07-31 01:24:52 +0200sandy_doo(~sandydoo@185.209.196.136) (Ping timeout: 268 seconds)
2022-07-31 01:25:21 +0200 <koala_man> is there a neat way to go from (a, Maybe b) -> Maybe (a,b) ?
2022-07-31 01:26:26 +0200 <geekosaur> > sequence (5, Just 'a')
2022-07-31 01:26:26 +0200 <dolio> > sequence (1, Just "a")
2022-07-31 01:26:27 +0200 <lambdabot> Just (5,'a')
2022-07-31 01:26:28 +0200 <lambdabot> Just (1,"a")
2022-07-31 01:27:20 +0200 <koala_man> very nice, thanks!
2022-07-31 01:28:10 +0200albet70(~xxx@2400:8902::f03c:92ff:fe60:98d8) (Remote host closed the connection)
2022-07-31 01:34:17 +0200albet70(~xxx@2400:8902::f03c:92ff:fe60:98d8)
2022-07-31 01:35:22 +0200 <monochrom> That... is a life hack :)
2022-07-31 01:37:02 +0200 <hpc> the real life hack is doing the reverse :P
2022-07-31 01:37:41 +0200matthewmosior(~matthewmo@173.170.253.91) (Ping timeout: 255 seconds)
2022-07-31 01:38:05 +0200 <monochrom> Uh that would be magic!
2022-07-31 01:40:54 +0200ChaiTRex(~ChaiTRex@user/chaitrex) (Remote host closed the connection)
2022-07-31 01:41:33 +0200ChaiTRex(~ChaiTRex@user/chaitrex)
2022-07-31 01:43:03 +0200 <jackdk> liquid haskell I suppose?
2022-07-31 01:43:40 +0200 <geekosaur> don't think even that would work
2022-07-31 01:44:15 +0200 <jackdk> If you prove that it's not Nothing, you should be right?
2022-07-31 01:44:23 +0200 <jackdk> I've never used it
2022-07-31 01:45:08 +0200 <hpc> yeah, you need a value of type 'a'
2022-07-31 01:51:39 +0200matthewmosior(~matthewmo@173.170.253.91)
2022-07-31 01:52:33 +0200 <monochrom> If you prove that it's Nothing, I should be wrong? :)
2022-07-31 01:52:54 +0200 <monochrom> I mean let's take it to the extreme...
2022-07-31 01:53:16 +0200 <monochrom> You ask me to multiple an input number by 5.
2022-07-31 01:53:39 +0200 <monochrom> If I use Liquid Haskell to prove that the input number is 0, then "f x = 0" is right? :)
2022-07-31 01:56:06 +0200matthewmosior(~matthewmo@173.170.253.91) (Ping timeout: 244 seconds)
2022-07-31 02:01:38 +0200matthewmosior(~matthewmo@173.170.253.91)
2022-07-31 02:01:41 +0200califax(~califax@user/califx) (Remote host closed the connection)
2022-07-31 02:03:13 +0200califax(~califax@user/califx)
2022-07-31 02:04:15 +0200gurkenglas(~gurkengla@p548ac71b.dip0.t-ipconnect.de) (Ping timeout: 252 seconds)
2022-07-31 02:07:08 +0200sandy_doo(~sandydoo@185.209.196.136)
2022-07-31 02:08:15 +0200wroathe(~wroathe@206-55-188-8.fttp.usinternet.com)
2022-07-31 02:08:15 +0200wroathe(~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host)
2022-07-31 02:08:15 +0200wroathe(~wroathe@user/wroathe)
2022-07-31 02:09:21 +0200califax(~califax@user/califx) (Ping timeout: 268 seconds)
2022-07-31 02:09:49 +0200 <dolio> > sequence (Just ("a", 1))
2022-07-31 02:09:50 +0200 <lambdabot> ("a",Just 1)
2022-07-31 02:11:08 +0200dcoutts__(~duncan@host86-151-44-186.range86-151.btcentralplus.com)
2022-07-31 02:11:18 +0200nate4(~nate@98.45.169.16)
2022-07-31 02:12:01 +0200califax(~califax@user/califx)
2022-07-31 02:13:47 +0200dcoutts_(~duncan@host109-149-1-189.range109-149.btcentralplus.com) (Ping timeout: 252 seconds)
2022-07-31 02:19:24 +0200yinshrugs
2022-07-31 02:21:36 +0200phma(~phma@host-67-44-208-231.hnremote.net) (Read error: Connection reset by peer)
2022-07-31 02:26:05 +0200 <monochrom> Haha I see the true life hack now.
2022-07-31 02:26:45 +0200 <monochrom> "The inverse of sequence is... sequence!"
2022-07-31 02:27:13 +0200nate4(~nate@98.45.169.16) (Ping timeout: 268 seconds)
2022-07-31 02:34:41 +0200GuerrillaMonkey(~Jeanne-Ka@142.147.89.233)
2022-07-31 02:35:49 +0200tubogram44(~tubogram@user/tubogram) (Quit: See ya later!)
2022-07-31 02:35:58 +0200 <yin> > sequence . sequence $ Just ("a",1)
2022-07-31 02:36:01 +0200 <lambdabot> Just ("a",1)
2022-07-31 02:37:07 +0200Jeanne-Kamikaze(~Jeanne-Ka@142.147.89.198) (Ping timeout: 245 seconds)
2022-07-31 02:38:24 +0200tubogram44(~tubogram@user/tubogram)
2022-07-31 02:43:10 +0200albet70(~xxx@2400:8902::f03c:92ff:fe60:98d8) (Remote host closed the connection)
2022-07-31 02:44:06 +0200 <mrianbloom> Where is a good place to see the Data.Constraint library in action if one is trying to learn to use it?
2022-07-31 02:45:04 +0200machinedgod(~machinedg@d172-219-86-154.abhsia.telus.net)
2022-07-31 02:46:26 +0200phma(~phma@host-67-44-208-60.hnremote.net)
2022-07-31 02:49:18 +0200albet70(~xxx@2400:8902::f03c:92ff:fe60:98d8)
2022-07-31 02:50:11 +0200tstat(~user@user/tstat)
2022-07-31 03:04:59 +0200matthewmosior(~matthewmo@173.170.253.91) (Ping timeout: 255 seconds)
2022-07-31 03:09:12 +0200zebrag(~chris@user/zebrag) (Ping timeout: 245 seconds)
2022-07-31 03:13:50 +0200zebrag(~chris@user/zebrag)
2022-07-31 03:14:45 +0200pretty_dumm_guy(trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655) (Quit: WeeChat 3.5)
2022-07-31 03:16:24 +0200kimjetwav(~user@2607:fea8:235e:b600:4fe5:aa4:5bfb:2ba6)
2022-07-31 03:17:03 +0200bontaq(~user@ool-45779fe5.dyn.optonline.net)
2022-07-31 03:18:14 +0200 <dmj`> is there a library that generates haskell types from a json schema definition?
2022-07-31 03:19:48 +0200crazazy(~user@130.89.171.62) (Ping timeout: 244 seconds)
2022-07-31 03:22:36 +0200bilegeek(~bilegeek@2600:1008:b052:7d02:5779:f1d9:cfbf:c1a3)
2022-07-31 03:24:05 +0200naso(~naso@193-116-244-197.tpgi.com.au)
2022-07-31 03:24:31 +0200Inst(~Inst@2601:6c4:4080:3f80:d998:768b:c35b:a535)
2022-07-31 03:24:40 +0200matthewmosior(~matthewmo@173.170.253.91)
2022-07-31 03:33:58 +0200yin(~yin@user/zero) (Quit: leaving)
2022-07-31 03:37:07 +0200xff0x(~xff0x@ap007189.d.east.v6connect.net) (Ping timeout: 245 seconds)
2022-07-31 03:44:30 +0200xff0x(~xff0x@ap007189.d.east.v6connect.net)
2022-07-31 03:44:58 +0200Typedfern(~Typedfern@202.red-83-37-35.dynamicip.rima-tde.net) (Ping timeout: 240 seconds)
2022-07-31 03:48:38 +0200Typedfern(~Typedfern@202.red-83-37-35.dynamicip.rima-tde.net)
2022-07-31 03:49:32 +0200yauhsien(~yauhsien@61-231-30-230.dynamic-ip.hinet.net)
2022-07-31 03:55:21 +0200yauhsien(~yauhsien@61-231-30-230.dynamic-ip.hinet.net) (Ping timeout: 252 seconds)
2022-07-31 04:00:29 +0200tstat(~user@user/tstat) (Ping timeout: 252 seconds)
2022-07-31 04:12:44 +0200mvk(~mvk@2607:fea8:5ce3:8500::311d)
2022-07-31 04:21:56 +0200jpds1(~jpds@gateway/tor-sasl/jpds) (Ping timeout: 268 seconds)
2022-07-31 04:23:29 +0200FinnElija(~finn_elij@user/finn-elija/x-0085643) (Killed (NickServ (Forcing logout FinnElija -> finn_elija)))
2022-07-31 04:23:29 +0200finn_elija(~finn_elij@user/finn-elija/x-0085643)
2022-07-31 04:23:29 +0200finn_elijaFinnElija
2022-07-31 04:24:04 +0200jpds1(~jpds@gateway/tor-sasl/jpds)
2022-07-31 04:28:47 +0200matthewmosior(~matthewmo@173.170.253.91) (Ping timeout: 245 seconds)
2022-07-31 04:32:20 +0200ystael(~ystael@user/ystael) (Ping timeout: 268 seconds)
2022-07-31 04:32:49 +0200[_](~itchyjunk@user/itchyjunk/x-7353470)
2022-07-31 04:32:57 +0200[itchyjunk](~itchyjunk@user/itchyjunk/x-7353470) (Ping timeout: 245 seconds)
2022-07-31 04:33:06 +0200[_][itchyjunk]
2022-07-31 04:34:33 +0200matthewmosior(~matthewmo@173.170.253.91)
2022-07-31 04:41:40 +0200jargon(~jargon@184.101.188.251)
2022-07-31 04:44:03 +0200td_(~td@94.134.91.248) (Ping timeout: 268 seconds)
2022-07-31 04:45:33 +0200td_(~td@94.134.91.252)
2022-07-31 04:52:38 +0200GuerrillaMonkey(~Jeanne-Ka@142.147.89.233) (Quit: Leaving)
2022-07-31 04:52:54 +0200Jeanne-Kamikaze(~Jeanne-Ka@142.147.89.233)
2022-07-31 04:52:56 +0200[itchyjunk](~itchyjunk@user/itchyjunk/x-7353470) (Remote host closed the connection)
2022-07-31 04:54:37 +0200yin(~yin@user/zero)
2022-07-31 05:06:00 +0200tromp(~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
2022-07-31 05:06:35 +0200tromp(~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Client Quit)
2022-07-31 05:15:58 +0200funsafe(~funsafe@2601:1c1:4200:9ac:84cb:185c:2a3c:c92c) (Ping timeout: 272 seconds)
2022-07-31 05:17:38 +0200funsafe(~funsafe@2601:1c1:4200:9ac:84cb:185c:2a3c:c92c)
2022-07-31 05:20:25 +0200nate4(~nate@98.45.169.16)
2022-07-31 05:24:49 +0200yin(~yin@user/zero) (Ping timeout: 252 seconds)
2022-07-31 05:25:43 +0200yin(~yin@user/zero)
2022-07-31 05:27:48 +0200Haskelytic(~Haskelyti@118.179.211.17) (Quit: Client closed)
2022-07-31 05:30:32 +0200johnw(~johnw@76-234-69-149.lightspeed.frokca.sbcglobal.net) (Quit: ZNC - http://znc.in)
2022-07-31 05:32:45 +0200zebrag(~chris@user/zebrag) (Quit: Konversation terminated!)
2022-07-31 05:35:13 +0200naso(~naso@193-116-244-197.tpgi.com.au) (Remote host closed the connection)
2022-07-31 05:36:29 +0200naso(~naso@193-116-244-197.tpgi.com.au)
2022-07-31 05:37:05 +0200matthewmosior(~matthewmo@173.170.253.91) (Ping timeout: 255 seconds)
2022-07-31 05:40:52 +0200naso(~naso@193-116-244-197.tpgi.com.au) (Ping timeout: 245 seconds)
2022-07-31 05:41:42 +0200nate4(~nate@98.45.169.16) (Ping timeout: 245 seconds)
2022-07-31 05:45:19 +0200naso(~naso@193-116-244-197.tpgi.com.au)
2022-07-31 05:51:22 +0200vglfr(~vglfr@194.9.14.33)
2022-07-31 05:59:51 +0200matthewmosior(~matthewmo@173.170.253.91)
2022-07-31 06:01:42 +0200vglfr(~vglfr@194.9.14.33) (Ping timeout: 245 seconds)
2022-07-31 06:01:42 +0200wroathe(~wroathe@user/wroathe) (Ping timeout: 245 seconds)
2022-07-31 06:01:50 +0200vglfr(~vglfr@194.9.14.33)
2022-07-31 06:04:06 +0200matthewmosior(~matthewmo@173.170.253.91) (Ping timeout: 244 seconds)
2022-07-31 06:06:15 +0200jao(~jao@cpc103048-sgyl39-2-0-cust502.18-2.cable.virginm.net) (Ping timeout: 252 seconds)
2022-07-31 06:07:43 +0200nate4(~nate@98.45.169.16)
2022-07-31 06:12:07 +0200nate4(~nate@98.45.169.16) (Ping timeout: 252 seconds)
2022-07-31 06:14:23 +0200matthewmosior(~matthewmo@173.170.253.91)
2022-07-31 06:17:56 +0200vglfr(~vglfr@194.9.14.33) (Read error: Connection reset by peer)
2022-07-31 06:18:39 +0200vglfr(~vglfr@194.9.14.33)
2022-07-31 06:24:48 +0200nate4(~nate@98.45.169.16)
2022-07-31 06:25:27 +0200benin0(~benin@183.82.177.174)
2022-07-31 06:25:48 +0200vglfr(~vglfr@194.9.14.33) (Ping timeout: 268 seconds)
2022-07-31 06:26:04 +0200vglfr(~vglfr@194.9.14.33)
2022-07-31 06:34:21 +0200foul_owl(~kerry@23.82.194.108) (Read error: Connection reset by peer)
2022-07-31 06:37:03 +0200vglfr(~vglfr@194.9.14.33) (Ping timeout: 252 seconds)
2022-07-31 06:37:03 +0200nate4(~nate@98.45.169.16) (Ping timeout: 252 seconds)
2022-07-31 06:37:23 +0200vglfr(~vglfr@194.9.14.33)
2022-07-31 06:39:22 +0200machinedgod(~machinedg@d172-219-86-154.abhsia.telus.net) (Ping timeout: 268 seconds)
2022-07-31 06:41:14 +0200 <naso> how can i open a cabal repl so my test modules are in scope
2022-07-31 06:42:10 +0200 <sclv> cabl repl test-suite-name or test:test-suite-name
2022-07-31 06:43:21 +0200 <naso> thank you
2022-07-31 06:45:27 +0200Kaiepi(~Kaiepi@156.34.47.253) (Quit: Leaving)
2022-07-31 06:53:29 +0200foul_owl(~kerry@23.82.194.108)
2022-07-31 06:54:53 +0200Jeanne-Kamikaze(~Jeanne-Ka@142.147.89.233) (Quit: Leaving)
2022-07-31 07:00:57 +0200naso(~naso@193-116-244-197.tpgi.com.au) (Remote host closed the connection)
2022-07-31 07:03:06 +0200naso(~naso@193-116-244-197.tpgi.com.au)
2022-07-31 07:04:55 +0200xff0x(~xff0x@ap007189.d.east.v6connect.net) (Ping timeout: 252 seconds)
2022-07-31 07:05:18 +0200xff0x(~xff0x@ap007189.d.east.v6connect.net)
2022-07-31 07:09:42 +0200mbuf(~Shakthi@122.165.55.71)
2022-07-31 07:12:03 +0200vglfr(~vglfr@194.9.14.33) (Ping timeout: 268 seconds)
2022-07-31 07:12:40 +0200vglfr(~vglfr@194.9.14.33)
2022-07-31 07:15:10 +0200naso(~naso@193-116-244-197.tpgi.com.au) (Remote host closed the connection)
2022-07-31 07:15:56 +0200naso(~naso@193-116-244-197.tpgi.com.au)
2022-07-31 07:16:42 +0200matthewmosior(~matthewmo@173.170.253.91) (Ping timeout: 245 seconds)
2022-07-31 07:18:58 +0200naso(~naso@193-116-244-197.tpgi.com.au) (Remote host closed the connection)
2022-07-31 07:19:13 +0200naso(~naso@193-116-244-197.tpgi.com.au)
2022-07-31 07:27:33 +0200monochrom(trebla@216.138.220.146) (Read error: Connection reset by peer)
2022-07-31 07:30:04 +0200matthewmosior(~matthewmo@173.170.253.91)
2022-07-31 07:31:51 +0200naso(~naso@193-116-244-197.tpgi.com.au) (Remote host closed the connection)
2022-07-31 07:32:53 +0200naso(~naso@193-116-244-197.tpgi.com.au)
2022-07-31 07:32:57 +0200naso(~naso@193-116-244-197.tpgi.com.au) (Remote host closed the connection)
2022-07-31 07:33:22 +0200naso(~naso@193-116-244-197.tpgi.com.au)
2022-07-31 07:34:15 +0200mon_aaraj(~MonAaraj@user/mon-aaraj/x-4416475) (Ping timeout: 252 seconds)
2022-07-31 07:36:45 +0200azimut(~azimut@gateway/tor-sasl/azimut)
2022-07-31 07:43:04 +0200monochrom(trebla@216.138.220.146)
2022-07-31 07:43:36 +0200Pickchea(~private@user/pickchea)
2022-07-31 07:55:31 +0200rembo10(~rembo10@main.remulis.com) (Quit: ZNC 1.8.2 - https://znc.in)
2022-07-31 07:56:29 +0200rembo10(~rembo10@main.remulis.com)
2022-07-31 07:56:35 +0200mon_aaraj(~MonAaraj@user/mon-aaraj/x-4416475)
2022-07-31 07:59:34 +0200Batzy(~quassel@user/batzy) (Read error: Connection reset by peer)
2022-07-31 08:07:36 +0200bilegeek(~bilegeek@2600:1008:b052:7d02:5779:f1d9:cfbf:c1a3) (Ping timeout: 244 seconds)
2022-07-31 08:22:12 +0200tromp(~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
2022-07-31 08:23:36 +0200myme1(~myme@2a01:799:d5a:cd00:c77:b8df:327d:c96f) (Ping timeout: 244 seconds)
2022-07-31 08:24:28 +0200myme1(~myme@2a01:799:d5a:cd00:f235:66bd:b223:d95e)
2022-07-31 08:26:31 +0200winny(~weechat@user/winny) (WeeChat 3.2)
2022-07-31 08:28:16 +0200mvk(~mvk@2607:fea8:5ce3:8500::311d) (Ping timeout: 244 seconds)
2022-07-31 08:31:39 +0200tromp(~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
2022-07-31 08:33:26 +0200matthewmosior(~matthewmo@173.170.253.91) (Ping timeout: 244 seconds)
2022-07-31 08:37:36 +0200z0k(~z0k@206.84.140.97)
2022-07-31 08:39:15 +0200naso(~naso@193-116-244-197.tpgi.com.au) (Remote host closed the connection)
2022-07-31 08:39:21 +0200obabo1(~obabo@20014C4C1C5409000000000000001000.catv.pool.telekom.hu) (Quit: WeeChat 3.6)
2022-07-31 08:40:18 +0200naso(~naso@193-116-244-197.tpgi.com.au)
2022-07-31 08:42:05 +0200Pickchea(~private@user/pickchea) (Ping timeout: 252 seconds)
2022-07-31 08:53:12 +0200acidjnk(~acidjnk@p200300d6e70586358424384a1bd111e9.dip0.t-ipconnect.de)
2022-07-31 08:53:38 +0200tromp(~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
2022-07-31 08:57:57 +0200mon_aaraj(~MonAaraj@user/mon-aaraj/x-4416475) (Ping timeout: 245 seconds)
2022-07-31 08:59:20 +0200matthewmosior(~matthewmo@173.170.253.91)
2022-07-31 09:01:36 +0200mon_aaraj(~MonAaraj@user/mon-aaraj/x-4416475)
2022-07-31 09:02:37 +0200sandy_doo(~sandydoo@185.209.196.136) (Ping timeout: 252 seconds)
2022-07-31 09:03:41 +0200ChaiTRex(~ChaiTRex@user/chaitrex) (Remote host closed the connection)
2022-07-31 09:04:25 +0200ChaiTRex(~ChaiTRex@user/chaitrex)
2022-07-31 09:04:32 +0200matthewmosior(~matthewmo@173.170.253.91) (Ping timeout: 255 seconds)
2022-07-31 09:07:29 +0200Kaiepi(~Kaiepi@156.34.47.253)
2022-07-31 09:07:55 +0200retropikzel(9d1a4f9f46@2604:bf00:561:2000::ce)
2022-07-31 09:11:11 +0200chomwitt(~chomwitt@2a02:587:dc12:b700:9b5a:97ff:58b5:cbbb)
2022-07-31 09:12:36 +0200johnw(~johnw@76-234-69-149.lightspeed.frokca.sbcglobal.net)
2022-07-31 09:13:54 +0200johnw(~johnw@76-234-69-149.lightspeed.frokca.sbcglobal.net) (Client Quit)
2022-07-31 09:20:30 +0200chomwitt(~chomwitt@2a02:587:dc12:b700:9b5a:97ff:58b5:cbbb) (Ping timeout: 240 seconds)
2022-07-31 09:22:15 +0200coco(~coco@212-51-146-199.fiber7.init7.net)
2022-07-31 09:24:31 +0200bilegeek(~bilegeek@50.sub-174-209-38.myvzw.com)
2022-07-31 09:30:15 +0200mrmr(~mrmr@user/mrmr) (Quit: Ping timeout (120 seconds))
2022-07-31 09:30:35 +0200mrmr(~mrmr@user/mrmr)
2022-07-31 09:30:52 +0200vglfr(~vglfr@194.9.14.33) (Ping timeout: 245 seconds)
2022-07-31 09:32:21 +0200ggVGc(~ggVGc@a.lowtech.earth)
2022-07-31 09:32:22 +0200matthewmosior(~matthewmo@173.170.253.91)
2022-07-31 09:34:21 +0200johnw(~johnw@76-234-69-149.lightspeed.frokca.sbcglobal.net)
2022-07-31 09:36:56 +0200matthewmosior(~matthewmo@173.170.253.91) (Ping timeout: 255 seconds)
2022-07-31 09:40:22 +0200 <ggVGc> What would be the most straightforward way to define a one-way relationship on the type-level? For example modelling null-casting, like: You can get a Null a from an a, but you can't go the other way.
2022-07-31 09:41:15 +0200 <ggVGc> actually, that's too simplistic
2022-07-31 09:41:57 +0200shriekingnoise(~shrieking@186.137.167.202) (Quit: Quit)
2022-07-31 09:42:57 +0200mon_aaraj(~MonAaraj@user/mon-aaraj/x-4416475) (Ping timeout: 245 seconds)
2022-07-31 09:44:00 +0200mon_aaraj(~MonAaraj@user/mon-aaraj/x-4416475)
2022-07-31 09:48:50 +0200 <ggVGc> For example: assign (Nullable a) (Nullable b) = ok, assign a (Nullable b) = ok, assign (Nullable a) b = type error
2022-07-31 09:52:28 +0200tromp(~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
2022-07-31 09:52:37 +0200albet70(~xxx@2400:8902::f03c:92ff:fe60:98d8) (Remote host closed the connection)
2022-07-31 09:55:28 +0200mon_aaraj(~MonAaraj@user/mon-aaraj/x-4416475) (Ping timeout: 268 seconds)
2022-07-31 09:57:23 +0200mon_aaraj(~MonAaraj@user/mon-aaraj/x-4416475)
2022-07-31 10:02:04 +0200vglfr(~vglfr@194.9.14.33)
2022-07-31 10:07:10 +0200matthewmosior(~matthewmo@173.170.253.91)
2022-07-31 10:11:17 +0200gurkenglas(~gurkengla@p548ac71b.dip0.t-ipconnect.de)
2022-07-31 10:11:17 +0200matthewmosior(~matthewmo@173.170.253.91) (Ping timeout: 245 seconds)
2022-07-31 10:18:10 +0200albet70(~xxx@2400:8902::f03c:92ff:fe60:98d8)
2022-07-31 10:19:24 +0200yauhsien(~yauhsien@118-167-41-184.dynamic-ip.hinet.net)
2022-07-31 10:20:49 +0200chomwitt(~chomwitt@2a02:587:dc12:b700:569a:41be:aae6:a6d5)
2022-07-31 10:22:35 +0200kenran(~kenran@200116b82b2ba400dde0e2235d830ce2.dip.versatel-1u1.de)
2022-07-31 10:23:39 +0200yauhsien(~yauhsien@118-167-41-184.dynamic-ip.hinet.net) (Ping timeout: 252 seconds)
2022-07-31 10:24:29 +0200kenran(~kenran@200116b82b2ba400dde0e2235d830ce2.dip.versatel-1u1.de) (Client Quit)
2022-07-31 10:25:33 +0200dextaa(~DV@user/dextaa) (Ping timeout: 244 seconds)
2022-07-31 10:26:50 +0200matthewmosior(~matthewmo@173.170.253.91)
2022-07-31 10:27:45 +0200tzh(~tzh@c-24-21-73-154.hsd1.or.comcast.net) (Quit: zzz)
2022-07-31 10:30:43 +0200sonologico(~raphael@dhcp-077-251-118-129.chello.nl)
2022-07-31 10:32:50 +0200bilegeek(~bilegeek@50.sub-174-209-38.myvzw.com) (Remote host closed the connection)
2022-07-31 10:33:15 +0200bilegeek(~bilegeek@50.sub-174-209-38.myvzw.com)
2022-07-31 10:33:58 +0200chomwitt(~chomwitt@2a02:587:dc12:b700:569a:41be:aae6:a6d5) (Ping timeout: 240 seconds)
2022-07-31 10:34:10 +0200misterfish(~misterfis@ip214-130-173-82.adsl2.static.versatel.nl)
2022-07-31 10:36:55 +0200sandy_doo(~sandydoo@185.209.196.136)
2022-07-31 10:43:47 +0200jakalx(~jakalx@base.jakalx.net) ()
2022-07-31 10:46:05 +0200retropikzel(9d1a4f9f46@2604:bf00:561:2000::ce) ()
2022-07-31 10:49:11 +0200 <tomsmeding> Haskell doesn't do implicit casting
2022-07-31 10:49:48 +0200 <tomsmeding> But if explicit is fine: what about a type class that precisely models the allowed pairs?
2022-07-31 10:50:47 +0200 <tomsmeding> ggVGc: ^
2022-07-31 10:51:37 +0200 <tomsmeding> Is `assign a b = ok` if neither a nor b are Nullable?
2022-07-31 10:56:46 +0200causal(~user@2001:470:ea0f:3:329c:23ff:fe3f:1e0e) (Quit: WeeChat 3.6)
2022-07-31 10:58:26 +0200 <tomsmeding> ggVGc: https://play-haskell.tomsmeding.com/play/paste/g0rxiCwN/1
2022-07-31 10:59:38 +0200 <tomsmeding> In a closed type family, like this is (because of the use of 'where' instead of standalone 'type instance' statements), the equations are checked in-order from top to bottom
2022-07-31 11:00:09 +0200ereslibre[m](~ereslibre@2001:470:69fc:105::1:8f90) (Quit: You have been kicked for being idle)
2022-07-31 11:00:09 +0200shiraeeshi[m](~shiraeesh@2001:470:69fc:105::1:77) (Quit: You have been kicked for being idle)
2022-07-31 11:00:23 +0200jakalx(~jakalx@base.jakalx.net)
2022-07-31 11:00:27 +0200 <tomsmeding> Hence, for example, the second equation, F (Nullable a) b, will only get picked if ghc can prove that b does not match `Nullable c` for any c
2022-07-31 11:00:40 +0200ereslibre[m](~ereslibre@2001:470:69fc:105::1:8f90)
2022-07-31 11:00:52 +0200shiraeeshi[m](~shiraeesh@2001:470:69fc:105::1:77)
2022-07-31 11:01:01 +0200 <tomsmeding> You can model basically any relation you want this way, though it's a bit of a blunt hammer
2022-07-31 11:03:47 +0200sonologico(~raphael@dhcp-077-251-118-129.chello.nl) (Ping timeout: 245 seconds)
2022-07-31 11:04:41 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection)
2022-07-31 11:06:43 +0200 <ggVGc> tomsmeding: thanks, was trying to achieve it through a type family (like you showed) but got stuck a few times. Your example helps a lot!
2022-07-31 11:07:19 +0200 <ggVGc> blunt hammer is fine for my use-case. I have the exact same "blunt hammer" implemented at the value level atm...
2022-07-31 11:08:18 +0200 <ggVGc> it validates subsets of ranges. Like, positive numbers being a subset of all numbers, and nullable ranges not being subsets of non-nullable ones etc.
2022-07-31 11:08:39 +0200 <tomsmeding> Sounds like a lattice
2022-07-31 11:08:46 +0200 <ggVGc> I've been meaning to move most of it to the type level for a long time but never got to it (and haven't been sure how to best achieve it)
2022-07-31 11:08:58 +0200 <tomsmeding> Though I doubt knowing that it's a lattice helps much :)
2022-07-31 11:09:52 +0200Tuplanolla(~Tuplanoll@91-159-68-204.elisa-laajakaista.fi)
2022-07-31 11:11:06 +0200 <tomsmeding> Doing it with a closed type family instead of a network of type class instances (if that's even possible -- definitely with overlapping instances, but eh) furthermore has the advantage that a malicious user can't just add an extra instance
2022-07-31 11:13:54 +0200 <ggVGc> yep, that's why I felt type families might be the right choice. I went down the type class path a bit, and it didn't feel like it'd work out well
2022-07-31 11:14:36 +0200 <ggVGc> this is my first actual usage of type families though, so it's good to finally understand them through a real-world use-case
2022-07-31 11:15:17 +0200Guest49(~Guest49@5.214.214.80)
2022-07-31 11:15:20 +0200Jade30(~Jade@ip-178-201-128-039.um46.pools.vodafone-ip.de)
2022-07-31 11:16:08 +0200 <Jade30> Hello, I'm trying to install the haskell toolstack but upon installing with ghcup I get
2022-07-31 11:16:08 +0200 <Jade30> ```
2022-07-31 11:16:09 +0200 <Jade30> [ Error ] Process "make" with arguments ["DESTDIR=/home/jade/.ghcup/tmp/ghcup-a853bee7b96b6a44",
2022-07-31 11:16:09 +0200 <Jade30> [ ...   ]                                "install"] failed with exit code 1.
2022-07-31 11:16:10 +0200 <Jade30> [ Error ] Also check the logs in /home/jade/.ghcup/logs
2022-07-31 11:16:10 +0200 <Jade30> "_eghcup --cache install ghc recommended" failed!
2022-07-31 11:16:11 +0200 <Jade30> ```
2022-07-31 11:16:56 +0200 <Guest49> Hi there. I am 18 years old. I was wondering.whether  haskell is a wide option as the first programming language for me?
2022-07-31 11:17:10 +0200 <Guest49> Wise*
2022-07-31 11:18:47 +0200 <Rembane> Guest49: Yes, but you'll have a very interesting experience learning other programming languages.
2022-07-31 11:19:02 +0200 <ggVGc> Guest49: your age probably doesn't matter much, but your past programming experience does. Haskell the language is somewhat okay as a first choice, although learning it from online resources is more challenging than other languages in my opinion. The bigger issue I think, for a beginner in programming in general, is that the tooling around haskell is still less than ideal, and it can be hard to
2022-07-31 11:19:03 +0200 <ggVGc> get started because of that
2022-07-31 11:19:37 +0200 <ggVGc> see for example what Jade30 just posted above...
2022-07-31 11:19:47 +0200Milan(~Milan@46.245.111.222)
2022-07-31 11:20:16 +0200 <tomsmeding> Jade30: can you post the most recent log file in /home/jade/.ghcup/logs ?
2022-07-31 11:20:22 +0200 <tomsmeding> @where paste
2022-07-31 11:20:22 +0200 <lambdabot> Help us help you: please paste full code, input and/or output at e.g. https://paste.tomsmeding.com
2022-07-31 11:22:02 +0200 <ggVGc> I'm gonna go out on a limb and suggest Elixir as a first programming language instead. Because it's incredibly easy to get setup and begin a first project, the documentation is superb, and it's designed to be quite simple and straight-forward. At the same time it's a functional language, and runs on a mature platform, and there's a proper (although still small) job market for it
2022-07-31 11:22:32 +0200 <ggVGc> Spending a month with Elixir as a beginner programmer would probably be a lot less frustrating than a first month with Haskell though
2022-07-31 11:22:44 +0200Guest49(~Guest49@5.214.214.80) (Ping timeout: 252 seconds)
2022-07-31 11:22:50 +0200 <ggVGc> oh well
2022-07-31 11:22:55 +0200 <ggVGc> guess that was wasted text
2022-07-31 11:23:12 +0200Guest49(~Guest49@5.214.214.80)
2022-07-31 11:23:37 +0200 <ggVGc> did you see my last comment about maybe looking at Elixir, Guest49?
2022-07-31 11:23:55 +0200 <Guest49> Oh no
2022-07-31 11:24:13 +0200 <ggVGc> 09:22:01 ggVGc | I'm gonna go out on a limb and suggest Elixir as a first programming language instead. Because it's incredibly easy to get setup and begin a first project, the documentation is
2022-07-31 11:24:15 +0200 <ggVGc> | superb, and it's designed to be quite simple and straight-forward. At the same time it's a functional language, and runs on a mature platform, and there's a proper (although
2022-07-31 11:24:17 +0200 <ggVGc> | still small) job market for it
2022-07-31 11:24:19 +0200 <ggVGc> 09:22:32 ggVGc | Spending a month with Elixir as a beginner programmer would probably be a lot less frustrating than a first month with Haskell though
2022-07-31 11:24:21 +0200 <ggVGc> Guest49: ^
2022-07-31 11:25:18 +0200 <Guest49> Do you think that learning a functional program first is a good idea at all?
2022-07-31 11:26:20 +0200 <ggVGc> My personal input is that I was programming for a few years in C++, C# and Python, and at age 19 (not that age matters that much) I had my first go at Haskell. I didn't have a great time, and eventually gave up and started writing F# instead (which had just been released that year). A few years after that I started looking at haskell again and am using it today. But I don't think that the
2022-07-31 11:26:22 +0200 <ggVGc> developer experience of Haskell is
2022-07-31 11:26:31 +0200 <ggVGc> very good compared to other languages, even if I like the language itself now
2022-07-31 11:26:49 +0200 <ggVGc> Guest49: yes, definitely going the functinal path from the start is a good idea
2022-07-31 11:26:55 +0200 <ggVGc> that's why I think Elixir is a great stepping stone
2022-07-31 11:27:45 +0200 <ggVGc> It's a well designed, easy-to-use, functional programming language that is used in production by many companies (e.g it's mature, both in functionality and tooling)
2022-07-31 11:28:05 +0200 <Rembane> A lot of time and effort has gone into the developer experience of elixir.
2022-07-31 11:28:15 +0200 <ggVGc> it's definitely not as powerful as Haskell, but as a beginner (either in programming, or functional programming) that's mostly a good thing
2022-07-31 11:29:12 +0200matthewmosior(~matthewmo@173.170.253.91) (Ping timeout: 245 seconds)
2022-07-31 11:30:37 +0200 <Milan> if u were me , you would choose Elixir instead of something like python ?
2022-07-31 11:30:44 +0200 <ggVGc> Guest49: Haskell is a very interesting language to learn, and it has capabilities that are difficult to find elsewhere. But, that comes at a (sometimes huge) learning cost, and most of it is actually not really useful for the vast majority of things. So, my personal suggestion is to say "Haskell is interesting, I'll definitely look at it" but not as a first step, or even in the first years of
2022-07-31 11:30:46 +0200 <ggVGc> programming
2022-07-31 11:31:04 +0200 <ggVGc> Milan: 100%, but I also recently worked as an Elixir developer for almost 5 years
2022-07-31 11:33:01 +0200 <jackdk> Haskell is an excellent general-purpose programming language, and I used to TA a first-year computer science course which used it and assumed no prior programming experience
2022-07-31 11:33:25 +0200 <ggVGc> yeah, that might work. But for self-teaching it's quite a bad choice, imo
2022-07-31 11:34:31 +0200tromp(~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
2022-07-31 11:34:55 +0200 <Guest49> I live in a village and i dont afford attending university
2022-07-31 11:35:17 +0200 <Guest49> I must selfstudy
2022-07-31 11:36:00 +0200mbuf(~Shakthi@122.165.55.71) (Quit: Leaving)
2022-07-31 11:37:31 +0200 <Guest49> What book do u recommend to begin learning Elixir
2022-07-31 11:37:48 +0200 <ggVGc> Guest49: I would say this. Pick some choices, e.g Haskell, Elixir, maybe Go, or Python. Spend a few days with each of them and try to do something simple (like getting the initial environment up and writing a small program). Compare the experience of how comfortable the experience is, and how easy it is to find clear information. Then pick one
2022-07-31 11:38:13 +0200 <ggVGc> I think that's the most important thing in the beginning, being able to find good information (that you understand) and easily working with the language
2022-07-31 11:38:18 +0200 <ggVGc> not necessarily what language you use
2022-07-31 11:38:29 +0200 <tomsmeding> ggVGc++
2022-07-31 11:38:45 +0200 <ggVGc> after a few months you'll be able to switch to some other language and have an easier time
2022-07-31 11:39:19 +0200 <tomsmeding> Trying multiple languages initially takes some time investment without much reward yet, though
2022-07-31 11:39:24 +0200 <ggVGc> Guest49: I would start here :) https://elixir-lang.org/getting-started/introduction.html
2022-07-31 11:39:50 +0200 <ggVGc> tomsmeding: yeah, but if you spend a day and can't get the initial workflow up, then maybe at least that one isn't a good choice
2022-07-31 11:39:57 +0200acidjnk(~acidjnk@p200300d6e70586358424384a1bd111e9.dip0.t-ipconnect.de) (Ping timeout: 272 seconds)
2022-07-31 11:40:00 +0200 <ggVGc> I would say it's clear after 1-2 days if it's gonna work out or not
2022-07-31 11:40:31 +0200 <tomsmeding> ggVGc: I'm curious, would you consider Haskell more suitable for self study if there was a compiler that strictly adhered to Haskell2010 instead of suggesting one enable DataKinds when mixing up type level and value level?
2022-07-31 11:41:06 +0200coco(~coco@212-51-146-199.fiber7.init7.net) (Quit: WeeChat 3.5)
2022-07-31 11:42:24 +0200 <ggVGc> tomsmeding: I honestly think, unfortunately, that what makes Haskell unsuitable for selfstufy as a beinnger is the same reason that it is what it is (a platform for language research). It's so wide, and so evolving, and people often come to it with significant background experience (but everyone from different pasts). So, the information you find when trying to learn something is often fragmented,
2022-07-31 11:42:26 +0200 <ggVGc> hard to grasp, unclear if it is actually what you're looking for or not etc.
2022-07-31 11:42:32 +0200 <ggVGc> no one sat down and wrote a propoer "Getting started"
2022-07-31 11:42:42 +0200 <ggVGc> and library documentation is atrocious
2022-07-31 11:43:12 +0200 <tomsmeding> ggVGc: I kind of agree :)
2022-07-31 11:43:22 +0200 <ggVGc> restricting to Haskell2010 definitely is better as a start, I think. But that doesn't help the issue of learning resources, which are not carrying that restriction
2022-07-31 11:43:29 +0200 <tomsmeding> Yeah
2022-07-31 11:44:39 +0200 <ggVGc> This is why I suggest Elixir (not because that's what I did for work lately). The whole community very much values clear documentation, avoids complexities as much as it can, and just tries to keep things simple and well-described
2022-07-31 11:44:47 +0200 <ggVGc> it makes for a very good grounds for learning
2022-07-31 11:45:03 +0200 <tomsmeding> "avoids complexities as much as it can" -- right
2022-07-31 11:45:26 +0200 <tomsmeding> So the language is less expressive than haskell, and they embrace that
2022-07-31 11:45:48 +0200 <ggVGc> I brought a frontend developer at work into our backend team in 2-3 months, in which he got comfortable with proper functional programming (not JS-"functional") and unit testing (which he never really did properly before)
2022-07-31 11:45:52 +0200 <ggVGc> and backend development in general
2022-07-31 11:45:55 +0200 <tomsmeding> That's a good thing and very nice until you need the extra functionality
2022-07-31 11:46:07 +0200 <ggVGc> yeah, but 99% of the time you don't
2022-07-31 11:46:21 +0200 <tomsmeding> But then I believe that a good programmer should know >1 language in the first place :)
2022-07-31 11:46:47 +0200 <tomsmeding> ggVGc: cool
2022-07-31 11:47:19 +0200 <tomsmeding> That's certainly a vote of confidence for elixir
2022-07-31 11:47:32 +0200misterfish(~misterfis@ip214-130-173-82.adsl2.static.versatel.nl) (Ping timeout: 245 seconds)
2022-07-31 11:48:34 +0200 <Jade30> tomsmeding:
2022-07-31 11:48:35 +0200 <Jade30> Debug: Identified Platform as: Linux UnknownLinux
2022-07-31 11:48:35 +0200 <Jade30> Debug: last access was 8.188348676s ago, cache interval is 300s
2022-07-31 11:48:36 +0200 <Jade30> Debug: Decoding yaml at: /home/jade/.ghcup/cache/ghcup-0.0.7.yaml
2022-07-31 11:48:36 +0200 <Jade30> Debug: Requested to install GHC with 8.10.7
2022-07-31 11:48:37 +0200 <Jade30> Info: verifying digest of: ghc-8.10.7-x86_64-fedora27-linux.tar.xz
2022-07-31 11:48:37 +0200 <Jade30> Info: Unpacking: ghc-8.10.7-x86_64-fedora27-linux.tar.xz to /home/jade/.ghcup/tmp/ghcup-415eb58728e758d9
2022-07-31 11:48:38 +0200 <Jade30> Info: Installing GHC (this may take a while)
2022-07-31 11:48:38 +0200 <Jade30> Debug: Running sh with arguments ["./configure","--prefix=/home/jade/.ghcup/ghc/8.10.7"]
2022-07-31 11:48:39 +0200 <Jade30> Debug: Running make with arguments ["DESTDIR=/home/jade/.ghcup/tmp/ghcup-a853bee7b96b6a44","install"]
2022-07-31 11:48:39 +0200 <Jade30> Error: Process "make" with arguments ["DESTDIR=/home/jade/.ghcup/tmp/ghcup-a853bee7b96b6a44",
2022-07-31 11:48:40 +0200 <Jade30>                                "install"] failed with exit code 1.
2022-07-31 11:48:40 +0200 <Jade30> Error: Also check the logs in /home/jade/.ghcup/logs
2022-07-31 11:48:44 +0200 <tomsmeding> Jade30: use a pastebin
2022-07-31 11:48:47 +0200 <Jade30> (it didn't let me send the file for whatever reason
2022-07-31 11:48:57 +0200 <tomsmeding> Irc doesn't support files, use a pastebin
2022-07-31 11:49:03 +0200 <Jade30> tomsmeding, ok
2022-07-31 11:49:15 +0200 <tomsmeding> @where paste
2022-07-31 11:49:15 +0200 <lambdabot> Help us help you: please paste full code, input and/or output at e.g. https://paste.tomsmeding.com
2022-07-31 11:49:23 +0200 <Jade30> https://pastebin.com/gaEYYYgA
2022-07-31 11:49:32 +0200 <Jade30> oh
2022-07-31 11:49:46 +0200 <tomsmeding> Jade30: "Error: Also check the logs in /home/jade/.ghcup/logs"
2022-07-31 11:50:03 +0200 <tomsmeding> Can you post the most recent file in that directory?
2022-07-31 11:50:24 +0200 <Jade30> ghc-configure.log  ghc-make.log which of these?
2022-07-31 11:50:36 +0200 <tomsmeding> The make one
2022-07-31 11:51:07 +0200 <Jade30> ghcup: make: executeFile: does not exist (No such file or directory)
2022-07-31 11:51:11 +0200 <Jade30> that's the only line
2022-07-31 11:51:13 +0200 <tomsmeding> Lol ok
2022-07-31 11:51:16 +0200 <tomsmeding> What OS?
2022-07-31 11:51:17 +0200bilegeek(~bilegeek@50.sub-174-209-38.myvzw.com) (Ping timeout: 245 seconds)
2022-07-31 11:51:20 +0200 <Jade30> Arch linux
2022-07-31 11:51:31 +0200 <tomsmeding> sudo pacman -S base-devel
2022-07-31 11:51:42 +0200 <tomsmeding> And then try again
2022-07-31 11:52:16 +0200 <ggVGc> tomsmeding: another thing is that Elixir is, by design, "verbose" when compared to haskell. To be fair, Haskell is extremely terse, so it's not a super fair comparison, and I wouldn't call Elixir a very verbose language. But the point is, I think this is a pro when learning. fn a, b -> runSomething(a, b, 123) end isn't as terse as function composition, but it's very easy to read and very clear
2022-07-31 11:52:17 +0200 <ggVGc> what's going on
2022-07-31 11:52:51 +0200 <Jade30> tomsemding, it looks like it's working!
2022-07-31 11:52:54 +0200 <Jade30> Thanks
2022-07-31 11:53:21 +0200 <tomsmeding> ggVGc: It doesn't have automatic currying? (i.e. that a -> b -> c === a -> (b -> c))
2022-07-31 11:53:25 +0200 <tomsmeding> Jade30: cool! :)
2022-07-31 11:53:32 +0200Guest49(~Guest49@5.214.214.80) (Ping timeout: 252 seconds)
2022-07-31 11:53:43 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
2022-07-31 11:54:09 +0200 <ggVGc> there's a shorthand operator so you can write what I did as this instead: &(&1, &2, 123)
2022-07-31 11:54:53 +0200 <tomsmeding> &(&1, &2, 123) would be written in haskell as \f x y -> f x y 123 ?
2022-07-31 11:55:00 +0200 <ggVGc> yep
2022-07-31 11:55:20 +0200 <tomsmeding> How would you express \f x _ -> f x 123
2022-07-31 11:55:33 +0200 <ggVGc> but, in general things are a lot less automatic, which again I think is a good thing for beginner programming, and honestly for long-term maintenance of production code also
2022-07-31 11:55:37 +0200 <tomsmeding> Not &(&1, 123) because that is \f x -> f x 123 :p
2022-07-31 11:57:00 +0200 <tomsmeding> I have mixed feelins about not having automatic currying -- I'm quite sure that it's easier to learn and that knowledge transfers more easily between elixir and most other languages. But on the other hand, power users at some point want power tools
2022-07-31 11:57:44 +0200 <tomsmeding> Terse syntax is bad for its learning curve and intelligibility for non-experts, but experts benefit from terse syntax
2022-07-31 11:57:53 +0200Everything(~Everythin@37.115.210.35)
2022-07-31 11:58:02 +0200matthewmosior(~matthewmo@173.170.253.91)
2022-07-31 11:58:05 +0200 <tomsmeding> But go also exists :p
2022-07-31 11:58:07 +0200zxx7529(~Thunderbi@user/zxx7529)
2022-07-31 11:58:48 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 268 seconds)
2022-07-31 11:59:34 +0200 <tomsmeding> From just what you've told me, though (which is all I know about elixir :p), I do agree with your recommendation of it over haskell as a first language
2022-07-31 12:00:17 +0200 <tomsmeding> Not quite convinced yet it should necessarily be one's first _functional_ language if one already has a bunch of programming experience
2022-07-31 12:02:07 +0200 <tomsmeding> Jade30: curious, is haskell your first programming language? Most other things would not work either without base-devel, I think :p
2022-07-31 12:02:35 +0200 <tomsmeding> Perhaps the scripting languages might (js, python)
2022-07-31 12:02:44 +0200matthewmosior(~matthewmo@173.170.253.91) (Ping timeout: 255 seconds)
2022-07-31 12:02:50 +0200 <Jade30> No, idk how many languages I know. I just reinstalled arch and forgot `base-devel`
2022-07-31 12:02:59 +0200 <tomsmeding> Ah that also explains :)
2022-07-31 12:03:22 +0200 <tomsmeding> Yay arch btw
2022-07-31 12:03:36 +0200 <Jade30> I do that more often than I should, but a package list and a seperate home partition make it easy
2022-07-31 12:03:46 +0200 <tomsmeding> And good on you for using ghcup instead of the ghc package from the arch repos :p
2022-07-31 12:03:50 +0200 <Jade30> I'm a Java programmer "by trade"
2022-07-31 12:03:59 +0200 <Jade30> Also learning rust and haskell
2022-07-31 12:04:10 +0200 <Jade30> Been doing Java for 3 years now
2022-07-31 12:04:52 +0200 <tomsmeding> Good luck! Rust and Haskell can be a lot of fun, in related but somewhat different ways, if you like this kind of programming :)
2022-07-31 12:05:26 +0200 <Jade30> yeah, thanks!
2022-07-31 12:05:50 +0200econo(uid147250@user/econo) (Quit: Connection closed for inactivity)
2022-07-31 12:06:14 +0200 <Jade30> Now I still don't have ghcup working .. I think my failed install mesed with some caches.
2022-07-31 12:06:14 +0200 <Jade30> The only thing it installed was `ghc(i)`. No stack, cabal, HLS or `ghcup` binary
2022-07-31 12:06:29 +0200 <tomsmeding> Is there a ~/.ghcup directory?
2022-07-31 12:06:39 +0200 <Jade30> yes, there was even after the failed install
2022-07-31 12:06:41 +0200 <maerwald> Jade30: source ~/.ghcup/env
2022-07-31 12:06:42 +0200 <tomsmeding> If so, is there stuff in ~/.ghcup/bin
2022-07-31 12:07:03 +0200 <tomsmeding> What maerwald says, or just put that bin directory in your path however you wish
2022-07-31 12:07:50 +0200 <Jade30> oops, forgot to open a new terminal for the changes on path to take effect
2022-07-31 12:07:59 +0200 <tomsmeding> Though I wonder how ghc got in your path
2022-07-31 12:07:59 +0200 <Jade30> works now
2022-07-31 12:08:11 +0200 <tomsmeding> Jade30: do you have the ghc package installed from the arch repos?
2022-07-31 12:08:17 +0200 <Jade30> tomsmeding xmonad dependency
2022-07-31 12:08:22 +0200 <tomsmeding> Ah rip
2022-07-31 12:08:48 +0200 <Jade30> is that "bad"?
2022-07-31 12:08:51 +0200 <ggVGc> tomsmeding: yeah, you couldn't use & for that, since you can't create a 2-ary function where you only use one argument using it. So, in that situation you'd just write it out as in haskell, just that you have fn and end instead of \...
2022-07-31 12:08:53 +0200 <tomsmeding> The two installations _should_ not interfere as long as .ghcup/bin is before /usr/bin in your path
2022-07-31 12:09:16 +0200 <Jade30> it is
2022-07-31 12:09:27 +0200 <tomsmeding> Jade30: they should not interfere, but if your path is not as you expect it sometimes, then it might create confusing situations
2022-07-31 12:09:43 +0200 <Jade30> ok I'll keep it in mind.
2022-07-31 12:09:55 +0200 <Jade30> Now I can finally continue my bf interpreter on desktop
2022-07-31 12:10:04 +0200 <Jade30> Coding on my phone for two weeks was a pain
2022-07-31 12:10:15 +0200 <tomsmeding> Jade30: symptom: "there are files missing in package `...'" or something similar :)
2022-07-31 12:10:15 +0200 <Jade30> haha
2022-07-31 12:10:25 +0200 <Jade30> got it!
2022-07-31 12:10:33 +0200 <tomsmeding> Jade30: what did you use for haskell on phone?
2022-07-31 12:10:48 +0200 <tomsmeding> ggVGc: makes sense :)
2022-07-31 12:10:51 +0200 <Jade30> Termux with a virtual arch installation that ran ghc as a native package
2022-07-31 12:11:02 +0200 <tomsmeding> ggVGc: Not even necessarily a bad thing
2022-07-31 12:11:03 +0200 <Jade30> it was barely working haha
2022-07-31 12:11:10 +0200 <tomsmeding> Jade30: native termux now has a ghc package too!
2022-07-31 12:11:16 +0200 <tomsmeding> Since a few months or so
2022-07-31 12:11:17 +0200 <Jade30> oh, neat!
2022-07-31 12:11:29 +0200 <tomsmeding> And cabal and friends
2022-07-31 12:11:29 +0200 <Jade30> won't need it anymore thankfully
2022-07-31 12:11:53 +0200 <tomsmeding> BF interpreter is top notch first project though :)
2022-07-31 12:12:17 +0200 <Jade30> I'm basically done, I only need to parse the source into an AST
2022-07-31 12:12:23 +0200 <Jade30> the evaluation thing is done
2022-07-31 12:12:43 +0200 <ggVGc> after you write the BF interpreter you can drop all other languages and just use that
2022-07-31 12:12:54 +0200sandydoo(~sandydoo@185.209.196.136)
2022-07-31 12:13:00 +0200Milan(~Milan@46.245.111.222) (Quit: Client closed)
2022-07-31 12:13:04 +0200 <Jade30> true
2022-07-31 12:13:18 +0200 <Jade30> tomsmeding https://paste.tomsmeding.com/8e9rE9MR
2022-07-31 12:13:31 +0200sandy_doo(~sandydoo@185.209.196.136) (Ping timeout: 272 seconds)
2022-07-31 12:13:53 +0200 <ggVGc> Jade30: disappointed it's not all at the type level
2022-07-31 12:13:54 +0200 <Jade30> I'm a little proud for coming up with the `interpret'` function entirely without help
2022-07-31 12:14:11 +0200 <Jade30> ggVGc hm?
2022-07-31 12:14:18 +0200 <ggVGc> :) just joking
2022-07-31 12:14:36 +0200 <Jade30> ok haha
2022-07-31 12:14:37 +0200 <ggVGc> but, I think it'd be possible to implement a BF interpreter on the type-level in haskell
2022-07-31 12:14:47 +0200 <ggVGc> e.g your BF proram would "run" at compile time
2022-07-31 12:15:09 +0200 <Jade30> oh wow
2022-07-31 12:15:15 +0200 <Jade30> that's interesting
2022-07-31 12:15:32 +0200 <ggVGc> yes, but not necessarily good :)
2022-07-31 12:15:32 +0200 <Jade30> that'd mean the compiler as a "language" is turing complete?
2022-07-31 12:15:34 +0200 <Jade30> haha
2022-07-31 12:15:43 +0200matthewmosior(~matthewmo@173.170.253.91)
2022-07-31 12:15:48 +0200 <ggVGc> yeah, I think it is by now
2022-07-31 12:15:56 +0200 <Jade30> damn that's interesting
2022-07-31 12:15:59 +0200 <ggVGc> but I'm not expert enough to say for sure
2022-07-31 12:16:13 +0200 <ggVGc> but, you can have type-level functions and type-level data so...
2022-07-31 12:17:03 +0200 <tomsmeding> Jade30: looking good!
2022-07-31 12:17:10 +0200 <Jade30> ok now I wanna set up HLS for neovim
2022-07-31 12:17:18 +0200 <Jade30> that gave me trouble last time
2022-07-31 12:17:28 +0200 <Jade30> after the installation it would always immediatly crash
2022-07-31 12:18:01 +0200 <ggVGc> Jade30: https://www.reddit.com/r/haskell/comments/g6ea8j/a_brainfuck_interpreter_written_in_haskell/
2022-07-31 12:18:31 +0200 <ggVGc> not... as nice as on the value level
2022-07-31 12:18:33 +0200 <ggVGc> :)
2022-07-31 12:18:47 +0200 <Jade30> Jesus haha
2022-07-31 12:19:08 +0200 <tomsmeding> Jade30: some minor suggestions https://paste.tomsmeding.com/choqRSjR
2022-07-31 12:19:08 +0200lisbeths(uid135845@id-135845.lymington.irccloud.com)
2022-07-31 12:19:25 +0200 <tomsmeding> Jade30: how long ago was that hls crashing issue?
2022-07-31 12:19:35 +0200 <Jade30> hm?
2022-07-31 12:19:37 +0200 <tomsmeding> There is a crashing issue that was resolved recently
2022-07-31 12:19:51 +0200 <Jade30> Oh I didn't boot my desktop for over 14 days
2022-07-31 12:19:55 +0200 <Jade30> It was before that+
2022-07-31 12:20:02 +0200 <tomsmeding> Oh not _that_ recently :p
2022-07-31 12:20:07 +0200 <tomsmeding> A month or two or so
2022-07-31 12:21:05 +0200 <naso> anyone familiar with using Gen.discard or Gen.filter in hedgehog? i'm trying to get an element from a list that can possibly be empty, using https://paste.tomsmeding.com/Bd6DBwtd , but it is not working -- sometimes it has an error that the list is empty
2022-07-31 12:21:28 +0200 <ggVGc> I often wonder why we need a different set of stuff for type-level calculations, if the type system is turing complete anyway. Why not just write normal haskell in special blocks, using types as the values?
2022-07-31 12:21:54 +0200 <naso> (that's not the actual code, just trying to demonstrarte the issue)
2022-07-31 12:22:01 +0200 <tomsmeding> naso: if null xs then Gen.discard else Gen.element f ?
2022-07-31 12:22:38 +0200 <tomsmeding> ggVGc: Have you ever tried programming in Idris or Agda :p
2022-07-31 12:22:58 +0200 <ggVGc> no, only looked at it a little bit a long time ago. But, is that the case there?
2022-07-31 12:23:06 +0200 <tomsmeding> Haakell's type system is turing complete only accidentally due to a bunch of extensions, I believe
2022-07-31 12:23:34 +0200 <ggVGc> I don't think we need to go as far as dependent types to do what I suggested
2022-07-31 12:23:37 +0200 <tomsmeding> ggVGc: The point of a dependently typed language is that the language of types is the same as the language of values
2022-07-31 12:23:43 +0200 <Jade30> Thanks for the suggestions! I actually told my friend about just that, rewriting the `>>` using do-notation :D
2022-07-31 12:23:44 +0200 <Jade30> Is there any case where manual monad operations should *not* be replaced with `do`?
2022-07-31 12:23:48 +0200 <tomsmeding> Hence you have types of types, types of types of types, etc
2022-07-31 12:24:05 +0200 <ggVGc> tomsmeding: well, it's more than that though. It's that you can influence typing based on runtime values, right? Which is more powerful than what I am talkin about
2022-07-31 12:24:19 +0200 <tomsmeding> Jade30: it's equivalent, so in principle no
2022-07-31 12:24:26 +0200 <tomsmeding> Except for style, which is subjective
2022-07-31 12:24:32 +0200 <ggVGc> I just mean that instead of "type family" we can have a special block of haskell and say "Foo :: TypeA -> TypeB"
2022-07-31 12:24:54 +0200 <tomsmeding> ggVGc: Can you partially apply a type family in your system?
2022-07-31 12:24:54 +0200 <Jade30> Yeah I was referring to style
2022-07-31 12:25:10 +0200 <naso> tomsmeding: thanks, sorry my example was too simple and i'm not sure how to apply your suggestion. this is more like it https://paste.tomsmeding.com/92hW7UUa
2022-07-31 12:25:13 +0200 <tomsmeding> Jade30: asking 5 haskell programmers about style will give 6 different answers
2022-07-31 12:25:30 +0200 <Jade30> hahaha
2022-07-31 12:25:30 +0200 <ggVGc> tomsmeding: no, not initially, since I don't think current Haskell supports that? :)
2022-07-31 12:25:34 +0200 <Jade30> yeah I see
2022-07-31 12:25:40 +0200 <tomsmeding> ggVGc: indeed :p
2022-07-31 12:25:54 +0200 <ggVGc> I am talking about having exactly the features we have now, but with the same syntax, just in different blocks
2022-07-31 12:26:03 +0200 <ggVGc> and in this special block, there can be restrictions
2022-07-31 12:26:08 +0200 <ggVGc> like no partial application
2022-07-31 12:26:18 +0200 <ggVGc> it would still be easier to use than the current combination of stuff
2022-07-31 12:26:24 +0200 <ggVGc> I think...
2022-07-31 12:29:02 +0200Milan(~Milan@46.245.111.222)
2022-07-31 12:29:23 +0200 <tomsmeding> naso: two suggestions https://paste.tomsmeding.com/uSg01xns (when is from Control.Monad)
2022-07-31 12:29:31 +0200Milan(~Milan@46.245.111.222) (Client Quit)
2022-07-31 12:29:38 +0200 <tomsmeding> ggVGc: probably
2022-07-31 12:29:54 +0200 <tomsmeding> Probably too late for that now, though
2022-07-31 12:30:06 +0200 <ggVGc> can be implemented in... Another extension!
2022-07-31 12:30:33 +0200 <tomsmeding> :D
2022-07-31 12:31:03 +0200 <Jade30> Is there an easier way to do default/starting args than defining `f` as `f' default_arg` where `f'` takes all args?
2022-07-31 12:31:13 +0200radhika(uid560836@id-560836.helmsley.irccloud.com)
2022-07-31 12:31:35 +0200 <naso> tomsmeding: perfect! thank u
2022-07-31 12:32:04 +0200 <tomsmeding> Jade30: not really, though you can put the f' in a where block on f; this is a common pattern, where that f' is then typically called "go"
2022-07-31 12:32:32 +0200 <Jade30> I see, thanks
2022-07-31 12:33:59 +0200 <Jade30> ok, maybe I did something wrong; running `stack run` is downloading `GHC` again (?)
2022-07-31 12:34:12 +0200 <tomsmeding> Jade30: stack manages its own ghcs
2022-07-31 12:34:20 +0200 <tomsmeding> Use cabal if you want to use the ghcup-installed ghc
2022-07-31 12:34:38 +0200 <tomsmeding> Or use stack and remove the ghcup-installed ghcs to save disk space :p
2022-07-31 12:34:41 +0200 <Jade30> oh ok, this is fine I think
2022-07-31 12:34:52 +0200 <tomsmeding> (or use system-ghc: true in stack.yaml, but please don't)
2022-07-31 12:34:59 +0200 <Jade30> I have plenty of disk space, this shouldn't be too bad haha
2022-07-31 12:35:05 +0200 <Jade30> Do you think Stack or Cabal is better?
2022-07-31 12:35:15 +0200 <tomsmeding> How to start a flame war in haskell land
2022-07-31 12:35:25 +0200 <maerwald> :D
2022-07-31 12:35:33 +0200 <tomsmeding> Stack was born out of frustration with cabal, but then cabal improved a lot
2022-07-31 12:35:53 +0200 <tomsmeding> These days it doesn't matter all that much, details are different but overall preference is subjective
2022-07-31 12:35:58 +0200 <Jade30> haha, looks like a lot of things make everything go up in flames in haskell land
2022-07-31 12:36:24 +0200 <tomsmeding> I personally prefer cabal, but feel free to use stack if you wish
2022-07-31 12:36:39 +0200 <tomsmeding> Getting started easily trumps ideological perfection
2022-07-31 12:37:00 +0200 <ggVGc> I use stack still, but cabal build times are faster...
2022-07-31 12:37:13 +0200 <ggVGc> there are somethings with stack I don't know how to do with cabal
2022-07-31 12:37:19 +0200 <ggVGc> like 'stack ghci'
2022-07-31 12:37:23 +0200 <tomsmeding> cabal repl
2022-07-31 12:37:42 +0200malte(~malte@mal.tc)
2022-07-31 12:37:49 +0200 <Jade30> Ok, all the advantages of neovim aside, this is too much of a pain rn, I'll just use `vscode(ium)`
2022-07-31 12:37:54 +0200 <ggVGc> I had some issues with that in the past if I remember correctly... relating to it not loading all the modules I wanted or something
2022-07-31 12:38:01 +0200 <ggVGc> might look into making the switch again sometimes
2022-07-31 12:38:03 +0200 <ggVGc> sometime*
2022-07-31 12:38:05 +0200 <tomsmeding> Ah
2022-07-31 12:38:21 +0200 <Jade30> Unless theres something better than vsc? some plugin for a jetbrains ide/something similar?
2022-07-31 12:38:39 +0200 <Jade30> I think theres an IntelliJ plugin but idk how good it is
2022-07-31 12:38:42 +0200 <tomsmeding> Vscode is the best in integration with hls currently
2022-07-31 12:38:46 +0200 <Jade30> ok cool
2022-07-31 12:38:53 +0200 <tomsmeding> I have neovim working, but if you can stand vscode... :)
2022-07-31 12:38:57 +0200 <ggVGc> vim+coc+haskell-language-server works quite well for me
2022-07-31 12:39:00 +0200 <tomsmeding> Probably easier
2022-07-31 12:39:16 +0200 <Jade30> I'm rather new to vim so I need to get used to a lot of stuff
2022-07-31 12:43:48 +0200misterfish(~misterfis@87.215.131.98)
2022-07-31 12:54:36 +0200Jade30(~Jade@ip-178-201-128-039.um46.pools.vodafone-ip.de) (Quit: Connection closed)
2022-07-31 12:59:44 +0200sonologico(~raphael@dhcp-077-251-118-129.chello.nl)
2022-07-31 13:02:26 +0200 <ggVGc> tomsmeding: why can't I do this? :( https://gist.github.com/c42f38018667a78949e07da10ba7962b
2022-07-31 13:04:46 +0200 <ggVGc> ah, wait... I need a type class also I guess?
2022-07-31 13:06:29 +0200Milan(~Milan@46.245.111.222)
2022-07-31 13:09:41 +0200 <tomsmeding> ggVGc: not everything is a Range :p
2022-07-31 13:09:59 +0200 <tomsmeding> In fact a Positive doesn't contain any data at all
2022-07-31 13:10:48 +0200 <tomsmeding> ggVGc: Suggestion: data Range ty = Range Int Int
2022-07-31 13:11:08 +0200 <tomsmeding> And then have `ty` be Positive, Nullable Negative, etc
2022-07-31 13:11:32 +0200 <tomsmeding> And just make Positive etc. types without constructors (data Positive)
2022-07-31 13:11:42 +0200MajorBiscuit(~MajorBisc@86-88-79-148.fixed.kpn.net)
2022-07-31 13:11:42 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
2022-07-31 13:11:51 +0200chomwitt(~chomwitt@2a02:587:dc12:b700:678b:e1a:f7b:532c)
2022-07-31 13:11:59 +0200naso(~naso@193-116-244-197.tpgi.com.au) (Read error: Connection reset by peer)
2022-07-31 13:12:38 +0200 <tomsmeding> For more fanciness, with DataKinds: data Ty = Positive | NonNull Ty | ... ; data Range (ty :: Ty) = Range Int Int ; and then use `Range 1 2 :: Range ('NonNull 'Positive)`
2022-07-31 13:12:46 +0200naso(~naso@193-116-244-197.tpgi.com.au)
2022-07-31 13:13:02 +0200 <tomsmeding> To ensure a troll can't make a `Range String`
2022-07-31 13:13:51 +0200chomwitt(~chomwitt@2a02:587:dc12:b700:678b:e1a:f7b:532c) (Remote host closed the connection)
2022-07-31 13:14:10 +0200chomwitt(~chomwitt@2a02:587:dc12:b700:3d3:74d8:b5ce:c91f)
2022-07-31 13:15:52 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 245 seconds)
2022-07-31 13:17:57 +0200matthewmosior(~matthewmo@173.170.253.91) (Ping timeout: 245 seconds)
2022-07-31 13:18:07 +0200naso(~naso@193-116-244-197.tpgi.com.au) (Ping timeout: 272 seconds)
2022-07-31 13:18:31 +0200 <tomsmeding> Alternative is indeed to make a type class HasRange r where getRange :: r -> Range; but then you still need to put some data in a Positive :p
2022-07-31 13:28:22 +0200sonologico(~raphael@dhcp-077-251-118-129.chello.nl) (Ping timeout: 245 seconds)
2022-07-31 13:29:51 +0200chomwitt(~chomwitt@2a02:587:dc12:b700:3d3:74d8:b5ce:c91f) (Ping timeout: 276 seconds)
2022-07-31 13:29:52 +0200Sgeo(~Sgeo@user/sgeo) (Read error: Connection reset by peer)
2022-07-31 13:30:47 +0200acidjnk(~acidjnk@p200300d6e70586358424384a1bd111e9.dip0.t-ipconnect.de)
2022-07-31 13:36:04 +0200sonologico(~raphael@dhcp-077-251-118-129.chello.nl)
2022-07-31 13:36:11 +0200 <ggVGc> tomsmeding: yeah, datakinds is probably what I want... Stuck again :( https://gist.github.com/c42f38018667a78949e07da10ba7962b
2022-07-31 13:36:22 +0200 <ggVGc> I feel I'm missing a crucial piece of understanding
2022-07-31 13:41:46 +0200Guest49(~Guest49@5.214.242.88)
2022-07-31 13:41:48 +0200naso(~naso@193-116-244-197.tpgi.com.au)
2022-07-31 13:42:55 +0200Guest49(~Guest49@5.214.242.88) (Client Quit)
2022-07-31 13:43:26 +0200yauhsien(~yauhsien@118-167-41-184.dynamic-ip.hinet.net)
2022-07-31 13:43:33 +0200wootehfoot(~wootehfoo@user/wootehfoot)
2022-07-31 13:45:11 +0200 <tomsmeding> ggVGc: What about: valueSubset :: RangeSubset a b ~ 'True => Range a -> Range b -> Bool
2022-07-31 13:45:26 +0200 <tomsmeding> And then remove the Range from all your RangeSubset equations
2022-07-31 13:46:18 +0200 <ggVGc> ahhh, that makes a lot more sense
2022-07-31 13:46:22 +0200 <ggVGc> haha... thanks
2022-07-31 13:47:17 +0200 <tomsmeding> ggVGc: why does AnyNumber have a constructor
2022-07-31 13:47:31 +0200 <ggVGc> by accident :)
2022-07-31 13:47:43 +0200matthewmosior(~matthewmo@173.170.253.91)
2022-07-31 13:47:58 +0200 <ggVGc> nice, this is starting to get close to fulfilling my basic use-case, even if it can be implemented nicer
2022-07-31 13:48:07 +0200 <ggVGc> thanks a lot for the help
2022-07-31 13:50:44 +0200 <tomsmeding> ggVGc: This is how to restrict ty to just these things https://paste.tomsmeding.com/Jr374Yor
2022-07-31 13:50:48 +0200 <ggVGc> ah... but I messed up, because I actually need to be able to have a list of [a, Range] or equivalent...
2022-07-31 13:50:53 +0200Milan(~Milan@46.245.111.222) (Quit: Client closed)
2022-07-31 13:51:05 +0200 <ggVGc> of (a, Range), I mean
2022-07-31 13:51:08 +0200 <tomsmeding> Oops typo on line 14
2022-07-31 13:51:47 +0200 <tomsmeding> ggVGc: What do you mean? What a?
2022-07-31 13:51:49 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
2022-07-31 13:52:12 +0200matthewmosior(~matthewmo@173.170.253.91) (Ping timeout: 244 seconds)
2022-07-31 13:54:54 +0200naso(~naso@193-116-244-197.tpgi.com.au) (Remote host closed the connection)
2022-07-31 13:55:11 +0200tstat(~tstat@user/tstat)
2022-07-31 13:55:32 +0200Guest49(~Guest49@5.214.242.88)
2022-07-31 13:55:44 +0200naso(~naso@193-116-244-197.tpgi.com.au)
2022-07-31 13:55:45 +0200Guest49(~Guest49@5.214.242.88) (Client Quit)
2022-07-31 13:55:57 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 252 seconds)
2022-07-31 13:55:57 +0200bontaq(~user@ool-45779fe5.dyn.optonline.net) (Ping timeout: 252 seconds)
2022-07-31 13:56:25 +0200merijn(~merijn@86-86-29-250.fixed.kpn.net)
2022-07-31 13:59:11 +0200Guest49(~Guest49@5.214.242.88)
2022-07-31 13:59:25 +0200Guest49(~Guest49@5.214.242.88) (Client Quit)
2022-07-31 13:59:32 +0200pretty_dumm_guy(trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655)
2022-07-31 14:02:23 +0200yauhsien(~yauhsien@118-167-41-184.dynamic-ip.hinet.net) (Remote host closed the connection)
2022-07-31 14:03:27 +0200califax(~califax@user/califx) (Ping timeout: 268 seconds)
2022-07-31 14:03:39 +0200wootehfoot(~wootehfoo@user/wootehfoot) (Ping timeout: 252 seconds)
2022-07-31 14:04:30 +0200mon_aaraj(~MonAaraj@user/mon-aaraj/x-4416475) (Read error: Connection reset by peer)
2022-07-31 14:05:32 +0200califax(~califax@user/califx)
2022-07-31 14:06:50 +0200mikail(~mikail@2a02:c7f:bc47:8c00:5aa7:b193:11e3:d108) (Remote host closed the connection)
2022-07-31 14:08:54 +0200matthewmosior(~matthewmo@173.170.253.91)
2022-07-31 14:11:38 +0200mikail(~mikail@2a02:c7f:bc47:8c00:5aa7:b193:11e3:d108)
2022-07-31 14:12:40 +0200yauhsien(~yauhsien@118-167-41-184.dynamic-ip.hinet.net)
2022-07-31 14:12:51 +0200Milan(~Milan@46.245.111.222)
2022-07-31 14:13:17 +0200Milan(~Milan@46.245.111.222) (Client Quit)
2022-07-31 14:20:36 +0200yauhsien(~yauhsien@118-167-41-184.dynamic-ip.hinet.net) (Remote host closed the connection)
2022-07-31 14:21:51 +0200yauhsien(~yauhsien@118-167-41-184.dynamic-ip.hinet.net)
2022-07-31 14:24:25 +0200ChaiTRex(~ChaiTRex@user/chaitrex) (Ping timeout: 268 seconds)
2022-07-31 14:25:06 +0200ChaiTRex(~ChaiTRex@user/chaitrex)
2022-07-31 14:28:26 +0200mon_aaraj(~MonAaraj@user/mon-aaraj/x-4416475)
2022-07-31 14:28:47 +0200lisbeths(uid135845@id-135845.lymington.irccloud.com) (Quit: Connection closed for inactivity)
2022-07-31 14:32:50 +0200ChaiTRex(~ChaiTRex@user/chaitrex) (Remote host closed the connection)
2022-07-31 14:33:23 +0200ChaiTRex(~ChaiTRex@user/chaitrex)
2022-07-31 14:33:43 +0200mon_aaraj(~MonAaraj@user/mon-aaraj/x-4416475) (Ping timeout: 252 seconds)
2022-07-31 14:34:45 +0200mon_aaraj(~MonAaraj@user/mon-aaraj/x-4416475)
2022-07-31 14:36:28 +0200jargon(~jargon@184.101.188.251) (Remote host closed the connection)
2022-07-31 14:38:11 +0200sonologico(~raphael@dhcp-077-251-118-129.chello.nl) (Ping timeout: 244 seconds)
2022-07-31 14:38:38 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
2022-07-31 14:40:20 +0200radhika(uid560836@id-560836.helmsley.irccloud.com) (Quit: Connection closed for inactivity)
2022-07-31 14:41:26 +0200yauhsien(~yauhsien@118-167-41-184.dynamic-ip.hinet.net) (Remote host closed the connection)
2022-07-31 14:42:00 +0200notzmv(~zmv@user/notzmv) (Ping timeout: 276 seconds)
2022-07-31 14:42:57 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 245 seconds)
2022-07-31 14:43:04 +0200yauhsien(~yauhsien@118-167-41-184.dynamic-ip.hinet.net)
2022-07-31 14:43:53 +0200 <ggVGc> tomsmeding: the usecase is basically this: data Thing = Thing {inputs :: [(String, Range)]}
2022-07-31 14:44:30 +0200 <ggVGc> and the ranges are for checking of something can be connected to a certain input
2022-07-31 14:45:37 +0200 <tomsmeding> ggVGc: is your problem that the various Range objects need to have different type tags?
2022-07-31 14:46:26 +0200 <ggVGc> yeah, so I need to rethink how to model this I guess. Basically "input1" could have Positive range, and "input2" could have a Nullable (Range Int Int)
2022-07-31 14:46:48 +0200 <tomsmeding> Right, then you can't model this in the type system
2022-07-31 14:47:26 +0200Kikroz(~Kikroz@5.214.242.88)
2022-07-31 14:47:34 +0200 <tomsmeding> Well, what you could do is move Ty to the value level, but then make Ty a gadt so that pattern matching on a Ty can reconstruct the type-level info
2022-07-31 14:48:10 +0200 <ggVGc> hm, yeah, that might work
2022-07-31 14:49:32 +0200 <mon_aaraj> hello, i have something like: ``\x y z -> max (show x) (y <> z)``, but I want to write it in a point-free manner, and I distinctly remember some combinator similar to this
2022-07-31 14:50:22 +0200 <tomsmeding> @pl \x y z -> max (show x) (y <> z)
2022-07-31 14:50:22 +0200 <lambdabot> (. (<>)) . (.) . max . show
2022-07-31 14:50:27 +0200 <tomsmeding> Useful!
2022-07-31 14:50:35 +0200jmdaemon(~jmdaemon@user/jmdaemon) (Ping timeout: 252 seconds)
2022-07-31 14:50:42 +0200 <mon_aaraj> oh wow, thank you very much.. i wonder how much more readable that would be if blackbird was used
2022-07-31 14:51:05 +0200 <tomsmeding> Well it's hard to be less readable than this
2022-07-31 14:52:03 +0200 <ggVGc> Pointfree Considered Harmful
2022-07-31 14:53:06 +0200 <tomsmeding> Pointfree style is like strong herbs, a little goes a long way
2022-07-31 14:55:04 +0200 <tomsmeding> mon_aaraj: \x -> blackbird (max (show x)) (<>), if I'm not mistaken
2022-07-31 14:55:39 +0200 <tomsmeding> @pl blackbird (max (show x)) (<>)
2022-07-31 14:55:39 +0200 <lambdabot> blackbird (max (show x)) (<>)
2022-07-31 14:56:03 +0200 <tomsmeding> @pl \x -> blackbird (max (show x)) (<>)
2022-07-31 14:56:03 +0200 <lambdabot> flip blackbird (<>) . max . show
2022-07-31 14:56:11 +0200 <tomsmeding> Which is inscrutable again
2022-07-31 14:56:15 +0200 <mon_aaraj> well, i suppose blackbird just makes it ``((.: (<>)) . max . show)``
2022-07-31 14:56:26 +0200 <tomsmeding> Right
2022-07-31 15:00:10 +0200Kikroz(~Kikroz@5.214.242.88) (Ping timeout: 252 seconds)
2022-07-31 15:00:27 +0200mon_aaraj(~MonAaraj@user/mon-aaraj/x-4416475) (Ping timeout: 245 seconds)
2022-07-31 15:02:49 +0200mon_aaraj(~MonAaraj@user/mon-aaraj/x-4416475)
2022-07-31 15:05:15 +0200 <mon_aaraj> oops, sorry, my last message arrived late
2022-07-31 15:06:07 +0200yauhsien(~yauhsien@118-167-41-184.dynamic-ip.hinet.net) (Remote host closed the connection)
2022-07-31 15:06:59 +0200yauhsien(~yauhsien@118-167-41-184.dynamic-ip.hinet.net)
2022-07-31 15:10:23 +0200matthewmosior(~matthewmo@173.170.253.91) (Ping timeout: 255 seconds)
2022-07-31 15:10:25 +0200 <mon_aaraj> anyways, it seems that the point-free code produces different output than ``(\x y z -> max (show x) (y <> z))`` somehow
2022-07-31 15:11:09 +0200 <mon_aaraj> ah, wait, nope, only when i try to forcefully shove blackbird in
2022-07-31 15:11:28 +0200wootehfoot(~wootehfoo@user/wootehfoot)
2022-07-31 15:12:05 +0200 <geekosaur> either you're doing ot wrong or you're running into something unrelated e.g. monomorphism restriction from removing an explicit parameter
2022-07-31 15:14:04 +0200whatsupboy(~whatsupbo@user/scobydoo) (Quit: WeeChat 2.8)
2022-07-31 15:16:45 +0200 <hasbae> :t blackbird
2022-07-31 15:16:46 +0200 <lambdabot> error: Variable not in scope: blackbird
2022-07-31 15:18:04 +0200 <geekosaur[m]> Actually it wouldn't be MMR because that affects the type not the value, but there are other traps
2022-07-31 15:18:13 +0200whatsupboy(~whatsupbo@user/scobydoo)
2022-07-31 15:18:36 +0200wootehfoot(~wootehfoo@user/wootehfoot) (Ping timeout: 268 seconds)
2022-07-31 15:19:15 +0200 <hasbae> whats the command for lambdabot to show the type of blackbird?
2022-07-31 15:19:31 +0200 <geekosaur[m]> hasbae: it's not there. See the paper "To Mock a Mockingbird" iirc
2022-07-31 15:19:31 +0200whatsupboy(~whatsupbo@user/scobydoo) (Quit: brb)
2022-07-31 15:19:32 +0200sonologico(~raphael@dhcp-077-251-118-129.chello.nl)
2022-07-31 15:20:00 +0200naso(~naso@193-116-244-197.tpgi.com.au) ()
2022-07-31 15:20:17 +0200 <mon_aaraj> yeah, the first thing i stumbled into was ``(<>) .: max . show``, but.. well, it always appends the number to the 2nd string, so ``((<>) .: max . shohw) 5 "" "buzz"`` would result in ``5buzz``
2022-07-31 15:20:21 +0200 <geekosaur[m]> Someone collected a bunch of point-free combinators
2022-07-31 15:20:30 +0200 <hasbae> ok. this disucssion came up the other day. blackbird is not in To Mock a Mockingbird, at least not in the index where all the birds are listed
2022-07-31 15:20:32 +0200whatsupboy(~whatsupbo@user/scobydoo)
2022-07-31 15:21:00 +0200haritz(~hrtz@user/haritz) (Remote host closed the connection)
2022-07-31 15:21:25 +0200yauhsien(~yauhsien@118-167-41-184.dynamic-ip.hinet.net) (Remote host closed the connection)
2022-07-31 15:22:30 +0200yauhsien(~yauhsien@118-167-41-184.dynamic-ip.hinet.net)
2022-07-31 15:22:47 +0200 <mon_aaraj> in here http://revue.sesamath.net/IMG/pdf/mockingbird3.pdf it's number 6, but i don't know if that's what you guys are talking about
2022-07-31 15:25:52 +0200sonologico(~raphael@dhcp-077-251-118-129.chello.nl) (Ping timeout: 245 seconds)
2022-07-31 15:28:22 +0200mon_aaraj(~MonAaraj@user/mon-aaraj/x-4416475) (Ping timeout: 245 seconds)
2022-07-31 15:30:20 +0200mon_aaraj(~MonAaraj@user/mon-aaraj/x-4416475)
2022-07-31 15:32:38 +0200 <hasbae> yes, that's the one
2022-07-31 15:39:35 +0200Jade1(~Jade1@ip-178-201-128-039.um46.pools.vodafone-ip.de)
2022-07-31 15:39:58 +0200 <Jade1> Hello, how can I utilize the autocomplete with vim, coc and HLS?
2022-07-31 15:40:21 +0200 <Jade1> It shows me the suggestion with a `[A]` but I have no idea how to "use" it
2022-07-31 15:41:09 +0200matthewmosior(~matthewmo@173.170.253.91)
2022-07-31 15:43:09 +0200yauhsien(~yauhsien@118-167-41-184.dynamic-ip.hinet.net) (Ping timeout: 272 seconds)
2022-07-31 15:44:48 +0200 <ggVGc> tomsmeding: do you know how I could do this without UndecidableInstance? https://gist.github.com/77f1468484702783b1ea0176d1980304
2022-07-31 15:47:48 +0200 <tomsmeding> @hackage data-aviary
2022-07-31 15:47:48 +0200 <lambdabot> https://hackage.haskell.org/package/data-aviary
2022-07-31 15:47:53 +0200 <tomsmeding> hasbae: ^
2022-07-31 15:48:02 +0200lisbeths(uid135845@id-135845.lymington.irccloud.com)
2022-07-31 15:49:01 +0200 <tomsmeding> ggVGc: Not
2022-07-31 15:49:10 +0200 <ggVGc> hah...
2022-07-31 15:49:31 +0200 <tomsmeding> Standard rules are quite conservative, and sufficient to guarantee convergence, if I remember correctly
2022-07-31 15:49:49 +0200 <tomsmeding> But there are plenty of convergent things that aren't covered by those rules
2022-07-31 15:50:07 +0200 <tomsmeding> Where with "convergent" I mean "doesn't loop indefinitely"
2022-07-31 15:50:43 +0200 <tomsmeding> UndecidableInstances doesn't break semantics, it just allows inference to not terminate, possibly
2022-07-31 15:50:56 +0200 <tomsmeding> If inference terminates, the result is still correct
2022-07-31 15:51:01 +0200 <tomsmeding> So it's quite safe
2022-07-31 15:53:11 +0200 <merijn> ggVGc: UndecidableInstances (despite the same) is safe in the sense that "code that finishes compiling will be correct"
2022-07-31 15:53:17 +0200 <merijn> s/same/name
2022-07-31 15:53:32 +0200 <merijn> (correct in a typing sense, not necessarily behaviour :p)
2022-07-31 15:55:54 +0200 <ggVGc> ah, cool. Have to admit I never really fully understood the caveats of it
2022-07-31 15:56:33 +0200 <merijn> ggVGc: By default GHC is very conservative in type level functions and typeclass tomfoolery, meaning it only allows things that provably always terminate
2022-07-31 15:57:31 +0200 <merijn> ggVGc: UndecidableInstances allows things for which it is undecidable if they (the typeclass tomfoolery) terminates. So, hypothetically, you can end up with code which does not terminate and compilation never finishes
2022-07-31 15:57:48 +0200 <merijn> (in practice, GHC has a maximum number of evaluation steps before it gives up and says "no")
2022-07-31 15:58:08 +0200zebrag(~chris@user/zebrag)
2022-07-31 15:58:41 +0200 <Jade1> !paste
2022-07-31 15:58:47 +0200 <geekosaur> @where paste
2022-07-31 15:58:47 +0200 <lambdabot> Help us help you: please paste full code, input and/or output at e.g. https://paste.tomsmeding.com
2022-07-31 15:58:51 +0200 <Jade1> thx
2022-07-31 15:59:30 +0200 <geekosaur> I saw your question earlier but can't help with it; I only use nvim for quick edits and stick to vs code for HLS stuff
2022-07-31 15:59:51 +0200 <ggVGc> merijn: right, thanks, that makes sense
2022-07-31 16:00:34 +0200 <ggVGc> it's too bad about the compilation termination. That's what prevents us from writing all our software in type-level BF
2022-07-31 16:01:16 +0200 <Jade1> https://paste.tomsmeding.com/OBy4d1Xh How can I write the `bf_parser`?
2022-07-31 16:01:33 +0200 <geekosaur> enh. actually it's just making type leel as complete as value level by adding bottoms 🙂
2022-07-31 16:01:45 +0200 <Jade1> Parsers and Parser combinators are new to me so I'm struggling a littöe
2022-07-31 16:03:11 +0200sonologico(~raphael@dhcp-077-251-118-129.chello.nl)
2022-07-31 16:04:12 +0200 <ggVGc> tomsmeding: I tried understanding you GADT suggestion, but I'm not sure I am able to apply it. How were you thinking I could reconstruct the types? :/
2022-07-31 16:07:36 +0200Vajb(~Vajb@hag-jnsbng11-58c3ad-40.dhcp.inet.fi) (Read error: Connection reset by peer)
2022-07-31 16:08:04 +0200Vajb(~Vajb@n1zigc3rgo9mpde2w-1.v6.elisa-mobile.fi)
2022-07-31 16:09:41 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
2022-07-31 16:12:41 +0200Kikroz(~Kikroz@5.214.242.88)
2022-07-31 16:13:19 +0200Kikroz(~Kikroz@5.214.242.88) (Client Quit)
2022-07-31 16:14:18 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 276 seconds)
2022-07-31 16:16:54 +0200 <tomsmeding> ggVGc: data Ty = Positive | Nullable Ty | ... ; data STy ty where { SPositive :: STy 'Positive ; SNullable :: STy ty -> STy ('Nullable ty) ; ... }
2022-07-31 16:17:16 +0200 <tomsmeding> data SomeSTy = forall ty. SomeSTy (STy ty)
2022-07-31 16:18:06 +0200 <tomsmeding> Then use SomeSTy if you want to forget the type info; pattern matching on an STy, if you know in advance what it should be (but ghc doesn't), will allow you to prove your expectation
2022-07-31 16:18:13 +0200zxx7529(~Thunderbi@user/zxx7529) (Ping timeout: 252 seconds)
2022-07-31 16:18:22 +0200 <tomsmeding> S comes from "singleton"
2022-07-31 16:19:08 +0200 <tomsmeding> The singletons library can generate STy from Ty for you, I think, but I've never used it and there is some more complexity to it due to the library's generality
2022-07-31 16:22:58 +0200zxx7529(~Thunderbi@user/zxx7529)
2022-07-31 16:25:33 +0200sonologico(~raphael@dhcp-077-251-118-129.chello.nl) (Ping timeout: 252 seconds)
2022-07-31 16:26:25 +0200kenran(~kenran@200116b82b2ba400703212b2a68ff598.dip.versatel-1u1.de)
2022-07-31 16:27:32 +0200yin(~yin@user/zero) (Ping timeout: 245 seconds)
2022-07-31 16:31:11 +0200jao(~jao@cpc103048-sgyl39-2-0-cust502.18-2.cable.virginm.net)
2022-07-31 16:31:49 +0200 <onosendi> How is this function called? https://gist.github.com/onosendi/fa35bc76d43e57369cf2d6ba7041d76d
2022-07-31 16:33:26 +0200 <geekosaur> `greet (Person aName anAge)` or `greet (Person {name = aName, age = anAge})`
2022-07-31 16:33:42 +0200 <geekosaur> (the parentheses are actually unnecessary in the second one, but then it's more confusing)
2022-07-31 16:34:04 +0200califax(~califax@user/califx) (Remote host closed the connection)
2022-07-31 16:35:04 +0200 <onosendi> Thank you. I feel like this Tutorial skipped over a bunch of stuff, heh.
2022-07-31 16:35:37 +0200 <geekosaur> in general you create values the same way you declare them
2022-07-31 16:35:57 +0200califax(~califax@user/califx)
2022-07-31 16:36:41 +0200 <geekosaur> so if you have `data Person = Person {name :: String, age :: Int}` then a value of type Person is `person {name = "Fred", age = 50}`
2022-07-31 16:37:33 +0200 <geekosaur> and similarly for yesterday when you had `calc` and needed a value to go with it, and had it declared as `Add Int Int | Sub Int Int`
2022-07-31 16:37:34 +0200vglfr(~vglfr@194.9.14.33) (Read error: Connection reset by peer)
2022-07-31 16:37:42 +0200vglfr(~vglfr@194.9.14.33)
2022-07-31 16:37:49 +0200 <mon_aaraj> well, i suppose i can show my little cancerous creation:
2022-07-31 16:37:52 +0200 <mon_aaraj> ``(zipWith3 (\x y z -> max (show x) (y <> z)) [1..100] `on` cycle) ["","","Fizz"] ["","","","","Buzz"]``
2022-07-31 16:38:03 +0200 <geekosaur> but for that one you needed parentheses because `Add` and `Sub` can be used directly as values with function types
2022-07-31 16:38:12 +0200 <ggVGc> tomsmeding: thanks, will have a crack
2022-07-31 16:38:30 +0200 <onosendi> I think I need to go to another tutorial and learn more about types before I proceed. It's confusing why the second `Person` is there, `data Person = Person`. It's also confusing in the function declaration why `person` is at the end: `greet person = "Hi " ++ name person`
2022-07-31 16:38:38 +0200 <mon_aaraj> i'm not quite sure how i'd make it shorter but still readable... but I think that's good enough for now
2022-07-31 16:38:54 +0200machinedgod(~machinedg@d172-219-86-154.abhsia.telus.net)
2022-07-31 16:39:14 +0200sonologico(~raphael@dhcp-077-251-118-129.chello.nl)
2022-07-31 16:40:02 +0200raym(~raym@user/raym) (Ping timeout: 245 seconds)
2022-07-31 16:40:15 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
2022-07-31 16:40:48 +0200Inst_(~Inst@2601:6c4:4080:3f80:d998:768b:c35b:a535)
2022-07-31 16:40:54 +0200raym(~raym@user/raym)
2022-07-31 16:41:15 +0200vglfr(~vglfr@194.9.14.33) (Remote host closed the connection)
2022-07-31 16:41:55 +0200vglfr(~vglfr@194.9.14.33)
2022-07-31 16:43:44 +0200Inst(~Inst@2601:6c4:4080:3f80:d998:768b:c35b:a535) (Ping timeout: 244 seconds)
2022-07-31 16:44:37 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 252 seconds)
2022-07-31 16:45:36 +0200 <ggVGc> tomsmeding: man, that's great :) Thanks a lot!
2022-07-31 16:45:47 +0200 <ggVGc> today has been a day of much learning
2022-07-31 16:47:48 +0200sammelweis(~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10)
2022-07-31 16:48:24 +0200 <hasbae> onosendi: terms and types have different namespaces, and therefore you can have the same name in both. Person on the left is a type, and Person on the right is a terml, which is an element of the type Person
2022-07-31 16:48:40 +0200 <hasbae> s/terml/term
2022-07-31 16:49:10 +0200 <geekosaur> especially when learning, it may be better to name the term and type level ones differently to help keep them separate
2022-07-31 16:49:20 +0200gmg(~user@user/gehmehgeh)
2022-07-31 16:49:41 +0200 <geekosaur> especially since ghc has some fun type level stuff that is well beyond beginner, but which it will innocently suggest to you if you get the levels confused
2022-07-31 16:50:05 +0200kenran(~kenran@200116b82b2ba400703212b2a68ff598.dip.versatel-1u1.de) (Quit: WeeChat info:version)
2022-07-31 16:50:32 +0200 <onosendi> So that's not considered recursive datatypes? A few videos before there was an example `data PeaNum = Succ PeaNum | Zero`, which was recursive?
2022-07-31 16:51:00 +0200 <geekosaur> that one is recursive because `Succ PraNum` refers to the type, not a value
2022-07-31 16:51:06 +0200sonologico(~raphael@dhcp-077-251-118-129.chello.nl) (Ping timeout: 268 seconds)
2022-07-31 16:51:09 +0200 <onosendi> Ah, okay.
2022-07-31 16:51:25 +0200 <geekosaur> compare `Maybe Int` which refers to a type (data Maybe a = Nothing | Just a)
2022-07-31 16:51:39 +0200notzmv(~zmv@user/notzmv)
2022-07-31 16:53:51 +0200 <geekosaur> so when you declare that PeaNum, the constructor Succ takes a type as a parameter which happens to be the same as the type you're declaring
2022-07-31 16:54:23 +0200 <geekosaur> when you make a value, you use a value there instead (`(Succ (Succ Zero))` for example)
2022-07-31 16:56:53 +0200[itchyjunk](~itchyjunk@user/itchyjunk/x-7353470)
2022-07-31 16:56:53 +0200vglfr(~vglfr@194.9.14.33) (Read error: Connection reset by peer)
2022-07-31 16:56:57 +0200ChaiTRex(~ChaiTRex@user/chaitrex) (Remote host closed the connection)
2022-07-31 16:58:09 +0200vglfr(~vglfr@194.9.14.33)
2022-07-31 16:58:20 +0200 <[itchyjunk]> Can the bot remove sugar syntax? Like "a" -> Cons (a Nil) maybe?
2022-07-31 16:59:25 +0200Jade1(~Jade1@ip-178-201-128-039.um46.pools.vodafone-ip.de) (Quit: Client closed)
2022-07-31 16:59:34 +0200 <tomsmeding> [itchyjunk]: the desugared version of "a" would be 'a' : []
2022-07-31 16:59:55 +0200 <[itchyjunk]> I wanted to see it for ["a"], list of lists
2022-07-31 17:00:09 +0200 <tomsmeding> > ('a' : []) : []
2022-07-31 17:00:11 +0200 <lambdabot> ["a"]
2022-07-31 17:00:16 +0200matthewmosior(~matthewmo@173.170.253.91) (Ping timeout: 244 seconds)
2022-07-31 17:00:20 +0200 <[itchyjunk]> I wanted to start with [[]] and get ["a"] , ["ab"], etc
2022-07-31 17:00:28 +0200 <geekosaur> not generally. there are some commands which can add or remove specific kinds of syntax, but nothing general
2022-07-31 17:00:31 +0200 <[itchyjunk]> but i seem to keep getting ["a","b"] and i am not sure why
2022-07-31 17:01:15 +0200 <[itchyjunk]> > "b" : ["a"]
2022-07-31 17:01:16 +0200 <lambdabot> ["b","a"]
2022-07-31 17:01:20 +0200Milan(~Milan@46.245.111.222)
2022-07-31 17:01:24 +0200 <tomsmeding> > inits ['a'..]
2022-07-31 17:01:26 +0200 <lambdabot> ["","a","ab","abc","abcd","abcde","abcdef","abcdefg","abcdefgh","abcdefghi",...
2022-07-31 17:01:38 +0200Milan(~Milan@46.245.111.222) (Client Quit)
2022-07-31 17:01:59 +0200 <[itchyjunk]> hmm
2022-07-31 17:02:24 +0200ChaiTRex(~ChaiTRex@user/chaitrex)
2022-07-31 17:02:28 +0200 <tomsmeding> [itchyjunk]: ["a"] == "a" : [], so "b" : ["a"] == "b" : "a" : [] == ["b", "a"]
2022-07-31 17:02:50 +0200Inst_Inst
2022-07-31 17:02:59 +0200 <[itchyjunk]> ah that makes sense
2022-07-31 17:03:18 +0200 <tomsmeding> > map ('a' :) ["hi", "some", "text"]
2022-07-31 17:03:19 +0200 <lambdabot> ["ahi","asome","atext"]
2022-07-31 17:03:30 +0200 <tomsmeding> > map ("a" ++) ["hi", "some", "text"]
2022-07-31 17:03:32 +0200 <lambdabot> ["ahi","asome","atext"]
2022-07-31 17:03:46 +0200 <[itchyjunk]> so if i have `["a"]` i would want ` ('b' : 'a' : []) : []` ?
2022-07-31 17:03:47 +0200 <tomsmeding> > ["a"] : ["hi", "some", "text"]
2022-07-31 17:03:49 +0200 <lambdabot> error:
2022-07-31 17:03:49 +0200 <lambdabot> • Couldn't match type ‘Char’ with ‘[Char]’
2022-07-31 17:03:49 +0200 <lambdabot> Expected type: [[Char]]
2022-07-31 17:04:03 +0200 <[itchyjunk]> > ('b' : 'a' : []) : []
2022-07-31 17:04:03 +0200 <tomsmeding> > "a" : ["hi", "some", "text"]
2022-07-31 17:04:05 +0200 <lambdabot> ["a","hi","some","text"]
2022-07-31 17:04:05 +0200 <lambdabot> ["ba"]
2022-07-31 17:04:19 +0200 <[itchyjunk]> hmmmmmm
2022-07-31 17:12:41 +0200vglfr(~vglfr@194.9.14.33) (Read error: Connection reset by peer)
2022-07-31 17:12:54 +0200vglfr(~vglfr@194.9.14.33)
2022-07-31 17:13:10 +0200 <[itchyjunk]> if x is a char `x : []` should give me a string, y should be a string so ` (x:[]):y` should give in concated string and `((x:[]):y):ys` should give me [String] ?
2022-07-31 17:13:12 +0200 <[itchyjunk]> https://bpa.st/R4LQ
2022-07-31 17:13:47 +0200 <[itchyjunk]> i think i'll have to take care of g _ [[]] case at some point
2022-07-31 17:14:30 +0200 <merijn> [itchyjunk]: "(x:[]):y" is a type error if y is a string
2022-07-31 17:14:43 +0200 <[itchyjunk]> hmmmmm
2022-07-31 17:14:56 +0200 <[itchyjunk]> > ('a':[]) : "b"
2022-07-31 17:14:58 +0200 <lambdabot> error:
2022-07-31 17:14:58 +0200 <lambdabot> • Couldn't match type ‘Char’ with ‘[Char]’
2022-07-31 17:14:58 +0200 <lambdabot> Expected type: [[Char]]
2022-07-31 17:15:01 +0200 <merijn> [itchyjunk]: Pretty sure you just mean "(x:y)"
2022-07-31 17:15:04 +0200 <[itchyjunk]> :(
2022-07-31 17:15:18 +0200 <merijn> [itchyjunk]: : is "append" (or prepend, if you will), not concatenate
2022-07-31 17:15:23 +0200 <merijn> :t (:)
2022-07-31 17:15:24 +0200 <lambdabot> a -> [a] -> [a]
2022-07-31 17:15:38 +0200 <[itchyjunk]> ah append, right
2022-07-31 17:15:45 +0200 <merijn> so if "x :: Char" and "y :: String" you just want "x:y" to put x in front of y
2022-07-31 17:15:46 +0200ChaiTRex(~ChaiTRex@user/chaitrex) (Remote host closed the connection)
2022-07-31 17:16:03 +0200ChaiTRex(~ChaiTRex@user/chaitrex)
2022-07-31 17:16:20 +0200 <[itchyjunk]> right, makes sense
2022-07-31 17:16:58 +0200 <[itchyjunk]> i also am not sure what do do when my y is [[]]
2022-07-31 17:17:20 +0200 <merijn> [itchyjunk]: Don't you want [] as final case?
2022-07-31 17:17:21 +0200 <[itchyjunk]> since i am trying to do (y:ys), i need to know what to do when (y:ys) is an empty list of string :<
2022-07-31 17:17:33 +0200 <merijn> [[]] is "that last (empty) element of the ys list"
2022-07-31 17:18:03 +0200 <merijn> I would also use guards instead of if/then/else
2022-07-31 17:18:16 +0200 <[itchyjunk]> ah yes, i do want empty to append an empty list
2022-07-31 17:18:27 +0200 <[itchyjunk]> i forgot syntax for guards but remembered them for if else xD
2022-07-31 17:19:43 +0200 <[itchyjunk]> Hm, I am getting a non exhaustive pattern error.
2022-07-31 17:19:43 +0200 <[itchyjunk]> https://bpa.st/S5OA
2022-07-31 17:21:20 +0200Everything(~Everythin@37.115.210.35) (Quit: leaving)
2022-07-31 17:21:46 +0200 <[itchyjunk]> hmm i've 2 inputs and i've handled empty case for both
2022-07-31 17:22:09 +0200 <merijn> [itchyjunk]: You're not handling the empty case for second argument
2022-07-31 17:22:22 +0200 <merijn> [itchyjunk]: You're handling the "one element that is an empty list" case
2022-07-31 17:22:44 +0200 <[itchyjunk]> oh, the case where it has no element would be [] ?
2022-07-31 17:23:28 +0200 <merijn> [itchyjunk]: Something like: https://paste.tomsmeding.com/NOnl8dq2
2022-07-31 17:24:40 +0200 <[itchyjunk]> g _ [] = [] is an issue because my accumulator always starts as []
2022-07-31 17:24:42 +0200 <[itchyjunk]> oh maybe
2022-07-31 17:24:50 +0200 <tomsmeding> [itchyjunk]: what function are you trying to implement
2022-07-31 17:25:06 +0200azimut(~azimut@gateway/tor-sasl/azimut) (Ping timeout: 268 seconds)
2022-07-31 17:25:12 +0200 <[itchyjunk]> "hello world" -> ["hello","world"]
2022-07-31 17:25:22 +0200 <tomsmeding> so, reimplementing 'words'?
2022-07-31 17:25:39 +0200 <[itchyjunk]> ah, maybe. i don't remember which inbuilt one did it :D
2022-07-31 17:25:44 +0200 <tomsmeding> > words "hello world"
2022-07-31 17:25:46 +0200 <lambdabot> ["hello","world"]
2022-07-31 17:25:50 +0200 <[itchyjunk]> ah! yes
2022-07-31 17:25:56 +0200 <[itchyjunk]> g "hello world" [[]]
2022-07-31 17:25:57 +0200 <[itchyjunk]> ["dlrowolleh"]
2022-07-31 17:26:01 +0200 <tomsmeding> > unwords ["hello", "world"]
2022-07-31 17:26:03 +0200 <[itchyjunk]> it's not doing what i want :x
2022-07-31 17:26:04 +0200 <lambdabot> "hello world"
2022-07-31 17:26:46 +0200 <[itchyjunk]> oh wait, maybe it's doing what i want
2022-07-31 17:26:55 +0200 <tomsmeding> right, so you're saying: words s = g s [[]], right?
2022-07-31 17:26:58 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
2022-07-31 17:27:04 +0200 <[itchyjunk]> yes!
2022-07-31 17:27:10 +0200azimut(~azimut@gateway/tor-sasl/azimut)
2022-07-31 17:27:15 +0200 <tomsmeding> I'm not sure that's the right way to start
2022-07-31 17:27:47 +0200 <[itchyjunk]> oh :(
2022-07-31 17:27:53 +0200 <[itchyjunk]> i think i made progress though, in some way
2022-07-31 17:28:03 +0200 <[itchyjunk]> g "hello world" [[]]
2022-07-31 17:28:03 +0200 <[itchyjunk]> ["dlrow","olleh"]
2022-07-31 17:28:41 +0200 <tomsmeding> right, except you're producing the result in reverse, somehow
2022-07-31 17:28:51 +0200 <tomsmeding> which is very related to starting with [[]] :)
2022-07-31 17:29:18 +0200 <tomsmeding> let's try writing the function directly, so let's write f :: String -> [String]
2022-07-31 17:29:28 +0200 <tomsmeding> where f "hello world" == ["hello", "world"]
2022-07-31 17:29:56 +0200 <tomsmeding> if we use recursion directly, we have to answer: what is f [], and what is f (x:xs)?
2022-07-31 17:30:12 +0200 <tomsmeding> (your turn)
2022-07-31 17:30:54 +0200 <[itchyjunk]> f [] = [], since you're just passing empty string, i think. unless it has to be [[]] list of empty string
2022-07-31 17:31:17 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 245 seconds)
2022-07-31 17:31:35 +0200 <tomsmeding> it doesn't matter a whole lot which one you choose -- does "" have one empty word, or no words at all?
2022-07-31 17:32:16 +0200 <tomsmeding> let's say it has no words at all, so f [] = []
2022-07-31 17:32:20 +0200 <[itchyjunk]> hmm, " " would be ' ' : []. but what would "" be i wonder
2022-07-31 17:32:28 +0200 <tomsmeding> []
2022-07-31 17:32:33 +0200 <tomsmeding> > [] :: String
2022-07-31 17:32:33 +0200 <[itchyjunk]> ah!
2022-07-31 17:32:35 +0200 <lambdabot> ""
2022-07-31 17:32:55 +0200 <tomsmeding> "hi" == ['h', 'i'] == 'h' : 'i' : []
2022-07-31 17:33:19 +0200tromp(~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
2022-07-31 17:33:26 +0200 <tomsmeding> now that we have 'f [] = []', we look at 'f (x:xs) = ...'
2022-07-31 17:33:52 +0200 <tomsmeding> now the trick is, we can already apply f to xs if we want
2022-07-31 17:34:10 +0200 <tomsmeding> can you somehow express the desired word splitting of x:xs in terms of x and the word splitting of xs?
2022-07-31 17:37:06 +0200 <[itchyjunk]> check if x /= ' ' then take that x, turn it into a string and attach it to the first string of xs if it's first char is not ' ' or somesuch
2022-07-31 17:38:02 +0200 <[itchyjunk]> oh ohhh
2022-07-31 17:38:14 +0200 <[itchyjunk]> f "hello world"
2022-07-31 17:38:14 +0200 <[itchyjunk]> ["h","e","l","l","o","w","o","r","l","d"]
2022-07-31 17:38:34 +0200 <[itchyjunk]> i guess i am not attaching it to the first charater like i wanted to
2022-07-31 17:39:24 +0200 <tomsmeding> [itchyjunk]: "if its first char is not ' '" why that?
2022-07-31 17:39:35 +0200 <tomsmeding> also, not xs but 'f xs', right?
2022-07-31 17:39:43 +0200 <tomsmeding> xs is just the rest of the string
2022-07-31 17:39:53 +0200 <[itchyjunk]> | x /= ' ' = (x : []) : (f xs) is what i used
2022-07-31 17:39:56 +0200 <tomsmeding> 'f xs' is the word-splitted version of the rest of the string (assuming we implement f correctly)
2022-07-31 17:40:13 +0200 <[itchyjunk]> if it's ' ', then i want to start a new word so i want to start appending it to [] maybe
2022-07-31 17:40:13 +0200matthewmosior(~matthewmo@173.170.253.91)
2022-07-31 17:40:17 +0200 <tomsmeding> (x : []) : (f xs) == [x] : f xs == [[x]] ++ f xs
2022-07-31 17:40:34 +0200 <tomsmeding> right, if x == ' ' you want to start a new word:
2022-07-31 17:40:42 +0200 <tomsmeding> f (x:xs) = if isSpace x then [] : f xs else ...
2022-07-31 17:41:20 +0200 <tomsmeding> if x is _not_ a space, you want to prepend x to the first word in 'f xs', right?
2022-07-31 17:41:43 +0200 <tomsmeding> '[x] : f xs' just adds a new word, containing just the single character x
2022-07-31 17:41:43 +0200 <[itchyjunk]> right
2022-07-31 17:41:48 +0200 <tomsmeding> so that's not what you want
2022-07-31 17:41:57 +0200 <tomsmeding> in fact, what if 'f xs' is the empty list?
2022-07-31 17:42:16 +0200 <tomsmeding> --> you need to look at the result of 'f xs', and based on whether it is empty or not, do something different
2022-07-31 17:43:45 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
2022-07-31 17:44:07 +0200califax(~califax@user/califx) (Remote host closed the connection)
2022-07-31 17:46:08 +0200 <tomsmeding> (indeed, if 'f xs' _is_ the empty list, then there is no such first word! Perhaps you have to create it)
2022-07-31 17:46:09 +0200zxx7529(~Thunderbi@user/zxx7529) (Remote host closed the connection)
2022-07-31 17:47:26 +0200 <[itchyjunk]> we did create "" in case the string was empty, now?
2022-07-31 17:47:29 +0200califax(~califax@user/califx)
2022-07-31 17:47:30 +0200 <[itchyjunk]> f [] = []
2022-07-31 17:49:12 +0200Kikroz(~Kikroz@5.214.161.240)
2022-07-31 17:49:30 +0200Kikroz(~Kikroz@5.214.161.240) (Client Quit)
2022-07-31 17:49:48 +0200 <merijn> > [] == ""
2022-07-31 17:49:50 +0200 <lambdabot> True
2022-07-31 17:50:11 +0200 <[itchyjunk]> oh, maybe i want to use head to refer to first word of f xs
2022-07-31 17:50:29 +0200 <[itchyjunk]> i can't think of a easy way to refer to first word in my f xs
2022-07-31 17:50:45 +0200 <merijn> [itchyjunk]: You want the first chunk of non-spaces, yeah?
2022-07-31 17:51:30 +0200 <[itchyjunk]> yes
2022-07-31 17:52:08 +0200 <merijn> You probably want one of:
2022-07-31 17:52:12 +0200 <merijn> :t takeWhile
2022-07-31 17:52:13 +0200 <lambdabot> (a -> Bool) -> [a] -> [a]
2022-07-31 17:52:15 +0200 <merijn> :t dropWhile
2022-07-31 17:52:16 +0200 <lambdabot> (a -> Bool) -> [a] -> [a]
2022-07-31 17:52:20 +0200 <merijn> :t span
2022-07-31 17:52:21 +0200 <lambdabot> (a -> Bool) -> [a] -> ([a], [a])
2022-07-31 17:52:32 +0200 <merijn> > span (<5) [1..10]
2022-07-31 17:52:33 +0200 <lambdabot> ([1,2,3,4],[5,6,7,8,9,10])
2022-07-31 17:52:46 +0200 <merijn> > span (/=
2022-07-31 17:52:48 +0200 <lambdabot> <hint>:1:9: error:
2022-07-31 17:52:48 +0200 <lambdabot> parse error (possibly incorrect indentation or mismatched brackets)
2022-07-31 17:52:54 +0200 <merijn> > span (/=' ') "foo bar baz"
2022-07-31 17:52:56 +0200 <lambdabot> ("foo"," bar baz")
2022-07-31 17:55:08 +0200 <monochrom> You can use "case f xs of w : ws -> ... ; [] -> ..." to access the first word of f xs.
2022-07-31 17:55:29 +0200 <monochrom> Bonus: You can also access the rest of the words! You can also access the no-words case!
2022-07-31 17:55:31 +0200wootehfoot(~wootehfoo@user/wootehfoot)
2022-07-31 17:56:07 +0200 <[itchyjunk]> These are nice alternatives, but i felt like i was close to getting this done without additional functions
2022-07-31 17:56:18 +0200 <[itchyjunk]> i'll make a note to try it with span after this
2022-07-31 17:56:26 +0200 <monochrom> But mine is not an alternative.
2022-07-31 17:56:38 +0200 <[itchyjunk]> oh
2022-07-31 17:57:15 +0200 <monochrom> You wanna access the first word of f xs? Well first you have to address what happens if there is no first word.
2022-07-31 17:57:32 +0200 <monochrom> Then the logical conclusion is you need pattern matching.
2022-07-31 17:57:42 +0200 <monochrom> And cover all cases.
2022-07-31 17:58:03 +0200acidjnk(~acidjnk@p200300d6e70586358424384a1bd111e9.dip0.t-ipconnect.de) (Ping timeout: 272 seconds)
2022-07-31 17:58:41 +0200haritz(~hrtz@82-69-11-11.dsl.in-addr.zen.co.uk)
2022-07-31 17:58:41 +0200haritz(~hrtz@82-69-11-11.dsl.in-addr.zen.co.uk) (Changing host)
2022-07-31 17:58:41 +0200haritz(~hrtz@user/haritz)
2022-07-31 18:00:06 +0200jchia[m](~jchiamatr@2001:470:69fc:105::c50b) (Quit: You have been kicked for being idle)
2022-07-31 18:00:17 +0200ereslibre[m](~ereslibre@2001:470:69fc:105::1:8f90) (Quit: You have been kicked for being idle)
2022-07-31 18:00:17 +0200shiraeeshi[m](~shiraeesh@2001:470:69fc:105::1:77) (Quit: You have been kicked for being idle)
2022-07-31 18:00:37 +0200 <[itchyjunk]> wouldn't f [] = [] one way of covering that case? i suppose i can drop that and go with case for the entire thing
2022-07-31 18:03:03 +0200 <onosendi> Is there a way to print anything to stdout, so I can `runhaskell foo.hs` instead of having to `:l foo.hs; somefunc;` ?
2022-07-31 18:03:04 +0200haritz(~hrtz@user/haritz) (Remote host closed the connection)
2022-07-31 18:03:16 +0200 <[itchyjunk]> `case f xs of w : ws` , so `case xs of []` says when xs is []
2022-07-31 18:03:39 +0200 <[itchyjunk]> but how is `case f xs of w : ws` looking at xs as (w:ws) ? hmm
2022-07-31 18:04:08 +0200 <[itchyjunk]> onosendi, isn't that where you have to wrap you code around IO somesuch?
2022-07-31 18:04:17 +0200 <[itchyjunk]> that was one thing that i was meant to learn :<
2022-07-31 18:04:54 +0200 <merijn> onosendi: runhaskell will (like regular programs) run "main :: IO ()"
2022-07-31 18:05:04 +0200 <merijn> onosendi: So, yes, if you call the printing code from main :p
2022-07-31 18:05:17 +0200sandydoo(~sandydoo@185.209.196.136) (Ping timeout: 252 seconds)
2022-07-31 18:05:29 +0200 <merijn> onosendi: Simplest example would be having foo.hs with: main = putStrLn "Hello World!"
2022-07-31 18:05:40 +0200 <merijn> onosendi: Which should, well, print hello world when you use runhaskell
2022-07-31 18:05:48 +0200califax(~califax@user/califx) (Ping timeout: 268 seconds)
2022-07-31 18:07:37 +0200califax(~califax@user/califx)
2022-07-31 18:07:52 +0200lisbeths(uid135845@id-135845.lymington.irccloud.com) (Quit: Connection closed for inactivity)
2022-07-31 18:08:20 +0200hellwolf(~hellwolf@7-41-50-84.sta.estpak.ee) (Remote host closed the connection)
2022-07-31 18:08:30 +0200 <ggVGc> This is a great read :) https://aphyr.com/posts/342-typing-the-technical-interview
2022-07-31 18:08:48 +0200jespada(~jespada@181.80.249.105) (Ping timeout: 268 seconds)
2022-07-31 18:09:12 +0200misterfish(~misterfis@87.215.131.98) (Ping timeout: 245 seconds)
2022-07-31 18:09:22 +0200 <[itchyjunk]> https://paste.tomsmeding.com/Kvmw35xE
2022-07-31 18:09:24 +0200tromp(~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
2022-07-31 18:09:45 +0200 <[itchyjunk]> it's not handeling the cases yet but i think that's what it might look like
2022-07-31 18:11:03 +0200 <[itchyjunk]> oh wait
2022-07-31 18:11:03 +0200Vajb(~Vajb@n1zigc3rgo9mpde2w-1.v6.elisa-mobile.fi) (Read error: Connection reset by peer)
2022-07-31 18:12:32 +0200coot(~coot@2a02:a310:e241:1b00:ec1a:e9df:79ac:66ba)
2022-07-31 18:13:30 +0200jespada(~jespada@45.162.228.187)
2022-07-31 18:14:32 +0200 <[itchyjunk]> can i use guard inside a case?
2022-07-31 18:14:36 +0200 <merijn> yes
2022-07-31 18:15:00 +0200 <[itchyjunk]> https://paste.tomsmeding.com/bqnaDjnN
2022-07-31 18:15:16 +0200 <[itchyjunk]> so my caes it lessing me know if there is a first word w or not
2022-07-31 18:15:19 +0200Vajb(~Vajb@n1zigc3rgo9mpde2w-1.v6.elisa-mobile.fi)
2022-07-31 18:15:43 +0200 <[itchyjunk]> if there is, then check if the first char of (x:xs) is not ' ' then you can attach it to the first word w ?
2022-07-31 18:21:24 +0200acidjnk(~acidjnk@p200300d6e70586358424384a1bd111e9.dip0.t-ipconnect.de)
2022-07-31 18:22:48 +0200 <onosendi> merijn: Yeah, but I can't print any type but a string, right? I'd like to https://gist.github.com/onosendi/cc23301dd780b75da9e53edfccadc7ff
2022-07-31 18:24:04 +0200 <merijn> onosendi: print :)
2022-07-31 18:24:08 +0200dcoutts(~duncan@host86-151-44-186.range86-151.btcentralplus.com)
2022-07-31 18:24:09 +0200 <merijn> % putStrLn 5
2022-07-31 18:24:10 +0200 <yahb2> <interactive>:78:10: error: ; • No instance for (Num String) arising from the literal ‘5’ ; • In the first argument of ‘putStrLn’, namely ‘5’ ; In the expression: putStrLn 5 ; I...
2022-07-31 18:24:12 +0200 <merijn> % print 5
2022-07-31 18:24:13 +0200 <yahb2> 5
2022-07-31 18:24:25 +0200 <merijn> :t putStrLn
2022-07-31 18:24:26 +0200 <lambdabot> String -> IO ()
2022-07-31 18:24:27 +0200 <merijn> :t print
2022-07-31 18:24:29 +0200 <lambdabot> Show a => a -> IO ()
2022-07-31 18:25:59 +0200 <onosendi> merijn: I swear I tried that :/ lol, thanks.
2022-07-31 18:27:22 +0200azimut(~azimut@gateway/tor-sasl/azimut) (Remote host closed the connection)
2022-07-31 18:27:33 +0200califax_(~califax@user/califx)
2022-07-31 18:27:57 +0200azimut(~azimut@gateway/tor-sasl/azimut)
2022-07-31 18:28:37 +0200califax(~califax@user/califx) (Ping timeout: 268 seconds)
2022-07-31 18:28:42 +0200califax_califax
2022-07-31 18:36:33 +0200sandydoo(~sandydoo@185.209.196.136)
2022-07-31 18:41:03 +0200yauhsien(~yauhsien@118-167-41-184.dynamic-ip.hinet.net)
2022-07-31 18:42:07 +0200wootehfoot(~wootehfoo@user/wootehfoot) (Ping timeout: 245 seconds)
2022-07-31 18:42:33 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection)
2022-07-31 18:43:13 +0200matthewmosior(~matthewmo@173.170.253.91) (Ping timeout: 244 seconds)
2022-07-31 18:45:48 +0200yauhsien(~yauhsien@118-167-41-184.dynamic-ip.hinet.net) (Ping timeout: 268 seconds)
2022-07-31 18:45:56 +0200tzh(~tzh@c-24-21-73-154.hsd1.wa.comcast.net)
2022-07-31 18:46:27 +0200 <Inst> also, a question
2022-07-31 18:46:36 +0200 <Inst> what advantages would a wordpress clone written in Haskell have?
2022-07-31 18:47:29 +0200 <[exa]> 0 exploits enabled by the sheer hackiness of PHP
2022-07-31 18:47:54 +0200 <monochrom> None.
2022-07-31 18:48:03 +0200 <Inst> I like monochrom's answer
2022-07-31 18:48:11 +0200 <[exa]> unfortunately PHP is a feature of wordpress
2022-07-31 18:48:33 +0200 <[itchyjunk]> the guard is breaking my function h i think
2022-07-31 18:48:34 +0200 <[itchyjunk]> https://bpa.st/36BQ
2022-07-31 18:48:38 +0200 <Inst> from what I've heard, apparently Warp/WAI is substantially faster than the PHP equivalent
2022-07-31 18:48:46 +0200 <[itchyjunk]> when i try just span on my ghci, it seems to somewhat work
2022-07-31 18:49:36 +0200 <[itchyjunk]> Prelude> fst (span (/= ' ') str) : snd (span (/= ' ') str) : []
2022-07-31 18:49:37 +0200 <[itchyjunk]> ["hello"," world"]
2022-07-31 18:49:40 +0200 <[exa]> [itchyjunk]: why you have the same guard condition on lines 23 and 24?
2022-07-31 18:49:51 +0200 <[itchyjunk]> oops!
2022-07-31 18:50:00 +0200 <Inst> in reality IHP would supplant a Haskell wordpress clone, no?
2022-07-31 18:50:02 +0200 <Inst> https://ihp.digitallyinduced.com
2022-07-31 18:50:08 +0200 <[itchyjunk]> well, i fixed that
2022-07-31 18:50:26 +0200 <[itchyjunk]> but that doesn't fix the gazillion errors :x
2022-07-31 18:52:28 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
2022-07-31 18:54:04 +0200 <[exa]> Inst: that's a bit more general IMO but you should be able to emulate wordpress in that pretty quickly
2022-07-31 18:57:06 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 264 seconds)
2022-07-31 18:57:21 +0200machinedgod(~machinedg@d172-219-86-154.abhsia.telus.net) (Ping timeout: 252 seconds)
2022-07-31 18:58:23 +0200 <Inst> hmmm
2022-07-31 18:58:28 +0200 <Inst> actually, i thought about it
2022-07-31 18:58:40 +0200 <Inst> I had a start-up idea, just need about 300k to execute and I don't have that in pocket ;_;
2022-07-31 18:58:54 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
2022-07-31 18:58:57 +0200 <Inst> I can change part of the set-up to adapt it to a wordpress clone and actually extend the features
2022-07-31 18:59:13 +0200 <Inst> the start-up idea was intended as an attack on Upwork and FiveRR, which charge 20%
2022-07-31 19:00:01 +0200 <Inst> i.e, decentralizing their model
2022-07-31 19:00:06 +0200haritz(~hrtz@2a02:8010:65b5:0:6009:6384:e3cb:2220)
2022-07-31 19:00:06 +0200haritz(~hrtz@2a02:8010:65b5:0:6009:6384:e3cb:2220) (Changing host)
2022-07-31 19:00:06 +0200haritz(~hrtz@user/haritz)
2022-07-31 19:00:06 +0200 <Inst> a decentralized wordpress would fly
2022-07-31 19:00:20 +0200 <Inst> "no content? Borrow other people's content instead!"
2022-07-31 19:01:27 +0200 <Inst> I was originally thinking something lame like "Monadpress" or "Monado", but "Joinable" is a subtle reference to the Monad typeclass
2022-07-31 19:01:34 +0200nate4(~nate@98.45.169.16)
2022-07-31 19:01:40 +0200 <Inst> and also suggests the collaborative nature of the software
2022-07-31 19:02:04 +0200 <Rembane> Sounds like a wiki hosted on many places
2022-07-31 19:02:17 +0200 <pavonia> @pl \f g x y -> f (g x) (g y) (f g y x)
2022-07-31 19:02:17 +0200 <lambdabot> ap (ap . (liftM2 ap .) . join . ((flip . ((.) .)) .) . (.)) (flip .)
2022-07-31 19:02:22 +0200 <pavonia> onosendi: ^
2022-07-31 19:03:01 +0200 <onosendi> pavonia: I don't know what any of that is, lol.
2022-07-31 19:03:41 +0200 <Inst> so this one would effectively be an attack on Medium
2022-07-31 19:03:54 +0200 <Inst> say, you look up a specific topic, but we could make it "idealistic", i.e, allow people to break out of the bubble
2022-07-31 19:04:22 +0200 <Inst> instead of merely seeing a conservative / leftist view on a subject, you'd see multiple subjects
2022-07-31 19:04:37 +0200 <Inst> erm, multiple viewpoints
2022-07-31 19:05:02 +0200 <Rembane> Sounds like the old blogosphere before the social networks/platforms ate the internet
2022-07-31 19:05:18 +0200 <Inst> it's weird trying to save democracy when I don't believe in it, in the best case, Churchill's quip about democracy being the worst form of government except all the others invented
2022-07-31 19:05:48 +0200econo(uid147250@user/econo)
2022-07-31 19:09:10 +0200tromp(~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
2022-07-31 19:09:26 +0200benin0(~benin@183.82.177.174) (Quit: The Lounge - https://thelounge.chat)
2022-07-31 19:09:33 +0200 <[exa]> Inst: can you instead believe in improving the world for free?
2022-07-31 19:12:23 +0200 <monochrom> Ugh why is that conversation in this channel?
2022-07-31 19:12:51 +0200 <[exa]> yeah it's at least for #-offtopic
2022-07-31 19:14:46 +0200lisbeths(uid135845@id-135845.lymington.irccloud.com)
2022-07-31 19:16:17 +0200motherfsck(~motherfsc@user/motherfsck) (Ping timeout: 245 seconds)
2022-07-31 19:21:48 +0200pavonia(~user@user/siracusa) (Quit: Bye!)
2022-07-31 19:21:57 +0200matthewmosior(~matthewmo@173.170.253.91)
2022-07-31 19:28:03 +0200 <Inst> thanks
2022-07-31 19:29:41 +0200motherfsck(~motherfsc@user/motherfsck)
2022-07-31 19:37:01 +0200tromp(~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
2022-07-31 19:38:53 +0200Kikroz(~Kikroz@5.214.144.252)
2022-07-31 19:39:10 +0200Kikroz(~Kikroz@5.214.144.252) (Client Quit)
2022-07-31 19:39:33 +0200 <Inst> why don't you get nested lists, itchyjunk?
2022-07-31 19:40:07 +0200 <Inst> the actual plan of the start-up idea, btw, is to allow companies to giggify their work environment in order to increase labor exploitation
2022-07-31 19:40:14 +0200 <Inst> while being kosher with overtime laws
2022-07-31 19:40:34 +0200 <Inst> also why do you even have nested lists
2022-07-31 19:42:34 +0200 <geekosaur> lists of String are necessarily nested lists
2022-07-31 19:43:05 +0200 <Inst> just as lists of Text are nested arrays?
2022-07-31 19:43:32 +0200 <geekosaur> it's more direct than thatm since a String is literally just a list of Char
2022-07-31 19:43:41 +0200 <geekosaur> s/thatm/that,
2022-07-31 19:44:05 +0200 <geekosaur> whereas Text hides its internal array (which differs from a list)
2022-07-31 19:44:53 +0200motherfsck(~motherfsc@user/motherfsck) (Ping timeout: 255 seconds)
2022-07-31 19:46:00 +0200 <c_wraith> Does anyone else feel like describing Haskell as "declarative" doesn't really make sense?
2022-07-31 19:47:26 +0200 <c_wraith> I keep seeing people do that. It's confusing. Operational semantics are a huge part of writing good code.
2022-07-31 19:47:28 +0200joo-_(~joo-_@172-105-65-159.ip.linodeusercontent.com)
2022-07-31 19:47:28 +0200joo-_(~joo-_@172-105-65-159.ip.linodeusercontent.com) (Changing host)
2022-07-31 19:47:28 +0200joo-_(~joo-_@fsf/member/joo--)
2022-07-31 19:47:30 +0200joo-__(~joo-_@fsf/member/joo--) (Quit: leaving)
2022-07-31 19:48:53 +0200jinsun__(~jinsun@user/jinsun)
2022-07-31 19:48:54 +0200jinsunGuest4466
2022-07-31 19:48:54 +0200Guest4466(~jinsun@user/jinsun) (Killed (sodium.libera.chat (Nickname regained by services)))
2022-07-31 19:48:54 +0200jinsun__jinsun
2022-07-31 19:53:28 +0200Guest3(~textual@pool-100-11-18-203.phlapa.fios.verizon.net)
2022-07-31 19:54:06 +0200 <[itchyjunk]> Inst, i don't know why i don't get them.
2022-07-31 19:54:21 +0200jinsun__(~jinsun@user/jinsun)
2022-07-31 19:54:21 +0200jinsun(~jinsun@user/jinsun) (Killed (tungsten.libera.chat (Nickname regained by services)))
2022-07-31 19:54:21 +0200jinsun__jinsun
2022-07-31 19:54:31 +0200 <Inst> think of a string as not a nested list
2022-07-31 19:54:34 +0200 <Inst> even though it is
2022-07-31 19:54:40 +0200 <Inst> think of a nested list as some other type within the list
2022-07-31 19:54:42 +0200 <Inst> oh
2022-07-31 19:54:44 +0200 <Inst> you don't get fmap
2022-07-31 19:54:47 +0200 <Inst> no?
2022-07-31 19:55:00 +0200 <[itchyjunk]> hmm i've used fmap and map once or twice
2022-07-31 19:55:02 +0200 <Inst> you don't get higher order functions in the context of a functor (which you haven't learned it)
2022-07-31 19:55:08 +0200ubert(~Thunderbi@178.165.165.213.wireless.dyn.drei.com)
2022-07-31 19:55:08 +0200 <[itchyjunk]> but i am not comfertable using them uet
2022-07-31 19:55:24 +0200Guest3(~textual@pool-100-11-18-203.phlapa.fios.verizon.net) (Changing host)
2022-07-31 19:55:24 +0200Guest3(~textual@user/polo)
2022-07-31 19:55:27 +0200Guest3Gambino
2022-07-31 19:55:29 +0200merijn(~merijn@86-86-29-250.fixed.kpn.net) (Ping timeout: 268 seconds)
2022-07-31 19:55:30 +0200 <[itchyjunk]> higher order function as in functions taking functions as parameter?
2022-07-31 19:55:43 +0200 <Inst> eventually you stop noticing that they're HOF
2022-07-31 19:55:43 +0200 <[itchyjunk]> that i have some understanding of. not sure how well i can use it but.
2022-07-31 19:55:46 +0200 <Inst> it's just natural
2022-07-31 19:55:56 +0200 <Inst> with lists you want to map them all the time
2022-07-31 19:56:04 +0200 <Inst> and if you're comfortable with foldr, you don't use manual recursion
2022-07-31 19:56:11 +0200 <Inst> apparently with continuation passing style
2022-07-31 19:56:29 +0200 <Inst> you can even operate on two lists, or operate on a single list, taking multiple elements as arguments
2022-07-31 19:57:27 +0200 <Inst> does that make any sense to you?
2022-07-31 19:57:52 +0200 <Inst> if you're not working on recursion, and just want to transform nested stuff within the list, get something that transforms nested stuff within the list and map / fmap onto the list
2022-07-31 20:01:19 +0200misterfish(~misterfis@ip214-130-173-82.adsl2.static.versatel.nl)
2022-07-31 20:02:05 +0200Lycurgus(~juan@user/Lycurgus)
2022-07-31 20:03:10 +0200Lord_of_Life(~Lord@user/lord-of-life/x-2819915) (Ping timeout: 240 seconds)
2022-07-31 20:03:21 +0200Lord_of_Life_(~Lord@user/lord-of-life/x-2819915)
2022-07-31 20:03:43 +0200nate4(~nate@98.45.169.16) (Ping timeout: 252 seconds)
2022-07-31 20:03:45 +0200Lycurgus(~juan@user/Lycurgus) (Client Quit)
2022-07-31 20:04:35 +0200Lord_of_Life_Lord_of_Life
2022-07-31 20:08:02 +0200motherfsck(~motherfsc@user/motherfsck)
2022-07-31 20:08:29 +0200misterfish(~misterfis@ip214-130-173-82.adsl2.static.versatel.nl) (Ping timeout: 252 seconds)
2022-07-31 20:11:21 +0200jinsun__(~jinsun@user/jinsun)
2022-07-31 20:11:21 +0200jinsunGuest5051
2022-07-31 20:11:21 +0200Guest5051(~jinsun@user/jinsun) (Killed (molybdenum.libera.chat (Nickname regained by services)))
2022-07-31 20:11:21 +0200jinsun__jinsun
2022-07-31 20:11:27 +0200vglfr(~vglfr@194.9.14.33) (Ping timeout: 244 seconds)
2022-07-31 20:12:31 +0200dknite(~dknite@223.176.55.39) (Ping timeout: 252 seconds)
2022-07-31 20:12:49 +0200jinsun(~jinsun@user/jinsun) (Client Quit)
2022-07-31 20:13:37 +0200vglfr(~vglfr@194.9.14.33)
2022-07-31 20:16:39 +0200sonologico(~raphael@dhcp-077-251-118-129.chello.nl)
2022-07-31 20:17:57 +0200vglfr(~vglfr@194.9.14.33) (Ping timeout: 245 seconds)
2022-07-31 20:18:37 +0200zxx7529(~Thunderbi@user/zxx7529)
2022-07-31 20:19:34 +0200Gambino(~textual@user/polo) (Killed (zirconium.libera.chat (Nickname regained by services)))
2022-07-31 20:21:49 +0200merijn(~merijn@86-86-29-250.fixed.kpn.net)
2022-07-31 20:22:56 +0200vglfr(~vglfr@194.9.14.33)
2022-07-31 20:23:48 +0200ystael(~ystael@user/ystael)
2022-07-31 20:24:21 +0200Igloo(~ian@matrix.chaos.earth.li) (Ping timeout: 272 seconds)
2022-07-31 20:24:31 +0200Igloo(~ian@matrix.chaos.earth.li)
2022-07-31 20:24:38 +0200coot(~coot@2a02:a310:e241:1b00:ec1a:e9df:79ac:66ba) (Quit: coot)
2022-07-31 20:26:17 +0200matthewmosior(~matthewmo@173.170.253.91) (Ping timeout: 245 seconds)
2022-07-31 20:26:58 +0200Pickchea(~private@user/pickchea)
2022-07-31 20:28:08 +0200vglfr(~vglfr@194.9.14.33) (Read error: Connection reset by peer)
2022-07-31 20:29:54 +0200vglfr(~vglfr@194.9.14.33)
2022-07-31 20:30:43 +0200hellwolf(~hellwolf@7-41-50-84.sta.estpak.ee)
2022-07-31 20:31:26 +0200hellwolf(~hellwolf@7-41-50-84.sta.estpak.ee) (Remote host closed the connection)
2022-07-31 20:32:01 +0200Guest3(~textual@pool-100-11-18-203.phlapa.fios.verizon.net)
2022-07-31 20:32:01 +0200vglfr(~vglfr@194.9.14.33) (Read error: Connection reset by peer)
2022-07-31 20:32:28 +0200vglfr(~vglfr@194.9.14.33)
2022-07-31 20:32:44 +0200Guest3(~textual@pool-100-11-18-203.phlapa.fios.verizon.net) (Changing host)
2022-07-31 20:32:44 +0200Guest3(~textual@user/polo)
2022-07-31 20:32:46 +0200Guest3Gambino
2022-07-31 20:35:01 +0200hellwolf(~hellwolf@7-41-50-84.sta.estpak.ee)
2022-07-31 20:36:21 +0200jmdaemon(~jmdaemon@user/jmdaemon)
2022-07-31 20:37:57 +0200sonologico(~raphael@dhcp-077-251-118-129.chello.nl) (Ping timeout: 245 seconds)
2022-07-31 20:38:47 +0200vglfr(~vglfr@194.9.14.33) (Ping timeout: 245 seconds)
2022-07-31 20:39:03 +0200jinsun(~jinsun@user/jinsun)
2022-07-31 20:39:11 +0200vglfr(~vglfr@194.9.14.33)
2022-07-31 20:39:17 +0200azimut(~azimut@gateway/tor-sasl/azimut) (Remote host closed the connection)
2022-07-31 20:39:26 +0200matthewmosior(~matthewmo@173.170.253.91)
2022-07-31 20:40:00 +0200azimut(~azimut@gateway/tor-sasl/azimut)
2022-07-31 20:43:44 +0200Gambino(~textual@user/polo) (Killed (tungsten.libera.chat (Nickname regained by services)))
2022-07-31 20:43:59 +0200matthewmosior(~matthewmo@173.170.253.91) (Ping timeout: 244 seconds)
2022-07-31 20:50:23 +0200Guest3(~textual@pool-100-11-18-203.phlapa.fios.verizon.net)
2022-07-31 20:50:24 +0200Guest3(~textual@pool-100-11-18-203.phlapa.fios.verizon.net) (Changing host)
2022-07-31 20:50:24 +0200Guest3(~textual@user/polo)
2022-07-31 20:50:28 +0200Guest3Gambino
2022-07-31 20:52:00 +0200gpncarl(uid562772@id-562772.ilkley.irccloud.com) (Quit: Connection closed for inactivity)
2022-07-31 20:52:55 +0200Sgeo(~Sgeo@user/sgeo)
2022-07-31 20:54:24 +0200GambinoSINH
2022-07-31 20:55:53 +0200merijn(~merijn@86-86-29-250.fixed.kpn.net) (Ping timeout: 244 seconds)
2022-07-31 20:56:31 +0200matthewmosior(~matthewmo@173.170.253.91)
2022-07-31 20:56:37 +0200SINHGambino
2022-07-31 20:56:55 +0200z0k(~z0k@206.84.140.97) (Quit: WeeChat 3.5)
2022-07-31 20:58:20 +0200Gambino(~textual@user/polo) (Quit: Textual IRC Client: www.textualapp.com)
2022-07-31 20:58:27 +0200Milan(~Milan@46.245.111.222)
2022-07-31 20:59:39 +0200coot(~coot@213.134.190.95)
2022-07-31 21:03:58 +0200zxx7529(~Thunderbi@user/zxx7529) (Quit: zxx7529)
2022-07-31 21:06:25 +0200kenran(~kenran@200116b82b2ba4000565c63a08218b7b.dip.versatel-1u1.de)
2022-07-31 21:07:53 +0200mon_aaraj(~MonAaraj@user/mon-aaraj/x-4416475) (Ping timeout: 252 seconds)
2022-07-31 21:09:05 +0200merijn(~merijn@86-86-29-250.fixed.kpn.net)
2022-07-31 21:12:10 +0200azimut(~azimut@gateway/tor-sasl/azimut) (Remote host closed the connection)
2022-07-31 21:13:48 +0200merijn(~merijn@86-86-29-250.fixed.kpn.net) (Ping timeout: 268 seconds)
2022-07-31 21:13:53 +0200azimut(~azimut@gateway/tor-sasl/azimut)
2022-07-31 21:18:14 +0200tromp(~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
2022-07-31 21:18:25 +0200Milan(~Milan@46.245.111.222) (Quit: Client closed)
2022-07-31 21:23:21 +0200tromp(~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
2022-07-31 21:23:50 +0200Jeanne-Kamikaze(~Jeanne-Ka@142.147.89.233)
2022-07-31 21:24:56 +0200 <monochrom> c_wraith: I used to say that Haskell was declarative. Now I say that relatively it's a bit more declarative than let's say the Algol kind of languages, but of course compared to Prolog Haskell doesn't look declarative.
2022-07-31 21:25:16 +0200 <dolio> Is prolog really declarative, though?
2022-07-31 21:25:17 +0200bontaq(~user@ool-45779fe5.dyn.optonline.net)
2022-07-31 21:25:31 +0200sandydoo(~sandydoo@185.209.196.136) (Ping timeout: 268 seconds)
2022-07-31 21:26:21 +0200 <monochrom> I'm tall when I stand next to someone 5-feet. And it's just because I'm like 1 or 2 inches taller.
2022-07-31 21:26:39 +0200 <monochrom> Then when I stand next to a 6-feet person I'm not tall at all.
2022-07-31 21:26:59 +0200 <monochrom> But is 6-feet really tall though? >:)
2022-07-31 21:27:25 +0200 <darkling> Depends on whether you're Dutch or not.
2022-07-31 21:27:26 +0200 <dolio> The argument above kind of applies to anything.
2022-07-31 21:27:50 +0200 <dolio> Prolog is declarative, but if you want to write good programs, you need to care about its operational semantics.
2022-07-31 21:28:06 +0200 <c_wraith> I was just thinking this morning - one of my favorite comedy groups had a former member who was like 6'9", but nobody realized it because everyone else in the group was also really tall, so he just looked a little tall relatively.
2022-07-31 21:28:48 +0200 <dolio> Same with SQL.
2022-07-31 21:29:55 +0200 <c_wraith> conclusion: you will always eventually care about performance, at which point operational concerns start showing up where you care about the "how" as much as the "what"
2022-07-31 21:29:59 +0200Pickchea(~private@user/pickchea) (Ping timeout: 244 seconds)
2022-07-31 21:30:02 +0200vglfr(~vglfr@194.9.14.33) (Ping timeout: 245 seconds)
2022-07-31 21:30:22 +0200mon_aaraj(~MonAaraj@user/mon-aaraj/x-4416475)
2022-07-31 21:30:24 +0200 <dolio> Yeah, I'm not sure we're anywhere close to "declarative" programming if that's the criteria.
2022-07-31 21:31:33 +0200 <dolio> You need something like the Conor McBride dream, where you just write the types, and the computer is good enough to figure out a good program.
2022-07-31 21:32:24 +0200 <EvanR> there's this niche area of programming where you write in dynamic webdev languages with terrible performance, with no possibility of making it perform better, and it somehow works xD
2022-07-31 21:32:59 +0200 <dolio> Eventually you have to care even with those.
2022-07-31 21:33:04 +0200 <EvanR> if they were simply declarative instead of imperative it would seem to defy this logic that you eventually need operational semantics
2022-07-31 21:33:42 +0200 <monochrom> My dream exceeds that. In my dream, the type also includes time bounds.
2022-07-31 21:34:01 +0200 <dolio> Sure, that's even better.
2022-07-31 21:34:07 +0200dos__^^(~user@user/dos/x-1723657) (Ping timeout: 244 seconds)
2022-07-31 21:34:31 +0200 <monochrom> 20 years ago I thought my dream would come true in my life time. Now I don't think so. :)
2022-07-31 21:34:41 +0200 <EvanR> the type includes the time bounds, the space bounds, the whatever I care about this week bounds, ...?
2022-07-31 21:34:53 +0200 <monochrom> But it's my fault! I procrastinated and didn't work on it!
2022-07-31 21:35:12 +0200gmg(~user@user/gehmehgeh) (Quit: Leaving)
2022-07-31 21:35:36 +0200 <dolio> Some people right now probably think that it'll happen in your lifetime. But I think they're probably wrong.
2022-07-31 21:36:28 +0200 <monochrom> EvanR: My dream stops at time and space bounds. One day someone will add electricity bounds and/or "no variation so side-channel attacks are eliminated".
2022-07-31 21:36:53 +0200 <monochrom> Hell, I think I was wrong :)
2022-07-31 21:37:38 +0200 <EvanR> yeah security bounds
2022-07-31 21:38:05 +0200 <EvanR> which patents this does or does not infringe on bounds
2022-07-31 21:38:18 +0200 <EvanR> DRM type system xD
2022-07-31 21:38:37 +0200 <EvanR> compiler guarantees you never compute any illegal primes
2022-07-31 21:38:38 +0200 <Rembane> There should be loads of money in it
2022-07-31 21:40:19 +0200martin02(~silas@141.84.69.76) (Ping timeout: 244 seconds)
2022-07-31 21:42:07 +0200 <hpc> thanks to relativity, sufficiently large electricity bounds are indistinguishable from time and space bounds :D
2022-07-31 21:44:25 +0200causal(~user@50.35.83.177)
2022-07-31 21:44:33 +0200azimut(~azimut@gateway/tor-sasl/azimut) (Remote host closed the connection)
2022-07-31 21:44:59 +0200azimut(~azimut@gateway/tor-sasl/azimut)
2022-07-31 21:45:01 +0200 <monochrom> hahaha
2022-07-31 21:45:38 +0200 <hololeap> using parsec, when you run a parser inside a parser e.g. you parse some string fragment and want to run another parser on it, is there a way to throw any resulting ParseError inside the larger parser?
2022-07-31 21:45:48 +0200 <hololeap> sorry if the question is confusing
2022-07-31 21:45:51 +0200sandydoo(~sandydoo@185.209.196.136)
2022-07-31 21:46:47 +0200machinedgod(~machinedg@d172-219-86-154.abhsia.telus.net)
2022-07-31 21:47:20 +0200 <hololeap> it really boils down to: ? :: ParseError -> ParsecT s u m a
2022-07-31 21:47:41 +0200 <monochrom> ParsecT is an instance of MonadError, so I guess throwError
2022-07-31 21:48:04 +0200 <monochrom> Err no, I misread.
2022-07-31 21:48:12 +0200 <hololeap> the best I have so far is `fail . show`
2022-07-31 21:48:51 +0200azimut_(~azimut@gateway/tor-sasl/azimut)
2022-07-31 21:50:02 +0200tromp(~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
2022-07-31 21:50:16 +0200azimut(~azimut@gateway/tor-sasl/azimut) (Ping timeout: 268 seconds)
2022-07-31 21:53:16 +0200Henkru(henkru@kapsi.fi) (Ping timeout: 268 seconds)
2022-07-31 21:53:24 +0200martin02(~silas@141.84.69.76)
2022-07-31 21:55:20 +0200yauhsien(~yauhsien@118-167-41-184.dynamic-ip.hinet.net)
2022-07-31 21:56:35 +0200Henkru(henkru@kapsi.fi)
2022-07-31 21:58:21 +0200 <monochrom> Given ParseError, you can make Reply s u a, then you can make Consumed (m (Reply s u a)), then you can use mkPT. "Low-level creation of the ParsecT type. You really shouldn't have to do this." >:)
2022-07-31 21:58:47 +0200matthewmosior(~matthewmo@173.170.253.91) (Ping timeout: 245 seconds)
2022-07-31 21:59:57 +0200yauhsien(~yauhsien@118-167-41-184.dynamic-ip.hinet.net) (Ping timeout: 244 seconds)
2022-07-31 22:00:55 +0200 <hpc> there's a more direct way with Text.Parsec.Prim - https://hackage.haskell.org/package/parsec-3.1.15.1/docs/src/Text.Parsec.Prim.html#parserFail
2022-07-31 22:01:04 +0200 <hpc> write a function like that, but without all the "turn string into error" stuff
2022-07-31 22:02:00 +0200 <hpc> \err -> ParsecT $ \_ _ _ h -> h err
2022-07-31 22:02:07 +0200 <hpc> pretty sure that should work?
2022-07-31 22:03:54 +0200 <monochrom> yeah
2022-07-31 22:04:38 +0200pavonia(~user@user/siracusa)
2022-07-31 22:05:05 +0200ubert(~Thunderbi@178.165.165.213.wireless.dyn.drei.com) (Ping timeout: 252 seconds)
2022-07-31 22:06:46 +0200 <hololeap> ok, but where do I get an exported ParsecT constructor?
2022-07-31 22:08:07 +0200Pickchea(~private@user/pickchea)
2022-07-31 22:08:50 +0200 <monochrom> Hrm, I think none. I guess back to the mkPT idea :)
2022-07-31 22:09:17 +0200 <hololeap> haha, maybe there's a bug about this
2022-07-31 22:11:14 +0200azimut_(~azimut@gateway/tor-sasl/azimut) (Ping timeout: 268 seconds)
2022-07-31 22:11:55 +0200mon_aaraj(~MonAaraj@user/mon-aaraj/x-4416475) (Ping timeout: 260 seconds)
2022-07-31 22:14:10 +0200 <sm> switch to megaparsec ?
2022-07-31 22:17:52 +0200lisbeths(uid135845@id-135845.lymington.irccloud.com) (Quit: Connection closed for inactivity)
2022-07-31 22:20:41 +0200 <sm> how would you debug this: "cabal: Failed to build hledger-1.26.1 ... The build process segfaulted (i.e. SIGSEGV).", on github actions ?
2022-07-31 22:24:10 +0200Lycurgus(~juan@user/Lycurgus)
2022-07-31 22:24:47 +0200 <Lycurgus> identify what actually segfaulted?
2022-07-31 22:25:38 +0200 <Lycurgus> btw if I hadn't looked at hledger in about 5 y what would be the bullet points?
2022-07-31 22:26:01 +0200 <Lycurgus> also are you, sm, the author of haddock?
2022-07-31 22:26:45 +0200 <sm> here's a log, https://github.com/simonmichael/hledger/runs/7599626109?check_suite_focus=true . There's no other error output. It fails on different packages at different times.
2022-07-31 22:26:46 +0200 <Lycurgus> i don't really want stuff like build processes entangled with somebody else's shit
2022-07-31 22:26:48 +0200tromp(~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
2022-07-31 22:26:59 +0200 <Lycurgus> in this case microsoft i take it
2022-07-31 22:27:03 +0200 <sm> no, I didn't write haddock
2022-07-31 22:27:08 +0200 <Lycurgus> (the owner of github)
2022-07-31 22:27:10 +0200 <Lycurgus> ah
2022-07-31 22:27:19 +0200 <Lycurgus> another simon i think
2022-07-31 22:27:24 +0200 <sm> and I deny all other allegations
2022-07-31 22:27:39 +0200 <sm> Simon Marlow perhaps
2022-07-31 22:27:48 +0200matthewmosior(~matthewmo@173.170.253.91)
2022-07-31 22:27:57 +0200 <Lycurgus> who is not you
2022-07-31 22:28:12 +0200 <sm> Lycurgus re hledger, what are you familiar with ? Ledger ? old hledger ? gnucash ?
2022-07-31 22:28:18 +0200 <Lycurgus> being simon michael
2022-07-31 22:28:38 +0200 <Lycurgus> hledger c. '2014/5
2022-07-31 22:29:07 +0200 <Lycurgus> and the cli ledger ecosys generally of that time
2022-07-31 22:29:43 +0200 <sm> whew, 8 years.. summarising that is a bit of work
2022-07-31 22:29:59 +0200 <Lycurgus> alpine looks like bad news
2022-07-31 22:30:10 +0200 <sm> its like Ledger implemented in more depth, more robustly, with better UX
2022-07-31 22:30:31 +0200 <Lycurgus> well i was running hledger-web at one point
2022-07-31 22:30:45 +0200 <Lycurgus> it used to be a pain to build
2022-07-31 22:30:55 +0200 <Lycurgus> well not a pain but not a snap either
2022-07-31 22:31:05 +0200 <sm> building should be routine on non-exotic platforms
2022-07-31 22:31:16 +0200 <sm> and there are more binaries these days
2022-07-31 22:31:43 +0200 <Lycurgus> yesod based iirc
2022-07-31 22:32:05 +0200 <Lycurgus> (the web part)
2022-07-31 22:32:24 +0200 <Lycurgus> maybe misremember and it was just wai
2022-07-31 22:32:27 +0200 <sm> back then building yesod was a bit scary probably, not today
2022-07-31 22:32:34 +0200michalz(~michalz@185.246.204.97)
2022-07-31 22:33:46 +0200 <Lycurgus> anyway that's my guess base OS elements not playing nice with your build/ci intentions
2022-07-31 22:34:40 +0200 <sm> thanks.. that doesn't narrow it down too much. It was building fine before of course
2022-07-31 22:35:03 +0200 <sm> guess I'll try an older ghc
2022-07-31 22:36:00 +0200merijn(~merijn@86-86-29-250.fixed.kpn.net)
2022-07-31 22:36:07 +0200 <sm> and indeed I don't know why it needs to be alpine, I could try changing that
2022-07-31 22:37:05 +0200 <monochrom> If you didn't choose alpine but something/someone did, it's probably because alpine is reputed to be a very minimal and friendly-to-static-linking linux.
2022-07-31 22:41:34 +0200 <sm> yes that sounds right monochrom
2022-07-31 22:42:08 +0200 <sm> looking more carefully, it mostly does fail in the same place, Hledger.Cli.DocFiles, or another package, both of which probably involve TH/QQ. That could be a clue
2022-07-31 22:42:30 +0200 <sm> more troubleshooting next time
2022-07-31 22:49:34 +0200bitdex(~bitdex@gateway/tor-sasl/bitdex) (Remote host closed the connection)
2022-07-31 22:49:34 +0200califax(~califax@user/califx) (Remote host closed the connection)
2022-07-31 22:49:34 +0200noteness(~noteness@user/noteness) (Remote host closed the connection)
2022-07-31 22:49:34 +0200stiell_(~stiell@gateway/tor-sasl/stiell) (Remote host closed the connection)
2022-07-31 22:49:34 +0200ChaiTRex(~ChaiTRex@user/chaitrex) (Remote host closed the connection)
2022-07-31 22:50:14 +0200stiell_(~stiell@gateway/tor-sasl/stiell)
2022-07-31 22:50:20 +0200califax(~califax@user/califx)
2022-07-31 22:50:25 +0200noteness(~noteness@user/noteness)
2022-07-31 22:50:38 +0200ChaiTRex(~ChaiTRex@user/chaitrex)
2022-07-31 22:50:44 +0200bitdex(~bitdex@gateway/tor-sasl/bitdex)
2022-07-31 22:51:51 +0200tromp(~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
2022-07-31 22:54:42 +0200tromp(~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
2022-07-31 22:55:09 +0200jpds1(~jpds@gateway/tor-sasl/jpds) (Remote host closed the connection)
2022-07-31 22:55:09 +0200ChaiTRex(~ChaiTRex@user/chaitrex) (Write error: Connection reset by peer)
2022-07-31 22:55:09 +0200califax(~califax@user/califx) (Write error: Connection reset by peer)
2022-07-31 22:55:09 +0200FinnElija(~finn_elij@user/finn-elija/x-0085643) (Write error: Connection reset by peer)
2022-07-31 22:55:42 +0200ChaiTRex(~ChaiTRex@user/chaitrex)
2022-07-31 22:55:45 +0200FinnElija(~finn_elij@user/finn-elija/x-0085643)
2022-07-31 22:55:53 +0200jpds1(~jpds@gateway/tor-sasl/jpds)
2022-07-31 22:58:05 +0200califax(~califax@user/califx)
2022-07-31 23:00:54 +0200Inst(~Inst@2601:6c4:4080:3f80:d998:768b:c35b:a535) (Ping timeout: 244 seconds)
2022-07-31 23:00:57 +0200johnw(~johnw@76-234-69-149.lightspeed.frokca.sbcglobal.net) (Quit: ZNC - http://znc.in)
2022-07-31 23:02:26 +0200Pickchea(~private@user/pickchea) (Quit: Leaving)
2022-07-31 23:04:06 +0200michalz(~michalz@185.246.204.97) (Remote host closed the connection)
2022-07-31 23:08:09 +0200phma(~phma@host-67-44-208-60.hnremote.net) (Read error: Connection reset by peer)
2022-07-31 23:10:21 +0200merijn(~merijn@86-86-29-250.fixed.kpn.net) (Ping timeout: 252 seconds)
2022-07-31 23:10:21 +0200kenran(~kenran@200116b82b2ba4000565c63a08218b7b.dip.versatel-1u1.de) (Quit: WeeChat info:version)
2022-07-31 23:13:17 +0200Jeanne-Kamikaze(~Jeanne-Ka@142.147.89.233) (Quit: Leaving)
2022-07-31 23:19:03 +0200hellwolf(~hellwolf@7-41-50-84.sta.estpak.ee) (Remote host closed the connection)
2022-07-31 23:19:18 +0200hellwolf(~hellwolf@7-41-50-84.sta.estpak.ee)
2022-07-31 23:20:27 +0200shriekingnoise(~shrieking@186.137.167.202)
2022-07-31 23:24:21 +0200 <pavonia> Is it worth optimizing Integer operations for bit operations (bitshifts etc.)? I'm not sure if they are even implemented efficiently for Integer or if the compiler optimizes them on its own
2022-07-31 23:25:02 +0200phma(phma@2001:5b0:2144:59f8:a0f0:98d:a9a7:a552)
2022-07-31 23:25:18 +0200phma(phma@2001:5b0:2144:59f8:a0f0:98d:a9a7:a552) (Read error: Connection reset by peer)
2022-07-31 23:25:41 +0200smthinks it's probably https://gitlab.haskell.org/ghc/ghc/-/issues/20266
2022-07-31 23:25:46 +0200phma(~phma@host-67-44-208-130.hnremote.net)
2022-07-31 23:32:08 +0200matthewmosior(~matthewmo@173.170.253.91) (Ping timeout: 255 seconds)
2022-07-31 23:38:03 +0200jonathanx(~jonathan@h-178-174-176-109.A357.priv.bahnhof.se)
2022-07-31 23:40:14 +0200FinnElija(~finn_elij@user/finn-elija/x-0085643) (Remote host closed the connection)
2022-07-31 23:42:43 +0200tromp(~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
2022-07-31 23:43:47 +0200FinnElija(~finn_elij@user/finn-elija/x-0085643)
2022-07-31 23:46:22 +0200matthewmosior(~matthewmo@173.170.253.91)
2022-07-31 23:50:36 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection)
2022-07-31 23:52:58 +0200jpds1(~jpds@gateway/tor-sasl/jpds) (Remote host closed the connection)
2022-07-31 23:53:37 +0200jpds1(~jpds@gateway/tor-sasl/jpds)
2022-07-31 23:59:12 +0200 <dsal> pavonia: Does the profiler tell you that you're spending enough time on these operations that optimizing them would yield a noticeable performance improvement to your user?
2022-07-31 23:59:35 +0200waleee(~waleee@2001:9b0:213:7200:cc36:a556:b1e8:b340)