2022/08/17

2022-08-17 00:04:07 +0200[Leary](~Leary]@122-58-224-198-vdsl.sparkbb.co.nz) (Ping timeout: 252 seconds)
2022-08-17 00:09:07 +0200acidjnk(~acidjnk@p200300d6e7137a99ecb826a5293fa5e0.dip0.t-ipconnect.de) (Ping timeout: 248 seconds)
2022-08-17 00:12:11 +0200alp_(~alp@user/alp) (Ping timeout: 252 seconds)
2022-08-17 00:12:40 +0200king_gs(~Thunderbi@2806:103e:29:da7a:955f:c3b4:36c4:4b7d) (Ping timeout: 256 seconds)
2022-08-17 00:19:08 +0200djanatyn1djanatyn
2022-08-17 00:20:35 +0200mmhat(~mmh@p200300f1c719923bee086bfffe095315.dip0.t-ipconnect.de)
2022-08-17 00:28:15 +0200 <qrpnxz> if foo is not found, then foo never ran, so the exception is not caused by foo failing. foo never ran, so any output at all from that function would be non-sense, exception is the only thing that makes sense for that type
2022-08-17 00:29:25 +0200 <qrpnxz> and it happens in IO, so it's a matter of course it could throw if some realworld thing prevents it doing it's purpose
2022-08-17 00:34:11 +0200alp_(~alp@user/alp)
2022-08-17 00:40:07 +0200mmhat(~mmh@p200300f1c719923bee086bfffe095315.dip0.t-ipconnect.de) (Quit: WeeChat 3.6)
2022-08-17 00:40:46 +0200justsomeguy(~justsomeg@user/justsomeguy) (Quit: WeeChat 3.5)
2022-08-17 00:42:04 +0200jgeerds(~jgeerds@55d46bad.access.ecotel.net)
2022-08-17 00:42:26 +0200 <geekosaur> actually it looks like child-side actions are expected to produce something from `waitpid()`. I kinda lost track of where all the stuff was happening when tracing the POSIX side of `createProcess_`
2022-08-17 00:42:50 +0200 <geekosaur> but it was getting back separate errno information from the child and throwing an exception based on it
2022-08-17 00:43:34 +0200 <geekosaur> so in fact ghcrts is doing something nonstandard. would have to discuss that with whoever's maintaining the process library
2022-08-17 00:45:00 +0200 <geekosaur> (from `c_createInteractiveProcess` in (I think) System.Posix.Process.Internal)
2022-08-17 00:46:45 +0200__monty__(~toonn@user/toonn) (Quit: leaving)
2022-08-17 00:51:57 +0200 <geekosaur> actually it's a foreign import
2022-08-17 00:52:34 +0200arkeet(arkeet@moriya.ca) (Quit: ZNC 1.8.2 - https://znc.in)
2022-08-17 00:53:11 +0200 <geekosaur> in System.Process.Posix (not to be confused with System.Posix.Process)
2022-08-17 00:54:09 +0200zeenk(~zeenk@2a02:2f04:a311:2d00:6865:d863:4c93:799f) (Quit: Konversation terminated!)
2022-08-17 00:54:10 +0200 <geekosaur> I've done similar when I needed more detail than an exit code of -1, so I assume someone needs that
2022-08-17 00:55:05 +0200tomboy64(~tomboy64@user/tomboy64) (Ping timeout: 268 seconds)
2022-08-17 00:55:25 +0200merijn(~merijn@c-001-001-007.client.esciencecenter.eduvpn.nl)
2022-08-17 01:04:58 +0200PiDelport(uid25146@id-25146.lymington.irccloud.com) (Quit: Connection closed for inactivity)
2022-08-17 01:06:56 +0200dsrt^(~dsrt@50.231.67.43)
2022-08-17 01:11:36 +0200fserucas|eod(~fserucas|@46.50.4.9) (Ping timeout: 256 seconds)
2022-08-17 01:11:57 +0200Tuplanolla(~Tuplanoll@91-159-69-12.elisa-laajakaista.fi) (Ping timeout: 252 seconds)
2022-08-17 01:14:24 +0200tomboy64(~tomboy64@user/tomboy64)
2022-08-17 01:16:21 +0200zachel(~zachel@user/zachel) (Ping timeout: 252 seconds)
2022-08-17 01:18:20 +0200chomwitt(~chomwitt@2a02:587:dc06:ee00:4f0b:15e9:107f:312) (Ping timeout: 255 seconds)
2022-08-17 01:20:21 +0200[itchyjunk](~itchyjunk@user/itchyjunk/x-7353470)
2022-08-17 01:20:56 +0200Sgeo(~Sgeo@user/sgeo)
2022-08-17 01:21:08 +0200luffy(~chenqisu1@183.217.201.23)
2022-08-17 01:23:47 +0200cosimone(~user@93-44-186-171.ip98.fastwebnet.it) (Remote host closed the connection)
2022-08-17 01:29:00 +0200merijn(~merijn@c-001-001-007.client.esciencecenter.eduvpn.nl) (Ping timeout: 268 seconds)
2022-08-17 01:29:49 +0200vysn(~vysn@user/vysn)
2022-08-17 01:41:04 +0200ddellacosta(~ddellacos@143.244.47.100) (Ping timeout: 256 seconds)
2022-08-17 01:44:23 +0200arkeet(~arkeet@moriya.ca)
2022-08-17 01:49:21 +0200tomboy64(~tomboy64@user/tomboy64) (Ping timeout: 268 seconds)
2022-08-17 01:54:07 +0200gurkenglas(~gurkengla@p548ac72e.dip0.t-ipconnect.de) (Ping timeout: 252 seconds)
2022-08-17 01:57:03 +0200jgeerds(~jgeerds@55d46bad.access.ecotel.net) (Ping timeout: 252 seconds)
2022-08-17 02:02:29 +0200matthewmosior(~matthewmo@173.170.253.91) (Ping timeout: 244 seconds)
2022-08-17 02:18:07 +0200sudden(~cat@user/sudden)
2022-08-17 02:21:36 +0200xff0x_(~xff0x@2405:6580:b080:900:55a5:3141:91aa:3e87) (Ping timeout: 244 seconds)
2022-08-17 02:22:20 +0200Guest9035(~Guest90@221x252x204x99.ap221.ftth.ucom.ne.jp)
2022-08-17 02:23:02 +0200matthewmosior(~matthewmo@173.170.253.91)
2022-08-17 02:24:19 +0200Guest9035(~Guest90@221x252x204x99.ap221.ftth.ucom.ne.jp) (Client Quit)
2022-08-17 02:25:01 +0200snak(~snak@221x252x204x99.ap221.ftth.ucom.ne.jp)
2022-08-17 02:28:19 +0200waleee(~waleee@2001:9b0:213:7200:cc36:a556:b1e8:b340) (Ping timeout: 248 seconds)
2022-08-17 02:32:12 +0200tomboy64(~tomboy64@user/tomboy64)
2022-08-17 02:32:30 +0200wroathe(~wroathe@206-55-188-8.fttp.usinternet.com)
2022-08-17 02:32:30 +0200wroathe(~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host)
2022-08-17 02:32:30 +0200wroathe(~wroathe@user/wroathe)
2022-08-17 02:32:45 +0200 <dragestil> are there any tools / scripts cleaning up space used by ghcup/cabal/stack/dist-newstyle etc
2022-08-17 02:33:51 +0200 <dragestil> they can take up rather large space and grow fast as I do dev work, and i cannot just rm -rf them because there are things i still want
2022-08-17 02:34:35 +0200 <hpc> the unserious answer is nix-store --gc :D
2022-08-17 02:34:59 +0200 <dragestil> ha
2022-08-17 02:35:43 +0200 <hpc> pretty sure all those files exist in a few dotfile directories so you don't have to go searching everywhere
2022-08-17 02:36:12 +0200 <hpc> but i don't remember how much of it you need to keep to not lose configs and such
2022-08-17 02:36:36 +0200 <hpc> oh, you said that
2022-08-17 02:36:55 +0200 <dragestil> for me it's not really the configs, but if i delete the wrong thing then there will be repeated work / compiling / downloading etc.
2022-08-17 02:37:27 +0200 <hpc> ah, that i definitely don't know
2022-08-17 02:38:43 +0200 <dragestil> ~/.ghcup/ghc ~/.cabal/store and ~/.stack/{programs,pantry,snapshots} have some of the biggest appetite for diskspace
2022-08-17 02:38:44 +0200 <hpc> i don't think anything saves reverse dependencies of all those files, so you might just need to deal with repeat work
2022-08-17 02:39:02 +0200 <hpc> or do some kind of find -atime | xargs rm
2022-08-17 02:39:43 +0200 <hpc> and let it be a timed cache rather than a reference-counted cache, as it were
2022-08-17 02:39:51 +0200PiDelport(uid25146@id-25146.lymington.irccloud.com)
2022-08-17 02:45:37 +0200ystael(~ystael@user/ystael) (Ping timeout: 268 seconds)
2022-08-17 02:46:04 +0200 <dragestil> found https://gist.github.com/filterfish/d138fa6cafd515399a54747976da7cc5
2022-08-17 02:48:01 +0200king_gs(~Thunderbi@187.201.216.244)
2022-08-17 02:52:00 +0200Me-me(~Me-me@146.102.215.218.dyn.iprimus.net.au)
2022-08-17 02:53:07 +0200xff0x_(~xff0x@2405:6580:b080:900:de8c:bb7c:e24e:39b8)
2022-08-17 02:58:26 +0200zebrag(~chris@user/zebrag)
2022-08-17 03:00:24 +0200xff0x_(~xff0x@2405:6580:b080:900:de8c:bb7c:e24e:39b8) (Ping timeout: 256 seconds)
2022-08-17 03:04:35 +0200raehik(~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 248 seconds)
2022-08-17 03:07:27 +0200king_gs(~Thunderbi@187.201.216.244) (Read error: Connection reset by peer)
2022-08-17 03:07:34 +0200king_gs1(~Thunderbi@2806:103e:29:da7a:c1c9:7ec0:dc35:1f68)
2022-08-17 03:09:53 +0200king_gs1king_gs
2022-08-17 03:10:24 +0200albet70(~xxx@2400:8902::f03c:92ff:fe60:98d8) (Remote host closed the connection)
2022-08-17 03:15:01 +0200Wstfgl0(~me-me@tunnel690570-pt.tunnel.tserv12.mia1.ipv6.he.net)
2022-08-17 03:16:32 +0200albet70(~xxx@2400:8902::f03c:92ff:fe60:98d8)
2022-08-17 03:16:42 +0200Me-me(~Me-me@146.102.215.218.dyn.iprimus.net.au) (Quit: Going offline, see ya! (www.adiirc.com))
2022-08-17 03:16:50 +0200Wstfgl0Me-me
2022-08-17 03:17:10 +0200Me-me(~me-me@tunnel690570-pt.tunnel.tserv12.mia1.ipv6.he.net) (Changing host)
2022-08-17 03:17:10 +0200Me-me(~me-me@user/me-me)
2022-08-17 03:18:05 +0200machinedgod(~machinedg@d198-53-218-113.abhsia.telus.net) (Ping timeout: 252 seconds)
2022-08-17 03:20:16 +0200Allio84(~Android@79-74-233-27.dynamic.dsl.as9105.com) (Remote host closed the connection)
2022-08-17 03:27:24 +0200wroathe(~wroathe@user/wroathe) (Ping timeout: 268 seconds)
2022-08-17 03:30:29 +0200merijn(~merijn@c-001-001-007.client.esciencecenter.eduvpn.nl)
2022-08-17 03:32:26 +0200jao(~jao@cpc103048-sgyl39-2-0-cust502.18-2.cable.virginm.net) (Remote host closed the connection)
2022-08-17 03:34:38 +0200xff0x(~xff0x@125x103x176x34.ap125.ftth.ucom.ne.jp)
2022-08-17 03:34:52 +0200jao(~jao@cpc103048-sgyl39-2-0-cust502.18-2.cable.virginm.net)
2022-08-17 03:37:57 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
2022-08-17 03:40:12 +0200[Leary](~Leary]@122-58-223-158-adsl.sparkbb.co.nz)
2022-08-17 03:49:23 +0200dsrt^(~dsrt@50.231.67.43) (Ping timeout: 248 seconds)
2022-08-17 03:52:27 +0200Teacup(~teacup@user/teacup) (Quit: No Ping reply in 180 seconds.)
2022-08-17 03:53:57 +0200Teacup(~teacup@user/teacup)
2022-08-17 03:54:43 +0200vglfr(~vglfr@145.224.94.221) (Ping timeout: 248 seconds)
2022-08-17 03:59:31 +0200merijn(~merijn@c-001-001-007.client.esciencecenter.eduvpn.nl) (Ping timeout: 248 seconds)
2022-08-17 04:00:03 +0200alp_(~alp@user/alp) (Ping timeout: 248 seconds)
2022-08-17 04:00:31 +0200azimut(~azimut@gateway/tor-sasl/azimut) (Remote host closed the connection)
2022-08-17 04:01:06 +0200azimut(~azimut@gateway/tor-sasl/azimut)
2022-08-17 04:01:34 +0200nate4(~nate@98.45.169.16)
2022-08-17 04:06:42 +0200jespada(~jespada@2803:9800:9842:8ca9:697e:9a9e:7c3a:1937) (Quit: My MacBook has gone to sleep. ZZZzzz…)
2022-08-17 04:09:21 +0200FinnElija(~finn_elij@user/finn-elija/x-0085643) (Killed (NickServ (Forcing logout FinnElija -> finn_elija)))
2022-08-17 04:09:21 +0200finn_elija(~finn_elij@user/finn-elija/x-0085643)
2022-08-17 04:09:21 +0200finn_elijaFinnElija
2022-08-17 04:15:27 +0200dsrt^(~dsrt@50.231.67.43)
2022-08-17 04:17:10 +0200[itchyjunk](~itchyjunk@user/itchyjunk/x-7353470) (Remote host closed the connection)
2022-08-17 04:20:31 +0200instantaphex(~jb@c-73-171-252-84.hsd1.fl.comcast.net)
2022-08-17 04:24:49 +0200td_(~td@muedsl-82-207-238-061.citykom.de) (Ping timeout: 252 seconds)
2022-08-17 04:26:44 +0200td_(~td@94.134.91.250)
2022-08-17 04:27:51 +0200bitdex(~bitdex@gateway/tor-sasl/bitdex)
2022-08-17 04:37:45 +0200vglfr(~vglfr@145.224.94.221)
2022-08-17 04:39:07 +0200stef204(~stef204@user/stef204) (Quit: WeeChat 3.6)
2022-08-17 04:51:45 +0200matthewmosior(~matthewmo@173.170.253.91) (Remote host closed the connection)
2022-08-17 04:51:51 +0200matthewmosior(~matthewmo@173.170.253.91)
2022-08-17 05:01:01 +0200matthewmosior(~matthewmo@173.170.253.91) (Remote host closed the connection)
2022-08-17 05:04:13 +0200nate4(~nate@98.45.169.16) (Ping timeout: 268 seconds)
2022-08-17 05:05:39 +0200vysn(~vysn@user/vysn) (Ping timeout: 256 seconds)
2022-08-17 05:08:51 +0200dsrt^(~dsrt@50.231.67.43) (Ping timeout: 248 seconds)
2022-08-17 05:09:53 +0200matthewmosior(~matthewmo@173.170.253.91)
2022-08-17 05:14:35 +0200matthewmosior(~matthewmo@173.170.253.91) (Ping timeout: 255 seconds)
2022-08-17 05:25:24 +0200dsrt^(~dsrt@50.231.67.43)
2022-08-17 05:25:32 +0200aeka(~aeka@2606:6080:1002:8:3285:30e:de43:8809) (Ping timeout: 244 seconds)
2022-08-17 05:34:41 +0200jero98772(~jero98772@2800:484:1d80:d8ce:efcc:cbb3:7f2a:6dff) (Remote host closed the connection)
2022-08-17 05:39:20 +0200texasmynsted(~texasmyns@99.96.221.112) (Ping timeout: 255 seconds)
2022-08-17 05:39:59 +0200dsrt^(~dsrt@50.231.67.43) (Ping timeout: 268 seconds)
2022-08-17 05:40:18 +0200matthewmosior(~matthewmo@173.170.253.91)
2022-08-17 05:44:44 +0200matthewmosior(~matthewmo@173.170.253.91) (Ping timeout: 255 seconds)
2022-08-17 05:47:26 +0200mvk(~mvk@2607:fea8:5ce3:8500::a1ec) (Ping timeout: 255 seconds)
2022-08-17 05:47:49 +0200dsrt^(~dsrt@50.231.67.43)
2022-08-17 05:55:59 +0200merijn(~merijn@c-001-001-007.client.esciencecenter.eduvpn.nl)
2022-08-17 06:03:47 +0200instantaphex(~jb@c-73-171-252-84.hsd1.fl.comcast.net) (Ping timeout: 248 seconds)
2022-08-17 06:05:07 +0200stiell(~stiell@gateway/tor-sasl/stiell) (Remote host closed the connection)
2022-08-17 06:05:44 +0200stiell(~stiell@gateway/tor-sasl/stiell)
2022-08-17 06:08:58 +0200jao(~jao@cpc103048-sgyl39-2-0-cust502.18-2.cable.virginm.net) (Ping timeout: 268 seconds)
2022-08-17 06:12:52 +0200matthewmosior(~matthewmo@173.170.253.91)
2022-08-17 06:15:26 +0200instantaphex(~jb@c-73-171-252-84.hsd1.fl.comcast.net)
2022-08-17 06:17:12 +0200matthewmosior(~matthewmo@173.170.253.91) (Ping timeout: 244 seconds)
2022-08-17 06:19:44 +0200kannon(~NK@135-180-47-54.fiber.dynamic.sonic.net)
2022-08-17 06:19:47 +0200instantaphex(~jb@c-73-171-252-84.hsd1.fl.comcast.net) (Ping timeout: 248 seconds)
2022-08-17 06:25:00 +0200dsrt^(~dsrt@50.231.67.43) (Ping timeout: 268 seconds)
2022-08-17 06:30:08 +0200snak(~snak@221x252x204x99.ap221.ftth.ucom.ne.jp) (Quit: Client closed)
2022-08-17 06:30:33 +0200merijn(~merijn@c-001-001-007.client.esciencecenter.eduvpn.nl) (Ping timeout: 268 seconds)
2022-08-17 06:36:53 +0200luffy(~chenqisu1@183.217.201.23) (Ping timeout: 256 seconds)
2022-08-17 06:41:38 +0200zebrag(~chris@user/zebrag) (Quit: Konversation terminated!)
2022-08-17 06:45:26 +0200Pickchea(~private@user/pickchea)
2022-08-17 06:46:03 +0200azimut(~azimut@gateway/tor-sasl/azimut) (Ping timeout: 268 seconds)
2022-08-17 06:48:09 +0200matthewmosior(~matthewmo@173.170.253.91)
2022-08-17 06:48:21 +0200instantaphex(~jb@c-73-171-252-84.hsd1.fl.comcast.net)
2022-08-17 06:48:25 +0200Midjak(~Midjak@82.66.147.146)
2022-08-17 06:52:41 +0200matthewmosior(~matthewmo@173.170.253.91) (Ping timeout: 255 seconds)
2022-08-17 06:53:41 +0200stiell(~stiell@gateway/tor-sasl/stiell) (Remote host closed the connection)
2022-08-17 06:53:55 +0200instantaphex(~jb@c-73-171-252-84.hsd1.fl.comcast.net) (Ping timeout: 248 seconds)
2022-08-17 06:54:02 +0200stiell(~stiell@gateway/tor-sasl/stiell)
2022-08-17 06:56:31 +0200merijn(~merijn@c-001-001-007.client.esciencecenter.eduvpn.nl)
2022-08-17 06:59:11 +0200abraham(~abraham@159.89.183.132)
2022-08-17 06:59:30 +0200stiell(~stiell@gateway/tor-sasl/stiell) (Remote host closed the connection)
2022-08-17 07:00:03 +0200stiell(~stiell@gateway/tor-sasl/stiell)
2022-08-17 07:01:23 +0200merijn(~merijn@c-001-001-007.client.esciencecenter.eduvpn.nl) (Ping timeout: 248 seconds)
2022-08-17 07:09:59 +0200mbuf(~Shakthi@122.165.55.71)
2022-08-17 07:13:23 +0200jargon(~jargon@184.101.168.117) (Remote host closed the connection)
2022-08-17 07:17:05 +0200tromp(~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
2022-08-17 07:19:14 +0200abraham(~abraham@159.89.183.132) (Quit: My MacBook has gone to sleep. ZZZzzz…)
2022-08-17 07:20:11 +0200instantaphex(~jb@c-73-171-252-84.hsd1.fl.comcast.net)
2022-08-17 07:20:30 +0200king_gs(~Thunderbi@2806:103e:29:da7a:c1c9:7ec0:dc35:1f68) (Ping timeout: 256 seconds)
2022-08-17 07:22:14 +0200matthewmosior(~matthewmo@173.170.253.91)
2022-08-17 07:25:02 +0200instantaphex(~jb@c-73-171-252-84.hsd1.fl.comcast.net) (Ping timeout: 256 seconds)
2022-08-17 07:26:44 +0200matthewmosior(~matthewmo@173.170.253.91) (Ping timeout: 256 seconds)
2022-08-17 07:27:25 +0200tromp(~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
2022-08-17 07:27:59 +0200kannon(~NK@135-180-47-54.fiber.dynamic.sonic.net) (Ping timeout: 244 seconds)
2022-08-17 07:30:33 +0200king_gs(~Thunderbi@187.201.216.244)
2022-08-17 07:31:04 +0200bitdex(~bitdex@gateway/tor-sasl/bitdex) (Ping timeout: 268 seconds)
2022-08-17 07:35:55 +0200instantaphex(~jb@c-73-171-252-84.hsd1.fl.comcast.net)
2022-08-17 07:39:01 +0200jargon(~jargon@184.101.168.117)
2022-08-17 07:40:20 +0200instantaphex(~jb@c-73-171-252-84.hsd1.fl.comcast.net) (Ping timeout: 256 seconds)
2022-08-17 07:42:15 +0200tompaw(~tompaw@static-47-206-100-136.tamp.fl.frontiernet.net) (Ping timeout: 255 seconds)
2022-08-17 07:45:38 +0200chomwitt(~chomwitt@2a02:587:dc06:ee00:4e2b:7ca9:316d:45c)
2022-08-17 07:49:12 +0200stiell(~stiell@gateway/tor-sasl/stiell) (Remote host closed the connection)
2022-08-17 07:49:13 +0200tompaw(~tompaw@static-47-206-100-136.tamp.fl.frontiernet.net)
2022-08-17 07:49:39 +0200stiell(~stiell@gateway/tor-sasl/stiell)
2022-08-17 07:50:33 +0200chomwitt(~chomwitt@2a02:587:dc06:ee00:4e2b:7ca9:316d:45c) (Ping timeout: 256 seconds)
2022-08-17 07:52:04 +0200zachel(~zachel@user/zachel)
2022-08-17 07:55:24 +0200matthewmosior(~matthewmo@173.170.253.91)
2022-08-17 07:55:46 +0200 <sm> dragestil: stack-clean-old
2022-08-17 07:55:52 +0200 <sm> also ncdu
2022-08-17 07:57:24 +0200 <dragestil> sm: thanks
2022-08-17 07:58:50 +0200aviladev[m](~aviladevm@2001:470:69fc:105::1:cbc7)
2022-08-17 07:59:44 +0200matthewmosior(~matthewmo@173.170.253.91) (Ping timeout: 255 seconds)
2022-08-17 08:03:32 +0200gurkenglas(~gurkengla@p548ac72e.dip0.t-ipconnect.de)
2022-08-17 08:05:08 +0200Pickchea(~private@user/pickchea) (Quit: Leaving)
2022-08-17 08:05:15 +0200coot(~coot@213.134.176.158)
2022-08-17 08:05:25 +0200tromp(~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
2022-08-17 08:06:21 +0200coot(~coot@213.134.176.158) (Client Quit)
2022-08-17 08:06:48 +0200coot(~coot@213.134.176.158)
2022-08-17 08:08:35 +0200jargon(~jargon@184.101.168.117) (Remote host closed the connection)
2022-08-17 08:14:58 +0200instantaphex(~jb@c-73-171-252-84.hsd1.fl.comcast.net)
2022-08-17 08:17:22 +0200jargon(~jargon@184.101.168.117)
2022-08-17 08:19:15 +0200instantaphex(~jb@c-73-171-252-84.hsd1.fl.comcast.net) (Ping timeout: 248 seconds)
2022-08-17 08:26:50 +0200jargon(~jargon@184.101.168.117) (Remote host closed the connection)
2022-08-17 08:28:19 +0200matthewmosior(~matthewmo@173.170.253.91)
2022-08-17 08:31:27 +0200MajorBiscuit(~MajorBisc@c-001-030-027.client.tudelft.eduvpn.nl)
2022-08-17 08:32:34 +0200matthewmosior(~matthewmo@173.170.253.91) (Ping timeout: 244 seconds)
2022-08-17 08:32:53 +0200tromp(~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
2022-08-17 08:33:01 +0200alternateved(~user@staticline-31-183-146-203.toya.net.pl)
2022-08-17 08:36:52 +0200sus(zero@user/zeromomentum) (Quit: the lounge - https://webirc.envs.net)
2022-08-17 08:39:06 +0200jargon(~jargon@184.101.168.117)
2022-08-17 08:39:07 +0200king_gs(~Thunderbi@187.201.216.244) (Read error: Connection reset by peer)
2022-08-17 08:40:15 +0200chele(~chele@user/chele)
2022-08-17 08:40:30 +0200king_gs(~Thunderbi@2806:103e:29:da7a:1f74:531c:dec2:7aec)
2022-08-17 08:41:13 +0200king_gs(~Thunderbi@2806:103e:29:da7a:1f74:531c:dec2:7aec) (Client Quit)
2022-08-17 08:41:52 +0200Guest87(~Guest87@cpc77311-basf12-2-0-cust212.12-3.cable.virginm.net)
2022-08-17 08:41:56 +0200jargon(~jargon@184.101.168.117) (Remote host closed the connection)
2022-08-17 08:42:20 +0200Guest87(~Guest87@cpc77311-basf12-2-0-cust212.12-3.cable.virginm.net) (Client Quit)
2022-08-17 08:43:29 +0200alternateved(~user@staticline-31-183-146-203.toya.net.pl) (Read error: Connection reset by peer)
2022-08-17 08:43:56 +0200alternateved(~user@staticline-31-183-146-203.toya.net.pl)
2022-08-17 08:44:13 +0200acidjnk(~acidjnk@p200300d6e7137a0595bd943540671dc0.dip0.t-ipconnect.de)
2022-08-17 08:46:50 +0200lottaquestions(~nick@104.221.24.83)
2022-08-17 08:47:52 +0200jargon(~jargon@184.101.168.117)
2022-08-17 08:48:47 +0200lottaquestions_(~nick@2607:fa49:503e:7100:6db8:6536:53f:14df) (Ping timeout: 255 seconds)
2022-08-17 08:49:30 +0200merijn(~merijn@c-001-001-007.client.esciencecenter.eduvpn.nl)
2022-08-17 08:58:05 +0200cosimone(~user@93-44-186-171.ip98.fastwebnet.it)
2022-08-17 09:00:30 +0200matthewmosior(~matthewmo@173.170.253.91)
2022-08-17 09:02:20 +0200nate4(~nate@98.45.169.16)
2022-08-17 09:04:12 +0200cfricke(~cfricke@user/cfricke)
2022-08-17 09:04:42 +0200ddellacosta(~ddellacos@143.244.47.84)
2022-08-17 09:04:59 +0200matthewmosior(~matthewmo@173.170.253.91) (Ping timeout: 255 seconds)
2022-08-17 09:05:22 +0200Sgeo(~Sgeo@user/sgeo) (Read error: Connection reset by peer)
2022-08-17 09:05:41 +0200mmhat(~mmh@p200300f1c712fb1cee086bfffe095315.dip0.t-ipconnect.de)
2022-08-17 09:07:31 +0200yvan-sraka(~yvan-srak@57.red-81-44-3.dynamicip.rima-tde.net)
2022-08-17 09:07:59 +0200gdown(~gavin@h69-11-149-231.kndrid.broadband.dynamic.tds.net) (Remote host closed the connection)
2022-08-17 09:08:37 +0200nate4(~nate@98.45.169.16) (Ping timeout: 252 seconds)
2022-08-17 09:09:17 +0200snak(~snak@221x252x204x99.ap221.ftth.ucom.ne.jp)
2022-08-17 09:10:09 +0200lortabac(~lortabac@2a01:e0a:541:b8f0:82fa:1061:3168:3965)
2022-08-17 09:10:12 +0200riverside(~riverside@213.205.241.143)
2022-08-17 09:10:16 +0200ddellacosta(~ddellacos@143.244.47.84) (Ping timeout: 268 seconds)
2022-08-17 09:10:41 +0200 <riverside> hello morning people
2022-08-17 09:10:49 +0200 <riverside> SO
2022-08-17 09:10:55 +0200 <riverside> i know what it is now
2022-08-17 09:10:57 +0200 <riverside> its got
2022-08-17 09:10:59 +0200 <riverside> goto
2022-08-17 09:11:06 +0200 <riverside> on a graph
2022-08-17 09:11:18 +0200 <riverside> as a morphism in a gategory of objects
2022-08-17 09:11:32 +0200 <riverside> in programing
2022-08-17 09:12:01 +0200ddellacosta(~ddellacos@89.45.224.34)
2022-08-17 09:12:06 +0200 <riverside> functional programing by variable dereferencing
2022-08-17 09:12:20 +0200 <riverside> acheives a nonlinear program graph
2022-08-17 09:12:25 +0200cosimone(~user@93-44-186-171.ip98.fastwebnet.it) (Read error: Connection reset by peer)
2022-08-17 09:13:40 +0200 <riverside> easyest way to explain it is notionally as a "turing graph" by analogy to the "turing tape" style line numbered programming languages like bbc basic
2022-08-17 09:14:15 +0200 <riverside> and im yammering on because we have lists and not graphs as a language primative!
2022-08-17 09:14:44 +0200 <riverside> so i cant express it within itself, which is annoying me into articulating this
2022-08-17 09:15:58 +0200 <riverside> point being about index algebra and pointers
2022-08-17 09:16:11 +0200 <riverside> which we get by default by abstracting over lenses
2022-08-17 09:17:15 +0200alp_(~alp@user/alp)
2022-08-17 09:17:49 +0200 <riverside> and i think there is a correspondence between a nutszoid re-phrasing of what a graph is, as a monadically tailed list, and a monadically encapsulated deconstructor-reconstructor pair
2022-08-17 09:17:56 +0200ccntrq(~Thunderbi@172.209.94.92.rev.sfr.net)
2022-08-17 09:18:10 +0200 <riverside> such as to retain reconstructional positional data as data retained during deconstruction
2022-08-17 09:18:36 +0200 <riverside> which i think is just a pair of ints for a tree as a free list, modulo something to do with cycles
2022-08-17 09:18:41 +0200 <riverside> ("just dig")
2022-08-17 09:18:55 +0200 <riverside> or just, dug
2022-08-17 09:20:08 +0200 <ski> riverside : lists are not a language primitive. they just have some convenient syntactic sugar
2022-08-17 09:20:40 +0200 <ski> (and i think most of what you said make little sense to other people in here)
2022-08-17 09:20:48 +0200 <riverside> and then because toList exists from the traversable implementation, and we need to tackle these damn cycles, you end up with solving a sparks matrix at type level to add connectivity like a wire switchboard
2022-08-17 09:21:08 +0200 <riverside> between positions in the list
2022-08-17 09:21:30 +0200 <riverside> and that type level explication by constructor annotation is the thing i think should be primitivised
2022-08-17 09:21:56 +0200 <riverside> ski it is as union in GADT
2022-08-17 09:22:13 +0200 <riverside> choice being multiple constructors
2022-08-17 09:22:14 +0200 <ski> i've no idea what you're talking about, at this point
2022-08-17 09:22:29 +0200 <riverside> i mean the generic abstraction over cons is a language primative
2022-08-17 09:22:37 +0200 <riverside> but cant be annotated to explicate cycles
2022-08-17 09:22:47 +0200 <riverside> ski: thanks for that!
2022-08-17 09:22:49 +0200cosimone(~user@93-44-186-171.ip98.fastwebnet.it)
2022-08-17 09:22:54 +0200 <ski> np
2022-08-17 09:22:55 +0200cfricke(~cfricke@user/cfricke) (Ping timeout: 256 seconds)
2022-08-17 09:23:13 +0200 <Franciman> do you think that teaching functional programming to young people can be effective and useful?
2022-08-17 09:23:33 +0200 <merijn> Franciman: Sure, why not?
2022-08-17 09:23:36 +0200 <riverside> im not sure thats the kind of thing you should be asking
2022-08-17 09:23:39 +0200 <merijn> Also, define "young"
2022-08-17 09:23:54 +0200 <riverside> awkward
2022-08-17 09:23:55 +0200 <ski> @quote rules.of.Go
2022-08-17 09:23:55 +0200 <lambdabot> sarah says: "But I don't _want_ functional programming!" -- Sarah Peyton Jones, age 11, upon hearing the rules of Go
2022-08-17 09:24:11 +0200cosimone(~user@93-44-186-171.ip98.fastwebnet.it) (Read error: Connection reset by peer)
2022-08-17 09:24:16 +0200 <Franciman> merijn: hm sure, i think around 11yo yeah ahha
2022-08-17 09:24:28 +0200 <riverside> sounds like it was being offered as food
2022-08-17 09:25:03 +0200 <riverside> what are the rules of Go?
2022-08-17 09:25:11 +0200 <riverside> "run away!"
2022-08-17 09:25:32 +0200 <Franciman> it's really interesting how for young people you must find simple semantics, which is basically what the ultra advanced research does to explain super hard programs
2022-08-17 09:26:26 +0200 <riverside> boring!
2022-08-17 09:27:10 +0200 <merijn> You can teach 11 year olds basically anything IFF you can get their interest
2022-08-17 09:27:12 +0200 <riverside> anyway, who else are you going to teach functional programming to?
2022-08-17 09:27:33 +0200 <earthy> everyone? :)
2022-08-17 09:27:38 +0200 <riverside> you lot already know the answers
2022-08-17 09:27:53 +0200 <riverside> wheres my gofur?
2022-08-17 09:28:08 +0200 <Franciman> eheh that's why i was thinking about frp, so they can make videogames and animations
2022-08-17 09:28:09 +0200 <riverside> "hes pointing at a graph!"
2022-08-17 09:28:25 +0200cosimone(~user@93-44-186-171.ip98.fastwebnet.it)
2022-08-17 09:28:29 +0200 <Franciman> but frp implementations i found are technically challenging, it would require like 1 year of ball busting
2022-08-17 09:28:33 +0200 <riverside> and all the functions and the programs flowing on the graph, etc.
2022-08-17 09:29:01 +0200 <riverside> i need connectivity!
2022-08-17 09:29:27 +0200 <riverside> i think its a list language
2022-08-17 09:29:38 +0200 <riverside> er, how you implement it, uses union gadt
2022-08-17 09:29:59 +0200 <riverside> like, its ends up functional by on a datatype its constructed linearly
2022-08-17 09:30:10 +0200 <riverside> you have to match up the connectivity at the constructor
2022-08-17 09:30:27 +0200 <riverside> having listified the program graph
2022-08-17 09:30:33 +0200jgeerds(~jgeerds@55d46bad.access.ecotel.net)
2022-08-17 09:31:28 +0200 <riverside> i tried to write it - but i broke both my wrists and the steering wheel came off in my hands, with the rest of the car disintegrated on the road around me
2022-08-17 09:31:48 +0200 <riverside> a type error!
2022-08-17 09:31:58 +0200 <riverside> bastard list language constructors
2022-08-17 09:32:18 +0200 <riverside> i want an interface to write those without getting so much type error wrist cramp
2022-08-17 09:32:27 +0200 <riverside> such that matches the compiler
2022-08-17 09:32:34 +0200 <riverside> now i should really understand what i mean
2022-08-17 09:32:36 +0200 <riverside> it evaluates
2022-08-17 09:32:47 +0200 <riverside> program in a datatype, run it as a function
2022-08-17 09:33:04 +0200matthewmosior(~matthewmo@173.170.253.91)
2022-08-17 09:33:10 +0200 <riverside> lexer parser, compiler thing
2022-08-17 09:33:48 +0200 <riverside> i cant usually get the constraints at the constructor and the recursion which consumes the function list to match up nicely
2022-08-17 09:34:07 +0200 <riverside> different linear languages being specified by the constraint and evaluation
2022-08-17 09:34:39 +0200cfricke(~cfricke@user/cfricke)
2022-08-17 09:34:54 +0200 <riverside> simplest on is just a function list of a->a which folds with . for evaluation with id as a basecase
2022-08-17 09:35:03 +0200 <riverside> thats the specification of a linear language
2022-08-17 09:35:53 +0200 <riverside> generally you have functions taking several arguments, with branching and variable reuse for cycles
2022-08-17 09:36:22 +0200 <riverside> reuse *within itself* *requiering reuse* (which is what the linear types thing is all about)
2022-08-17 09:36:30 +0200ddellacosta(~ddellacos@89.45.224.34) (Ping timeout: 256 seconds)
2022-08-17 09:36:47 +0200polyphem(~rod@2a02:810d:840:8754:224e:f6ff:fe5e:bc17)
2022-08-17 09:37:40 +0200matthewmosior(~matthewmo@173.170.253.91) (Ping timeout: 244 seconds)
2022-08-17 09:37:50 +0200 <riverside> recursive function definitions in functional programing, by reusing variables defined in the recursive call, are nonlinear by nature
2022-08-17 09:38:12 +0200 <riverside> which defines what we mean by linear types
2022-08-17 09:38:21 +0200ddellacosta(~ddellacos@143.244.47.71)
2022-08-17 09:38:22 +0200 <riverside> now, since this is not recursive
2022-08-17 09:38:34 +0200 <riverside> if we do have linear types
2022-08-17 09:38:52 +0200 <riverside> then no recursive function definitions, and no nonlinear program graphs
2022-08-17 09:39:03 +0200 <riverside> which is whats up with all these annotations at the constructor
2022-08-17 09:39:22 +0200 <riverside> nonlinear languages arising from linear programs
2022-08-17 09:39:37 +0200zitkat(~zitkat@router-kraduha2-nat-c.pilsfree.net)
2022-08-17 09:39:47 +0200 <riverside> nonlinear languages arising from linear programing languages such as haskell with linear types
2022-08-17 09:40:15 +0200 <riverside> or defining program graphs linearly via gadt union constructors
2022-08-17 09:41:20 +0200 <riverside> this forms the basecase and recursive step elluding to a higherarchy of higher nonlinear languages
2022-08-17 09:41:38 +0200 <riverside> nonlinear languages arising from linear ones
2022-08-17 09:41:49 +0200 <riverside> but i need these damn graph primatives!!
2022-08-17 09:45:06 +0200 <riverside> idk about trying to teach haskell, but i wish someone would do that for me
2022-08-17 09:45:09 +0200takuan(~takuan@178-116-218-225.access.telenet.be)
2022-08-17 09:45:59 +0200tromp(~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
2022-08-17 09:46:56 +0200 <riverside> i want nonlinear types
2022-08-17 09:47:26 +0200 <riverside> which i have because gadt syntax can be recursive, binding types *linearly* at top level
2022-08-17 09:49:15 +0200 <riverside> nonlinearly*
2022-08-17 09:49:31 +0200 <riverside> raising the question of linear kinds#
2022-08-17 09:49:41 +0200 <Axman6> what on earth is going on
2022-08-17 09:49:46 +0200 <riverside> idk
2022-08-17 09:50:09 +0200 <riverside> i think haskell is here
2022-08-17 09:51:51 +0200 <riverside> basically everything i demand of the type system is here, except higher levity linearity
2022-08-17 09:52:15 +0200 <riverside> does it make sense?
2022-08-17 09:52:24 +0200 <riverside> i mean, i motivated it well sure
2022-08-17 09:52:32 +0200 <riverside> but i cant envisage it
2022-08-17 09:52:35 +0200 <riverside> what would it be
2022-08-17 09:52:55 +0200 <riverside> "types you can only use once" doesnt sound right to me
2022-08-17 09:53:16 +0200 <riverside> its supposed to preclude some nonlinear pointer on a type level program graph
2022-08-17 09:53:18 +0200 <riverside> oh!
2022-08-17 09:53:20 +0200 <riverside> cool
2022-08-17 09:53:45 +0200 <riverside> i swear im onto something!
2022-08-17 09:54:14 +0200 <riverside> (irony is i think because its such a centeral thing this graph monad in programing languages as programs monad)
2022-08-17 09:54:47 +0200 <riverside> makes too much sense not to be the thing
2022-08-17 09:54:59 +0200 <riverside> thats whats doing my head in about it
2022-08-17 09:55:03 +0200yvan-sraka(~yvan-srak@57.red-81-44-3.dynamicip.rima-tde.net) (Remote host closed the connection)
2022-08-17 09:55:08 +0200machinedgod(~machinedg@d198-53-218-113.abhsia.telus.net)
2022-08-17 09:55:38 +0200 <riverside> "todo with nonlinear programming at higher levity"
2022-08-17 09:55:55 +0200 <riverside> "something something language monad"
2022-08-17 09:56:34 +0200 <riverside> and its going pointers which is cool
2022-08-17 09:56:39 +0200 <riverside> starts with goto also
2022-08-17 09:57:17 +0200 <riverside> variable names instead of line numbers is the thing that does it
2022-08-17 09:57:22 +0200 <riverside> go functional programs!
2022-08-17 09:57:28 +0200 <riverside> (lambda man away!)
2022-08-17 09:58:38 +0200 <riverside> so something about kind level polymorphism, according to the name of the language extension
2022-08-17 09:58:55 +0200 <riverside> PolyKinds? right?
2022-08-17 09:58:57 +0200nilradical(~nilradica@user/naso)
2022-08-17 09:59:34 +0200 <riverside> even gives variable re-use (the central thing of linearity) *through* levities
2022-08-17 09:59:54 +0200 <riverside> then you get dependent programming, yeah im going to smoke
2022-08-17 10:00:15 +0200 <riverside> linear polykinds? proposal?
2022-08-17 10:01:12 +0200fserucas|eod(~fserucas|@46.50.4.9)
2022-08-17 10:01:26 +0200 <riverside> now i just need robots that teach themselves how to imagine reality
2022-08-17 10:01:51 +0200fserucas|eod(~fserucas|@46.50.4.9) (Client Quit)
2022-08-17 10:02:06 +0200fserucas|eod(~fserucas|@46.50.4.9)
2022-08-17 10:04:48 +0200 <riverside> kind of scared of dying when i hit compile though as reality spawns
2022-08-17 10:05:09 +0200matthewmosior(~matthewmo@173.170.253.91)
2022-08-17 10:05:11 +0200 <riverside> its a compile time simulation monad!
2022-08-17 10:05:24 +0200 <riverside> *argh my mind*
2022-08-17 10:05:49 +0200 <riverside> "give him less functions"
2022-08-17 10:05:52 +0200 <riverside> im going...
2022-08-17 10:05:53 +0200riverside(~riverside@213.205.241.143) (Remote host closed the connection)
2022-08-17 10:07:01 +0200jmorris(uid537181@id-537181.uxbridge.irccloud.com) (Quit: Connection closed for inactivity)
2022-08-17 10:07:05 +0200adanwan(~adanwan@gateway/tor-sasl/adanwan) (Ping timeout: 268 seconds)
2022-08-17 10:07:37 +0200adanwan(~adanwan@gateway/tor-sasl/adanwan)
2022-08-17 10:09:47 +0200matthewmosior(~matthewmo@173.170.253.91) (Ping timeout: 255 seconds)
2022-08-17 10:13:42 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection)
2022-08-17 10:14:22 +0200 <tdammers> whoa.
2022-08-17 10:14:31 +0200benin0(~benin@183.82.30.34)
2022-08-17 10:17:50 +0200vysn(~vysn@user/vysn)
2022-08-17 10:18:37 +0200mvk(~mvk@2607:fea8:5ce3:8500::a1ec)
2022-08-17 10:23:57 +0200ubert(~Thunderbi@178.165.179.220.wireless.dyn.drei.com)
2022-08-17 10:24:36 +0200kannon(~NK@135-180-47-54.fiber.dynamic.sonic.net)
2022-08-17 10:25:30 +0200arjun(~arjun@user/arjun)
2022-08-17 10:25:35 +0200 <arjun> hi
2022-08-17 10:26:01 +0200 <arjun> where can i read more about newtype wrapping types for orphan instances ?
2022-08-17 10:26:31 +0200adanwan(~adanwan@gateway/tor-sasl/adanwan) (Remote host closed the connection)
2022-08-17 10:26:52 +0200adanwan(~adanwan@gateway/tor-sasl/adanwan)
2022-08-17 10:27:54 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
2022-08-17 10:29:08 +0200kannon(~NK@135-180-47-54.fiber.dynamic.sonic.net) (Ping timeout: 255 seconds)
2022-08-17 10:29:57 +0200 <chreekat> arjun: do you mean making a newtype for a 3rd party type (something defined in a dependency) so that you can give it a non-orphan instance?
2022-08-17 10:32:36 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 256 seconds)
2022-08-17 10:33:20 +0200nilradical(~nilradica@user/naso) (Remote host closed the connection)
2022-08-17 10:34:08 +0200nilradical(~nilradica@user/naso)
2022-08-17 10:34:12 +0200 <arjun> chreekat not exactly but i'd be happy to read that as well. imagine TH thing that automatically makes some boilerplate instances for some types. some more complicated record types end up having some common member types, which end up having multiple instances defined. i was wondering if i could wrap them in a newtype and how would that work ?
2022-08-17 10:35:47 +0200 <arjun> but the Typeclasses being boilerplated are almost always a third party dep, so you might be right.
2022-08-17 10:36:46 +0200CiaoSen(~Jura@p200300c95738a5002a3a4dfffe84dbd5.dip0.t-ipconnect.de)
2022-08-17 10:37:56 +0200matthewmosior(~matthewmo@173.170.253.91)
2022-08-17 10:38:50 +0200nilradical(~nilradica@user/naso) (Ping timeout: 256 seconds)
2022-08-17 10:40:39 +0200 <dminuoso> tdammers: Oh I bet its just what-was-this-markov-chain-persons-name-again
2022-08-17 10:42:15 +0200matthewmosior(~matthewmo@173.170.253.91) (Ping timeout: 244 seconds)
2022-08-17 10:48:34 +0200 <ski> they've used multiple nicks
2022-08-17 10:51:10 +0200alp_alpm
2022-08-17 10:52:40 +0200alpm(~alp@user/alp) (Quit: Leaving)
2022-08-17 10:53:33 +0200alp-(~alp@user/alp)
2022-08-17 10:53:35 +0200Me-me(~me-me@user/me-me) (Quit: Disconnecting on purpose.)
2022-08-17 10:54:05 +0200Me-me(~me-me@v.working.name)
2022-08-17 10:55:22 +0200Me-me(~me-me@v.working.name) (Changing host)
2022-08-17 10:55:22 +0200Me-me(~me-me@user/me-me)
2022-08-17 10:57:31 +0200vglfr(~vglfr@145.224.94.221) (Ping timeout: 252 seconds)
2022-08-17 11:00:23 +0200vglfr(~vglfr@145.224.94.221)
2022-08-17 11:00:24 +0200CiaoSen(~Jura@p200300c95738a5002a3a4dfffe84dbd5.dip0.t-ipconnect.de) (Quit: CiaoSen)
2022-08-17 11:03:26 +0200zitkat(~zitkat@router-kraduha2-nat-c.pilsfree.net) (Remote host closed the connection)
2022-08-17 11:03:28 +0200vglfr(~vglfr@145.224.94.221) (Read error: Connection reset by peer)
2022-08-17 11:03:39 +0200zitkat(~zitkat@router-kraduha2-nat-c.pilsfree.net)
2022-08-17 11:04:00 +0200nilradical(~nilradica@user/naso)
2022-08-17 11:05:21 +0200ardell(~ardell@user/ardell)
2022-08-17 11:06:49 +0200ddellacosta(~ddellacos@143.244.47.71) (Ping timeout: 268 seconds)
2022-08-17 11:08:10 +0200 <tdammers> "drugs" or "youthfulness" seem more plausible explanations to me than "markov chain" in this particular case
2022-08-17 11:08:22 +0200shriekingnoise(~shrieking@186.137.167.202) (Quit: Quit)
2022-08-17 11:08:45 +0200ddellacosta(~ddellacos@89.45.224.216)
2022-08-17 11:08:46 +0200 <dminuoso> Maybe a regression in their markov chain code? :)
2022-08-17 11:09:06 +0200 <dminuoso> At times their output was even more gibberish
2022-08-17 11:09:25 +0200 <[exa]> drugs, youthfulness and monads
2022-08-17 11:11:08 +0200matthewmosior(~matthewmo@173.170.253.91)
2022-08-17 11:11:25 +0200luffy(~chenqisu1@183.217.201.23)
2022-08-17 11:11:30 +0200tzh(~tzh@c-24-21-73-154.hsd1.or.comcast.net) (Quit: zzz)
2022-08-17 11:15:29 +0200matthewmosior(~matthewmo@173.170.253.91) (Ping timeout: 255 seconds)
2022-08-17 11:23:55 +0200 <merijn> tdammers: I mean, it's like "beaky, but less likable"
2022-08-17 11:25:12 +0200nilradical(~nilradica@user/naso) (Remote host closed the connection)
2022-08-17 11:26:00 +0200nilradical(~nilradica@user/naso)
2022-08-17 11:30:43 +0200nilradical(~nilradica@user/naso) (Ping timeout: 248 seconds)
2022-08-17 11:34:22 +0200 <tdammers> I'd file "monads" under "drugs"
2022-08-17 11:36:59 +0200CiaoSen(~Jura@p200300c95738a5002a3a4dfffe84dbd5.dip0.t-ipconnect.de)
2022-08-17 11:37:56 +0200nilradical(~nilradica@user/naso)
2022-08-17 11:42:18 +0200nilradical(~nilradica@user/naso) (Ping timeout: 256 seconds)
2022-08-17 11:45:44 +0200 <int-e> Hey I can get out of this monad any time I want!
2022-08-17 11:45:47 +0200matthewmosior(~matthewmo@173.170.253.91)
2022-08-17 11:47:16 +0200 <tdammers> int-e: unsafePerformIO, not even once
2022-08-17 11:48:55 +0200 <merijn> tdammers: You mean "unsafePerformIO, maybe once maybe more" :p
2022-08-17 11:49:46 +0200 <dminuoso> Maybe we should include `unsafePerform :: Monad m => m a -> a` to Monad, that would address so many beginner problems.
2022-08-17 11:49:56 +0200matthewmosior(~matthewmo@173.170.253.91) (Ping timeout: 244 seconds)
2022-08-17 11:56:10 +0200lortabac(~lortabac@2a01:e0a:541:b8f0:82fa:1061:3168:3965) (Quit: WeeChat 2.8)
2022-08-17 11:56:15 +0200tromp(~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
2022-08-17 11:57:28 +0200jpds(~jpds@gateway/tor-sasl/jpds) (Ping timeout: 268 seconds)
2022-08-17 11:58:00 +0200jpds(~jpds@gateway/tor-sasl/jpds)
2022-08-17 11:58:44 +0200kuribas(~user@ptr-17d51eo65n4u3gc42wc.18120a2.ip6.access.telenet.be)
2022-08-17 11:59:02 +0200tromp(~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
2022-08-17 11:59:40 +0200lortabac(~lortabac@2a01:e0a:541:b8f0:8880:3b7c:b31c:90c0)
2022-08-17 12:00:11 +0200nilradical(~nilradica@user/naso)
2022-08-17 12:00:58 +0200arjun_(~arjun@user/arjun)
2022-08-17 12:01:51 +0200arjun_(~arjun@user/arjun) (Remote host closed the connection)
2022-08-17 12:03:09 +0200arjun(~arjun@user/arjun) (Ping timeout: 252 seconds)
2022-08-17 12:04:47 +0200nilradical(~nilradica@user/naso) (Ping timeout: 268 seconds)
2022-08-17 12:05:29 +0200stiell(~stiell@gateway/tor-sasl/stiell) (Ping timeout: 268 seconds)
2022-08-17 12:07:11 +0200 <tdammers> while we're at it, how about making types optional, allowing destructive variable updates, and automatically injecting unsafePerform as needed
2022-08-17 12:07:52 +0200stiell(~stiell@gateway/tor-sasl/stiell)
2022-08-17 12:09:39 +0200merijn(~merijn@c-001-001-007.client.esciencecenter.eduvpn.nl) (Ping timeout: 248 seconds)
2022-08-17 12:10:20 +0200jpds(~jpds@gateway/tor-sasl/jpds) (Remote host closed the connection)
2022-08-17 12:10:22 +0200lortabac(~lortabac@2a01:e0a:541:b8f0:8880:3b7c:b31c:90c0) (Ping timeout: 268 seconds)
2022-08-17 12:10:39 +0200 <ski> we already have `-fdefer-type-errors', i guess .. but we could ask to get our linear implicit parameters back ?
2022-08-17 12:10:42 +0200jpds(~jpds@gateway/tor-sasl/jpds)
2022-08-17 12:10:43 +0200lortabac(~lortabac@2a01:e0a:541:b8f0:603f:e09d:dbc1:db0a)
2022-08-17 12:12:09 +0200mvk(~mvk@2607:fea8:5ce3:8500::a1ec) (Ping timeout: 244 seconds)
2022-08-17 12:13:53 +0200 <kuribas> linear implicit parameters as in idris?
2022-08-17 12:14:52 +0200 <dminuoso> tdammers: Oh beautiful, so is `f x = x + x where x = 2` going to behave differently depending on optimization level?
2022-08-17 12:15:41 +0200 <kuribas> dminuoso: where does RHS x refer to?
2022-08-17 12:16:44 +0200 <dminuoso> We're doing destructive updates, dont ask.
2022-08-17 12:16:52 +0200 <kuribas> > let f x = x + x where x = 2 in f 3
2022-08-17 12:16:53 +0200 <lambdabot> 4
2022-08-17 12:17:07 +0200lortabac(~lortabac@2a01:e0a:541:b8f0:603f:e09d:dbc1:db0a) (Ping timeout: 248 seconds)
2022-08-17 12:17:16 +0200 <kuribas> ok, I stumbled into some crazy discussion...
2022-08-17 12:18:02 +0200matthewmosior(~matthewmo@173.170.253.91)
2022-08-17 12:20:49 +0200xff0x(~xff0x@125x103x176x34.ap125.ftth.ucom.ne.jp) (Ping timeout: 268 seconds)
2022-08-17 12:21:32 +0200 <tdammers> dminuoso: yes, of course. It will also produce different results depending on how often you have called f before.
2022-08-17 12:23:37 +0200 <dminuoso> tdammers: Also, will calling `f 10` affect a local variable x that is in scope?
2022-08-17 12:23:49 +0200 <dminuoso> I think making all variables global will avoid scope confusion.
2022-08-17 12:24:22 +0200 <ski> kuribas : as in e.g. "Fun with Linear Implicit Parameters" by TheHunter in 2005-05 at <https://wiki.haskell.org/The_Monad.Reader/Issue2/FunWithLinearImplicitParameters> (also see <https://downloads.haskell.org/~ghc/6.4.2/docs/html/users_guide/type-extensions.html#linear-implici…>)
2022-08-17 12:24:47 +0200matthewmosior(~matthewmo@173.170.253.91) (Ping timeout: 255 seconds)
2022-08-17 12:25:29 +0200 <tdammers> ah yes, let's get rid of this stupid "scope" thing, too, and just create variables dynamically when they are first assigned, and then we'll invent some keywords you can use to create them in containing scopes insteads
2022-08-17 12:26:35 +0200 <ski> i remember, very early on, when learning Haskell, i wondered whether function evaluation was "like CPP macros" (i concluded "no" after testing). what i was wondering was whether it used static/lexical or dynamic scope
2022-08-17 12:29:20 +0200 <ski> > let f xs | xs <- 0:xs = xs where xs = 1:xs in f (repeat 1)
2022-08-17 12:29:22 +0200 <lambdabot> [0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1...
2022-08-17 12:30:20 +0200 <dminuoso> ski: When I taught Haskell to my girlfriend and I explained substitution, she had some similar thoughts.
2022-08-17 12:32:16 +0200fef(~thedawn@user/thedawn)
2022-08-17 12:35:52 +0200merijn(~merijn@c-001-001-007.client.esciencecenter.eduvpn.nl)
2022-08-17 12:38:59 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
2022-08-17 12:42:33 +0200lortabac(~lortabac@2a01:e0a:541:b8f0:82b2:3f67:b114:9dcf)
2022-08-17 12:43:30 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 256 seconds)
2022-08-17 12:47:13 +0200waleee(~waleee@2001:9b0:213:7200:cc36:a556:b1e8:b340)
2022-08-17 12:47:38 +0200vglfr(~vglfr@145.224.94.221)
2022-08-17 12:49:07 +0200ubert(~Thunderbi@178.165.179.220.wireless.dyn.drei.com) (Ping timeout: 248 seconds)
2022-08-17 12:51:10 +0200nilradical(~nilradica@user/naso)
2022-08-17 12:51:30 +0200ubert(~Thunderbi@178.165.179.220.wireless.dyn.drei.com)
2022-08-17 12:55:01 +0200econo(uid147250@user/econo) (Quit: Connection closed for inactivity)
2022-08-17 12:55:15 +0200__monty__(~toonn@user/toonn)
2022-08-17 12:55:24 +0200nilradical(~nilradica@user/naso) (Ping timeout: 256 seconds)
2022-08-17 12:55:47 +0200matthewmosior(~matthewmo@173.170.253.91)
2022-08-17 12:57:45 +0200bontaq(~user@ool-45779fe5.dyn.optonline.net)
2022-08-17 12:58:48 +0200zitkat(~zitkat@router-kraduha2-nat-c.pilsfree.net) (Ping timeout: 256 seconds)
2022-08-17 13:05:02 +0200matthewmosior(~matthewmo@173.170.253.91) (Ping timeout: 256 seconds)
2022-08-17 13:05:24 +0200nate4(~nate@98.45.169.16)
2022-08-17 13:07:47 +0200matthewmosior(~matthewmo@173.170.253.91)
2022-08-17 13:10:15 +0200merijn(~merijn@c-001-001-007.client.esciencecenter.eduvpn.nl) (Ping timeout: 252 seconds)
2022-08-17 13:10:27 +0200nate4(~nate@98.45.169.16) (Ping timeout: 248 seconds)
2022-08-17 13:10:45 +0200jinsun__(~jinsun@user/jinsun)
2022-08-17 13:10:45 +0200jinsunGuest4337
2022-08-17 13:10:45 +0200Guest4337(~jinsun@user/jinsun) (Killed (tantalum.libera.chat (Nickname regained by services)))
2022-08-17 13:10:45 +0200jinsun__jinsun
2022-08-17 13:12:29 +0200matthewmosior(~matthewmo@173.170.253.91) (Ping timeout: 255 seconds)
2022-08-17 13:13:51 +0200Feuermagier_(~Feuermagi@213.149.82.60)
2022-08-17 13:15:15 +0200xff0x(~xff0x@ap007189.d.east.v6connect.net)
2022-08-17 13:15:23 +0200Feuermagier(~Feuermagi@user/feuermagier) (Ping timeout: 252 seconds)
2022-08-17 13:17:43 +0200tromp(~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
2022-08-17 13:21:28 +0200merijn(~merijn@c-001-001-007.client.esciencecenter.eduvpn.nl)
2022-08-17 13:22:35 +0200 <qrpnxz> haskell application is like *hygenic* macros :)
2022-08-17 13:24:07 +0200 <hpc> i just remember that functions are like functions, and it's everyone else that's wrong :D
2022-08-17 13:26:34 +0200merijn(~merijn@c-001-001-007.client.esciencecenter.eduvpn.nl) (Ping timeout: 256 seconds)
2022-08-17 13:31:21 +0200tromp(~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
2022-08-17 13:37:02 +0200coot(~coot@213.134.176.158) (Quit: coot)
2022-08-17 13:38:58 +0200zeenk(~zeenk@2a02:2f04:a311:2d00:6865:d863:4c93:799f)
2022-08-17 13:40:40 +0200matthewmosior(~matthewmo@173.170.253.91)
2022-08-17 13:41:18 +0200waleee(~waleee@2001:9b0:213:7200:cc36:a556:b1e8:b340) (Ping timeout: 256 seconds)
2022-08-17 13:41:19 +0200vglfr(~vglfr@145.224.94.221) (Read error: Connection reset by peer)
2022-08-17 13:42:07 +0200instantaphex(~jb@c-73-171-252-84.hsd1.fl.comcast.net)
2022-08-17 13:42:09 +0200nilradical(~nilradica@user/naso)
2022-08-17 13:42:30 +0200bontaq(~user@ool-45779fe5.dyn.optonline.net) (Remote host closed the connection)
2022-08-17 13:43:35 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
2022-08-17 13:44:57 +0200nilradical(~nilradica@user/naso) (Client Quit)
2022-08-17 13:45:07 +0200lortabac(~lortabac@2a01:e0a:541:b8f0:82b2:3f67:b114:9dcf) (Ping timeout: 248 seconds)
2022-08-17 13:45:09 +0200matthewmosior(~matthewmo@173.170.253.91) (Ping timeout: 244 seconds)
2022-08-17 13:46:23 +0200vglfr(~vglfr@145.224.94.221)
2022-08-17 13:46:33 +0200instantaphex(~jb@c-73-171-252-84.hsd1.fl.comcast.net) (Ping timeout: 252 seconds)
2022-08-17 13:48:01 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 252 seconds)
2022-08-17 13:52:18 +0200ardell(~ardell@user/ardell) (Quit: Leaving)
2022-08-17 13:54:01 +0200jpds(~jpds@gateway/tor-sasl/jpds) (Ping timeout: 268 seconds)
2022-08-17 13:57:58 +0200jpds(~jpds@gateway/tor-sasl/jpds)
2022-08-17 14:06:16 +0200maerwald(~maerwald@user/maerwald) (Ping timeout: 268 seconds)
2022-08-17 14:10:45 +0200jgeerds(~jgeerds@55d46bad.access.ecotel.net) (Ping timeout: 252 seconds)
2022-08-17 14:10:47 +0200luffy(~chenqisu1@183.217.201.23) (Ping timeout: 256 seconds)
2022-08-17 14:11:21 +0200nattiestnate(~nate@180.243.14.130)
2022-08-17 14:14:05 +0200matthewmosior(~matthewmo@173.170.253.91)
2022-08-17 14:15:23 +0200snak(~snak@221x252x204x99.ap221.ftth.ucom.ne.jp) (Quit: Client closed)
2022-08-17 14:15:26 +0200maerwald(~maerwald@mail.hasufell.de)
2022-08-17 14:17:16 +0200azimut(~azimut@gateway/tor-sasl/azimut)
2022-08-17 14:18:37 +0200luffy(~chenqisu1@183.217.201.23)
2022-08-17 14:18:42 +0200matthewmosior(~matthewmo@173.170.253.91) (Ping timeout: 256 seconds)
2022-08-17 14:19:31 +0200jespada(~jespada@2803:9800:9842:8ca9:c4f5:ee5c:649d:9f1f)
2022-08-17 14:23:29 +0200lortabac(~lortabac@2a01:e0a:541:b8f0:76d2:ba9c:ee52:a684)
2022-08-17 14:26:17 +0200chomwitt(~chomwitt@2a02:587:dc16:4100:bf02:bf7d:726d:6c5b)
2022-08-17 14:26:29 +0200raehik(~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net)
2022-08-17 14:27:23 +0200nattiestnate(~nate@180.243.14.130) (Quit: WeeChat 3.6)
2022-08-17 14:27:53 +0200merijn(~merijn@c-001-001-007.client.esciencecenter.eduvpn.nl)
2022-08-17 14:28:59 +0200benin04(~benin@183.82.31.103)
2022-08-17 14:30:20 +0200luffy(~chenqisu1@183.217.201.23) (Ping timeout: 268 seconds)
2022-08-17 14:30:36 +0200benin0(~benin@183.82.30.34) (Ping timeout: 256 seconds)
2022-08-17 14:30:37 +0200benin04benin0
2022-08-17 14:30:56 +0200cfricke(~cfricke@user/cfricke) (Ping timeout: 268 seconds)
2022-08-17 14:31:20 +0200cfricke(~cfricke@user/cfricke)
2022-08-17 14:34:50 +0200chomwitt(~chomwitt@2a02:587:dc16:4100:bf02:bf7d:726d:6c5b) (Ping timeout: 255 seconds)
2022-08-17 14:35:33 +0200nattiestnate(~nate@180.243.14.130)
2022-08-17 14:45:56 +0200zer0bitz(~zer0bitz@2001:2003:f748:2000:9186:336c:b8e1:3e66)
2022-08-17 14:47:15 +0200kuribas(~user@ptr-17d51eo65n4u3gc42wc.18120a2.ip6.access.telenet.be) (Read error: Connection reset by peer)
2022-08-17 14:51:33 +0200zitkat(~zitkat@router-kraduha2-nat-c.pilsfree.net)
2022-08-17 14:53:34 +0200Feuermagier_(~Feuermagi@213.149.82.60) (Quit: Leaving)
2022-08-17 14:53:46 +0200Feuermagier(~Feuermagi@user/feuermagier)
2022-08-17 14:56:24 +0200bitdex(~bitdex@gateway/tor-sasl/bitdex)
2022-08-17 14:56:39 +0200Feuermagier(~Feuermagi@user/feuermagier) (Remote host closed the connection)
2022-08-17 14:57:09 +0200matthewmosior(~matthewmo@173.170.253.91)
2022-08-17 14:57:14 +0200merijn(~merijn@c-001-001-007.client.esciencecenter.eduvpn.nl) (Ping timeout: 256 seconds)
2022-08-17 14:58:07 +0200Feuermagier(~Feuermagi@user/feuermagier)
2022-08-17 14:59:08 +0200Feuermagier(~Feuermagi@user/feuermagier) (Max SendQ exceeded)
2022-08-17 14:59:09 +0200matthewmosior(~matthewmo@173.170.253.91) (Remote host closed the connection)
2022-08-17 14:59:17 +0200matthewmosior(~matthewmo@173.170.253.91)
2022-08-17 14:59:47 +0200szkl(uid110435@id-110435.uxbridge.irccloud.com)
2022-08-17 15:02:53 +0200coot(~coot@213.134.176.158)
2022-08-17 15:09:38 +0200aeka(~aeka@2606:6080:1002:8:3285:30e:de43:8809)
2022-08-17 15:09:52 +0200luffy(~chenqisu1@183.217.201.23)
2022-08-17 15:12:09 +0200 <qrpnxz> stackoverflow cannot be searched without running proprietary javascript :(
2022-08-17 15:13:20 +0200geekosaurdoesn't trust stackoverflow much anyway
2022-08-17 15:13:48 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
2022-08-17 15:13:56 +0200 <geekosaur> the way their system works, it always seems like newcomers answer newcomers often with incorrect answers…
2022-08-17 15:14:22 +0200 <geekosaur> (because the experts have to balance answers with moderation)
2022-08-17 15:15:50 +0200alp-alp
2022-08-17 15:18:13 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 252 seconds)
2022-08-17 15:19:18 +0200ski. o O ( "Why I no longer contribute to StackOverflow" by ttmrichter (aka Michael T. Richter) in 2013-12 at <https://web.archive.org/web/20140104210553/http://michael.richter.name/blogs/why-i-no-longer-contr…> )
2022-08-17 15:19:21 +0200luffy(~chenqisu1@183.217.201.23) (Ping timeout: 256 seconds)
2022-08-17 15:20:54 +0200riverside(~riverside@213.205.241.143)
2022-08-17 15:21:07 +0200cheater(~Username@user/cheater) (Ping timeout: 248 seconds)
2022-08-17 15:21:07 +0200waldo(~waldo@user/waldo)
2022-08-17 15:21:09 +0200matthewmosior(~matthewmo@173.170.253.91) (Remote host closed the connection)
2022-08-17 15:22:29 +0200cheater(~Username@user/cheater)
2022-08-17 15:22:50 +0200 <tdammers> for me, SO stopped being fun pretty early on
2022-08-17 15:25:14 +0200 <geekosaur> my experience is pretty much ttmrichter's. I still have an account but I pulled back a couple weeks after getting elevated to a moderator in a number of stackexchange communities
2022-08-17 15:27:16 +0200 <geekosaur> (although my tags are mostly accurate because I refused to lmgtfy)
2022-08-17 15:27:17 +0200jmdaemon(~jmdaemon@user/jmdaemon) (Ping timeout: 256 seconds)
2022-08-17 15:27:57 +0200ystael(~ystael@user/ystael)
2022-08-17 15:31:05 +0200matthewmosior(~matthewmo@173.170.253.91)
2022-08-17 15:31:13 +0200jakalx(~jakalx@base.jakalx.net) (Error from remote client)
2022-08-17 15:36:54 +0200matthewmosior(~matthewmo@173.170.253.91) (Ping timeout: 256 seconds)
2022-08-17 15:37:29 +0200 <riverside> can i get key data?
2022-08-17 15:37:51 +0200 <riverside> like, without having to press enter
2022-08-17 15:38:11 +0200 <riverside> does it require frp?
2022-08-17 15:38:11 +0200 <geekosaur> hSetBuffering stdin NoBuffering
2022-08-17 15:38:18 +0200 <riverside> tried that, it went mental
2022-08-17 15:38:32 +0200 <riverside> i think the NoBuffering was up too high
2022-08-17 15:38:42 +0200 <geekosaur> (sadly the ghc runtime conflates buffering with terminal modes; this occasionally breaks programs that expect or need them to be separate)
2022-08-17 15:38:59 +0200 <riverside> can do aye
2022-08-17 15:39:08 +0200 <riverside> good ol' IO
2022-08-17 15:39:44 +0200 <riverside> i guess it needs some keyboard driver?
2022-08-17 15:39:54 +0200 <riverside> recalling OpenGL had drivers
2022-08-17 15:40:30 +0200 <riverside> though no buffering stdin is exactly what i was trying to do
2022-08-17 15:40:53 +0200 <riverside> its supposed to do a command line call depending on what key is pressed
2022-08-17 15:40:56 +0200[itchyjunk](~itchyjunk@user/itchyjunk/x-7353470)
2022-08-17 15:41:02 +0200jakalx(~jakalx@base.jakalx.net)
2022-08-17 15:41:13 +0200 <riverside> or something like that, idk how to play sound loops otherwise
2022-08-17 15:41:39 +0200 <riverside> "turn my keyboard literally into a keyboard"
2022-08-17 15:41:44 +0200 <geekosaur> works fine in programs like ghcup (see `ghcup tui`, although it doesn't play sound)
2022-08-17 15:41:56 +0200 <maerwald> geekosaur: we can fix that
2022-08-17 15:42:19 +0200 <riverside> how would ghcup beat normal ghci repl?
2022-08-17 15:42:21 +0200tromp(~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
2022-08-17 15:42:27 +0200 <riverside> should be the same right?
2022-08-17 15:42:29 +0200 <maerwald> I mean wrt playing sounds
2022-08-17 15:42:29 +0200ec(~ec@gateway/tor-sasl/ec)
2022-08-17 15:42:37 +0200 <maerwald> piano mode
2022-08-17 15:42:49 +0200 <riverside> so, OpenGl opens a window, as its running the exe
2022-08-17 15:43:05 +0200 <riverside> dont actually need the stdio there as they probably have keybaord drivers
2022-08-17 15:43:32 +0200 <jean-paul[m]> You don't need to get anywhere near keyboard drivers for this
2022-08-17 15:43:34 +0200 <jean-paul[m]> At least on POSIX
2022-08-17 15:43:45 +0200 <jean-paul[m]> Your process has a pty, you can do stuff to it.
2022-08-17 15:44:29 +0200 <riverside> i should just use opengl right?
2022-08-17 15:44:37 +0200 <riverside> i wonder how i get sound though
2022-08-17 15:44:48 +0200 <riverside> (basically needs keyboard drivers!)
2022-08-17 15:45:05 +0200Pickchea(~private@user/pickchea)
2022-08-17 15:45:10 +0200 <riverside> OpenGL and OpenCL?
2022-08-17 15:46:15 +0200 <jean-paul[m]> Should you use OpenGL to read key strokes in a terminal application? No, certainly not.
2022-08-17 15:47:07 +0200 <riverside> well how else am i going to get the unbuffered stdio?
2022-08-17 15:47:17 +0200 <jean-paul[m]> You just want a library like https://hackage.haskell.org/package/posix-pty-0.2.2/docs/System-Posix-Pty.html but for being on the other side of the pty
2022-08-17 15:47:29 +0200 <geekosaur[m]> I'd have one thread for reading from the terminal and another for the sound
2022-08-17 15:47:46 +0200 <jean-paul[m]> Oh right it's probably available via a curses wrapper
2022-08-17 15:48:03 +0200 <jean-paul[m]> https://hackage.haskell.org/package/hscurses maybe
2022-08-17 15:48:11 +0200 <geekosaur[m]> Don't need a pty, you already have one
2022-08-17 15:48:42 +0200 <riverside> geekosaur, how would you comunicate between the threads?
2022-08-17 15:48:45 +0200 <jean-paul[m]> https://hackage.haskell.org/package/hscurses-1.4.2.0/docs/UI-HSCurses-Curses.html#v:getCh
2022-08-17 15:49:15 +0200 <jean-paul[m]> geekosaur: Sure. I meant a library for using your pty to do interesting things.
2022-08-17 15:49:28 +0200 <jean-paul[m]> I don't _love_ "curses" as the answer but ... it is an answer.
2022-08-17 15:49:36 +0200 <geekosaur[m]> And a Chan connecting them
2022-08-17 15:50:12 +0200azimut(~azimut@gateway/tor-sasl/azimut) (Remote host closed the connection)
2022-08-17 15:50:52 +0200azimut(~azimut@gateway/tor-sasl/azimut)
2022-08-17 15:51:46 +0200 <geekosaur[m]> But then I'm thinking of the sound thread doing things like sound shaping (e.g. decay)
2022-08-17 15:52:56 +0200finsternis(~X@23.226.237.192) (Read error: Connection reset by peer)
2022-08-17 15:53:53 +0200 <tomsmeding> maerwald: elevator music while it's installing ghc?
2022-08-17 15:53:58 +0200finsternis(~X@23.226.237.192)
2022-08-17 15:54:11 +0200 <tomsmeding> or crappy phone-line-compressed waiting music
2022-08-17 15:55:18 +0200 <sm> could someone explain point 2 at https://github.com/haskell/core-libraries-committee/blob/main/guides/no-monadfail-st-inst.md#how ? I see that it makes GHC happy, but I'm not sure why
2022-08-17 15:56:45 +0200 <riverside> i need the dll for windows
2022-08-17 15:57:09 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
2022-08-17 15:57:50 +0200 <tomsmeding> sm: GHC desugars a (<-) pattern match in do-notation to using `fail` if it fails
2022-08-17 15:58:23 +0200 <tomsmeding> `xs' <- someFunc` clearly never fails, and partial matches in a let-binding are always allowed anyway, and will throw a runtime `error`
2022-08-17 15:58:46 +0200 <riverside> a makefile, really? https://pdcurses.org/wincon/
2022-08-17 15:58:47 +0200 <tomsmeding> @undo do { x:xs <- l ; return x }
2022-08-17 15:58:47 +0200 <lambdabot> l >>= \ a -> case a of { x : xs -> return x; _ -> fail ""}
2022-08-17 15:58:51 +0200 <tomsmeding> sm: ^
2022-08-17 15:58:58 +0200 <sm> failed partial matches in a let binding call error, not fail ? Ah I see, thanks tomsmeding
2022-08-17 15:59:03 +0200 <jean-paul[m]> riverside: Eh... I did say "POSIX".
2022-08-17 15:59:15 +0200 <riverside> to the wsl!
2022-08-17 15:59:25 +0200 <tomsmeding> sm: I guess it makes sense that the semantics of failed let bindings do not depend on where said let bindings occur :p
2022-08-17 15:59:27 +0200 <jean-paul[m]> riverside: If you're on Windows you're not writing a terminal app, you're writing something else.
2022-08-17 15:59:32 +0200 <riverside> its on spt-get?
2022-08-17 15:59:35 +0200 <riverside> apt*
2022-08-17 15:59:42 +0200 <sm> what error message do they show, I wonder
2022-08-17 15:59:52 +0200 <riverside> they say X11
2022-08-17 15:59:55 +0200 <tomsmeding> > let x:_ = [] in x
2022-08-17 15:59:56 +0200 <lambdabot> *Exception: <interactive>:3:5-12: Non-exhaustive patterns in x : _
2022-08-17 15:59:57 +0200 <sm> I'd better use a case and set my own message
2022-08-17 15:59:59 +0200matthewmosior(~matthewmo@173.170.253.91)
2022-08-17 16:00:23 +0200bitdex(~bitdex@gateway/tor-sasl/bitdex) (Quit: = "")
2022-08-17 16:00:25 +0200 <tomsmeding> > do { x:_ <- Just [] ; return x }
2022-08-17 16:00:27 +0200 <lambdabot> Nothing
2022-08-17 16:00:31 +0200 <tomsmeding> oh heh
2022-08-17 16:00:37 +0200 <tomsmeding> MonadFail for Maybe is kinda boring
2022-08-17 16:00:42 +0200o-90(~o-90@gateway/tor-sasl/o-90)
2022-08-17 16:01:03 +0200 <tomsmeding> % do { x:_ <- return [] ; return x }
2022-08-17 16:01:03 +0200 <yahb2> *** Exception: user error (Pattern match failure in do expression at <interactive>:66:6-8)
2022-08-17 16:01:31 +0200o-90(~o-90@gateway/tor-sasl/o-90) (Remote host closed the connection)
2022-08-17 16:01:50 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 256 seconds)
2022-08-17 16:02:19 +0200 <riverside> sudo yum install ncurses-devel
2022-08-17 16:02:36 +0200 <riverside> sudo apt-get install libncurses5-dev libncursesw5-dev
2022-08-17 16:02:51 +0200 <riverside> should work for windows under wsl
2022-08-17 16:04:19 +0200cheater(~Username@user/cheater) (Ping timeout: 248 seconds)
2022-08-17 16:04:19 +0200 <riverside> ok, so then if that works dont need opengl for the window and keyboard interface
2022-08-17 16:04:24 +0200 <riverside> but then what about the soundcard?
2022-08-17 16:04:27 +0200cheater(~Username@user/cheater)
2022-08-17 16:10:17 +0200 <jean-paul[m]> OpenAL maybe (saying this with a full 10 years since the last time I tried to write a program that plays sound)
2022-08-17 16:11:57 +0200riverside(~riverside@213.205.241.143) (Remote host closed the connection)
2022-08-17 16:12:43 +0200 <qrpnxz> for audio i've used pulseaudio, dunno what to use in windows, openal maybe, but something like SDL seem simpler?
2022-08-17 16:12:58 +0200waldo(~waldo@user/waldo) (Quit: quit)
2022-08-17 16:13:21 +0200Henson(~kvirc@207.136.101.195)
2022-08-17 16:14:02 +0200 <jean-paul[m]> pulseaudio probably being replaced by pipewire now right?
2022-08-17 16:14:07 +0200kuribas(~user@ptr-17d51em3ydspl0uuwo7.18120a2.ip6.access.telenet.be)
2022-08-17 16:14:18 +0200tromp(~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
2022-08-17 16:14:40 +0200snak(~snak@221x252x204x99.ap221.ftth.ucom.ne.jp)
2022-08-17 16:14:51 +0200 <Henson> I've got a bit of an obscure question. I'm using Haskell to call into C++ to perform a computation. The C++ has been compiled using OpenMP support and does computations in parallel. OpenMP seems to work when I call the function in Haskell as a thread using "async" and makes use of my computer's multiple cores, but when I call the function without spawning it a separate thread, OpenMP....
2022-08-17 16:15:50 +0200 <qrpnxz> jean-paul[m]: pretty much yes. I wrote my program just when pipewire was becoming a thing
2022-08-17 16:16:13 +0200 <Henson> only thinks there's 1 CPU core and does not parallelize. Does anybody have any ideas as to why this might be? The executable is compiled with "+RTS -N" so it's able to make use of multiple cores. I thought this might be irrelevant, though, as OpenMP at the C++ layer should do its own thing, but that doesn't seem to be the case.
2022-08-17 16:17:48 +0200Furor(~colere@about/linux/staff/sauvin)
2022-08-17 16:17:51 +0200 <tomsmeding> Henson: that probably depends mostly on how exactly OpenMP decides how many threads to start
2022-08-17 16:18:19 +0200Hensontries something
2022-08-17 16:18:32 +0200 <qrpnxz> no idea, but if it works with async you could make a little wrapper that runs it in async but it looks like just another IO action
2022-08-17 16:18:39 +0200 <tomsmeding> sounds very fishy though
2022-08-17 16:19:31 +0200 <lortabac> Henson: maybe it's related to bound/unbound threads? https://hackage.haskell.org/package/base-4.16.2.0/docs/Control-Concurrent.html#g:8
2022-08-17 16:20:11 +0200Colere(~colere@about/linux/staff/sauvin) (Ping timeout: 252 seconds)
2022-08-17 16:20:12 +0200 <sm> riverside: I had good luck using the sox command line tool for cross platform sound
2022-08-17 16:20:24 +0200 <sm> "To enable sound effects, install sox in PATH: do apt install sox, brew install sox, choco install sox.portable or similar."
2022-08-17 16:20:26 +0200 <geekosaur> openmp shouldn't care unless there's a setup function involved plus TLS, and even then it sounds backwards because the async would be using an unbound thread
2022-08-17 16:21:14 +0200matthewmosior(~matthewmo@173.170.253.91) (Remote host closed the connection)
2022-08-17 16:21:21 +0200matthewmosior(~matthewmo@173.170.253.91)
2022-08-17 16:22:42 +0200 <Henson> hmm, something fishy /is/ going on. Now it seems to be working properly when called directly.
2022-08-17 16:22:43 +0200 <qrpnxz> to me it makes a little more sense because bound thread may mean that it just sees that one thread?
2022-08-17 16:23:00 +0200 <qrpnxz> ah well it may just be openmp doesn't always init threads then
2022-08-17 16:23:08 +0200 <qrpnxz> which make sense
2022-08-17 16:23:12 +0200 <qrpnxz> because parallel has overhead
2022-08-17 16:23:40 +0200 <Henson> lortabac: could potentially be related. When using "async" the following non-async direct call was not parallelizing. When switching to "asyncBound" for the parallel test (which worked) the following non-async direct call suddenly was parallelized.
2022-08-17 16:24:20 +0200 <qrpnxz> if the first threads were still active it may have decided that making more threads was not worth it because they were already put to work?
2022-08-17 16:24:24 +0200 <Henson> I'll see if I can get the old behaviour back and then force the non-async version to use multiple threads instead of auto-detecting the number of threads, and see what happens
2022-08-17 16:25:07 +0200 <geekosaur> bound thread just means that the rts always runs the haskell thread on the same cpu thread
2022-08-17 16:25:11 +0200kannon(~NK@135-180-47-54.fiber.dynamic.sonic.net)
2022-08-17 16:25:14 +0200 <geekosaur> doesn't change cpu thread visibility
2022-08-17 16:25:16 +0200 <Henson> qrpnxz: I was simply calling omp_get_num_threads() within a parallel section, which should tell me how many threads OpenMP thinks are available for use.
2022-08-17 16:25:37 +0200 <geekosaur> and the c++ side will have no clue about the haskell side
2022-08-17 16:25:48 +0200 <qrpnxz> geekosaur: makes sense
2022-08-17 16:26:12 +0200 <Henson> geekosaur: yeah, I don't see how the switch from async to asyncBound could affect the non-async call, but it was just an observation. There definitely seems to be something non-deterministic happening, so I'll see if I can figure it out.
2022-08-17 16:28:19 +0200 <geekosaur> are you making any other calls? visibility (or not) of data in thread-local storage may matter, and that's what bound threads are about is making sure TLS is maintained for foreign calls
2022-08-17 16:28:42 +0200 <Henson> hmm, could one thing be that the function I'm calling is an IO function that's behind an "unsafePerformIO"? The foreign import is called as "safe" though, and I'm using no-cse and NO-INLINE on the "pure" version of the function, so I think I'm following best-practices for calling this function. The C++ function is also properly referentially-transparent, so I don't think I'm violating any...
2022-08-17 16:29:03 +0200 <Henson> immutability requirements by using unsafePerformIO. But that's another avenue I can track down to see where the non-determinism is coming from.
2022-08-17 16:29:21 +0200 <geekosaur> unsafePerformIO shouldn't matter if it's safe and referentially transparent
2022-08-17 16:29:27 +0200kannon(~NK@135-180-47-54.fiber.dynamic.sonic.net) (Ping timeout: 244 seconds)
2022-08-17 16:29:40 +0200 <geekosaur> unless you're wrong about the latter, which can happen all too easily
2022-08-17 16:30:35 +0200 <geekosaur> oh, it's not allowed to block for any reason and I find that invariant somewhat unlikely if it's managing other threads
2022-08-17 16:30:36 +0200 <Henson> geekosaur: I don't know if OpenMP makes use of TLS, though. I'm using OpenCV function calls within the parallel sections on the C++ functions. Nonetheless, this wouldn't explain how OpenMP suddenly thinks there are more CPUs available.
2022-08-17 16:31:01 +0200 <geekosaur> but that shouldn't affect the OpenMP side of things, only the ghc runtime
2022-08-17 16:31:46 +0200 <Henson> geekosaur: it wouldn't block in a way that will cause a deadlock, as it's just parallelizing over a couple expensive embarrasingly-parallel for loops.
2022-08-17 16:32:03 +0200ubert(~Thunderbi@178.165.179.220.wireless.dyn.drei.com) (Ping timeout: 248 seconds)
2022-08-17 16:33:19 +0200lortabac(~lortabac@2a01:e0a:541:b8f0:76d2:ba9c:ee52:a684) (Quit: WeeChat 2.8)
2022-08-17 16:33:31 +0200 <geekosaur> mm, actually the blocking constraint comes from "unsafe" which you;re not doing. unsafePerformIO should be fine if the function is actually pure and referentially transparent
2022-08-17 16:33:45 +0200Pickchea(~private@user/pickchea) (Ping timeout: 252 seconds)
2022-08-17 16:34:58 +0200 <Henson> ok, I'll keep smashing this with some hammers and see what happens. You've all given me some ideas of avenues to investigate. Thank you.
2022-08-17 16:37:33 +0200jero98772(~jero98772@2800:484:1d80:d8ce:efcc:cbb3:7f2a:6dff)
2022-08-17 16:39:21 +0200maerwald(~maerwald@mail.hasufell.de) (Changing host)
2022-08-17 16:39:21 +0200maerwald(~maerwald@user/maerwald)
2022-08-17 16:40:13 +0200 <tomsmeding> Henson: I would also be curious whether std::thread::hardware_concurrency() ever disagrees with omp_get_num_threads()
2022-08-17 16:40:24 +0200 <geekosaur> the real risk from unsafePerformIO is that ghc might enter the extern call twice from different threads, believing that the result can't change regardless of which one returns
2022-08-17 16:40:57 +0200 <geekosaur> that might conceivably affect the number of visible threads openmp sees, but it also requires that your haskell code admit that possibility to begin with
2022-08-17 16:41:00 +0200snak(~snak@221x252x204x99.ap221.ftth.ucom.ne.jp) (Quit: Client closed)
2022-08-17 16:41:01 +0200FurorColere
2022-08-17 16:41:20 +0200 <geekosaur> (i.e. is capable of entering the foreign call twice)
2022-08-17 16:43:23 +0200 <geekosaur> what might conceivably matter here is that the main thread is special (not merely bound) in all OSes and language runtimes. but that would be an odd restriction to affect openMP
2022-08-17 16:43:44 +0200 <tomsmeding> I would hope that openmp cares not about that
2022-08-17 16:43:58 +0200 <geekosaur> seeing as how the point of them is to escape those restrictions
2022-08-17 16:44:57 +0200 <Henson> tomsmeding: I'll add a call to that function as well
2022-08-17 16:46:08 +0200riverside(~riverside@213.205.241.143)
2022-08-17 16:47:37 +0200examors_examors
2022-08-17 16:47:44 +0200 <Henson> tomsmeding: ok, so now the problem has manifested again, and OpenMP and harware_concurrency disagree. OpenMP is wrong, hardware_concurrency is right.
2022-08-17 16:47:53 +0200 <tomsmeding> interesting!
2022-08-17 16:48:14 +0200 <tomsmeding> luckily hardware_concurrency() doesn't do anything fishy
2022-08-17 16:50:50 +0200 <tomsmeding> Henson: is it just omp_get_num_threads() that is wrong, or does the program actually only use one core?
2022-08-17 16:51:02 +0200 <tomsmeding> in any case, omp_set_num_threads() apparently exists
2022-08-17 16:51:44 +0200 <Henson> tomsmeding: just tested that. omp_get_num_threads is wrong, and the program does use one core. Even when explicitly instructed to use 2 cores, it only seems to be able to use 1.
2022-08-17 16:51:46 +0200 <tomsmeding> I'm looking at the openmp spec ( https://www.openmp.org/spec-html/5.0/openmpsu32.html#x51-710002.5.3 ) and I'm realising that knowing nothing about openmp is _not_ conducive to understanding what's going on
2022-08-17 16:51:56 +0200 <tomsmeding> "The value of the nthreads-var ICV is a list. The runtime call omp_set_num_threads sets the value of the first element of this list, and omp_get_max_threads retrieves the value of the first element of this list." ???????
2022-08-17 16:52:37 +0200 <tomsmeding> also stuff like: nthreads-var: "There is one copy of this ICV per data environment." -- I wonder, how many data environments do you have?
2022-08-17 16:53:22 +0200tomsmedingis completely confused and closes the website
2022-08-17 16:53:35 +0200hippoid(~idris@c-98-220-13-8.hsd1.il.comcast.net)
2022-08-17 16:53:50 +0200merijn(~merijn@c-001-001-007.client.esciencecenter.eduvpn.nl)
2022-08-17 16:55:11 +0200 <tomsmeding> also omp_get_max_threads vs omp_get_num_threads -- according to the above quote, omp_set_num_threads constrols the value that omp_get_MAX_threads returns
2022-08-17 16:55:13 +0200 <Henson> switching from async to asyncBound also doesn't seem to affect the non-async behaviour of the call, fortunately.
2022-08-17 16:55:24 +0200shriekingnoise(~shrieking@186.137.167.202)
2022-08-17 16:56:02 +0200geekosaur[m]is starting to think this sounds like an uninitialized variable
2022-08-17 16:56:32 +0200 <tomsmeding> which feels like thread-local storage issues
2022-08-17 16:56:36 +0200 <geekosaur[m]> Or similar
2022-08-17 16:57:38 +0200 <geekosaur[m]> Or just a missing initialization call
2022-08-17 16:57:43 +0200 <Henson> let me try a trick that worked in the past for TLS issues
2022-08-17 16:58:40 +0200 <Henson> hmm, no
2022-08-17 16:58:58 +0200Hensoncontinues tinkering
2022-08-17 17:06:54 +0200nate4(~nate@98.45.169.16)
2022-08-17 17:07:03 +0200 <ski> > runST (do Just x <- return Nothing; return x)
2022-08-17 17:07:04 +0200 <lambdabot> *Exception: Pattern match failure in do expression at <interactive>:3:11-16
2022-08-17 17:07:11 +0200 <ski> > runST (do ~(Just x) <- return Nothing; return x)
2022-08-17 17:07:13 +0200 <lambdabot> *Exception: <interactive>:3:11-37: Non-exhaustive patterns in Just x
2022-08-17 17:07:46 +0200 <ski> @undo do ~(Just x) <- return Nothing; return x
2022-08-17 17:07:46 +0200 <lambdabot> return Nothing >>= \ ~(Just x) -> return x
2022-08-17 17:09:10 +0200alternateved(~user@staticline-31-183-146-203.toya.net.pl) (Remote host closed the connection)
2022-08-17 17:12:06 +0200nate4(~nate@98.45.169.16) (Ping timeout: 256 seconds)
2022-08-17 17:15:32 +0200coot(~coot@213.134.176.158) (Quit: coot)
2022-08-17 17:17:00 +0200acidjnk_new(~acidjnk@p200300d6e7137a0595bd943540671dc0.dip0.t-ipconnect.de)
2022-08-17 17:20:03 +0200acidjnk(~acidjnk@p200300d6e7137a0595bd943540671dc0.dip0.t-ipconnect.de) (Ping timeout: 248 seconds)
2022-08-17 17:22:53 +0200ec(~ec@gateway/tor-sasl/ec) (Remote host closed the connection)
2022-08-17 17:23:31 +0200ec(~ec@gateway/tor-sasl/ec)
2022-08-17 17:25:26 +0200tinwood_(~tinwood@general.default.akavanagh.uk0.bigv.io) (Remote host closed the connection)
2022-08-17 17:26:16 +0200Taneb0(~Taneb@runciman.hacksoc.org)
2022-08-17 17:26:38 +0200tinwood(~tinwood@general.default.akavanagh.uk0.bigv.io)
2022-08-17 17:26:38 +0200tinwood(~tinwood@general.default.akavanagh.uk0.bigv.io) (Changing host)
2022-08-17 17:26:38 +0200tinwood(~tinwood@canonical/tinwood)
2022-08-17 17:27:19 +0200Taneb(~Taneb@2001:41c8:51:10d:aaaa:0:aaaa:0) (Ping timeout: 244 seconds)
2022-08-17 17:27:55 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
2022-08-17 17:28:33 +0200merijn(~merijn@c-001-001-007.client.esciencecenter.eduvpn.nl) (Ping timeout: 256 seconds)
2022-08-17 17:28:38 +0200nilradical(~nilradica@user/naso)
2022-08-17 17:30:19 +0200 <qrpnxz> imagine if MonadState RealWord# IO worked. Then we could rewind the universe 😈. STM is a little bit like that. I wonder if you could actually wrap an SQL API (or other transactional API) with STM such that you could do work with them the same way one does TVars. That's be pretty cool.
2022-08-17 17:31:38 +0200 <geekosaur> STM doesn't work across processes, much less machines
2022-08-17 17:31:50 +0200 <geekosaur> and anything more than a couple of TVars would work poorly
2022-08-17 17:32:02 +0200 <c_wraith> It'd be limited in the same ways STM is.. No ability to make decisions based on IO inside a transaction
2022-08-17 17:32:25 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 252 seconds)
2022-08-17 17:32:31 +0200 <c_wraith> eh, STM doesn't *need* to be implemented with optimistic locking.
2022-08-17 17:34:37 +0200 <qrpnxz> STM Tvars don't work across processes doesn't mean other abstractions couldn't.
2022-08-17 17:36:02 +0200 <c_wraith> the IO thing is a big issue, though. Databases are often used in ways where that would matter.
2022-08-17 17:36:49 +0200 <c_wraith> And if you decide to allow arbitrary IO inside of transactions, you need to get rid of the automatic retry that makes STM work so nicely.
2022-08-17 17:37:53 +0200 <qrpnxz> i would ofc want both a way to do sql transactions in both IO and STM, not just STM.
2022-08-17 17:38:07 +0200bliminse(~bliminse@user/bliminse) (Quit: leaving)
2022-08-17 17:39:41 +0200 <qrpnxz> i'm just not sure what it would take to create a safe SQL version in STM. I don't know what way to tell haskell "if the STM fails, do this". I guess it's just not made for that, but it seems general enough to be useful. Like a resourcet but for transactions.
2022-08-17 17:39:52 +0200jgeerds(~jgeerds@55d46bad.access.ecotel.net)
2022-08-17 17:40:25 +0200f-a(f2a@f2a.jujube.ircnow.org)
2022-08-17 17:40:40 +0200f-a(f2a@f2a.jujube.ircnow.org) ()
2022-08-17 17:41:11 +0200tromp(~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
2022-08-17 17:41:40 +0200 <c_wraith> there's an idea there, but I'm afraid it wouldn't end up much like STM. It'd be something with relatively different semantics.
2022-08-17 17:42:41 +0200 <c_wraith> One relatively obvious thing is a wrapper for existing database transactions where you turn up the isolation level all the way to serializable, then provide an interface that doesn't allow IO and does automatic retries
2022-08-17 17:43:21 +0200tromp(~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
2022-08-17 17:43:40 +0200 <c_wraith> That would cover a lot of use cases with a high degree of safety
2022-08-17 17:44:33 +0200 <riverside> anyone with any experience with SDL_Audio?
2022-08-17 17:44:45 +0200 <riverside> https://hackage.haskell.org/package/sdl2-2.5.3.3/docs/SDL-Audio.html
2022-08-17 17:45:45 +0200 <ski> qrpnxz : fwiw, Mercury can memoize/table world state tokens, for "retry" (going back in time) for debugging. primitive operations will merely repeat the result they gave last time, rather than actually performing the I/O
2022-08-17 17:45:50 +0200 <riverside> why not just have a propper buffered time window segmentation
2022-08-17 17:46:22 +0200 <qrpnxz> ski: that's nice.
2022-08-17 17:46:24 +0200matthewmosior(~matthewmo@173.170.253.91) (Remote host closed the connection)
2022-08-17 17:46:49 +0200 <riverside> its a "live streaming setting" specifically
2022-08-17 17:47:01 +0200matthewmosior(~matthewmo@173.170.253.91)
2022-08-17 17:47:09 +0200 <qrpnxz> ski: i can't find the relevant mercury thing
2022-08-17 17:47:22 +0200 <riverside> mailboxes work from actor models
2022-08-17 17:48:13 +0200 <riverside> for thread interaction, and they read then synchronously in a one at a time nearest neighbour factorisation of some combination of seperate threads combining to make an overall function graph
2022-08-17 17:48:52 +0200 <riverside> this requires something like a disk write, though i think a UDP port might work, or something for fixed word sizes
2022-08-17 17:49:09 +0200 <riverside> otherwise TCP i guess
2022-08-17 17:49:13 +0200 <ski> qrpnxz : "Idempotent I/O for safe time travel" by Zoltan Somogyi in 2003-09 at <https://www.mercurylang.org/documentation/papers.html#aadebug03-paper>
2022-08-17 17:49:36 +0200 <qrpnxz> riverside: API seems to take a callback for writing to an audio buffer. What's the problem, exactly?
2022-08-17 17:49:51 +0200 <qrpnxz> mercury language ah
2022-08-17 17:49:53 +0200 <qrpnxz> thx
2022-08-17 17:50:12 +0200 <riverside> i cant get at the soundcard from haskell, i cant make sound come from the speakers or headset
2022-08-17 17:50:30 +0200 <riverside> code snippit if it exists would be preddy useful
2022-08-17 17:50:42 +0200 <ski> (iirc, OCaml also has some kind of back-in-time debugging, although i think it relies on regular snapshots, rather than backtracking/trailing or so .. also, i dunno if it does I/O tabling)
2022-08-17 17:51:34 +0200 <riverside> last time there was a problem with buffers being quite long and introducing lag
2022-08-17 17:51:40 +0200 <qrpnxz> ski: oh i get that now. Really nice! Sounds kind of expensive tho?
2022-08-17 17:52:18 +0200 <ski> it says "The overhead of this mechanism is low enough and can be controlled well enough to make it practical to use it to debug computations that do significant amounts of I/O."
2022-08-17 17:52:29 +0200 <riverside> you really want to be able to follow the build/fold fusion down to emiting actual speaker movements or something
2022-08-17 17:52:32 +0200 <qrpnxz> but that is neat because it allows you to replay an effectful stream. Which for a lib i'm working on is a big no-no
2022-08-17 17:52:44 +0200 <riverside> ie not using buffers but being granular through a fold
2022-08-17 17:53:33 +0200janus(janus@anubis.0x90.dk)
2022-08-17 17:54:27 +0200 <riverside> and if not, any interface that can emit a buffers worth of sound
2022-08-17 17:54:35 +0200 <qrpnxz> mmm, no. You need a buffer. I mean, you could abstract away the buffer, but it's always gonna be there. That's how all audio interfaces work. Not buffering (especially in haskell boxed types) would be way too slow.
2022-08-17 17:55:06 +0200 <riverside> sure, any example of that would do
2022-08-17 17:55:31 +0200bliminse(~bliminse@user/bliminse)
2022-08-17 17:55:47 +0200 <riverside> *least sufficient search term straining*
2022-08-17 17:56:08 +0200 <riverside> the c lib must be easy to build on wsl
2022-08-17 17:56:09 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
2022-08-17 17:56:17 +0200 <riverside> oh shit and how to do the soundcard through that
2022-08-17 17:56:45 +0200 <qrpnxz> have you tried not using windows. It's great
2022-08-17 17:56:47 +0200 <ski> qrpnxz : i guess, vaguely related to lazy I/O as well
2022-08-17 17:56:49 +0200 <c_wraith> SDL also provides the raw interfaces, direct C bindings of the SDL interfaces
2022-08-17 17:56:59 +0200 <c_wraith> err, the haskell SDL library also provides....
2022-08-17 17:57:10 +0200 <riverside> SDL-Audio seemed like it was worth a try
2022-08-17 17:57:26 +0200 <c_wraith> there's SDL.Raw.Audio
2022-08-17 17:58:27 +0200 <qrpnxz> sdl haskell lib pretty nice 😃 good to know
2022-08-17 17:59:24 +0200 <riverside> so this is all a load of givverish to me, is there a higher level interface? https://hackage.haskell.org/package/sdl2-2.5.3.3/docs/SDL-Audio.html
2022-08-17 17:59:48 +0200 <ski> (fwiw, <https://www.swi-prolog.org/pldoc/man?section=pio> implements lazy I/O, in SWI-Prolog)
2022-08-17 18:00:48 +0200 <ski> (the lazy list memoizes the characters read from the stream/handle)
2022-08-17 18:00:54 +0200 <riverside> if your not streaming you can opperato on the transpose of the buffer
2022-08-17 18:01:12 +0200 <riverside> for the simitanious "per itteration scope"
2022-08-17 18:02:01 +0200 <riverside> todo with the centrality of state transfer in timeseries
2022-08-17 18:02:12 +0200 <ski> (and <https://smlfamily.github.io/Basis/stream-io.html> in SML does the same .. although you get a chunk at a time, not just a character)
2022-08-17 18:02:49 +0200nilradical(~nilradica@user/naso) ()
2022-08-17 18:03:08 +0200 <riverside> ski: this is a simple example of monadic tailing
2022-08-17 18:03:20 +0200 <riverside> they have a sequential graphi in the IO monad emulating a timeseries
2022-08-17 18:03:39 +0200 <riverside> ListT IO
2022-08-17 18:04:17 +0200 <c_wraith> funny, that's exactly the type streaming libraries are intended to replace
2022-08-17 18:04:49 +0200 <riverside> well the IO bit is kind of required for any live interfacing
2022-08-17 18:04:55 +0200 <riverside> so any interfacing at all i guess
2022-08-17 18:05:13 +0200 <riverside> could just be an emitter
2022-08-17 18:05:23 +0200jgeerds(~jgeerds@55d46bad.access.ecotel.net) (Ping timeout: 248 seconds)
2022-08-17 18:05:36 +0200 <geekosaur[m]> riverside, I think the only higher level with audio is MIDI patches, which requires MIDI hardware or an emulator
2022-08-17 18:05:37 +0200 <riverside> oh but yeah, if its to ever have any effect, "the time is now" and if it cant do that
2022-08-17 18:05:54 +0200 <riverside> needs IO for real woulrd input And output
2022-08-17 18:06:14 +0200 <riverside> you just dont want to do threading
2022-08-17 18:06:46 +0200 <riverside> and are having a boundary problem todo with a monad section under bind splitting between within running programs and between them
2022-08-17 18:07:20 +0200 <riverside> mailboxes partition nicely between running programs in a partitioned program graph
2022-08-17 18:07:40 +0200 <riverside> implementing a state transfer formalism for "unrolling programs in time"
2022-08-17 18:08:02 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection)
2022-08-17 18:08:02 +0200 <riverside> here "time" being its interaction with us here in the real world via IO
2022-08-17 18:08:09 +0200 <riverside> IO = Time in this setting
2022-08-17 18:08:18 +0200 <riverside> or like, RealTime
2022-08-17 18:08:34 +0200 <riverside> as in, when the thread communications happen
2022-08-17 18:08:41 +0200 <riverside> or their buffered counterpart
2022-08-17 18:08:55 +0200 <riverside> buffers can transpose so no need for composition of scanners
2022-08-17 18:09:14 +0200 <riverside> can get column wise calculations that way
2022-08-17 18:09:24 +0200 <riverside> by using map
2022-08-17 18:09:31 +0200 <riverside> and transpose
2022-08-17 18:09:40 +0200 <riverside> transpose somehow neatly doing all the scanning part there
2022-08-17 18:09:45 +0200ccapndave(~ccapndave@mob-194-230-146-204.cgn.sunrise.net)
2022-08-17 18:10:53 +0200kenran(~kenran@200116b82b7885000a30634e15848455.dip.versatel-1u1.de)
2022-08-17 18:11:31 +0200 <riverside> and you can of course scan it aswell, then instead of scanning over the seperate threads, your scanning over the combined heads with one opperation, which has the full "vector" or whatever, of state data for the current time segment
2022-08-17 18:12:02 +0200 <riverside> per-itteration state transfer within the finite time widthed buffer
2022-08-17 18:12:46 +0200 <riverside> and then the concurrency is when this spreads between programs
2022-08-17 18:13:29 +0200 <riverside> again, instead of scanning monoid concatination, which is required usually in generation of blocks of data
2022-08-17 18:13:55 +0200 <riverside> if able to simply map over an *available* block, then the transpose can be taken instead of the sequential scanning monoid ever appearing
2022-08-17 18:14:25 +0200 <riverside> well, really, fold over the transposed block into columns
2022-08-17 18:14:32 +0200 <riverside> with the output IO opperation
2022-08-17 18:14:50 +0200 <geekosaur> riverside, does this have context?
2022-08-17 18:14:52 +0200 <riverside> its a scanner still though really
2022-08-17 18:14:55 +0200zebrag(~chris@user/zebrag)
2022-08-17 18:15:31 +0200 <riverside> geekosaur: yes, the live streaming context was that of outputing to an api that could play segments of music in a poorted interface from some C lib
2022-08-17 18:16:12 +0200 <riverside> geekosaur: in order to connect keystrokes to sound triggers
2022-08-17 18:16:26 +0200 <c_wraith> riverside: maybe take a look at tidal. not as a library necessarily, but look at how it does stuff
2022-08-17 18:16:33 +0200 <riverside> which required the concurrent threading *between* programs, which is scary cos it splits the graph
2022-08-17 18:16:45 +0200 <c_wraith> https://hackage.haskell.org/package/tidal
2022-08-17 18:16:52 +0200ccapndave(~ccapndave@mob-194-230-146-204.cgn.sunrise.net) (Quit: My MacBook has gone to sleep. ZZZzzz…)
2022-08-17 18:16:53 +0200 <geekosaur> I'm wondering if you're reinventing MIDI
2022-08-17 18:17:15 +0200 <riverside> problys
2022-08-17 18:17:22 +0200 <ski> dunno what you mean by "transpose", here
2022-08-17 18:17:23 +0200 <geekosaur> last time I checked MIDI emulators came with a very limited selection of patches, but that was in the 90s
2022-08-17 18:17:32 +0200 <riverside> no, its a live stream with non-overlapping segmentation
2022-08-17 18:17:41 +0200 <ski> what kind of patches ?
2022-08-17 18:17:43 +0200 <c_wraith> riverside: really, look at tidal
2022-08-17 18:17:52 +0200 <riverside> you just waant to be able to push the buffer to a que and ensure it will pllay in a given time segment in real time
2022-08-17 18:18:02 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
2022-08-17 18:19:11 +0200 <riverside> i super low latency sound prlayer would work if you tricked it with some offsets so it played nicely at the right time
2022-08-17 18:19:24 +0200 <riverside> but really thats why we want interface to a c lib bound within haskell
2022-08-17 18:19:43 +0200 <c_wraith> tidal is all about scheduling playback of samples or synths
2022-08-17 18:20:13 +0200 <riverside> c_wraith: i cant see if they managed to emit sound easily from what i can see of their project nothing obvious
2022-08-17 18:20:57 +0200 <riverside> a link to anything playing a buffer of sound would be super useful
2022-08-17 18:21:46 +0200 <riverside> > 60/(3*2^14/44100)
2022-08-17 18:21:48 +0200 <lambdabot> 53.8330078125
2022-08-17 18:22:22 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 256 seconds)
2022-08-17 18:22:51 +0200 <riverside> bpm
2022-08-17 18:24:46 +0200 <riverside> i think mailboxes introduce a lag that requires a buffer of a particular size
2022-08-17 18:25:05 +0200 <riverside> to guarantee synchronous reads
2022-08-17 18:25:31 +0200 <riverside> its always one buffer behind, obviously
2022-08-17 18:25:34 +0200ccapndave(~ccapndave@mob-194-230-146-204.cgn.sunrise.net)
2022-08-17 18:25:44 +0200 <geekosaur> ski, a MIDI patch is basically a digitized segment of sound that the MIDI device/emulator can play bback as is or modified (pitch, attack/delay, etc.)
2022-08-17 18:26:02 +0200 <riverside> and this lag is critical, too much so to use read and write to disk!? how isnt that the fastest thing?
2022-08-17 18:26:14 +0200 <riverside> have to write just to ram somehow
2022-08-17 18:26:23 +0200 <geekosaur> spinning rust is slow 🙂
2022-08-17 18:26:39 +0200 <riverside> i dont think 2 haskel programs can share ram, so write to disk is it really, just standard mailboxes
2022-08-17 18:27:27 +0200 <riverside> since theres just one stream of output thread, and one responding driven thread, its just one message, a file write, to be read by another part of the program
2022-08-17 18:27:52 +0200 <riverside> er, well, having it in two programs would mean you would have to do that
2022-08-17 18:28:31 +0200 <riverside> but if you have them in one program then you just monoid it all together anyway to get the columns and could just use a transposed buffer for that reason, and then it could be kept very short
2022-08-17 18:28:51 +0200merijn(~merijn@c-001-001-007.client.esciencecenter.eduvpn.nl)
2022-08-17 18:29:08 +0200chele(~chele@user/chele) (Remote host closed the connection)
2022-08-17 18:29:16 +0200 <riverside> or just combine scanners if doing something like zipping or zipping with the streams to try and implement a message passing graph of scanning functions
2022-08-17 18:29:33 +0200 <riverside> or wrap it all up neatly in transpose
2022-08-17 18:29:57 +0200 <riverside> so i just need to be able to drop a piece of sound over precisely the correct time.
2022-08-17 18:30:08 +0200 <riverside> so i implement some kind of crude calculated pause
2022-08-17 18:30:21 +0200 <riverside> and then it just calls a function
2022-08-17 18:30:29 +0200 <riverside> which must then play the sound as fast as it can
2022-08-17 18:30:44 +0200 <riverside> and if there is some delay this can be tracked somehow and compensated for
2022-08-17 18:31:11 +0200 <riverside> eg if having to call an actual fully fledged sound exe which might be quite large
2022-08-17 18:31:29 +0200 <riverside> but at least isolates the program we want, which is any haskell program that can play a sound file
2022-08-17 18:31:43 +0200 <riverside> phrased like that kind of eliminates of this live stream patch sequence stuff
2022-08-17 18:31:49 +0200 <geekosaur> you want tidal. or to interface with a midi emulator.
2022-08-17 18:32:00 +0200 <geekosaur> something higher level than bit banging
2022-08-17 18:33:12 +0200 <albet70> are ST Monad and State Monad different things?
2022-08-17 18:33:29 +0200 <jean-paul[m]> yes
2022-08-17 18:33:57 +0200 <albet70> what ST stands for?
2022-08-17 18:33:58 +0200 <geekosaur> the names are somewhat unfortunate
2022-08-17 18:34:02 +0200 <geekosaur> "state thread"
2022-08-17 18:34:07 +0200 <riverside> i think you caould make STM concurrent using mailboxes for graph programs over threads as carried states
2022-08-17 18:34:34 +0200 <geekosaur> basically, with normal pure code you neither know nor care what's evaluating it whne. a state thread is an imperative-like thread of control
2022-08-17 18:34:45 +0200 <geekosaur> *when
2022-08-17 18:35:14 +0200ccapndave(~ccapndave@mob-194-230-146-204.cgn.sunrise.net) (Quit: Textual IRC Client: www.textualapp.com)
2022-08-17 18:35:27 +0200 <riverside> you *want* access to the whole vector, data between programs, impossible. you get, the ability to do nearest neighbour message passing with a one step lag on a fully connected program graph corresponding to an unrestricted scope over the state vector
2022-08-17 18:36:05 +0200 <ski> geekosaur : ah, a sample
2022-08-17 18:36:13 +0200 <geekosaur> but distinct from CPU threads. it's sequenced like IO but you can do it in pure code as long as the result is pure, which the phantom "s" parameter ensures by "infecting" any impure data
2022-08-17 18:36:19 +0200zitkat(~zitkat@router-kraduha2-nat-c.pilsfree.net) (Ping timeout: 248 seconds)
2022-08-17 18:36:26 +0200 <albet70> what that async/await model is?
2022-08-17 18:37:17 +0200zeenk(~zeenk@2a02:2f04:a311:2d00:6865:d863:4c93:799f) (Quit: Konversation terminated!)
2022-08-17 18:37:26 +0200 <geekosaur> you fire off a bunch of threads to do computations and await their completion
2022-08-17 18:37:42 +0200 <geekosaur> simpleminded parallelism
2022-08-17 18:38:18 +0200FinnElija(~finn_elij@user/finn-elija/x-0085643) (Ping timeout: 268 seconds)
2022-08-17 18:38:22 +0200 <qrpnxz> if you are talking about haskell async lib, that's only potentially parallel
2022-08-17 18:38:50 +0200FinnElija(~finn_elij@user/finn-elija/x-0085643)
2022-08-17 18:39:12 +0200 <albet70> a lots of languages now have async/await, it's easier to do some coroutine than the old threads
2022-08-17 18:39:42 +0200 <riverside> erlang style
2022-08-17 18:40:09 +0200fef(~thedawn@user/thedawn) (Ping timeout: 268 seconds)
2022-08-17 18:40:15 +0200 <riverside> no this is buffered mailboxes, can use ports too
2022-08-17 18:40:18 +0200 <albet70> python 3.4, ES7, kotlin coroutine etc... but old java still using threads
2022-08-17 18:40:32 +0200Pickchea(~private@user/pickchea)
2022-08-17 18:40:35 +0200 <riverside> idk how you access between threads
2022-08-17 18:40:41 +0200 <zzz> is there any automatic parallellism in haskel?
2022-08-17 18:40:57 +0200 <davean> zzz: define automatic parallellism
2022-08-17 18:41:05 +0200 <riverside> compilation is very good?
2022-08-17 18:41:06 +0200 <davean> the answer is both yes and no basicly
2022-08-17 18:41:09 +0200 <zzz> like mapping over a list for example
2022-08-17 18:41:18 +0200 <geekosaur> zzz, the closest you get is Control.Parallel.Strategies, I think
2022-08-17 18:41:26 +0200 <qrpnxz> hypothetically yes, but i think you need `par` and stuff which is :/
2022-08-17 18:41:36 +0200 <davean> geekosaur: nah, some datatypes are processed inherently parallel
2022-08-17 18:41:44 +0200 <davean> like some of the array libraries
2022-08-17 18:41:53 +0200 <davean> (well, tensor? They're more than arrays)
2022-08-17 18:41:54 +0200 <riverside> where as this way just uses *do this all exactly at the same time* for mailbox reads
2022-08-17 18:42:02 +0200 <zzz> davean: that's what i'm looking for. can you tell me more about it?
2022-08-17 18:42:22 +0200 <riverside> writeFile,readFile
2022-08-17 18:42:42 +0200 <riverside> its not *that* slow, right?
2022-08-17 18:42:48 +0200 <qrpnxz> first-class coroutines in haskell would be pretty cool
2022-08-17 18:43:01 +0200 <qrpnxz> built-in, lua style
2022-08-17 18:43:05 +0200 <riverside> easer not to look for anyway
2022-08-17 18:43:06 +0200benin0(~benin@183.82.31.103) (Quit: The Lounge - https://thelounge.chat)
2022-08-17 18:43:08 +0200 <davean> zzz: theres thigns like https://hackage.haskell.org/package/massiv but like I don't use any of the less explicite stuff, because why would I? Its easy to be explicite and get way more.
2022-08-17 18:43:24 +0200 <riverside> well ports for between machines
2022-08-17 18:43:24 +0200 <zzz> is there a reason why mapping over a list for example, with pure functions and immutability, can't be automatically parallellized?
2022-08-17 18:43:42 +0200 <riverside> but again, just need cross machine file read and write which like ssh can do so
2022-08-17 18:44:01 +0200 <davean> zzz: Well what there is is a problem if you do
2022-08-17 18:44:05 +0200 <davean> zzz: because that changes performance
2022-08-17 18:44:10 +0200kenran(~kenran@200116b82b7885000a30634e15848455.dip.versatel-1u1.de) (Quit: WeeChat info:version)
2022-08-17 18:44:17 +0200 <riverside> mapping should be parallel
2022-08-17 18:44:17 +0200 <davean> what you can do is explicitely change out a map for a mapConcurrent
2022-08-17 18:44:25 +0200 <riverside> always
2022-08-17 18:44:29 +0200 <davean> because you should tell the compiler what you want
2022-08-17 18:44:33 +0200 <riverside> its scanning thats consecutive
2022-08-17 18:44:39 +0200 <davean> riverside: really it shouldn't, parallelism can ruin CPU performance
2022-08-17 18:44:47 +0200 <zzz> davean: lol no. this is haskell :p
2022-08-17 18:44:55 +0200 <davean> zzz: hum?
2022-08-17 18:45:08 +0200 <riverside> the values can all be computed on seperate forked threads
2022-08-17 18:45:17 +0200 <geekosaur> zzz, somewhat infamously it's difficult to determine when the overhead of spawning threads is higher than the benefit from parallelization. not to mention that sometimes you want things to remain lazy
2022-08-17 18:45:25 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
2022-08-17 18:45:31 +0200 <geekosaur> instead of being forced by parallelization
2022-08-17 18:45:34 +0200 <qrpnxz> haskell or not, threads are overhead. You certainly would not want to do parallel for just a hundred elements for example
2022-08-17 18:45:45 +0200 <qrpnxz> and with lists you can't know how many it will be
2022-08-17 18:45:57 +0200 <riverside> actors does it all for a graph which is all
2022-08-17 18:45:57 +0200 <zzz> ok
2022-08-17 18:45:59 +0200 <qrpnxz> (unless you re traverse, which is pretty bad way to start)
2022-08-17 18:46:10 +0200 <davean> riverside: they CAN but that isn't usually good
2022-08-17 18:46:12 +0200jao(~jao@cpc103048-sgyl39-2-0-cust502.18-2.cable.virginm.net)
2022-08-17 18:46:14 +0200 <riverside> mailboxes, nearest neighbour message passing on a fully connected graph
2022-08-17 18:46:23 +0200 <riverside> even works between programs and machines
2022-08-17 18:46:34 +0200 <riverside> uses read and write file, super simple
2022-08-17 18:46:39 +0200 <zzz> i'm having some trouble parsing some of your sentences
2022-08-17 18:46:40 +0200 <davean> riverside: And actors have HORRID performance.
2022-08-17 18:46:45 +0200 <riverside> nope
2022-08-17 18:46:48 +0200 <davean> Like truly attrocious
2022-08-17 18:46:49 +0200 <riverside> we do transpose
2022-08-17 18:46:49 +0200 <geekosaur> yep
2022-08-17 18:46:51 +0200 <davean> No, seriously
2022-08-17 18:47:02 +0200 <davean> like several orders of magnitude slower than the compute should be
2022-08-17 18:47:02 +0200zitkat(~zitkat@router-kraduha2-nat-c.pilsfree.net)
2022-08-17 18:47:04 +0200 <riverside> its just the fully available state carry
2022-08-17 18:47:11 +0200 <davean> thousands of times or tens of thousands of times
2022-08-17 18:47:11 +0200 <qrpnxz> ofc they do. You just said the word "file", automatically this is super overhead that may or may not be worth it sometimes
2022-08-17 18:47:29 +0200 <riverside> and weer using buffers anyway, so are now opperating on per-time column datat
2022-08-17 18:47:35 +0200 <davean> riverside: you're just wrong and I don't know why we'd have this discussion anymore.
2022-08-17 18:48:01 +0200 <riverside> right, but thats the boundry positioning problem
2022-08-17 18:48:13 +0200 <riverside> keep as much in one program as possible, and one thread aswell then i guess
2022-08-17 18:49:00 +0200jgeerds(~jgeerds@55d46bad.access.ecotel.net)
2022-08-17 18:49:01 +0200 <riverside> so this is when you dont have to use mailboxes internally inside a running program
2022-08-17 18:49:12 +0200geekosaursincerely doubts riverside has any clue what they're talking about
2022-08-17 18:49:15 +0200 <davean> One has to very carefully pick their parallelism to get proper benefit from it.
2022-08-17 18:49:24 +0200 <davean> geekosaur: oh its deeply clear they have no fucking clue at all
2022-08-17 18:49:35 +0200 <riverside> we partition the state between programs, and seek to share memory live
2022-08-17 18:49:38 +0200 <davean> Which is why I was wondering why we were even havign the conversation
2022-08-17 18:49:45 +0200ChanServ+o geekosaur
2022-08-17 18:49:50 +0200 <riverside> as facilitated by simple mailboxes
2022-08-17 18:49:57 +0200 <zzz> ok great it's not just me
2022-08-17 18:50:14 +0200geekosaur+q *!~riverside@213.205.241.143
2022-08-17 18:50:18 +0200 <davean> They seem to think a mailbox interaction somehow isn't larger than most calculations
2022-08-17 18:50:28 +0200 <geekosaur> when it's much larger, yeh
2022-08-17 18:50:30 +0200 <davean> which means they know nothing about how syncronization works in CPUs
2022-08-17 18:50:41 +0200 <davean> Because of like bus locks
2022-08-17 18:50:47 +0200 <davean> JUST A BUS LOCK ALONE!!!
2022-08-17 18:51:04 +0200 <davean> You have any idea how many thousands of instructions a bus lock usually turns out to be?
2022-08-17 18:51:30 +0200 <davean> (ok, often its only hundreds)
2022-08-17 18:51:32 +0200 <qrpnxz> i think they were talking about making STM concurrent or something, but they were just going on and on?
2022-08-17 18:51:37 +0200Colere(~colere@about/linux/staff/sauvin) (Ping timeout: 252 seconds)
2022-08-17 18:51:57 +0200 <davean> qrpnxz: I mean STM doesn't remove the atomic operations
2022-08-17 18:52:08 +0200 <geekosaur> they were doing that before I got up this morning, I found wall-of-nonsense-text in my scrollback
2022-08-17 18:52:14 +0200 <qrpnxz> lol
2022-08-17 18:52:21 +0200tromp(~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
2022-08-17 18:52:29 +0200 <davean> and atomic operations on a CPU require a memory controller lock to control said memory (or with HLE at least a cache lock and roll back)
2022-08-17 18:52:31 +0200nattiestnate(~nate@180.243.14.130) (Quit: WeeChat 3.6)
2022-08-17 18:52:40 +0200 <[exa]> davean: it's hundreds on all CPUs right?
2022-08-17 18:52:51 +0200lottaquestions(~nick@104.221.24.83) (Quit: Konversation terminated!)
2022-08-17 18:52:57 +0200 <qrpnxz> oh yeah just scrolled back
2022-08-17 18:53:02 +0200 <davean> [exa]: Uh, no, sorta but yes in reality? There are WEIRD CPUs where counting instructions is strange like ThreadStorm
2022-08-17 18:53:19 +0200 <davean> [exa]: and like on ThreadStorm its a bit ... weird
2022-08-17 18:53:41 +0200 <davean> or some CPUs are slow enough they're in sync with RAM or only access L3 like RAM (Cell processors come to mind but not really)
2022-08-17 18:53:50 +0200 <davean> [exa]: but any CPU you're thinking of? Yah
2022-08-17 18:54:09 +0200tzh(~tzh@c-24-21-73-154.hsd1.wa.comcast.net)
2022-08-17 18:54:15 +0200geekosaur-o geekosaur
2022-08-17 18:54:20 +0200 <davean> Any CPU Haskell is relivent on? Yah
2022-08-17 18:54:27 +0200 <[exa]> nah I really just asked, didn't know how brutal these are
2022-08-17 18:55:03 +0200 <davean> [exa]: So there are a few options and a FEW things that can optimize, but MOSTLY you're takign exclusive control of a memory controller for the period to prevent conflicts
2022-08-17 18:55:30 +0200 <davean> That that OFTEN lasts until the full read/write cycle of actual RAM has completed
2022-08-17 18:55:46 +0200 <davean> Like theres a pile of caviates, CPUs are complicated
2022-08-17 18:55:50 +0200ChanServ+o litharge
2022-08-17 18:55:51 +0200litharge-qo *!~riverside@213.205.241.143 litharge
2022-08-17 18:56:07 +0200 <geekosaur> (I set a short timeout)
2022-08-17 18:56:17 +0200 <geekosaur> will increase it if needed
2022-08-17 18:56:51 +0200econo(uid147250@user/econo)
2022-08-17 18:57:09 +0200 <davean> Anyway, the moral of the story is you really only want large blocks of parallelism which generally means making an inteligent choice about waht to parallelize
2022-08-17 18:57:33 +0200 <davean> because the cordination will kill you and amsdal(sp)'s law will come for you in the night.
2022-08-17 18:58:09 +0200Colere(~colere@about/linux/staff/sauvin)
2022-08-17 18:58:12 +0200 <qrpnxz> amdahl?
2022-08-17 18:58:18 +0200 <geekosaur> was my guess
2022-08-17 18:58:26 +0200 <qrpnxz> 👍
2022-08-17 18:58:34 +0200 <davean> qrpnxz: that sounds right
2022-08-17 18:59:01 +0200 <[exa]> we should make some kind of a nicely named rule of thumb for this task granularity thing, so that it can get popular on hackernews etc and doesn't need to get explained all over again
2022-08-17 18:59:32 +0200 <davean> [exa]: haha, is this not common knowlege?
2022-08-17 18:59:45 +0200 <davean> I figured I was boring everyone to tears with programming 101 talk
2022-08-17 18:59:48 +0200 <[exa]> it is, among people who got hurt by synchronization overhead already
2022-08-17 19:00:18 +0200Furor(~colere@about/linux/staff/sauvin)
2022-08-17 19:00:41 +0200 <[exa]> young people are sometimes just like "let's send this addition to thread #5 because that is specialized to additions and we save one if()"
2022-08-17 19:00:56 +0200 <[exa]> ^mild exaggeration
2022-08-17 19:01:10 +0200 <davean> Just make it a conditional add
2022-08-17 19:01:51 +0200 <davean> enable/disable bits are fun
2022-08-17 19:02:11 +0200daveanlooks around
2022-08-17 19:02:23 +0200 <davean> You don't all plan out the assembly when you right Haskell? What? Just me?
2022-08-17 19:03:11 +0200Colere(~colere@about/linux/staff/sauvin) (Ping timeout: 256 seconds)
2022-08-17 19:03:11 +0200merijn(~merijn@c-001-001-007.client.esciencecenter.eduvpn.nl) (Ping timeout: 256 seconds)
2022-08-17 19:04:31 +0200 <davean> Which can I mention 9.4? :)
2022-08-17 19:04:49 +0200cfricke(~cfricke@user/cfricke) (Ping timeout: 252 seconds)
2022-08-17 19:04:49 +0200zitkat(~zitkat@router-kraduha2-nat-c.pilsfree.net) (Quit: Leaving)
2022-08-17 19:06:10 +0200 <geekosaur[m]> The stuff I usually write, I don't care
2022-08-17 19:06:56 +0200 <geekosaur[m]> The computer is faster than me, that's good enough 😀
2022-08-17 19:08:58 +0200lottaquestions(~nick@2607:fa49:503e:7100:17b4:8a9c:cee3:3359)
2022-08-17 19:11:50 +0200matthewmosior(~matthewmo@173.170.253.91) (Remote host closed the connection)
2022-08-17 19:12:28 +0200janus(janus@anubis.0x90.dk) ()
2022-08-17 19:14:55 +0200matthewmosior(~matthewmo@173.170.253.91)
2022-08-17 19:15:02 +0200daveanlooks over at htop, sees it reading 700d4h
2022-08-17 19:15:08 +0200daveanquietly hides htop
2022-08-17 19:15:47 +0200k8yun(~k8yun@user/k8yun)
2022-08-17 19:15:49 +0200Pickchea(~private@user/pickchea) (Ping timeout: 252 seconds)
2022-08-17 19:16:05 +0200matthewmosior(~matthewmo@173.170.253.91) (Remote host closed the connection)
2022-08-17 19:17:57 +0200pavonia(~user@user/siracusa) (Quit: Bye!)
2022-08-17 19:17:59 +0200matthewmosior(~matthewmo@173.170.253.91)
2022-08-17 19:19:51 +0200 <davean> When my CPU time is messured in years, I do infact care about factors of 1000x
2022-08-17 19:20:46 +0200 <davean> I don't plan on dieing young, but I certainly care about a few thousand years of my life
2022-08-17 19:21:41 +0200jgeerds(~jgeerds@55d46bad.access.ecotel.net) (Ping timeout: 252 seconds)
2022-08-17 19:25:22 +0200kannon(~NK@135-180-47-54.fiber.dynamic.sonic.net)
2022-08-17 19:26:16 +0200 <dolio> Yes, the 'experts' on hackernews would never need to be told 101 level stuff. :þ
2022-08-17 19:28:10 +0200 <davean> dolio: Of course, never
2022-08-17 19:29:03 +0200adanwan(~adanwan@gateway/tor-sasl/adanwan) (Remote host closed the connection)
2022-08-17 19:29:29 +0200adanwan(~adanwan@gateway/tor-sasl/adanwan)
2022-08-17 19:29:46 +0200kannon(~NK@135-180-47-54.fiber.dynamic.sonic.net) (Ping timeout: 244 seconds)
2022-08-17 19:30:23 +0200mbuf(~Shakthi@122.165.55.71) (Quit: Leaving)
2022-08-17 19:35:31 +0200vysn(~vysn@user/vysn) (Ping timeout: 248 seconds)
2022-08-17 19:36:01 +0200riverside(~riverside@213.205.241.143) (Remote host closed the connection)
2022-08-17 19:36:19 +0200riverside(~riverside@213.205.241.143)
2022-08-17 19:40:28 +0200 <qrpnxz> geekosaur[m]: even when the computer is slower than a person it can be worth it if it's more correct and/or cheaper
2022-08-17 19:41:00 +0200 <geekosaur> the computer can also keep track of more things than I can, yes, so that's still a win
2022-08-17 19:41:25 +0200 <geekosaur> but I used to runghc most of my stuff and only compile now because I cabalized everything to teach myself cabal v2 workflow
2022-08-17 19:42:33 +0200 <qrpnxz> i was doing ghc manually, then i moved to a ninja script, but i wanted more automation for building that, and a few layers of abstraction in i concluded, "wait someone already solved this problem it's called cabal" lol
2022-08-17 19:42:58 +0200 <qrpnxz> but i didn't really appreciate cabal until i started half reimplementing it
2022-08-17 19:43:23 +0200 <qrpnxz> and stack is a few levels even above that
2022-08-17 19:44:15 +0200 <qrpnxz> i guess is something different than what you were talking about, but i was just reminded of this
2022-08-17 19:45:01 +0200 <qrpnxz> iirc, stack has some nice scripting helpers?
2022-08-17 19:46:20 +0200 <geekosaur> cabal has mostly caught up with it, I think the only real difference as of 3.8 is the resolver
2022-08-17 19:46:35 +0200 <geekosaur> in particular, cabal caches the result of building the script now
2022-08-17 19:55:03 +0200MajorBiscuit(~MajorBisc@c-001-030-027.client.tudelft.eduvpn.nl) (Ping timeout: 252 seconds)
2022-08-17 19:56:30 +0200Inoperable(~PLAYER_1@fancydata.science) (Excess Flood)
2022-08-17 20:01:49 +0200Inoperable(~PLAYER_1@fancydata.science)
2022-08-17 20:06:33 +0200matthewmosior(~matthewmo@173.170.253.91) (Remote host closed the connection)
2022-08-17 20:08:54 +0200acidjnk_new(~acidjnk@p200300d6e7137a0595bd943540671dc0.dip0.t-ipconnect.de) (Ping timeout: 256 seconds)
2022-08-17 20:09:02 +0200gmg(~user@user/gehmehgeh)
2022-08-17 20:11:11 +0200hippoid(~idris@c-98-220-13-8.hsd1.il.comcast.net) (Ping timeout: 252 seconds)
2022-08-17 20:13:24 +0200 <monochrom> I have some ideas what kind of asm code I'm getting from GHC.
2022-08-17 20:13:38 +0200 <monochrom> And I mostly just make peace with it. :)
2022-08-17 20:15:04 +0200Lord_of_Life_(~Lord@user/lord-of-life/x-2819915)
2022-08-17 20:15:43 +0200Lord_of_Life(~Lord@user/lord-of-life/x-2819915) (Ping timeout: 256 seconds)
2022-08-17 20:17:49 +0200Lord_of_Life_Lord_of_Life
2022-08-17 20:18:17 +0200vulpine(xfnw@tilde.team) (Quit: Connection reset by purr)
2022-08-17 20:21:20 +0200jgeerds(~jgeerds@55d46bad.access.ecotel.net)
2022-08-17 20:23:20 +0200matthewmosior(~matthewmo@173.170.253.91)
2022-08-17 20:28:20 +0200 <geekosaur> same
2022-08-17 20:28:59 +0200matthewmosior(~matthewmo@173.170.253.91) (Ping timeout: 255 seconds)
2022-08-17 20:29:25 +0200 <geekosaur> I have poked a bit at what comes out of the compiler, I just don't care most of the time. I'm the slow/high overhead part of the chain, not the program, so it's irrelevant
2022-08-17 20:31:18 +0200matthewmosior(~matthewmo@173.170.253.91)
2022-08-17 20:31:43 +0200hippoid(~idris@c-98-220-13-8.hsd1.il.comcast.net)
2022-08-17 20:34:19 +0200vglfr(~vglfr@145.224.94.221) (Remote host closed the connection)
2022-08-17 20:34:59 +0200vglfr(~vglfr@145.224.94.221)
2022-08-17 20:36:20 +0200kuribas(~user@ptr-17d51em3ydspl0uuwo7.18120a2.ip6.access.telenet.be) (Quit: ERC (IRC client for Emacs 26.3))
2022-08-17 20:36:37 +0200biberu(~biberu@user/biberu)
2022-08-17 20:39:00 +0200Inst(~Inst@2601:6c4:4080:3f80:38a1:ad8c:aa85:4bd8) (Ping timeout: 244 seconds)
2022-08-17 20:39:29 +0200Inst(~Inst@2601:6c4:4080:3f80:e0a9:7049:576:28ef)
2022-08-17 20:41:17 +0200mimmy(~mimmy@66-46-12-74.dedicated.allstream.net)
2022-08-17 20:41:47 +0200codaraxis(~codaraxis@user/codaraxis)
2022-08-17 20:45:15 +0200matthewmosior(~matthewmo@173.170.253.91) (Remote host closed the connection)
2022-08-17 20:45:21 +0200cfricke(~cfricke@user/cfricke)
2022-08-17 20:46:44 +0200ubert(~Thunderbi@178.165.179.220.wireless.dyn.drei.com)
2022-08-17 20:47:38 +0200vglfr(~vglfr@145.224.94.221) (Remote host closed the connection)
2022-08-17 20:48:19 +0200vglfr(~vglfr@145.224.94.221)
2022-08-17 20:49:01 +0200tromp(~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
2022-08-17 20:54:46 +0200lortabac(~lortabac@2a01:e0a:541:b8f0:216d:db30:5bf:3c9c)
2022-08-17 20:57:21 +0200matthewmosior(~matthewmo@173.170.253.91)
2022-08-17 20:59:22 +0200merijn(~merijn@c-001-001-007.client.esciencecenter.eduvpn.nl)
2022-08-17 21:00:37 +0200 <monochrom> After teaching a C-and-Unix course several times, I reckon that there are so many syscalls to make, and on top of that half of them copy humongous data between user space and kernel space, and last but not least you're calling strlen() on the same string over and over again, that the myth of "C code more efficient" is completely bust.
2022-08-17 21:01:50 +0200matthewmosior(~matthewmo@173.170.253.91) (Ping timeout: 255 seconds)
2022-08-17 21:02:13 +0200 <monochrom> At that rate Haskell is no more guilty than real-world C code.
2022-08-17 21:02:23 +0200matthewmosior(~matthewmo@173.170.253.91)
2022-08-17 21:03:47 +0200matthewmosior(~matthewmo@173.170.253.91) (Remote host closed the connection)
2022-08-17 21:04:03 +0200ubert(~Thunderbi@178.165.179.220.wireless.dyn.drei.com) (Ping timeout: 248 seconds)
2022-08-17 21:04:03 +0200 <geekosaur> "x code is more efficient" iff you put the right amount of effort into it, for any x
2022-08-17 21:04:46 +0200codaraxis(~codaraxis@user/codaraxis) (Quit: Leaving)
2022-08-17 21:05:10 +0200 <monochrom> Oh and I'm still teaching select() for portability haha.
2022-08-17 21:05:36 +0200ski(~ski@ext-1-308.eduroam.chalmers.se) (Ping timeout: 268 seconds)
2022-08-17 21:06:33 +0200 <tomsmeding> monochrom: not sure that point about copying data back and forth between user and kernel space makes sense; clearly that's what's happening, but haskell is not going to avoid the same syscalls
2022-08-17 21:06:42 +0200 <tomsmeding> *not going to be able to avoid
2022-08-17 21:06:53 +0200Tuplanolla(~Tuplanoll@91-159-69-12.elisa-laajakaista.fi)
2022-08-17 21:07:13 +0200 <geekosaur> that's kinda the point, I think: neither one can be more efficient with that overhead
2022-08-17 21:07:29 +0200 <geekosaur> *than the other
2022-08-17 21:07:59 +0200quarkyalice(~quarkyali@user/quarkyalice)
2022-08-17 21:08:18 +0200 <tomsmeding> there is a difference in speed _ceiling_, I guess; for many imperative algorithms, the maximum speed you can get out of C will probably be more than the maximum speed you can get out of Haskell without using custom FFI bindings
2022-08-17 21:08:25 +0200nate4(~nate@98.45.169.16)
2022-08-17 21:08:34 +0200 <tomsmeding> (though the difference need not be large)
2022-08-17 21:08:59 +0200 <tomsmeding> but monochrom's point is valid that practical business C code vs practical business Haskell code has little to do with that speed ceiling :p
2022-08-17 21:09:42 +0200 <tomsmeding> also, the speed ceiling of Fortran may even be higher than that of C for certain array-heavy workloads where C's memory model messes with you
2022-08-17 21:10:14 +0200quarkyalice(~quarkyali@user/quarkyalice) (Client Quit)
2022-08-17 21:12:51 +0200 <geekosaur> right. but we also have examples where haskell's speed ceiling can be higher for some workloads
2022-08-17 21:13:25 +0200king_gs(~Thunderbi@2806:103e:29:da7a:1f74:531c:dec2:7aec)
2022-08-17 21:13:32 +0200 <geekosaur> that said, neither is the general case
2022-08-17 21:13:37 +0200 <tomsmeding> hence my addition "for many imperative algorithms" -- but yes, good point
2022-08-17 21:13:38 +0200nate4(~nate@98.45.169.16) (Ping timeout: 268 seconds)
2022-08-17 21:14:01 +0200 <tomsmeding> you're not going to do a max-flow algorithm faster in haskell than in C :p
2022-08-17 21:14:52 +0200robbert-vdh(~robbert@robbertvanderhelm.nl)
2022-08-17 21:15:04 +0200matthewmosior(~matthewmo@173.170.253.91)
2022-08-17 21:15:08 +0200 <geekosaur> in general I'd expect well written C code to beat well written Haskell code. (then the question becomes, is it actually well written? Especially for C)
2022-08-17 21:15:31 +0200 <geekosaur> given the number of programmers who think they produce well written C code
2022-08-17 21:15:33 +0200 <int-e> For some time, one of the weirdest Haskell-is-faster-than-C niches was big integer arithmetic... I wonder whether that's still the case. Basically, many operations allocate temporaries, and `malloc` was slower than Haskell's heap management...
2022-08-17 21:15:35 +0200 <tomsmeding> yeah "well-written" is what one quickly reaches for when talking about this stuff, but it's really an ill-defined notion
2022-08-17 21:16:12 +0200 <tomsmeding> int-e: does haskell's GMP use the haskell heap allocator?
2022-08-17 21:16:16 +0200 <geekosaur> yes
2022-08-17 21:16:22 +0200 <tomsmeding> heh that's an interesting case
2022-08-17 21:16:24 +0200 <int-e> (This was ages ago, when ghc hacked GMP's malloc functions.)
2022-08-17 21:16:40 +0200 <tomsmeding> doesn't GMP allow overriding malloc and friends?
2022-08-17 21:16:40 +0200 <geekosaur> with the result that you can't mix haskell gmp with C gmp because you can't specify the allocator on a per function basis
2022-08-17 21:16:51 +0200 <int-e> The story now is that it uses the mpn_ interface.
2022-08-17 21:17:05 +0200 <int-e> geekosaur: You can, now.
2022-08-17 21:17:07 +0200 <geekosaur> ah
2022-08-17 21:17:27 +0200matthewmosior(~matthewmo@173.170.253.91) (Remote host closed the connection)
2022-08-17 21:17:47 +0200matthewmosior(~matthewmo@173.170.253.91)
2022-08-17 21:17:52 +0200ec(~ec@gateway/tor-sasl/ec) (Quit: ec)
2022-08-17 21:18:16 +0200 <tomsmeding> > Fast low-level functions that operate on natural numbers. These are used by the functions in the preceding groups, and you can also call them directly from very time-critical user programs. These functions’ names begin with mpn_. The associated type is array of mp_ limb_t. There are about 60 (hard-to-use) functions in this class.
2022-08-17 21:18:18 +0200 <tomsmeding> sounds good! :D
2022-08-17 21:18:26 +0200 <tomsmeding> (it's been a while I last worked with GMP)
2022-08-17 21:19:05 +0200 <int-e> Since GHC 8.0? I forgot, it may have been 7.10.
2022-08-17 21:19:11 +0200matthewmosior(~matthewmo@173.170.253.91) (Remote host closed the connection)
2022-08-17 21:19:20 +0200ec(~ec@gateway/tor-sasl/ec)
2022-08-17 21:19:38 +0200acidjnk_new(~acidjnk@p200300d6e7137a5774e66b102b0a005a.dip0.t-ipconnect.de)
2022-08-17 21:20:11 +0200 <Henson> ok, I figured out the OpenMP problem. Apparently running OpenMP from within Haskell causes the various OMP_* environment variables to be ignored. Dynamic thread teams is enabled by default. When my computer has had a bit of a break, OpenMP seems to think that using 2 threads is fine and will use them. Then if I load it up or rebuild the software then it will think 1 thread is better....
2022-08-17 21:20:39 +0200 <tomsmeding> Henson: the deciding factor is system load? O.o
2022-08-17 21:20:45 +0200 <Henson> By explicitly disabling dynamic thread teams in the C++ code using omp_set_dynamic(0) and then controlling the desired number of threads with omp_set_num_threads(2) I'm able to get it to work everytime
2022-08-17 21:20:48 +0200 <tomsmeding> I would _not_ have guessed that
2022-08-17 21:20:57 +0200 <tomsmeding> heh
2022-08-17 21:21:04 +0200 <tomsmeding> good sleuthing
2022-08-17 21:21:40 +0200matthewmosior(~matthewmo@173.170.253.91)
2022-08-17 21:21:43 +0200 <Henson> tomsmeding: it would appear to be. I ran the executable and OpenMP worked fine. Then I copied the executable, rebuilt the software, and ran the benchmark again. Then OpenMP didn't work. I compared the was-working and now-not-working binaries, and they're exactly the same. The only difference was that my computer was busy rebuilding the software and had a higher load.
2022-08-17 21:21:57 +0200 <Henson> I also would not have guessed that!
2022-08-17 21:22:54 +0200zeenk(~zeenk@2a02:2f04:a311:2d00:6865:d863:4c93:799f)
2022-08-17 21:23:02 +0200 <Henson> this still leaves the unusual question of: why does OpenMP make a different choice when the function is called using async", but I think I'll just leave that one a mystery.
2022-08-17 21:23:23 +0200 <Henson> as I imagine it will take even more time-consuming sleuthing and will not benefit me in the end
2022-08-17 21:23:25 +0200 <int-e> geekosaur: aha: https://downloads.haskell.org/~ghc/7.10.1/docs/html/users_guide/release-7-10-1.html "The integer-gmp package has been completely rewritten from the ground up. The primary change in this rewrite is that GHC-compiled programs that link to GMP no longer 'hook' GMP allocation routines [...]"
2022-08-17 21:23:33 +0200 <tomsmeding> 1. if I ever do work with openMP, I hope I'll remember to omp_set_dynamic(0) -- dynamic thread scaling based on current load sounds quite harmful
2022-08-17 21:24:02 +0200 <tomsmeding> 2. Henson: regarding those environment variables, that also sounds fishy; the variables are set in the environment of the Haskell program, but they've disappeared in the C++ code?
2022-08-17 21:24:45 +0200 <Henson> tomsmeding: yeah. The software's built with Nix, so I don't know if there's some fishiness going on there
2022-08-17 21:25:17 +0200 <tomsmeding> it's not the building that matters for env vars, it's the running
2022-08-17 21:25:19 +0200 <Henson> unless I'm not setting the variables correctly. I assume that "export OMP_FOO=BAR" will do the trick
2022-08-17 21:25:25 +0200 <tomsmeding> it _should_
2022-08-17 21:25:57 +0200 <Henson> tomsmeding: yeah but Nix somtimes wraps things up and has nested environments, which I don't think is happening in this case.
2022-08-17 21:26:32 +0200 <tomsmeding> Henson: you can check the environment of a process by reading /proc/$PID/environ
2022-08-17 21:26:32 +0200hippoid(~idris@c-98-220-13-8.hsd1.il.comcast.net) (Ping timeout: 256 seconds)
2022-08-17 21:26:39 +0200 <tomsmeding> "nested environments" is not a thing in unix :p
2022-08-17 21:27:15 +0200 <tomsmeding> (in that file, the key-value pairs are separated with null bytes)
2022-08-17 21:27:28 +0200 <Henson> tomsmeding: maybe "layered" environments
2022-08-17 21:27:29 +0200 <tomsmeding> s/separated/delimited/
2022-08-17 21:27:51 +0200 <Henson> tomsmeding: I'll have to investigate your suggestion a bit later, got to make a call
2022-08-17 21:28:04 +0200 <tomsmeding> still, that's not a thing in unix; if nix claims to do something like that, it will have to add and remove things from the actual environment at boundaries of the "layers"
2022-08-17 21:28:07 +0200 <tomsmeding> sure :)
2022-08-17 21:28:24 +0200 <tomsmeding> fool-proof way of setting something in the environment of a process is: $ env VAR=value ./binary
2022-08-17 21:29:27 +0200 <geekosaur[m]> Layered isn't a thing either. Nix nuking environments, sadly, is
2022-08-17 21:30:24 +0200jmdaemon(~jmdaemon@user/jmdaemon)
2022-08-17 21:31:10 +0200monochrom(trebla@216.138.220.146) (Quit: NO CARRIER)
2022-08-17 21:32:13 +0200monochrom(~trebla@216.138.220.146)
2022-08-17 21:33:23 +0200merijn(~merijn@c-001-001-007.client.esciencecenter.eduvpn.nl) (Ping timeout: 248 seconds)
2022-08-17 21:34:30 +0200riverside(~riverside@213.205.241.143) (Remote host closed the connection)
2022-08-17 21:34:48 +0200riverside(~riverside@213.205.241.143)
2022-08-17 21:43:35 +0200mimmy(~mimmy@66-46-12-74.dedicated.allstream.net) (Ping timeout: 252 seconds)
2022-08-17 21:44:31 +0200mimmy(~mimmy@66-46-12-74.dedicated.allstream.net)
2022-08-17 21:44:32 +0200mimmy(~mimmy@66-46-12-74.dedicated.allstream.net) (Client Quit)
2022-08-17 21:55:49 +0200chomwitt(~chomwitt@2a02:587:dc16:4100:1289:3f0b:2a03:948d)
2022-08-17 22:03:42 +0200erisco(~erisco@d24-57-249-233.home.cgocable.net) (Ping timeout: 264 seconds)
2022-08-17 22:04:33 +0200erisco(~erisco@d24-57-249-233.home.cgocable.net)
2022-08-17 22:09:56 +0200mmhat(~mmh@p200300f1c712fb1cee086bfffe095315.dip0.t-ipconnect.de) (Ping timeout: 244 seconds)
2022-08-17 22:10:33 +0200 <tomsmeding> oh my, I've been bitten by Foldable (a,)
2022-08-17 22:10:54 +0200 <tomsmeding> this may well have been the first time
2022-08-17 22:12:16 +0200Midjak(~Midjak@82.66.147.146) (Quit: This computer has gone to sleep)
2022-08-17 22:19:36 +0200martin02(~silas@141.84.69.76) (Ping timeout: 268 seconds)
2022-08-17 22:19:45 +0200king_gs(~Thunderbi@2806:103e:29:da7a:1f74:531c:dec2:7aec) (Ping timeout: 244 seconds)
2022-08-17 22:22:13 +0200lortabac(~lortabac@2a01:e0a:541:b8f0:216d:db30:5bf:3c9c) (Quit: WeeChat 2.8)
2022-08-17 22:24:12 +0200mmhat(~mmh@p200300f1c722777cee086bfffe095315.dip0.t-ipconnect.de)
2022-08-17 22:25:29 +0200merijn(~merijn@c-001-001-007.client.esciencecenter.eduvpn.nl)
2022-08-17 22:25:38 +0200yvan-sraka(~yvan-srak@37.168.2.133)
2022-08-17 22:27:22 +0200pavonia(~user@user/siracusa)
2022-08-17 22:27:37 +0200takuan(~takuan@178-116-218-225.access.telenet.be) (Remote host closed the connection)
2022-08-17 22:28:57 +0200yvan-sraka(~yvan-srak@37.168.2.133) (Remote host closed the connection)
2022-08-17 22:29:47 +0200raehik(~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 252 seconds)
2022-08-17 22:31:44 +0200martin02(~silas@141.84.69.76)
2022-08-17 22:31:52 +0200raehik(~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net)
2022-08-17 22:33:24 +0200merijn(~merijn@c-001-001-007.client.esciencecenter.eduvpn.nl) (Ping timeout: 256 seconds)
2022-08-17 22:33:45 +0200 <monochrom> "Get well soon." >:)
2022-08-17 22:35:21 +0200 <tomsmeding> monochrom: the problem with this particular malady is that you only realise it was this one when you've already recovered :p
2022-08-17 22:35:58 +0200 <Rembane_> Sounds like depression
2022-08-17 22:36:16 +0200 <tomsmeding> accurate, for Foldable (a,)
2022-08-17 22:41:29 +0200cdsmith(~cdsmithma@2001:470:69fc:105::284)
2022-08-17 22:43:48 +0200drdo(~drdo@roach0.drdo.eu) (Quit: The Lounge - https://thelounge.chat)
2022-08-17 22:44:21 +0200drdo(~drdo@roach0.drdo.eu)
2022-08-17 22:46:50 +0200gio123(~gio123@94.137.173.75)
2022-08-17 22:46:57 +0200 <zzz> length (0,0)
2022-08-17 22:47:05 +0200 <zzz> > length (0,0)
2022-08-17 22:47:07 +0200 <lambdabot> 1
2022-08-17 22:47:21 +0200 <tomsmeding> > length (undefined, undefined)
2022-08-17 22:47:23 +0200 <lambdabot> 1
2022-08-17 22:47:29 +0200 <zzz> oh no
2022-08-17 22:47:35 +0200 <tomsmeding> > toList ('a', 42)
2022-08-17 22:47:36 +0200 <lambdabot> [42]
2022-08-17 22:48:04 +0200 <zzz> i don't even agree with the Functor instance of (,)
2022-08-17 22:48:05 +0200 <tomsmeding> it's the only valid instance, but you seldom need it, and it's quite a footgun
2022-08-17 22:48:20 +0200 <tomsmeding> functor is at least much less of a footgun :p
2022-08-17 22:49:08 +0200 <zzz> what bit you exaclty, if i may ask?
2022-08-17 22:49:12 +0200sammelweis(~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10) (Ping timeout: 244 seconds)
2022-08-17 22:49:41 +0200 <tomsmeding> map snd . filter (\col -> length col < 6) $ zip bd [0..]
2022-08-17 22:49:59 +0200 <tomsmeding> bd :: [[a]], a list of columns. I want the indices of the columns with height < 6
2022-08-17 22:50:25 +0200 <tomsmeding> given the discussion the mistake is obvious, but y'know
2022-08-17 22:51:29 +0200 <zzz> heh i get it
2022-08-17 22:51:35 +0200Guest93(~Guest93@2603-8000-0401-65cc-654b-133e-fd96-a390.res6.spectrum.com)
2022-08-17 22:52:54 +0200 <tomsmeding> I found it after some debugging of a _super_ uninformative error, which I tracked down to a 'bd' value with a column of height 7
2022-08-17 22:53:01 +0200 <tomsmeding> which should have been impossible
2022-08-17 22:53:04 +0200 <tomsmeding> then I was like, wait...
2022-08-17 22:53:18 +0200gio123(~gio123@94.137.173.75) (Quit: Client closed)
2022-08-17 22:55:04 +0200 <monochrom> Yeah, valid does not imply desirable.
2022-08-17 22:55:30 +0200 <tomsmeding> I don't think anybody has ever been bitten in this way by Functor (a,)
2022-08-17 22:55:33 +0200 <monochrom> Infinite types are valid too, equirecursive types and all that, see TaPL. But hated by all. :)
2022-08-17 22:55:54 +0200 <tomsmeding> monochrom: because type inference completely breaks down, right?
2022-08-17 22:55:57 +0200coot(~coot@213.134.176.158)
2022-08-17 22:56:05 +0200zer0bitz(~zer0bitz@2001:2003:f748:2000:9186:336c:b8e1:3e66) (Ping timeout: 256 seconds)
2022-08-17 22:56:17 +0200 <monochrom> I don't know. But it's clearly royally confusing.
2022-08-17 22:56:25 +0200 <tomsmeding> :D
2022-08-17 22:58:17 +0200 <monochrom> It might not break type inference. Prolog is happy with omitting occurs check, and type inference is easier than Prolog.
2022-08-17 22:59:29 +0200 <tomsmeding> let's just keep it at "it's royally confusing" them
2022-08-17 22:59:31 +0200 <tomsmeding> *then
2022-08-17 22:59:54 +0200 <monochrom> But if you don't tell beginners "you can't if ... then x else [x]", it's going to be both technical debt and pedagogical debt snowballing down the road.
2022-08-17 23:00:45 +0200 <tomsmeding> that in particular is a fairly useless infinite type :p
2022-08-17 23:01:00 +0200k8yun_(~k8yun@user/k8yun)
2022-08-17 23:01:43 +0200ccntrq(~Thunderbi@172.209.94.92.rev.sfr.net) (Read error: Connection reset by peer)
2022-08-17 23:01:45 +0200 <tomsmeding> newtype Tree a = Tree [Tree a]
2022-08-17 23:01:51 +0200 <tomsmeding> that is to say, newtype Tree = Tree [Tree]
2022-08-17 23:02:51 +0200 <monochrom> The useful infinite types can still be made yet clearer by having explicit wrapping and unwrapping, i.e., let's go back to isorecursive types after all.
2022-08-17 23:03:27 +0200 <tomsmeding> yes
2022-08-17 23:03:45 +0200 <tomsmeding> I feel like type classes are slightly _too_ implicit sometimes
2022-08-17 23:03:58 +0200 <monochrom> Similarly Foldable (e,) can be made clearer by rolling your own tuple type.
2022-08-17 23:04:11 +0200 <tomsmeding> like, sometimes one would like to explicitly control what Ord gets used for some kind of sort or Set; or sometimes you want Foldable (a,), but mostly not
2022-08-17 23:04:35 +0200k8yun(~k8yun@user/k8yun) (Ping timeout: 248 seconds)
2022-08-17 23:04:41 +0200 <tomsmeding> but I don't have a better design, at the very least type classes seem a local optimum, and a good one at that
2022-08-17 23:06:17 +0200 <monochrom> So somehow we look at "(x,y)" and think "hey that's a length-2 list in funny syntax", and we look at "data MyTuple a b = T a b" we think "this is clearly b with piggybacked a".
2022-08-17 23:07:03 +0200 <tomsmeding> I don't even think that thinking (x,y) is a funny list is the issue with Foldable (a,)
2022-08-17 23:07:18 +0200 <tomsmeding> see my mistake above
2022-08-17 23:07:26 +0200 <tomsmeding> but yeah, names good
2022-08-17 23:07:31 +0200coot(~coot@213.134.176.158) (Quit: coot)
2022-08-17 23:08:00 +0200 <tomsmeding> and haskell is nice in that it's easy to create new names -- except that _sometimes_ one would like Rust's Deref functionality
2022-08-17 23:08:11 +0200 <tomsmeding> i.e. inherit a bunch of functionality from the contained type
2022-08-17 23:08:22 +0200mikoto-chan(~mikoto-ch@164.5.249.78)
2022-08-17 23:09:07 +0200 <monochrom> ooohhh, that one is very close to why infinite types are a bad idea.
2022-08-17 23:09:33 +0200 <monochrom> valid code that hides a mistake very well
2022-08-17 23:10:00 +0200 <tomsmeding> it would be strictly opt-in when you create a new type (just like in Rust)
2022-08-17 23:10:06 +0200 <tomsmeding> for certain types it makes sense, for most it doesn't
2022-08-17 23:10:37 +0200matthewmosior(~matthewmo@173.170.253.91) (Remote host closed the connection)
2022-08-17 23:10:41 +0200 <monochrom> "then x else [x]" looks obvious, but that's just because I single it out. Imagine it hiding in 20 lines of code, you'll never spot it.
2022-08-17 23:10:44 +0200 <tomsmeding> but maybe the extra newtype (un)wrapping is worth our sanity :p
2022-08-17 23:10:51 +0200 <tomsmeding> yeah no recursive types bad
2022-08-17 23:11:00 +0200 <tomsmeding> eh, infinite types
2022-08-17 23:11:19 +0200 <tomsmeding> (got confused thinking about the usual notation with Rec)
2022-08-17 23:13:12 +0200 <zzz> you can?
2022-08-17 23:13:31 +0200 <tomsmeding> you can what?
2022-08-17 23:16:20 +0200dsrt^(~dsrt@50.236.139.178)
2022-08-17 23:19:52 +0200Milan(~Milan@46.245.79.69)
2022-08-17 23:20:01 +0200 <zzz> sorry i was scrolled back and didn't notice
2022-08-17 23:20:34 +0200 <zzz> you can [have infinite types]?
2022-08-17 23:21:05 +0200Milan(~Milan@46.245.79.69) (Client Quit)
2022-08-17 23:21:08 +0200 <tomsmeding> I'm not too sure about the details -- monochrom seems to be surer -- but I think that having infinite types in a type system is not necessarily nonsense
2022-08-17 23:21:16 +0200gmg(~user@user/gehmehgeh) (Quit: Leaving)
2022-08-17 23:21:26 +0200matthewmosior(~matthewmo@173.170.253.91)
2022-08-17 23:22:00 +0200 <tomsmeding> You can have types of the form `Rec a. Maybe (Int, a)`, which transparently unwraps to `Maybe (Int, Rec a. Maybe (Int, a))`
2022-08-17 23:22:03 +0200Guest93(~Guest93@2603-8000-0401-65cc-654b-133e-fd96-a390.res6.spectrum.com) (Quit: Client closed)
2022-08-17 23:22:09 +0200 <tomsmeding> and which transparently wraps again if needed
2022-08-17 23:22:22 +0200 <tomsmeding> (this happens to be [Int])
2022-08-17 23:22:43 +0200 <tomsmeding> this `Rec` might also be called `Roll` sometimes IIRC
2022-08-17 23:23:18 +0200 <tomsmeding> if you have explicit term formers `roll` and `unroll` which wrap and unwrap the Rec, clearly it should work -- you just have anonymous newtypes then
2022-08-17 23:23:27 +0200 <tomsmeding> but even without, it might work
2022-08-17 23:23:38 +0200 <tomsmeding> but, as monochrom said, it would be royally confusing
2022-08-17 23:26:01 +0200 <monochrom> TaPL has infinite type examples. It says "equirecursive types".
2022-08-17 23:26:12 +0200biberu(~biberu@user/biberu) (Read error: Connection reset by peer)
2022-08-17 23:26:25 +0200 <monochrom> Although, it does type inference in an unrelated chapter that doesn't have infinite types.
2022-08-17 23:27:17 +0200 <tomsmeding> yeah on the one hand it feels like you should be able to exchange the occurs check with construction of a rolled type; on the other hand, it feels like you'll open a can of worms
2022-08-17 23:28:12 +0200jmd_(~jmdaemon@user/jmdaemon)
2022-08-17 23:28:57 +0200jmdaemon(~jmdaemon@user/jmdaemon) (Ping timeout: 256 seconds)
2022-08-17 23:28:57 +0200 <monochrom> For now I'm just at the cheeky level of "just go into your unification algorithm and delete the occurs check, what can possibly go wrong?" :)
2022-08-17 23:29:07 +0200 <tomsmeding> eh, a lot :p
2022-08-17 23:29:33 +0200 <monochrom> "Hey you may even be able to support \x -> x x"
2022-08-17 23:29:35 +0200 <tomsmeding> a compiler written in haskell might fare a bit better than one in a strict language
2022-08-17 23:30:06 +0200 <tomsmeding> on account of not necessarily immediately reifying the infinite type as a whole -- though that depends heavily on the precise implementation of the type checker
2022-08-17 23:30:23 +0200 <tomsmeding> I can imagine at least one type checker implementation that will infinite loop
2022-08-17 23:30:31 +0200johnw(~johnw@76-234-69-149.lightspeed.frokca.sbcglobal.net) (Quit: ZNC - http://znc.in)
2022-08-17 23:31:34 +0200johnw(~johnw@76-234-69-149.lightspeed.frokca.sbcglobal.net)
2022-08-17 23:33:50 +0200adanwan(~adanwan@gateway/tor-sasl/adanwan) (Remote host closed the connection)
2022-08-17 23:34:16 +0200adanwan(~adanwan@gateway/tor-sasl/adanwan)
2022-08-17 23:34:43 +0200jmdaemon(~jmdaemon@user/jmdaemon)
2022-08-17 23:35:05 +0200MajorBiscuit(~MajorBisc@46-229-126.internethome.cytanet.com.cy)
2022-08-17 23:35:45 +0200jmd_(~jmdaemon@user/jmdaemon) (Ping timeout: 256 seconds)
2022-08-17 23:37:40 +0200vulpine(xfnw@tilde.team)
2022-08-17 23:38:45 +0200__monty__(~toonn@user/toonn) (Quit: leaving)
2022-08-17 23:38:49 +0200 <Henson> tomsmeding: is looks like when the 15 minute load average (rightmost load average number in "top") goes above 0.9, that's when the number of CPUs chosen by OpenMP changes. Below 0.9 it'll use 2, at or above 0.9 it'll use 1.
2022-08-17 23:40:40 +0200geekosaurintroduces Henson to `uptime`
2022-08-17 23:40:47 +0200matthewmosior(~matthewmo@173.170.253.91) (Remote host closed the connection)
2022-08-17 23:41:56 +0200gdown(~gavin@h69-11-149-231.kndrid.broadband.dynamic.tds.net)
2022-08-17 23:43:30 +0200 <Henson> geekosaur: :-)
2022-08-17 23:44:33 +0200 <tomsmeding> Henson: your machine has 2 cores?
2022-08-17 23:44:54 +0200 <Henson> tomsmeding: OpenMP seems to ignore the OMP_DYNAMIC variable, unless "false" or "FALSE" or "0" are not valid values. But it does show up in the /proc/$PID/environ variable. It DOES obey the OMP_NUM_THREADS environment variable.
2022-08-17 23:45:15 +0200 <Henson> tomsmeding: yes, it's an old Thinkpad T430
2022-08-17 23:45:19 +0200 <Henson> still goin'
2022-08-17 23:45:52 +0200 <tomsmeding> Henson: seems 'false' should be valid https://www.openmp.org/spec-html/5.0/openmpse51.html#x290-20560006.3
2022-08-17 23:45:57 +0200dsrt^(~dsrt@50.236.139.178) (Ping timeout: 268 seconds)
2022-08-17 23:46:42 +0200 <tomsmeding> Henson: if it still works, it still works :) -- I wasn't doubting your machine, was clarifying because I thought I recalled you speaking about 4 before
2022-08-17 23:47:47 +0200raehik(~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 268 seconds)
2022-08-17 23:48:47 +0200cfricke(~cfricke@user/cfricke) (Ping timeout: 255 seconds)
2022-08-17 23:48:52 +0200king_gs(~Thunderbi@187.201.216.244)
2022-08-17 23:49:10 +0200tromp(~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
2022-08-17 23:52:21 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection)
2022-08-17 23:54:11 +0200jao(~jao@cpc103048-sgyl39-2-0-cust502.18-2.cable.virginm.net) (Ping timeout: 248 seconds)
2022-08-17 23:54:47 +0200jao(jao@gateway/vpn/protonvpn/jao)
2022-08-17 23:55:50 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
2022-08-17 23:57:02 +0200jgeerds(~jgeerds@55d46bad.access.ecotel.net) (Ping timeout: 268 seconds)
2022-08-17 23:57:23 +0200matthewmosior(~matthewmo@173.170.253.91)