Home liberachat/#haskell: Logs Calendar

Logs on 2024-06-02 (liberachat/#haskell)

00:07:44 pavonia joins (~user@user/siracusa)
00:18:22 × mhatta quits (~mhatta@www21123ui.sakura.ne.jp) (Remote host closed the connection)
00:19:20 × chexum quits (~quassel@gateway/tor-sasl/chexum) (Remote host closed the connection)
00:19:20 × FinnElija quits (~finn_elij@user/finn-elija/x-0085643) (Read error: Connection reset by peer)
00:19:20 × califax quits (~califax@user/califx) (Read error: Connection reset by peer)
00:19:20 × chiselfuse quits (~chiselfus@user/chiselfuse) (Read error: Connection reset by peer)
00:19:37 chexum joins (~quassel@gateway/tor-sasl/chexum)
00:19:45 califax joins (~califax@user/califx)
00:20:02 FinnElija joins (~finn_elij@user/finn-elija/x-0085643)
00:20:23 chiselfuse joins (~chiselfus@user/chiselfuse)
00:23:43 mhatta joins (~mhatta@www21123ui.sakura.ne.jp)
00:23:46 × Lord_of_Life quits (~Lord@user/lord-of-life/x-2819915) (Ping timeout: 246 seconds)
00:24:18 Lord_of_Life joins (~Lord@user/lord-of-life/x-2819915)
00:47:28 × Midjak quits (~MarciZ@82.66.147.146) (Quit: Leaving)
01:22:28 szkl joins (uid110435@id-110435.uxbridge.irccloud.com)
01:24:23 × waleee quits (~waleee@h-176-10-144-38.NA.cust.bahnhof.se) (Ping timeout: 268 seconds)
01:35:10 × troydm quits (~troydm@user/troydm) (Ping timeout: 268 seconds)
01:50:54 machinedgod joins (~machinedg@d173-183-246-216.abhsia.telus.net)
01:59:40 × machinedgod quits (~machinedg@d173-183-246-216.abhsia.telus.net) (Ping timeout: 246 seconds)
02:05:04 × op_4 quits (~tslil@user/op-4/x-9116473) (Remote host closed the connection)
02:05:35 op_4 joins (~tslil@user/op-4/x-9116473)
02:16:16 × son0p quits (~ff@186.121.56.64) (Ping timeout: 260 seconds)
02:34:55 × Unicorn_Princess quits (~Unicorn_P@user/Unicorn-Princess/x-3540542) (Remote host closed the connection)
02:50:43 × td_ quits (~td@i53870928.versanet.de) (Ping timeout: 268 seconds)
02:52:02 td_ joins (~td@i53870901.versanet.de)
03:04:09 peterbecich joins (~Thunderbi@syn-047-229-123-186.res.spectrum.com)
03:08:36 × peterbecich quits (~Thunderbi@syn-047-229-123-186.res.spectrum.com) (Ping timeout: 268 seconds)
03:12:18 peterbecich joins (~Thunderbi@syn-047-229-123-186.res.spectrum.com)
03:17:14 × peterbecich quits (~Thunderbi@syn-047-229-123-186.res.spectrum.com) (Ping timeout: 268 seconds)
03:20:39 peterbecich joins (~Thunderbi@syn-047-229-123-186.res.spectrum.com)
03:27:40 × Rodney_ quits (~Rodney@176.254.244.83) (Ping timeout: 260 seconds)
03:31:54 × szkl quits (uid110435@id-110435.uxbridge.irccloud.com) (Quit: Connection closed for inactivity)
03:50:13 × peterbecich quits (~Thunderbi@syn-047-229-123-186.res.spectrum.com) (Ping timeout: 268 seconds)
03:50:16 Garbanzo joins (~Garbanzo@2602:304:6eac:dc10:fbf2:b01f:1d47:7542)
03:55:09 × aforemny quits (~aforemny@2001:9e8:6ce2:0:e082:74dd:a9a3:528e) (Ping timeout: 268 seconds)
03:55:24 aforemny_ joins (~aforemny@i59F516D1.versanet.de)
04:09:23 × chiselfuse quits (~chiselfus@user/chiselfuse) (Remote host closed the connection)
04:10:17 chiselfuse joins (~chiselfus@user/chiselfuse)
04:12:50 × FinnElija quits (~finn_elij@user/finn-elija/x-0085643) (Ping timeout: 260 seconds)
04:13:49 FinnElija joins (~finn_elij@user/finn-elija/x-0085643)
04:16:21 philopsos1 joins (~caecilius@user/philopsos)
04:24:56 son0p joins (~ff@167.0.161.21)
04:26:50 lol__ is now known as jcarpenter2
04:38:39 × mulk quits (~mulk@p5b112e4a.dip0.t-ipconnect.de) (Ping timeout: 256 seconds)
04:40:53 mulk joins (~mulk@p5b2dc1a2.dip0.t-ipconnect.de)
04:43:10 andrei_n joins (~andrei_n@2a02:a03f:c091:a800:fde8:6a4:b1d:60ec)
04:44:27 × andrei_n quits (~andrei_n@2a02:a03f:c091:a800:fde8:6a4:b1d:60ec) (Client Quit)
05:04:59 × leah2 quits (~leah@vuxu.org) (Ping timeout: 260 seconds)
05:08:51 × philopsos1 quits (~caecilius@user/philopsos) (Ping timeout: 268 seconds)
05:37:00 tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
05:37:36 × tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Client Quit)
05:39:55 × xdminsy quits (~xdminsy@117.147.70.212) (Quit: Konversation terminated!)
05:40:21 xdminsy joins (~xdminsy@117.147.70.212)
05:49:32 × euphores quits (~SASL_euph@user/euphores) (Quit: Leaving.)
05:49:49 takuan joins (~takuan@178-116-218-225.access.telenet.be)
05:54:10 euphores joins (~SASL_euph@user/euphores)
05:56:32 wheatengineer joins (~frederik@p200300f63f4e89007666e2f77a3735a1.dip0.t-ipconnect.de)
06:03:08 philopsos1 joins (~caecilius@user/philopsos)
06:05:23 × causal quits (~eric@50.35.88.207) (Quit: WeeChat 4.1.1)
06:12:11 tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
06:21:51 raehik joins (~raehik@rdng-25-b2-v4wan-169990-cust1344.vm39.cable.virginm.net)
06:21:55 × poscat quits (~poscat@user/poscat) (Ping timeout: 268 seconds)
06:22:07 × tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
06:22:23 poscat joins (~poscat@user/poscat)
06:22:56 tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
06:57:51 wheatengineer-fa joins (~frederik@193.32.248.193)
07:00:01 × tt1231097 quits (~tt1231@2603:6010:8700:4a81:219f:50d3:618a:a6ee) (Quit: The Lounge - https://thelounge.chat)
07:00:13 robobub joins (uid248673@id-248673.uxbridge.irccloud.com)
07:00:19 × wheatengineer quits (~frederik@p200300f63f4e89007666e2f77a3735a1.dip0.t-ipconnect.de) (Read error: Connection reset by peer)
07:01:40 wheatengineer joins (~frederik@p200300f63f4e89007666e2f77a3735a1.dip0.t-ipconnect.de)
07:02:51 tt1231097 joins (~tt1231@2603:6010:8700:4a81:219f:50d3:618a:a6ee)
07:03:28 × wheatengineer-fa quits (~frederik@193.32.248.193) (Ping timeout: 246 seconds)
07:04:47 × philopsos1 quits (~caecilius@user/philopsos) (Ping timeout: 264 seconds)
07:05:09 mei joins (~mei@user/mei)
07:07:24 andrewboltachev joins (~andrey@178.141.226.53)
07:09:30 × raehik quits (~raehik@rdng-25-b2-v4wan-169990-cust1344.vm39.cable.virginm.net) (Quit: WeeChat 4.2.2)
07:22:43 × wheatengineer quits (~frederik@p200300f63f4e89007666e2f77a3735a1.dip0.t-ipconnect.de) (Ping timeout: 246 seconds)
07:28:19 × mei quits (~mei@user/mei) (Ping timeout: 246 seconds)
07:29:22 mei joins (~mei@user/mei)
07:38:19 cheater joins (~Username@user/cheater)
07:43:54 ddellacosta joins (~ddellacos@ool-44c73d29.dyn.optonline.net)
07:46:39 poscat0x04 joins (~poscat@user/poscat)
07:46:43 × poscat quits (~poscat@user/poscat) (Ping timeout: 268 seconds)
07:50:04 Lycurgus joins (~georg@user/Lycurgus)
07:54:58 × tzh quits (~tzh@c-76-115-131-146.hsd1.or.comcast.net) (Quit: zzz)
08:00:45 acidjnk joins (~acidjnk@p200300d6e714dc176c976a8b55dd22bd.dip0.t-ipconnect.de)
08:01:21 leah2 joins (~leah@vuxu.org)
08:09:58 × tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
08:26:36 Tuplanolla joins (~Tuplanoll@91-159-69-59.elisa-laajakaista.fi)
08:33:45 × Garbanzo quits (~Garbanzo@2602:304:6eac:dc10:fbf2:b01f:1d47:7542) (Remote host closed the connection)
08:42:15 raehik joins (~raehik@rdng-25-b2-v4wan-169990-cust1344.vm39.cable.virginm.net)
08:43:16 lxsameer joins (~lxsameer@Serene/lxsameer)
08:44:27 gmg joins (~user@user/gehmehgeh)
08:46:24 tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
08:47:25 × raehik quits (~raehik@rdng-25-b2-v4wan-169990-cust1344.vm39.cable.virginm.net) (Ping timeout: 246 seconds)
08:55:33 × tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Read error: Connection reset by peer)
09:17:22 rosco joins (~rosco@90.58.221.226)
09:22:30 __monty__ joins (~toonn@user/toonn)
09:23:43 sawilagar joins (~sawilagar@user/sawilagar)
09:26:01 billchenchina joins (~billchenc@103.152.35.21)
09:26:48 × andrewboltachev quits (~andrey@178.141.226.53) (Quit: Leaving.)
09:29:05 × billchenchina quits (~billchenc@103.152.35.21) (Client Quit)
09:38:59 × Sgeo quits (~Sgeo@user/sgeo) (Read error: Connection reset by peer)
09:54:34 tremon joins (~tremon@83.80.159.219)
09:59:21 noumenon joins (~noumenon@113.51-175-156.customer.lyse.net)
10:03:35 × econo_ quits (uid147250@id-147250.tinside.irccloud.com) (Quit: Connection closed for inactivity)
10:10:43 wheatengineer joins (~frederik@p200300f63f4e89007666e2f77a3735a1.dip0.t-ipconnect.de)
10:23:26 × sefidel quits (~sefidel@user/sefidel) (Remote host closed the connection)
10:24:24 × wootehfoot quits (~wootehfoo@user/wootehfoot) (Read error: Connection reset by peer)
10:25:53 gastus joins (~gastus@185.6.123.201)
10:26:32 sefidel joins (~sefidel@user/sefidel)
10:45:51 × TonyStone quits (~TonyStone@user/TonyStone) (Ping timeout: 268 seconds)
10:49:47 × kimiamania quits (~65804703@user/kimiamania) (Quit: PegeLinux)
10:50:12 kimiamania joins (~65804703@user/kimiamania)
10:58:58 TonyStone joins (~TonyStone@user/TonyStone)
11:02:29 × mrmr1553343 quits (~mrmr@user/mrmr) (Quit: Bye, See ya later!)
11:10:21 × pie_ quits (~pie_bnc@user/pie/x-2818909) ()
11:10:32 pie_ joins (~pie_bnc@user/pie/x-2818909)
11:14:45 × pavonia quits (~user@user/siracusa) (Quit: Bye!)
11:18:51 mrmr1553343 joins (~mrmr@user/mrmr)
11:28:10 <lxsameer> b
11:30:25 <int-e> i c u
11:32:19 × rosco quits (~rosco@90.58.221.226) (Ping timeout: 260 seconds)
11:33:23 rosco joins (~rosco@90.58.221.226)
11:35:14 <ncf> b i c a l s e t s
11:51:58 × rosco quits (~rosco@90.58.221.226) (Quit: Lost terminal)
11:53:07 rosco joins (~rosco@90.58.221.226)
11:54:55 × wheatengineer quits (~frederik@p200300f63f4e89007666e2f77a3735a1.dip0.t-ipconnect.de) (Remote host closed the connection)
11:55:51 philopsos1 joins (~caecilius@user/philopsos)
12:17:07 × philopsos1 quits (~caecilius@user/philopsos) (Ping timeout: 268 seconds)
12:23:25 Rodney_ joins (~Rodney@176.254.244.83)
12:29:04 target_i joins (~target_i@user/target-i/x-6023099)
12:40:33 × ddellacosta quits (~ddellacos@ool-44c73d29.dyn.optonline.net) (Ping timeout: 268 seconds)
12:42:04 × AlexZenon quits (~alzenon@178.34.150.84) (Quit: ;-)
12:42:55 × AlexNoo quits (~AlexNoo@178.34.150.84) (Quit: Leaving)
12:50:42 × Natch quits (~natch@c-9e07225c.038-60-73746f7.bbcust.telenor.se) (Remote host closed the connection)
13:00:27 × ocra8 quits (ocra8@user/ocra8) (Quit: WeeChat 4.2.2)
13:03:17 Natch joins (~natch@c-9e07225c.038-60-73746f7.bbcust.telenor.se)
13:29:01 AlexNoo joins (~AlexNoo@178.34.150.84)
13:29:48 AlexZenon joins (~alzenon@178.34.150.84)
13:44:53 × Square quits (~Square@user/square) (Quit: Leaving)
13:45:59 × red-snail quits (~snail@static.151.210.203.116.clients.your-server.de) (Ping timeout: 252 seconds)
14:14:42 × Lycurgus quits (~georg@user/Lycurgus) (Quit: leaving)
14:14:45 × rosco quits (~rosco@90.58.221.226) (Quit: Lost terminal)
14:19:46 × infinity0 quits (~infinity0@pwned.gg) (Remote host closed the connection)
14:21:53 infinity0 joins (~infinity0@pwned.gg)
14:22:17 mrmr15533431 joins (~mrmr@user/mrmr)
14:22:43 × mrmr1553343 quits (~mrmr@user/mrmr) (Ping timeout: 246 seconds)
14:22:43 mrmr15533431 is now known as mrmr1553343
14:23:36 tzh joins (~tzh@c-76-115-131-146.hsd1.or.comcast.net)
14:24:18 <lxsameer> Any recommendation for an high level networking library? I need to build a TCP/Unix socket service
14:26:30 ocra8 joins (ocra8@user/ocra8)
14:34:27 <probie> lxsameer: Can you elaborate on what you mean by "high level"?
14:35:58 <lxsameer> probie: e.g calling syscalls and manually take care of every detail == low level, A nice abstraction or framework to care about your communication only == highlevel
14:35:59 red-snail joins (~snail@static.151.210.203.116.clients.your-server.de)
14:36:52 × TMA quits (tma@twin.jikos.cz) (Ping timeout: 260 seconds)
14:42:59 igghibu joins (~igghibu@178.249.211.83)
14:43:07 × igghibu quits (~igghibu@178.249.211.83) (Client Quit)
14:43:29 igghibu joins (~igghibu@178.249.211.83)
14:47:47 aforemny joins (~aforemny@2001:9e8:6cce:6100:d5d5:d4fb:65d2:c482)
14:49:26 × aforemny_ quits (~aforemny@i59F516D1.versanet.de) (Ping timeout: 268 seconds)
14:54:49 troydm joins (~troydm@user/troydm)
15:01:58 × zer0bitz quits (~zer0bitz@user/zer0bitz) (Quit: https://zer0bitz.dy.fi)
15:06:19 × remedan quits (~remedan@ip-62-245-108-153.bb.vodafone.cz) (Quit: Bye!)
15:07:10 remedan joins (~remedan@ip-62-245-108-153.bb.vodafone.cz)
15:10:33 × igghibu quits (~igghibu@178.249.211.83) (Quit: igghibu)
15:15:36 × kmein quits (~weechat@user/kmein) (Ping timeout: 260 seconds)
15:21:07 <probie> lxsameer: But are your requirements at level of "I could write my program reading/writing stdin/stdout and then wrap it with socat", or do you need a bit more control?
15:22:17 × gmg quits (~user@user/gehmehgeh) (Remote host closed the connection)
15:22:46 mechap joins (~mechap@user/mechap)
15:24:06 gmg joins (~user@user/gehmehgeh)
15:25:59 <probie> Depending on what you want network-simple https://hackage.haskell.org/package/network-simple probably works well enough. If you need ssl, perhaps crypton-connection https://hackage.haskell.org/package/crypton-connection
15:28:05 <mauke> manually take care of every detail = raw sockets; communication only = stream sockets a.k.a tcp
15:35:31 <EvanR> it's funny because all these answers are much lower level than what you get in python or javascript. Because haskell comes with nice concurrency which is useful for not just networking, so a library doesn't have to deal with that
15:36:47 econo_ joins (uid147250@id-147250.tinside.irccloud.com)
15:38:23 × myme quits (~myme@2a01:799:d5c:5f00:1e69:7aff:feab:e7ae) (Ping timeout: 256 seconds)
15:45:32 × nschoe- quits (~nschoe@2a01:e0a:8e:a190:542f:7ca5:d166:8539) (Quit: ZNC 1.8.2 - https://znc.in)
15:45:49 nschoe joins (~nschoe@2a01:e0a:8e:a190:b029:5729:77ae:d1dd)
15:48:35 rosco joins (~rosco@90.58.221.226)
15:49:48 × son0p quits (~ff@167.0.161.21) (Quit: Leaving)
15:51:30 × turlando quits (~turlando@user/turlando) (Quit: No Ping reply in 180 seconds.)
15:52:17 zer0bitz joins (~zer0bitz@user/zer0bitz)
15:52:47 turlando joins (~turlando@user/turlando)
16:02:40 × inedia quits (~irc@2600:3c00:e000:287::1) (Quit: WeeChat 4.1.2)
16:04:40 inedia joins (~irc@2600:3c00:e000:287::1)
16:07:48 ak-1_ joins (~ak-1@149.50.189.146)
16:08:45 × ak-1 quits (~ak-1@149.50.189.92) (Ping timeout: 272 seconds)
16:10:26 × rvalue quits (~rvalue@user/rvalue) (Read error: Connection reset by peer)
16:10:42 × lxsameer quits (~lxsameer@Serene/lxsameer) (Quit: WeeChat 4.2.1)
16:11:00 rvalue joins (~rvalue@user/rvalue)
16:13:23 son0p joins (~ff@167.0.161.21)
16:15:05 × aforemny quits (~aforemny@2001:9e8:6cce:6100:d5d5:d4fb:65d2:c482) (Ping timeout: 256 seconds)
16:15:09 × rosco quits (~rosco@90.58.221.226) (Ping timeout: 268 seconds)
16:19:13 aforemny joins (~aforemny@i59F516FA.versanet.de)
16:23:50 rosco joins (~rosco@90.58.221.226)
16:30:18 <haskellbridge> <pzka> EvanR: what are lower level python or js lib you're thinking for ?
16:32:19 <EvanR> python and js get hype for their high level evented i/o libraries
16:32:36 <haskellbridge> <pzka> because I don't see much difference between network-simple and https://docs.python.org/3/library/socket.html
16:33:25 × glguy quits (g@libera/staff/glguy) (Read error: Connection reset by peer)
16:33:38 <EvanR> I'm comparing the high level haskell suggestion of "tcp socket" to high level twisted
16:33:55 glguy joins (g@libera/staff/glguy)
16:37:27 <haskellbridge> <pzka> is there no event driven networking framework in Haskell ?
16:38:43 <haskellbridge> <sm (@simonmic:matrix.org)> what did you find on hackage ?
16:39:24 <geekosaur> (is that really your display name?)
16:39:36 <haskellbridge> <pzka> sm: many thing
16:40:52 <haskellbridge> <sm (@simonmic:matrix.org)> maybe pick the best known framework of that kind and search for its name, it might be mentioned in descriptions
16:51:55 <EvanR> event driven framework in haskell might amount to looping over a TChan
16:52:54 <EvanR> then event sources don't need to written against a framework, they just use a TChan
16:57:29 kmein joins (~weechat@user/kmein)
17:09:21 <haskellbridge> <pzka> @sm I just took twisted's description of himself in their doc.
17:09:21 <haskellbridge> ... long message truncated: https://kf8nh.com/_matrix/media/v3/download/kf8nh.com/MmYeXVsivFNcOiebQhzNpoCD (3 lines)
17:10:03 <jackdk> @hackage reflex-backend-socket exists, but I don't think anyone built anything nontrivial atop it. Caveat lector
17:10:04 <lambdabot> https://hackage.haskell.org/package/reflex-backend-socket exists, but I don't think anyone built anything nontrivial atop it. Caveat lector
17:10:39 × euleritian quits (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) (Ping timeout: 268 seconds)
17:11:51 <haskellbridge> <pzka> interesting project
17:13:01 yin joins (~yin@user/zero)
17:15:24 euleritian joins (~euleritia@dynamic-176-001-216-155.176.1.pool.telefonica.de)
17:16:38 <monochrom> We have efficient green threads. We just use green threads, one thread per blocking I/O.
17:17:01 <monochrom> Another way to put it: the RTS already contains the event loop.
17:17:14 <haskellbridge> <sm (@simonmic:matrix.org)> I spent a few minutes searching for buzzwords and found eg amazon EventBridge things on hackage. Cloud haskell also comes to mind. But yes there's no well known framework to point you at.
17:18:36 <monochrom> It is interesting how Haskell is very different and so conventional wisdoms from other languages simply don't carry over.
17:19:17 <monochrom> "how do I write a for loop?" : just don't, use a lazy list :: "how do I write an event loop?" : just don't, use threads.
17:21:26 <glguy> whoops, I used green threads to implement my event loop https://github.com/glguy/irc-core/blob/v2/src/Client/EventLoop.hs#L137-L160
17:23:42 <monochrom> I teach a Unix course including select() and epoll(). I also teach that reality that just because you call send()/write() once for 5 bytes doesn't mean that the receiver just needs one recv()/read() and expects to get all 5 in one go.
17:25:14 × mechap quits (~mechap@user/mechap) (Quit: WeeChat 4.3.0)
17:27:12 <monochrom> Then I thought of giving them an assignment on writing your own select()/epoll() loop communicating with multiple clients. Well, the complexity dawns on me that given the fragmentation mentioned, you now have to keep so much bookkeeping state for each client, you are writing your own OS.
17:27:32 <monochrom> So why not use the existing OS? Just use threads.
17:36:33 × TactfulCitrus quits (~al@2a02:8012:87a6:0:fbe0:6116:6e30:e047) (Ping timeout: 268 seconds)
17:41:51 <haskellbridge> <pzka> I agree that asynchronous programming is more complex, but threads are more costly. Matter of choice I guess
17:43:06 <geekosaur> not in Haskell
17:43:21 <monochrom> This is where you take advantage of cheap green threads from GHC. IOW GHC RTS does the reinvent-my-own-OS for you.
17:43:24 <geekosaur> they're designed to be extremely cheap (but I think this comes with other tradeoffs)
17:43:40 <monochrom> But even with Unix OS threads it is not too bad.
17:44:02 <glguy> threads introduce synchronization complexity, even in Haskell. There's no single ideal solution; it's all tradeoffs
17:48:33 <monochrom> I come from the angle that code that is trivial to write and obviously correct at first glance has a higher priority than a constant factor of cost.
17:50:29 <glguy> If you're writing GHC/Haskell then the green threads are the concurrency primitive and they're pretty easy to use, but they do make somethings harder to synchronize
17:50:43 <monochrom> OK you can then reply that GHC RTS itself cannot possibly be trivial to write and obviously correct at first glance. So even correctness itself has a tradeoff between "is the issue in my code" and "is the issue in someone else's code" heh.
17:50:44 × euleritian quits (~euleritia@dynamic-176-001-216-155.176.1.pool.telefonica.de) (Read error: Connection reset by peer)
17:51:02 euleritian joins (~euleritia@77.22.252.56)
17:51:04 <glguy> threads can make the code less obviously correct at first glance, though, as you have to reason about a much more complicated interleaving
17:51:14 <haskellbridge> <pzka> you need synchronisation if you share data. This not necessarily induced by the threads usage
17:52:12 <geekosaur> Haskell changes that a bit, actually. you need to send data between threads, not share it
17:52:21 <haskellbridge> <pzka> I'm really not an expert on Haskell. So I'm willing to believe that green threads are a better solution in this language.
17:52:21 <geekosaur> the usual mechanism for that is a TChan
17:52:43 <geekosaur> this is because of purity
17:52:53 <haskellbridge> <pzka> Yes agree
17:52:57 × califax quits (~califax@user/califx) (Remote host closed the connection)
17:53:02 <haskellbridge> <pzka> I was thinking about that too
17:53:18 <glguy> You can either send data with channels, or have shared state with MVars, TVars, etc
17:53:54 <glguy> STM is nice in how it allows you to wait any number of different events at once
17:54:21 <geekosaur> STM (pretty much anything prefixed with T) is a lightweight mechanism for both
17:54:29 <haskellbridge> <pzka> "An MVar t is a mutable location " Oh no ...
17:54:56 <monochrom> Read on. You will find that it is instead a message box of capacity 1.
17:55:05 <haskellbridge> <pzka> ah ok
17:55:14 <monochrom> So suddenly it's just a message queue not shared memory.
17:55:51 <haskellbridge> <pzka> ah yes I see so synchronisation is handled by the MVar itself right ?
17:56:11 <haskellbridge> <pzka> no need for semaphoe, mutex etc...
17:56:16 <monochrom> I follow my thesis supervisor in believing that message channels are much better than shared memory.
17:56:32 <haskellbridge> <pzka> (That's what I mean by synchronization)
17:56:41 califax joins (~califax@user/califx)
17:56:41 <monochrom> You can use MVar () to get a mutex.
17:57:21 <monochrom> But I would just (re)design everything around channels in the first place.
17:57:23 <haskellbridge> <pzka> ok
17:57:49 <haskellbridge> <pzka> sadly I have to go but this discussion was very interesting
17:57:57 <monochrom> rather than, IMO, regressively reactively use channels to emulate dark age shared memory.
17:58:03 <haskellbridge> <pzka> I will hjave a look to MVar
17:58:43 <probie> I don't think I'm willing to accept that "message channels are much better than shared memory". I'm happy with "message channels are nearly always much better than shared memory" though
17:58:47 <haskellbridge> <pzka> I think no "modern" language do that
17:59:23 <monochrom> Yeah I am happy with just "nearly always"
17:59:33 <haskellbridge> <pzka> Maybe for highly cpu bound application
17:59:54 <monochrom> I confess that I have a program that even just use one IORef with atomicModifyIORef.
18:00:36 <glguy> all of this depends on the program you're making
18:00:51 <geekosaur> doesn't the MVaar documentation (maybe it's the atomicModifyIORef docs) even suggest you do that if you're only using one?
18:01:12 <monochrom> I have a Data.Map. I put it in an IORef for multiple-thread access. There is no race condition because I only have 1 IORef, not even 2.
18:01:41 <monochrom> Yeah this is actually an underrated technique.
18:02:51 <monochrom> The trick is that Data.Map is immutable so all the talks about race conditions over a large data structure and how you now need elaborate lock-free techniques in mainstream imperative languages is completely lost because we are in an immutable functional language.
18:03:10 × noumenon quits (~noumenon@113.51-175-156.customer.lyse.net) (Read error: Connection reset by peer)
18:03:25 <monochrom> The only problem is it doesn't even scale to 2 IORefs. >:)
18:07:06 <jackdk> Ah, but we have product types for that
18:07:31 <monochrom> Haha true. Data.Map is just doing that on steroid.
18:08:19 × troydm quits (~troydm@user/troydm) (Ping timeout: 268 seconds)
18:09:40 Sgeo joins (~Sgeo@user/sgeo)
18:09:54 <probie> Vaguely related complaint. Go prefer message channels to shared memory, however since maps are mutable, to (safely) send a map over a channel, you have to copy the entire thing.
18:10:56 <probie> This means if you're sending across some struct which contains several maps, you're stuck either copying them all (even if only one changed) or having a more complicated protocol where you need to specify what parts have changed
18:11:13 <probie> meanwhile in Haskell-land, I don't even need to think about this
18:11:37 <monochrom> Selection bias but there is a reason I'm in this channel not the Go channel :)
18:12:16 <monochrom> I bet also for most of us here. :)
18:19:33 <probie> It's important to see what other languages are doing. Even the worst ones (apart from PHP) have some good ideas
18:32:20 raehik joins (~raehik@rdng-25-b2-v4wan-169990-cust1344.vm39.cable.virginm.net)
18:33:10 bitdex joins (~bitdex@gateway/tor-sasl/bitdex)
18:34:45 lxsameer joins (~lxsameer@Serene/lxsameer)
18:36:00 × tzh quits (~tzh@c-76-115-131-146.hsd1.or.comcast.net) (Quit: Leaving)
18:41:48 <yin> why no whole-program compilation in haskell?
18:42:25 <yin> my intuition is that haskell has a huge potential for cross-library optimizations
18:42:35 lxsameer parts (~lxsameer@Serene/lxsameer) (WeeChat 4.2.2)
18:43:19 <glguy> yin: definitions can be inlined into the interface files generated when compiling a module for the cases where that's most impactful
18:47:04 <geekosaur> yin, jhc did WPC, and the GRIN project has been experimenting with a WPC mechanism for GHC
18:48:03 adium parts (adium@user/adium) (Leaving)
18:49:14 <mauke> does anyone know if there's a select() for haskell on hackage?
18:49:22 <yin> ooh that's nice
18:49:30 <mauke> or do I have to implement my own (on top of threads?)?
18:50:07 <raehik> Are there any parser combinator libraries out there that don't support backtracking? that probably generate LL(1) parsers?
18:50:40 <raehik> asking because it appears that's my type-level parser combinator lib is and I'm trying to reason about it
18:50:40 <geekosaur> mauke, I only see one and it's from 2013
18:50:53 × phma quits (~phma@host-67-44-208-88.hnremote.net) (Read error: Connection reset by peer)
18:51:46 phma joins (phma@2001:5b0:211c:2db8:8455:4a59:eacb:62a6)
18:51:47 <monochrom> mauke: There is an "epoll", there is a "kqueue". I heard of them a long time ago. Not sure if there are others.
18:52:51 × califax quits (~califax@user/califx) (Remote host closed the connection)
18:52:56 <geekosaur> both of those will be OS dependent (epoll is Linux, kqueue is *BSD)
18:54:28 causal joins (~eric@50.35.88.207)
18:57:18 califax joins (~califax@user/califx)
19:05:31 × raehik quits (~raehik@rdng-25-b2-v4wan-169990-cust1344.vm39.cable.virginm.net) (Ping timeout: 246 seconds)
19:08:43 × califax quits (~califax@user/califx) (Remote host closed the connection)
19:11:38 × dispater quits (~dispater@mail.brprice.uk) (Quit: ZNC 1.8.2 - https://znc.in)
19:11:38 × orcus quits (~orcus@mail.brprice.uk) (Quit: ZNC 1.8.2 - https://znc.in)
19:13:37 dispater joins (~dispater@mail.brprice.uk)
19:14:07 orcus joins (~orcus@mail.brprice.uk)
19:17:33 califax joins (~califax@user/califx)
19:20:38 raehik joins (~raehik@rdng-25-b2-v4wan-169990-cust1344.vm39.cable.virginm.net)
19:21:18 andrei_n joins (~andrei_n@2a02:a03f:c091:a800:f349:d45c:cf6b:1a3e)
19:37:26 × andrei_n quits (~andrei_n@2a02:a03f:c091:a800:f349:d45c:cf6b:1a3e) (Ping timeout: 256 seconds)
19:45:55 waleee joins (~waleee@h-176-10-144-38.NA.cust.bahnhof.se)
19:48:51 andrei_n joins (~andrei_n@2a02:a03f:c091:a800:f349:d45c:cf6b:1a3e)
19:58:01 × raehik quits (~raehik@rdng-25-b2-v4wan-169990-cust1344.vm39.cable.virginm.net) (Ping timeout: 246 seconds)
19:59:30 michalz joins (~michalz@185.246.207.221)
20:04:29 raehik joins (~raehik@rdng-25-b2-v4wan-169990-cust1344.vm39.cable.virginm.net)
20:06:06 vnogueira joins (~vnogueira@2804:7f1:e2c0:4f34:9ed5:e091:ca3:9df2)
20:07:05 vnogueira parts (~vnogueira@2804:7f1:e2c0:4f34:9ed5:e091:ca3:9df2) ()
20:19:45 myme joins (~myme@2a01:799:d5c:5f00:69d5:8c7b:dd4d:cbe8)
20:43:05 × andrei_n quits (~andrei_n@2a02:a03f:c091:a800:f349:d45c:cf6b:1a3e) (Quit: Leaving)
20:53:53 × ak-1_ quits (~ak-1@149.50.189.146) (Ping timeout: 252 seconds)
21:09:18 × m5zs7k quits (aquares@web10.mydevil.net) (Ping timeout: 268 seconds)
21:15:26 m5zs7k joins (aquares@web10.mydevil.net)
21:16:08 <dmj`> yin: there's huge potential, GHC was started when memory was ~1MB, so everything had to be incremental compilation. Inlining typeclass definitions for the /entire/ program's dep. tree, not just interface files is a huge win.
21:21:17 <mauke> that works as long as your program doesn't create types at runtime
21:33:13 × michalz quits (~michalz@185.246.207.221) (Quit: ZNC 1.9.0 - https://znc.in)
21:35:15 × rosco quits (~rosco@90.58.221.226) (Quit: Lost terminal)
21:39:10 troydm joins (~troydm@user/troydm)
21:46:58 × myxos quits (~myxos@syn-065-028-251-121.res.spectrum.com) (Remote host closed the connection)
21:48:09 × raehik quits (~raehik@rdng-25-b2-v4wan-169990-cust1344.vm39.cable.virginm.net) (Ping timeout: 268 seconds)
21:51:05 troojg joins (~troojg@99.36.5.199)
21:54:42 × __monty__ quits (~toonn@user/toonn) (Quit: leaving)
22:00:04 myxos joins (~myxos@syn-065-028-251-121.res.spectrum.com)
22:01:26 × target_i quits (~target_i@user/target-i/x-6023099) (Quit: leaving)
22:04:17 × takuan quits (~takuan@178-116-218-225.access.telenet.be) (Remote host closed the connection)
22:32:48 × myme quits (~myme@2a01:799:d5c:5f00:69d5:8c7b:dd4d:cbe8) (Quit: WeeChat 4.2.2)
22:33:29 × acidjnk quits (~acidjnk@p200300d6e714dc176c976a8b55dd22bd.dip0.t-ipconnect.de) (Ping timeout: 268 seconds)
22:36:16 <yin> mauke: which haskell doesn't do, right?
22:39:56 <geekosaur> polymorphic typeclass recursion can
22:40:58 <yin> geekosaur: at *runtime* ?
22:41:16 <geekosaur> not only can it create new types, it can create them from types that aren't even known at compile time but come from instances defined by some package that didn't even exist when you wrote your code
22:41:28 <geekosaur> yes, at runtime
22:41:40 <yin> can you point me to a simple example?
22:41:48 <yin> this is new to me
22:42:43 <geekosaur> considering what I just said, code that uses `SomeTypeclass m => m a` may find itself with an `m a` that can'tg possibly be known at compile time
22:43:26 <geekosaur> all it knows is a passed-in instance dictionary
22:43:28 × gmg quits (~user@user/gehmehgeh) (Quit: Leaving)
22:44:15 <geekosaur> normally this isn't aa problem, but with polymorphic recursion in a typeclass method you end up with methods that can't be completely resolved at compile time even with WPC
22:45:06 <geekosaur> this isn't what you normally think of with "types defined at runtime", but it behaves like that
22:45:44 <yin> i see. thanks
22:50:02 <geekosaur> I'm not sure of this but I think it may also verge on dependent types? since the type it constructs is defined by an instance record. but the compiler restricts it so much that you need hacks like IfCxt to actually explore that direction?
22:50:17 <geekosaur> maybe I should say "type" in scare quotes
22:59:27 Square joins (~Square@user/square)
22:59:35 TMA joins (tma@twin.jikos.cz)
23:05:23 × troojg quits (~troojg@99.36.5.199) (Quit: leaving)
23:15:00 × Tuplanolla quits (~Tuplanoll@91-159-69-59.elisa-laajakaista.fi) (Quit: Leaving.)
23:15:41 tzh joins (~tzh@c-76-115-131-146.hsd1.or.comcast.net)
23:19:41 × sawilagar quits (~sawilagar@user/sawilagar) (Ping timeout: 240 seconds)
23:20:36 <geekosaur> there was a practical example in here a couple months ago where, given [()] and a polymorphically recursive call, it generated [[()]] then [[[()]]] and so on which were never specified at compile time but generated on the fly by recursing on the typeclass method
23:21:34 <geekosaur> because all of those types can be captured by a typeclass method that turns `a` into `[a]`, fed back into itself
23:22:44 <int-e> > read "[[[[[[[()]]]]]]]" :: [[[[[[[()]]]]]]]
23:22:46 <lambdabot> [[[[[[[()]]]]]]]
23:24:40 × rdcdr quits (~rdcdr@user/rdcdr) (Ping timeout: 256 seconds)
23:24:44 rdcdr_ joins (~rdcdr@97-113-199-193.tukw.qwest.net)
23:29:45 × tremon quits (~tremon@83.80.159.219) (Quit: getting boxed in)
23:55:10 <yin> for a moment there i thought this was #lisp
23:59:29 ystael joins (~ystael@user/ystael)
23:59:47 × robobub quits (uid248673@id-248673.uxbridge.irccloud.com) (Quit: Connection closed for inactivity)

All times are in UTC on 2024-06-02.