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.