Home liberachat/#haskell: Logs Calendar

Logs on 2022-01-31 (liberachat/#haskell)

00:00:04 notzmv joins (~zmv@user/notzmv)
00:00:12 <ephemient> while most programming languages nowadays say they have IEEE 754 floats, CPU's FPUs can often be configured in different modes (rounding, nan handling, etc.) and GPUs frequently have non-IEEE 754 compliant floats (different precisions, etc.)
00:00:29 alx741 joins (~alx741@157.100.197.240)
00:00:52 charukiewicz joins (~charukiew@2600:1702:a90:2750::3c)
00:00:53 × epolanski quits (uid312403@id-312403.helmsley.irccloud.com) (Quit: Connection closed for inactivity)
00:01:35 <cjay> rounding modes are part of 754
00:01:54 <cjay> they are only a problem if some library changes it an leaves it changed
00:02:18 <ephemient> right, I just bring it up because your calculation will be different depending on outside state
00:02:25 <cjay> true
00:02:39 madjestic joins (~madjestic@88-159-247-120.fixed.kpn.net)
00:02:53 <EvanR> in fact this situation is WORSE than being random with a known simple distribution xD
00:03:20 <EvanR> because if you assume this and then show someone real results they will think you're nuts, not random at all
00:03:29 <EvanR> unless you painstakingly come up with all the test run environments
00:04:01 <EvanR> which isn't how a particular application works
00:04:51 × bitdex quits (~bitdex@gateway/tor-sasl/bitdex) (Ping timeout: 276 seconds)
00:05:00 <EvanR> so quantum computers would be an upgrade in another way xD
00:05:47 <EvanR> IEEE quantum floats
00:07:01 <jackdk> are there (m)any data types whose `Num` instance includes noncommutative `(*)`? Matrix multiplication is the obvious candidate, but maybe they're all on special operators like `(!*!)`. And are there any common classes that require commutative `(*)` in their laws?
00:07:45 <EvanR> @pl \x -> (x * 2)
00:07:45 <lambdabot> (2 *)
00:08:07 <EvanR> lambdabot proves it's commutative
00:08:46 <EvanR> (didn't think anything depended on Num having laws)
00:10:04 <dolio> Maybe you should stop insisting that the error terms have anything to do with repeatedly sampling from some kind of distribution.
00:10:43 <ephemient> quaternions are another "obvious" one
00:11:08 <EvanR> a = m + n, b = m + n, c = m + n, d = m + n, look, sampling xD But admittedly, not from any coherent distribution
00:11:46 o-90 joins (~o-90@gateway/tor-sasl/o-90)
00:13:23 × madjestic quits (~madjestic@88-159-247-120.fixed.kpn.net) (Ping timeout: 256 seconds)
00:13:41 madjestic joins (~madjestic@88-159-247-120.fixed.kpn.net)
00:14:14 × burnside_ quits (~burnsides@dhcp168-016.wadham.ox.ac.uk) (Remote host closed the connection)
00:14:17 × kilolympus quits (~kilolympu@31.205.200.235) (Quit: Quitting IRC :()
00:14:34 <EvanR> (also I wasn't talking about error, but inconsistency, the fact that we are even thinking of this as sequential samples)
00:14:41 burnsidesLlama joins (~burnsides@dhcp168-016.wadham.ox.ac.uk)
00:15:25 bitdex joins (~bitdex@gateway/tor-sasl/bitdex)
00:19:06 × burnsidesLlama quits (~burnsides@dhcp168-016.wadham.ox.ac.uk) (Ping timeout: 260 seconds)
00:20:02 × o-90 quits (~o-90@gateway/tor-sasl/o-90) (Remote host closed the connection)
00:20:14 <jackdk> ephemient: thanks, and more likely to rely on num operators e.g. https://hackage.haskell.org/package/linear-1.21.8/docs/src/Linear.Quaternion.html#line-243
00:21:35 burnsidesLlama joins (~burnsides@dhcp168-016.wadham.ox.ac.uk)
00:23:42 × hololeap quits (~hololeap@user/hololeap) (Ping timeout: 276 seconds)
00:23:48 chenqisu1 joins (~chenqisu1@183.217.200.249)
00:24:33 <EvanR> cool, instance Monad Quaternion -- the diagonal of a sedenion is super useful!
00:25:30 × machinedgod quits (~machinedg@24.105.81.50) (Ping timeout: 256 seconds)
00:30:29 Codaraxis__ joins (~Codaraxis@user/codaraxis)
00:34:00 × Codaraxis_ quits (~Codaraxis@user/codaraxis) (Ping timeout: 256 seconds)
00:35:28 Topsi joins (~Tobias@dyndsl-095-033-024-223.ewe-ip-backbone.de)
00:41:11 wombat875 joins (~wombat875@pool-72-89-24-154.nycmny.fios.verizon.net)
00:45:41 × wombat875 quits (~wombat875@pool-72-89-24-154.nycmny.fios.verizon.net) (Ping timeout: 256 seconds)
00:45:57 × n3rdy1 quits (~n3rdy1@2600:1700:4570:3480:1b88:50f:dae0:9293) (Ping timeout: 240 seconds)
00:46:30 wombat875 joins (~wombat875@pool-72-89-24-154.nycmny.fios.verizon.net)
00:47:18 × Ved2311 quits (~Ved2311@2600:1700:d840:2370:2c7f:af63:1c:7efc) (Quit: Client closed)
00:48:43 Akiva joins (~Akiva@user/Akiva)
00:53:17 × myme quits (~myme@40.51-175-185.customer.lyse.net) (Ping timeout: 250 seconds)
00:59:14 × wombat875 quits (~wombat875@pool-72-89-24-154.nycmny.fios.verizon.net) (Ping timeout: 260 seconds)
00:59:26 merijn joins (~merijn@c-001-001-018.client.esciencecenter.eduvpn.nl)
01:02:37 Null_A joins (~null_a@2601:645:8700:2290:9dfb:d74f:b509:d274)
01:10:46 lateef joins (~lateef@2603-6080-6740-0538-845d-1912-a53c-bf82.res6.spectrum.com)
01:10:49 × alp quits (~alp@user/alp) (Ping timeout: 250 seconds)
01:10:50 × madjestic quits (~madjestic@88-159-247-120.fixed.kpn.net) (Ping timeout: 256 seconds)
01:11:51 × albet70 quits (~xxx@2400:8902::f03c:92ff:fe60:98d8) (Remote host closed the connection)
01:17:58 albet70 joins (~xxx@2400:8902::f03c:92ff:fe60:98d8)
01:18:00 × nineonine quits (~nineonine@S0106a0ff7073d5d5.vf.shawcable.net) (Remote host closed the connection)
01:19:04 mud joins (~mud@user/kadoban)
01:20:52 machinedgod joins (~machinedg@24.105.81.50)
01:21:12 × mon_aaraj quits (~MonAaraj@user/mon-aaraj/x-4416475) (Quit: WeeChat 3.4)
01:21:25 texasmynsted_ joins (~texasmyns@99.96.221.112)
01:22:20 × texasmynsted quits (~texasmyns@99.96.221.112) (Ping timeout: 250 seconds)
01:23:19 retroid_ joins (~retro@2e40edd9.skybroadband.com)
01:23:37 × lateef quits (~lateef@2603-6080-6740-0538-845d-1912-a53c-bf82.res6.spectrum.com) (Quit: lateef)
01:23:49 mystilleef joins (~mystillee@2603-6080-6740-0538-845d-1912-a53c-bf82.res6.spectrum.com)
01:28:15 <dminuoso> Mmm, when a conduit receives an exception, will that flush the conduit first?
01:28:29 <dminuoso> (Does the question even make sense?)
01:33:17 × merijn quits (~merijn@c-001-001-018.client.esciencecenter.eduvpn.nl) (Ping timeout: 256 seconds)
01:35:21 Kaiepi joins (~Kaiepi@156.34.47.253)
01:36:46 × eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:2541:beac:9acd:61a8) (Remote host closed the connection)
01:36:54 × jao quits (~jao@68.235.43.84) (Ping timeout: 256 seconds)
01:38:53 jao joins (~jao@cpc103048-sgyl39-2-0-cust502.18-2.cable.virginm.net)
01:39:54 texasmynsted joins (~texasmyns@99.96.221.112)
01:40:37 × texasmynsted_ quits (~texasmyns@99.96.221.112) (Ping timeout: 240 seconds)
01:40:52 mon_aaraj joins (~MonAaraj@user/mon-aaraj/x-4416475)
01:42:24 <jackdk> doubt it
01:49:09 × jao quits (~jao@cpc103048-sgyl39-2-0-cust502.18-2.cable.virginm.net) (Ping timeout: 256 seconds)
01:50:54 jao joins (~jao@static-68-235-44-71.cust.tzulo.com)
01:53:35 deadmarshal joins (~deadmarsh@95.38.231.75)
01:57:34 × CiaoSen quits (~Jura@p200300c95737a2002a3a4dfffe84dbd5.dip0.t-ipconnect.de) (Ping timeout: 260 seconds)
01:57:37 × deadmarshal quits (~deadmarsh@95.38.231.75) (Ping timeout: 240 seconds)
01:57:39 × machinedgod quits (~machinedg@24.105.81.50) (Ping timeout: 256 seconds)
02:00:50 vicfred joins (~vicfred@user/vicfred)
02:07:59 texasmynsted_ joins (~texasmyns@99.96.221.112)
02:09:08 × texasmynsted quits (~texasmyns@99.96.221.112) (Ping timeout: 250 seconds)
02:15:17 × raehik quits (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 240 seconds)
02:17:26 [itchyjunk] joins (~itchyjunk@user/itchyjunk/x-7353470)
02:17:32 × mystilleef quits (~mystillee@2603-6080-6740-0538-845d-1912-a53c-bf82.res6.spectrum.com) (Quit: mystilleef)
02:18:34 × neurocyte0917090 quits (~neurocyte@user/neurocyte) (Ping timeout: 260 seconds)
02:24:51 califax- joins (~califax@user/califx)
02:27:12 × califax quits (~califax@user/califx) (Ping timeout: 276 seconds)
02:27:12 califax- is now known as califax
02:29:43 kilolympus joins (~kilolympu@31.205.200.235)
02:31:14 jkaye[m] joins (~jkayematr@2001:470:69fc:105::1:86f7)
02:31:25 × xff0x quits (~xff0x@2001:1a81:52f3:1d00:e2c8:a45c:f0af:d33) (Ping timeout: 250 seconds)
02:32:51 × Null_A quits (~null_a@2601:645:8700:2290:9dfb:d74f:b509:d274) (Read error: Connection reset by peer)
02:33:16 xff0x joins (~xff0x@2001:1a81:5330:2600:3a82:23bb:1178:cc83)
02:37:15 eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:f579:9b2b:4d0d:2d44)
02:39:05 kimjetwav joins (~user@2607:fea8:2363:8f00::518)
02:40:30 × eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:f579:9b2b:4d0d:2d44) (Remote host closed the connection)
02:40:45 eggplantade joins (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
02:46:07 yauhsien joins (~yauhsien@61-231-37-18.dynamic-ip.hinet.net)
02:51:08 × Erutuon quits (~Erutuon@user/erutuon) (Ping timeout: 256 seconds)
02:53:54 hololeap joins (~hololeap@user/hololeap)
02:58:03 × ProfSimm quits (~ProfSimm@87.227.196.109) (Remote host closed the connection)
03:01:18 dyeplexer joins (~dyeplexer@user/dyeplexer)
03:03:01 Feuermagier joins (~Feuermagi@user/feuermagier)
03:03:57 × lemonsnicks quits (~lemonsnic@cpc159519-perr18-2-0-cust114.19-1.cable.virginm.net) (Quit: ZNC 1.8.2 - https://znc.in)
03:08:29 × wroathe quits (~wroathe@user/wroathe) (Ping timeout: 256 seconds)
03:10:50 × alx741 quits (~alx741@157.100.197.240) (Quit: alx741)
03:13:27 justsomeguy joins (~justsomeg@user/justsomeguy)
03:16:20 lemonsnicks joins (~lemonsnic@cpc159519-perr18-2-0-cust114.19-1.cable.virginm.net)
03:16:26 wroathe joins (~wroathe@206-55-188-8.fttp.usinternet.com)
03:16:26 × wroathe quits (~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host)
03:16:26 wroathe joins (~wroathe@user/wroathe)
03:19:02 × pretty_dumm_guy quits (trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655) (Quit: WeeChat 3.4)
03:20:48 trillp joins (~trillp@2001:19f0:6401:72e:c092:4829:25d6:b788)
03:20:57 × wroathe quits (~wroathe@user/wroathe) (Ping timeout: 256 seconds)
03:23:06 × burnsidesLlama quits (~burnsides@dhcp168-016.wadham.ox.ac.uk) (Remote host closed the connection)
03:34:32 × jao quits (~jao@static-68-235-44-71.cust.tzulo.com) (Remote host closed the connection)
03:35:04 merijn joins (~merijn@c-001-001-018.client.esciencecenter.eduvpn.nl)
03:38:07 mbuf joins (~Shakthi@136.185.77.246)
03:40:49 Erutuon joins (~Erutuon@user/erutuon)
03:43:16 × Midjak quits (~Midjak@may53-1-78-226-116-92.fbx.proxad.net) (Quit: Leaving)
03:44:40 Midjak joins (~Midjak@may53-1-78-226-116-92.fbx.proxad.net)
03:46:40 × td_ quits (~td@muedsl-82-207-238-178.citykom.de) (Ping timeout: 256 seconds)
03:48:17 td_ joins (~td@muedsl-82-207-238-222.citykom.de)
03:49:30 × yauhsien quits (~yauhsien@61-231-37-18.dynamic-ip.hinet.net) (Ping timeout: 256 seconds)
03:49:42 × Midjak quits (~Midjak@may53-1-78-226-116-92.fbx.proxad.net) (Quit: This computer has gone to sleep)
03:53:24 jao joins (~jao@static-68-235-44-71.cust.tzulo.com)
04:01:21 euphrates[m] joins (~euphrates@2001:470:69fc:105::fbb5)
04:03:58 × merijn quits (~merijn@c-001-001-018.client.esciencecenter.eduvpn.nl) (Ping timeout: 250 seconds)
04:12:17 × kimjetwav quits (~user@2607:fea8:2363:8f00::518) (Read error: Connection reset by peer)
04:12:35 kimjetwav joins (~user@2607:fea8:2363:8f00::518)
04:21:34 × kimjetwav quits (~user@2607:fea8:2363:8f00::518) (Remote host closed the connection)
04:21:52 kimjetwav joins (~user@2607:fea8:2363:8f00:f6a1:f8c9:ad86:473d)
04:26:26 bontaq joins (~user@ool-45779fe5.dyn.optonline.net)
04:42:08 wroathe joins (~wroathe@206-55-188-8.fttp.usinternet.com)
04:42:08 × wroathe quits (~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host)
04:42:08 wroathe joins (~wroathe@user/wroathe)
04:42:17 × foul_owl quits (~kerry@174-21-143-101.tukw.qwest.net) (Ping timeout: 250 seconds)
04:43:16 × waleee quits (~waleee@2001:9b0:21d:fc00:398f:b003:b90d:acf4) (Ping timeout: 245 seconds)
04:48:33 lavaman joins (~lavaman@98.38.249.169)
04:53:19 × lavaman quits (~lavaman@98.38.249.169) (Ping timeout: 256 seconds)
04:53:57 × kimjetwav quits (~user@2607:fea8:2363:8f00:f6a1:f8c9:ad86:473d) (Ping timeout: 240 seconds)
04:54:08 qrpnxz joins (abc4f95c31@user/qrpnxz)
04:54:29 qrpnxz parts (abc4f95c31@user/qrpnxz) ()
04:54:51 qrpnxz joins (~qrpnxz@user/qrpnxz)
04:55:50 × wroathe quits (~wroathe@user/wroathe) (Ping timeout: 260 seconds)
04:56:13 foul_owl joins (~kerry@94.140.8.108)
05:02:02 × foul_owl quits (~kerry@94.140.8.108) (Ping timeout: 256 seconds)
05:02:39 × zebrag quits (~chris@user/zebrag) (Quit: Konversation terminated!)
05:03:48 wroathe joins (~wroathe@206-55-188-8.fttp.usinternet.com)
05:03:48 × wroathe quits (~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host)
05:03:48 wroathe joins (~wroathe@user/wroathe)
05:06:08 robosexual joins (~spaceoyst@92.248.225.230)
05:07:09 × vicfred quits (~vicfred@user/vicfred) (Quit: Leaving)
05:07:57 × wroathe quits (~wroathe@user/wroathe) (Ping timeout: 240 seconds)
05:12:52 × swistak quits (~swistak@185.21.216.141) (Ping timeout: 250 seconds)
05:12:58 qrpnxz parts (~qrpnxz@user/qrpnxz) (Disconnected: Replaced by new connection)
05:13:13 qrpnxz joins (~qrpnxz@user/qrpnxz)
05:13:30 qrpnxz parts (~qrpnxz@user/qrpnxz) ()
05:13:53 qrpnxz joins (~qrpnxz@user/qrpnxz)
05:14:19 × Topsi quits (~Tobias@dyndsl-095-033-024-223.ewe-ip-backbone.de) (Read error: Connection reset by peer)
05:15:58 qrpnxz parts (~qrpnxz@user/qrpnxz) ()
05:16:13 qrpnxz joins (~qrpnxz@user/qrpnxz)
05:16:14 foul_owl joins (~kerry@94.140.8.107)
05:16:29 qrpnxz parts (~qrpnxz@user/qrpnxz) ()
05:16:58 qrpnxz joins (~qrpnxz@user/qrpnxz)
05:17:28 × jao quits (~jao@static-68-235-44-71.cust.tzulo.com) (Remote host closed the connection)
05:24:42 × cjb quits (~cjb@user/cjb) (Quit: rcirc on GNU Emacs 29.0.50)
05:28:25 jao joins (~jao@static-68-235-44-71.cust.tzulo.com)
05:31:47 deadmarshal joins (~deadmarsh@95.38.114.109)
05:34:07 × mon_aaraj quits (~MonAaraj@user/mon-aaraj/x-4416475) (Ping timeout: 256 seconds)
05:34:56 swistak joins (~swistak@185.21.216.141)
05:36:13 mon_aaraj joins (~MonAaraj@user/mon-aaraj/x-4416475)
05:38:56 × jao quits (~jao@static-68-235-44-71.cust.tzulo.com) (Remote host closed the connection)
05:39:00 freemanX joins (~user@138.75.106.242)
05:39:45 andreabedini joins (~andreabed@8s8kj6n5jr0p8rp4lths.ip6.superloop.com)
05:42:02 × notzmv quits (~zmv@user/notzmv) (Ping timeout: 260 seconds)
05:48:01 fvr joins (uid503686@id-503686.uxbridge.irccloud.com)
05:48:54 <fvr> what does `qAddDependentFile` do? https://hackage.haskell.org/package/template-haskell-2.18.0.0/docs/Language-Haskell-TH-Syntax.html#v:qAddDependentFile
05:51:10 <andreabedini> fvr: I guess the description of addDependentFile is more informative https://hackage.haskell.org/package/template-haskell-2.18.0.0/docs/Language-Haskell-TH-Syntax.html#v:addDependentFile
05:52:01 <fvr> that's informative, thanks!
05:56:19 × freemanX quits (~user@138.75.106.242) (Remote host closed the connection)
05:57:03 × doxen quits (~bbrahms@pool-173-54-217-168.nwrknj.fios.verizon.net) (Ping timeout: 250 seconds)
05:57:32 rusrushal13 joins (~rusrushal@2401:4900:447c:7aab:9569:ad9c:2bdf:6f6e)
06:01:34 soxen joins (~bbrahms@pool-173-54-217-168.nwrknj.fios.verizon.net)
06:05:44 merijn joins (~merijn@c-001-001-018.client.esciencecenter.eduvpn.nl)
06:10:30 × soxen quits (~bbrahms@pool-173-54-217-168.nwrknj.fios.verizon.net) (Ping timeout: 260 seconds)
06:16:29 cynomys joins (~cynomys@user/cynomys)
06:18:58 jao joins (~jao@static-68-235-44-71.cust.tzulo.com)
06:31:22 × rusrushal13 quits (~rusrushal@2401:4900:447c:7aab:9569:ad9c:2bdf:6f6e) (Ping timeout: 256 seconds)
06:33:30 takuan joins (~takuan@178-116-218-225.access.telenet.be)
06:34:45 × merijn quits (~merijn@c-001-001-018.client.esciencecenter.eduvpn.nl) (Ping timeout: 256 seconds)
06:37:20 yauhsien joins (~yauhsien@61-231-37-18.dynamic-ip.hinet.net)
06:42:54 × jao quits (~jao@static-68-235-44-71.cust.tzulo.com) (Ping timeout: 256 seconds)
06:43:14 fef joins (~thedawn@user/thedawn)
06:44:21 zeenk joins (~zeenk@2a02:2f04:a204:7c00:d1e7:19c4:1020:b94b)
06:49:54 × yauhsien quits (~yauhsien@61-231-37-18.dynamic-ip.hinet.net) (Remote host closed the connection)
06:50:22 × robosexual quits (~spaceoyst@92.248.225.230) (Quit: Konversation terminated!)
06:50:41 × Feuermagier quits (~Feuermagi@user/feuermagier) (Remote host closed the connection)
06:51:24 × mon_aaraj quits (~MonAaraj@user/mon-aaraj/x-4416475) (Ping timeout: 256 seconds)
06:53:32 mon_aaraj joins (~MonAaraj@user/mon-aaraj/x-4416475)
06:53:39 yauhsien joins (~yauhsien@61-231-37-18.dynamic-ip.hinet.net)
06:53:49 zeenk2 joins (~zeenk@2a02:2f04:a104:3700:5a8:957d:2155:a792)
06:54:01 × zeenk quits (~zeenk@2a02:2f04:a204:7c00:d1e7:19c4:1020:b94b) (Ping timeout: 250 seconds)
06:54:23 _ht joins (~quassel@231-169-21-31.ftth.glasoperator.nl)
06:57:16 × zaquest quits (~notzaques@5.130.79.72) (Remote host closed the connection)
06:57:53 michalz joins (~michalz@185.246.204.57)
06:58:16 falafel joins (~falafel@2603-8000-8403-e980-a564-89bf-cc0b-6efb.res6.spectrum.com)
06:58:23 zaquest joins (~notzaques@5.130.79.72)
06:58:33 × yauhsien quits (~yauhsien@61-231-37-18.dynamic-ip.hinet.net) (Ping timeout: 256 seconds)
07:02:16 ensyde joins (~ensyde@2600:1700:2050:1040:dde2:c55f:f2c9:43fc)
07:05:08 trillp parts (~trillp@2001:19f0:6401:72e:c092:4829:25d6:b788) (WeeChat 3.4)
07:12:39 × slowButPresent quits (~slowButPr@user/slowbutpresent) (Quit: leaving)
07:15:15 × zeenk2 quits (~zeenk@2a02:2f04:a104:3700:5a8:957d:2155:a792) (Ping timeout: 250 seconds)
07:16:07 Feuermagier joins (~Feuermagi@user/feuermagier)
07:17:01 zeenk2 joins (~zeenk@82-77-96-125.cable-modem.hdsnet.hu)
07:17:56 × zeenk2 quits (~zeenk@82-77-96-125.cable-modem.hdsnet.hu) (Client Quit)
07:19:16 dut joins (~dut@user/dut)
07:19:52 jakalx parts (~jakalx@base.jakalx.net) ()
07:28:33 <Cheery> haskell's type inference is not quite standard and deals with kinded variables, but does it have a name?
07:28:49 <Cheery> it's quite not higher-order unification, right? lambdas are missing.
07:29:57 × zmt01 quits (~zmt00@user/zmt00) (Ping timeout: 240 seconds)
07:31:35 vysn joins (~vysn@user/vysn)
07:32:26 <Andrew> So I've got something like a string "1 2 3 4", and I want to convert it to a list [Integer] [1, 2, 3, 4]... How do I do that?
07:32:59 <jackdk> What are some subproblems that you could solve to achieve this goal?
07:33:47 <Andrew> Hmm, splitting a string by spaces, and converting e.g. "1" to 1
07:34:18 <jackdk> Sounds like I good start. I know that "splitting a string by spaces" has a function in the Prelude to do that
07:34:43 <[exa]> Cheery: it's a variant of system Fω, there's a pretty nice paper on it (I think the current pop name for the algorithm is OutsideIn)
07:34:46 raehik joins (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net)
07:35:15 <Andrew> heh, emerge doesn't want to install cabal for me lol
07:35:28 <Andrew> I'll go with prelude first...
07:35:35 <dolio> Cheery: It's not even close to higher-order unification. It's really not significantly different han what you'd do for HM.
07:35:53 <Andrew> "words" does the trick
07:35:57 <jackdk> I would use ghcup if at all possible. I don't know the state of haskell packaging on Gentoo
07:36:24 <dolio> The higher order variables can only be solved to partial-applications of higher-order constants, basically.
07:36:50 <jackdk> Andrew: yep. so now to turn the `[String] -> [Int]`. Where are you at with your Haskell learning? Are you still learning direct recursion, or are you comfortable with higher-order functions?
07:37:06 <Andrew> I'm comfortable with higher-order
07:37:37 <[exa]> Cheery: also SPJ has a pretty nice talk from zurihac somewhere on youtube (it's unfortunately clipped at the end but delivers the message)
07:37:41 <Andrew> I just need a function or whatever to turn a string into an integer
07:37:54 Andrew is okay with 'map'
07:38:05 <jackdk> yeah map is the way here
07:38:45 <jackdk> for now, `read :: Read a => String -> a` will do, but that can fail at runtime
07:39:00 <dolio> Or, replace HM with whatever strategy you want for the first-order case.
07:39:22 <jackdk> to do this for reals, I would use `Text.Read.readMaybe :: Read a => String -> Maybe a`
07:39:31 <jackdk> have you done typeclasses yet?
07:39:38 <Andrew> Typeclasses, yes
07:39:56 <Andrew> But I'm not that comfortable with Monads e.g. Maybe
07:40:22 <Andrew> It's to the point where I could understand it if people gave me example code (and I have the docs to the side)
07:40:48 <jackdk> sure, so let's get it working at all, first. Have you got something going with `map`, `read`, and `words`?
07:41:29 <Andrew> I waasn't careful with the typesig of read, that seems to be it
07:41:31 <Andrew> Thanks :)
07:42:43 <jackdk> no problem. if you want to try building a safer version, ignore the fact that Maybe has a Monad instance for now and just treat it as a data type. try to write a function `foo :: [Maybe a] -> Maybe [a]`
07:43:13 × andreabedini quits (~andreabed@8s8kj6n5jr0p8rp4lths.ip6.superloop.com) (Quit: WeeChat 3.3)
07:46:17 <Cheery> so if I type inference in ukanren that has prolog-style terms, I could imitate this with tap(caller, arg)
07:46:33 mc47 joins (~mc47@xmonad/TheMC47)
07:46:38 <Cheery> tap(list, int)
07:48:55 <Cheery> but kinds should match, too.
07:49:46 <Cheery> I have a hunch that it can be done, though.
07:51:27 notzmv joins (~zmv@user/notzmv)
07:52:57 × bontaq quits (~user@ool-45779fe5.dyn.optonline.net) (Ping timeout: 250 seconds)
07:53:06 <Cheery> tap(caller, arg), kind(tap(caller, arg), star).. then treat kind as a chr constraint.
07:53:56 lortabac joins (~lortabac@2a01:e0a:541:b8f0:e245:b598:3bd:262a)
07:54:03 <dolio> I don't know if I understand the question. If it's just whether you can do Haskell's inference with normal unification, then the answer is yes.
07:54:40 <dolio> And yeah, you need to do some kind checking to make sure your unifications of types don't go wrong.
07:55:21 <dolio> You don't need something like lambda prolog or whatever.
07:56:03 oscurochu joins (~oscurochu@097-096-050-227.res.spectrum.com)
07:56:18 <oscurochu> is it true that haskell code does not need to be tested?
07:56:32 <jackdk> not at all
07:57:32 <jackdk> a large class of tests -- those that check argument and return types -- don't need to be written, but you still need to write tests.
07:57:32 gehmehgeh joins (~user@user/gehmehgeh)
07:57:39 tromp joins (~textual@dhcp-077-249-230-040.chello.nl)
07:58:11 alp joins (~alp@user/alp)
07:58:41 <dolio> Cheery: The spots where you actually need to do kind checking are usually pretty limited, though. Usually you wouldn't end up in a sitaution where a unification of types can be ill-kinded unless it's from something a programmer wrote.
07:58:46 <Cheery> kind(tap(F, A), B) <=> kind(F, TA → TB), kind(A, TA), kind(B, TB)
07:58:59 <Cheery> ok.
07:59:14 <ski> > case [ns | (ns,s) <- many (StateT (reads :: ReadS Integer)) `runStateT` "0 1 2 3",("","") <- lex s] of [ns] -> Just ns; _ -> Nothing -- Andrew ?
07:59:15 <lambdabot> Just [0,1,2,3]
08:00:18 <oscurochu> jackdk i just started learning how to write tests in javascript and clojure, and still don't 100% understand testing. how do i learn more about testing in haskell?
08:00:21 dust_ joins (~dust@2405:204:5488:ef4c:54b6:3467:52f3:e9f2)
08:00:38 MajorBiscuit joins (~MajorBisc@c-001-028-049.client.tudelft.eduvpn.nl)
08:00:38 <Cheery> kind(F, X), kind(F, Y) <=> X != Y | false.
08:01:11 <Cheery> so.. I could probably get this done that way.
08:01:34 max22- joins (~maxime@2a01cb08833598005d2ea791b13aed90.ipv6.abo.wanadoo.fr)
08:01:55 <jackdk> oscurochu: unit testing is often the same as any other language: factor out your functions into smaller parts. pure functions are easier to test. Think about what the outputs should be for a given input, and write test cases that ensure it's actually the case. I like the tasty library, with tasty-hunit for writing unit tests
08:02:17 <ski> also, property testing
08:02:51 <jackdk> @check \x y -> x + y == y + x
08:02:52 <lambdabot> +++ OK, passed 100 tests.
08:03:20 <ski> @check \x y -> x == y
08:03:21 × lortabac quits (~lortabac@2a01:e0a:541:b8f0:e245:b598:3bd:262a) (Ping timeout: 250 seconds)
08:03:22 <lambdabot> +++ OK, passed 100 tests.
08:03:33 × mc47 quits (~mc47@xmonad/TheMC47) (Remote host closed the connection)
08:03:39 <jackdk> I don't have a good intro for that handy, but yes definitely important. https://www.youtube.com/watch?v=NcJOiQlzlXQ maybe?
08:03:58 lortabac joins (~lortabac@2a01:e0a:541:b8f0:d2eb:19ab:f134:7a9c)
08:04:55 flipchan joins (~filip@188-169-255-31.dsl.utg.ge)
08:05:00 jakalx joins (~jakalx@base.jakalx.net)
08:05:25 × Akiva quits (~Akiva@user/Akiva) (Ping timeout: 256 seconds)
08:06:07 dhouthoo joins (~dhouthoo@178-117-36-167.access.telenet.be)
08:06:19 ski . o O ( "Don't Write Tests!" by John Hughes in 2017-06 at <https://www.youtube.com/watch?v=hXnS_Xjwk2Y> )
08:06:57 coot joins (~coot@2a02:a310:e241:1b00:ec1a:e9df:79ac:66ba)
08:08:34 <Cheery> hm. I got that one rule wrong.
08:08:42 <Cheery> kind(tap(F, A), TB) <=> kind(F, TA → TB), kind(A, TA).
08:11:03 × alMalsamo quits (~alMalsamo@gateway/tor-sasl/almalsamo) (Ping timeout: 276 seconds)
08:11:53 <oscurochu> what about tests that the output depends on the output of another function? i just started learning about haskell, so forgive my javascript-like syntax; func1 (x, func2) = func3(x, func2);
08:12:26 × prasad quits (~user@c-73-170-49-136.hsd1.ca.comcast.net) (Ping timeout: 256 seconds)
08:13:47 chele joins (~chele@user/chele)
08:14:25 <ski> Cheery : .. i was thinking it looked like a type error
08:14:39 <EvanR> oscurochu, so func1 = func3 ? xD
08:15:03 <EvanR> I simplified your function
08:15:16 <oscurochu> lol let me find the actual example i had in mind, i wrote it down wrong.
08:15:20 <ski> presumably `func2' isn't universally quantified
08:15:56 ardell joins (~ardell@user/ardell)
08:16:29 o is now known as niko
08:17:50 <oscurochu> Func1 ( req, res ) = Func2(Func3, req.userId );
08:18:32 <ski> `res' is singleton ?
08:18:48 × Sgeo quits (~Sgeo@user/sgeo) (Read error: Connection reset by peer)
08:19:46 <oscurochu> ( req, res ) are the arguments give by the expressjs router. not sure how that would work in haskell.
08:20:24 <ski> i mean, it seems a bit weird that `res' is only mentioned once
08:20:27 <EvanR> so you want to test a request handler
08:20:39 <EvanR> which means you'll need some test requests to handle
08:21:27 yauhsien joins (~yauhsien@61-231-37-18.dynamic-ip.hinet.net)
08:21:44 <oscurochu> but what if func3 also calls func4 and func4 calls func5, etc.
08:21:55 <EvanR> what if they do
08:22:08 <EvanR> you'll be doing a "end to end" test basically
08:22:13 × alp quits (~alp@user/alp) (Ping timeout: 250 seconds)
08:22:13 <EvanR> which some people swear by
08:22:20 <oscurochu> true
08:24:18 <oscurochu> so im thinking that the idea of testing would be to start at the purest function, so that by the time i test a function like this, i should expect it to pass?
08:24:31 × chenqisu1 quits (~chenqisu1@183.217.200.249) (Ping timeout: 245 seconds)
08:25:46 × ensyde quits (~ensyde@2600:1700:2050:1040:dde2:c55f:f2c9:43fc) (Ping timeout: 245 seconds)
08:25:48 <EvanR> when you have working function f1 and working function f2, there's no guarantee putting them together works
08:25:57 × yauhsien quits (~yauhsien@61-231-37-18.dynamic-ip.hinet.net) (Ping timeout: 240 seconds)
08:26:10 <EvanR> if it does, presumably your test passes
08:26:19 chenqisu1 joins (~chenqisu1@183.217.200.249)
08:27:15 <EvanR> but making sure your pure functions are right is a huge step toward a working system
08:27:19 <ski> oscurochu : bottom-up ?
08:30:33 × [itchyjunk] quits (~itchyjunk@user/itchyjunk/x-7353470) (Remote host closed the connection)
08:30:43 × charukiewicz quits (~charukiew@2600:1702:a90:2750::3c) ()
08:31:18 merijn joins (~merijn@c-001-001-018.client.esciencecenter.eduvpn.nl)
08:32:12 <oscurochu> Ok that makes sense. Thanks. That has already made a difference in how I see this code I wrote. I had a bunch of code that was largely untestable, and it feels really good to finally get to the point im at. Learing haskell has helped me see code i've written in new ways
08:32:28 alMalsamo joins (~alMalsamo@gateway/tor-sasl/almalsamo)
08:32:54 tom_ joins (~tom@2a00:23c8:970c:4801:5b6a:e81b:79dc:f684)
08:33:32 fendor joins (~fendor@178.165.174.170.wireless.dyn.drei.com)
08:34:10 jiribenes joins (~jiribenes@rosa.jiribenes.com)
08:34:13 × choucavalier_ quits (~choucaval@peanutbuttervibes.com) (Ping timeout: 268 seconds)
08:34:13 × joel135 quits (sid136450@id-136450.hampstead.irccloud.com) (Ping timeout: 268 seconds)
08:34:13 × b20n quits (sid115913@id-115913.uxbridge.irccloud.com) (Ping timeout: 268 seconds)
08:34:13 × wallymathieu quits (sid533252@id-533252.uxbridge.irccloud.com) (Ping timeout: 268 seconds)
08:34:19 × Jon quits (jon@dow.land) (Quit: ZNC - http://znc.in)
08:34:29 terrorjack5 joins (~terrorjac@2a01:4f8:1c1e:509a::1)
08:34:50 × kaskal quits (~kaskal@2001:4bb8:2cc:5073:e1cf:a3ef:264a:1e80) (Ping timeout: 268 seconds)
08:34:50 × lechner quits (~lechner@debian/lechner) (Ping timeout: 268 seconds)
08:34:50 × jiribenes_ quits (~jiribenes@rosa.jiribenes.com) (Ping timeout: 268 seconds)
08:34:52 choucavalier joins (~choucaval@peanutbuttervibes.com)
08:35:07 kaskal joins (~kaskal@2001:4bb8:2cc:5073:e1cf:a3ef:264a:1e80)
08:35:27 × xbreu quits (~xbreu@2001:470:69fc:105::1:5061) (Ping timeout: 268 seconds)
08:35:27 × denbrahe quits (~denbrahe@2001:470:69fc:105::19c0) (Ping timeout: 268 seconds)
08:35:27 × Las[m] quits (~lasmatrix@2001:470:69fc:105::74e) (Ping timeout: 268 seconds)
08:35:27 × ManofLetters[m] quits (~manoflett@2001:470:69fc:105::3be) (Ping timeout: 268 seconds)
08:35:27 × sm quits (~sm@plaintextaccounting/sm) (Ping timeout: 268 seconds)
08:35:28 × Yehoshua quits (~yehoshua@2001:470:69fc:105::1:593f) (Ping timeout: 268 seconds)
08:35:28 × kristjansson quits (sid126207@id-126207.tinside.irccloud.com) (Ping timeout: 268 seconds)
08:36:02 × robertm quits (robertm@lattice.rojoma.com) (Ping timeout: 240 seconds)
08:36:04 × zwro[m] quits (~zwromatri@2001:470:69fc:105::1d4) (Ping timeout: 268 seconds)
08:36:04 × peddie quits (~peddie@2001:470:69fc:105::25d) (Ping timeout: 268 seconds)
08:36:04 × quantum quits (~quantum@user/quantum/x-8556232) (Ping timeout: 268 seconds)
08:36:04 × alex[m]1234567 quits (~alexchete@2001:470:69fc:105::1:1001) (Ping timeout: 268 seconds)
08:36:04 × terrorjack quits (~terrorjac@2a01:4f8:1c1e:509a::1) (Ping timeout: 268 seconds)
08:36:04 × acidsys quits (~LSD@2.lsd.systems) (Ping timeout: 268 seconds)
08:36:04 × tom__ quits (~tom@2a00:23c8:970c:4801:5b6a:e81b:79dc:f684) (Ping timeout: 268 seconds)
08:36:04 × Flow quits (~none@gentoo/developer/flow) (Ping timeout: 268 seconds)
08:36:04 × ddb quits (~ddb@ipv6two.tilde.club) (Ping timeout: 268 seconds)
08:36:04 × lieven quits (~mal@ns2.wyrd.be) (Ping timeout: 268 seconds)
08:36:04 × davetapley quits (sid666@id-666.uxbridge.irccloud.com) (Ping timeout: 268 seconds)
08:36:04 × dexterfoo quits (dexter@2a01:7e00::f03c:91ff:fe86:59ec) (Ping timeout: 268 seconds)
08:36:04 × jocke-l quits (jocke-l@a.x0.is) (Ping timeout: 268 seconds)
08:36:04 terrorjack5 is now known as terrorjack
08:36:19 dut_ joins (~dut@user/dut)
08:36:20 joel135 joins (sid136450@id-136450.hampstead.irccloud.com)
08:37:23 lieven joins (~mal@ns2.wyrd.be)
08:37:27 dexterfoo joins (~dexter@li655-253.members.linode.com)
08:37:42 kuribas joins (~user@ptr-25vy0i9mijo6rhu39yx.18120a2.ip6.access.telenet.be)
08:37:42 ddb joins (~ddb@ipv6two.tilde.club)
08:37:51 kristjansson joins (sid126207@id-126207.tinside.irccloud.com)
08:38:00 davetapley joins (sid666@id-666.uxbridge.irccloud.com)
08:38:06 lechner joins (~lechner@debian/lechner)
08:38:14 eggplant_ joins (~Eggplanta@2600:1700:bef1:5e10:f579:9b2b:4d0d:2d44)
08:39:25 × dut quits (~dut@user/dut) (Ping timeout: 256 seconds)
08:40:33 × eggplantade quits (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 256 seconds)
08:43:22 cosimone joins (~user@2001:b07:ae5:db26:c24a:d20:4d91:1e20)
08:46:59 <oscurochu> So haskell has web frameworks. Im kind of overwhelmed by the number of them. I just want to know how mutations work in a language thats immutable
08:47:18 × Hobbyboy quits (Hobbyboy@hobbyboy.co.uk) (Quit: The BNC has broken!)
08:47:23 ManofLetters[m] joins (~manoflett@2001:470:69fc:105::3be)
08:47:38 robertm joins (~robertm@lattice.rojoma.com)
08:47:50 xbreu joins (~xbreu@2001:470:69fc:105::1:5061)
08:48:16 machinedgod joins (~machinedg@24.105.81.50)
08:48:20 jocke-l joins (jocke-l@a.x0.is)
08:48:32 × mrmonday quits (~robert@what.i.hope.is.not.a.tabernaevagant.es) (Ping timeout: 240 seconds)
08:48:45 <dminuoso> oscurochu: Okay, so the immutability has to be understood in context
08:48:51 <dminuoso> It's not that we dont have mutations.
08:48:58 b20n joins (sid115913@id-115913.uxbridge.irccloud.com)
08:48:58 wallymathieu joins (sid533252@id-533252.uxbridge.irccloud.com)
08:49:01 <dminuoso> We have a lot of different mutation tools, including those available to other languages
08:49:09 × econo quits (uid147250@user/econo) (Quit: Connection closed for inactivity)
08:49:09 Flow joins (~none@gentoo/developer/flow)
08:49:10 × cosimone quits (~user@2001:b07:ae5:db26:c24a:d20:4d91:1e20) (Ping timeout: 260 seconds)
08:49:20 <dminuoso> We can manipulate memory directly, we can have traditional "variables" (lets better call them mutable stores) that you can simply manipulate in a loop...
08:49:41 <dminuoso> It's just that the grammatical *expressions* themselves cant cause mutation
08:49:51 mrmonday joins (~robert@what.i.hope.is.not.a.tabernaevagant.es)
08:49:56 <dminuoso> That is, the act of *evaluating* an expression <expr> cant (usually) cause mutation
08:50:14 denbrahe joins (~denbrahe@2001:470:69fc:105::19c0)
08:50:25 lavaman joins (~lavaman@98.38.249.169)
08:50:26 alex[m]1234567 joins (~alexchete@2001:470:69fc:105::1:1001)
08:50:36 peddie joins (~peddie@2001:470:69fc:105::25d)
08:50:37 × sayola quits (~vekto@dslb-088-064-186-153.088.064.pools.vodafone-ip.de) (Ping timeout: 240 seconds)
08:50:41 Yehoshua joins (~yehoshua@2001:470:69fc:105::1:593f)
08:50:44 sm1 joins (~sm@plaintextaccounting/sm)
08:50:45 <dminuoso> A rough intuition to help guide you here, is that if we think of `IO A` as a list of assembly instructions which, if executed, could carry out some arbitrary things. Those assembly instructions themselves are free to do whatever, including manipulating memory or mutable stores.
08:50:52 <dminuoso> But evaluating that list of assembly instructions may not.
08:51:20 <oscurochu> that makes sense
08:51:21 Las[m] joins (~lasmatrix@2001:470:69fc:105::74e)
08:51:35 zwro[m] joins (~zwromatri@2001:470:69fc:105::1d4)
08:51:58 quantum joins (~quantum@user/quantum/x-8556232)
08:52:37 × dust_ quits (~dust@2405:204:5488:ef4c:54b6:3467:52f3:e9f2) (Ping timeout: 240 seconds)
08:53:06 acidsys joins (~LSD@2.lsd.systems)
08:53:18 <dminuoso> oscurochu: In addition, we even have a special environment, in which we can carry out mutations *inside* the evaluation of pure code.
08:53:29 <dminuoso> But its limited in such a way, that these manipulations remain hidden outside, so you cant leak this state.
08:53:45 × mrmonday quits (~robert@what.i.hope.is.not.a.tabernaevagant.es) (Remote host closed the connection)
08:54:10 <dminuoso> This is called ST, and it enables us to say implementing a sort algorithm say like quicksort - which requires in-place mutation to remain efficient - but use it in otherwise pure code.
08:54:16 <dminuoso> % :t runST
08:54:16 <yahb> dminuoso: (forall s. ST s a) -> a
08:54:33 ski . o O ( STM )
08:54:56 × lavaman quits (~lavaman@98.38.249.169) (Ping timeout: 256 seconds)
08:55:15 <dminuoso> So that way we have the benefit of both worlds, writing pure code while using localized mutations that cannot possibly leak out to write highly efficient algorithms.
08:55:17 × flipchan quits (~filip@188-169-255-31.dsl.utg.ge) (Ping timeout: 256 seconds)
08:55:26 <dminuoso> While preventing observable mutations
08:55:38 <dminuoso> inside that pure code.
08:56:05 <ephemient> if you go back to pre-monadic-IO Haskell, main was a pure function that returned a list of IO actions that the runtime should execute, with the results of those actions being fed back into main as input - and with laziness, it all worked out. monadic IO wraps that up into something that is easier to work with
08:56:25 dust_ joins (~dust@2405:204:5488:ef4c:54b6:3467:52f3:e9f2)
08:56:31 <dminuoso> ski: Yeah, I pondered mentioning it. :)
08:56:33 yauhsien joins (~yauhsien@61-231-37-18.dynamic-ip.hinet.net)
08:57:00 mrmonday joins (~robert@octarineparrot.com)
08:58:04 <kuribas> ah, records parameterised by higher kinded variables works just fine in idris :)
08:58:29 <kuribas> Maybe I should move on from this low level language callled haskell ...
08:59:40 <kuribas> https://gist.github.com/kuribas/c4d7fd7ce7ef963f7c02a266828095f3
09:00:27 mc47 joins (~mc47@xmonad/TheMC47)
09:01:31 × yauhsien quits (~yauhsien@61-231-37-18.dynamic-ip.hinet.net) (Ping timeout: 256 seconds)
09:01:52 flipchan joins (~filip@188-169-255-31.dsl.utg.ge)
09:01:59 × flipchan quits (~filip@188-169-255-31.dsl.utg.ge) (Changing host)
09:01:59 flipchan joins (~filip@user/flipchan)
09:14:17 chomwitt joins (~chomwitt@2a02:587:dc03:8900:12c3:7bff:fe6d:d374)
09:17:21 × geekosaur quits (~geekosaur@xmonad/geekosaur) (Remote host closed the connection)
09:17:35 cstml joins (~cstml@user/cstml)
09:17:39 geekosaur joins (~geekosaur@xmonad/geekosaur)
09:17:57 __monty__ joins (~toonn@user/toonn)
09:20:21 × falafel quits (~falafel@2603-8000-8403-e980-a564-89bf-cc0b-6efb.res6.spectrum.com) (Read error: Connection reset by peer)
09:22:58 × shriekingnoise quits (~shrieking@201.231.16.156) (Quit: Quit)
09:23:48 Jon joins (jon@dow.land)
09:24:20 jgeerds_ joins (~jgeerds@55d4a547.access.ecotel.net)
09:24:46 × tzh quits (~tzh@c-24-21-73-154.hsd1.or.comcast.net) (Read error: Connection reset by peer)
09:25:04 tzh joins (~tzh@c-24-21-73-154.hsd1.or.comcast.net)
09:25:14 phma__ joins (~phma@2001:5b0:211f:83e8:ceab:d757:d3e2:cd8f)
09:26:45 Hobbyboy joins (Hobbyboy@hobbyboy.co.uk)
09:28:22 × Adeon quits (sid418992@id-418992.lymington.irccloud.com) (Ping timeout: 260 seconds)
09:28:39 × Jon quits (jon@dow.land) (Quit: ZNC - http://znc.in)
09:28:50 × phma quits (phma@2001:5b0:211f:83e8:ceab:d757:d3e2:cd8f) (Ping timeout: 260 seconds)
09:29:19 phma__ is now known as phma
09:29:58 Adeon joins (sid418992@id-418992.lymington.irccloud.com)
09:33:15 alp joins (~alp@user/alp)
09:33:52 phma_ joins (phma@2001:5b0:211f:83e8:ceab:d757:d3e2:cd8f)
09:34:38 Jon joins (jon@dow.land)
09:35:14 × sa quits (sid1055@id-1055.tinside.irccloud.com) (Ping timeout: 250 seconds)
09:35:21 × little_mac quits (~little_ma@2601:410:4300:3ce0:9145:1668:6954:3d71) (Remote host closed the connection)
09:35:31 × tzh quits (~tzh@c-24-21-73-154.hsd1.or.comcast.net) (Quit: zzz)
09:36:04 sa joins (sid1055@id-1055.tinside.irccloud.com)
09:36:05 × agander_m quits (sid407952@id-407952.tinside.irccloud.com) (Ping timeout: 250 seconds)
09:37:23 × cln quits (sid336875@id-336875.ilkley.irccloud.com) (Ping timeout: 252 seconds)
09:37:23 × ephemient quits (uid407513@id-407513.lymington.irccloud.com) (Ping timeout: 250 seconds)
09:37:23 × aristid quits (sid1599@id-1599.uxbridge.irccloud.com) (Ping timeout: 250 seconds)
09:37:26 × tritlo quits (sid58727@user/tritlo) (Ping timeout: 245 seconds)
09:37:31 aristid joins (sid1599@id-1599.uxbridge.irccloud.com)
09:37:42 × phma quits (~phma@2001:5b0:211f:83e8:ceab:d757:d3e2:cd8f) (Ping timeout: 260 seconds)
09:37:56 × lightandlight quits (sid135476@id-135476.helmsley.irccloud.com) (Ping timeout: 252 seconds)
09:38:01 agander_m joins (sid407952@id-407952.tinside.irccloud.com)
09:38:15 × truckasaurus quits (sid457088@id-457088.helmsley.irccloud.com) (Ping timeout: 250 seconds)
09:38:15 × bradparker quits (sid262931@id-262931.uxbridge.irccloud.com) (Ping timeout: 250 seconds)
09:38:29 × ehamberg quits (sid18208@id-18208.hampstead.irccloud.com) (Ping timeout: 252 seconds)
09:38:30 × ski quits (~ski@remote12.chalmers.se) (Ping timeout: 250 seconds)
09:39:06 × conjunctive quits (sid433686@id-433686.helmsley.irccloud.com) (Ping timeout: 260 seconds)
09:39:06 × rune quits (sid21167@id-21167.ilkley.irccloud.com) (Ping timeout: 260 seconds)
09:39:11 cln joins (sid336875@id-336875.ilkley.irccloud.com)
09:39:19 ski joins (~ski@remote12.chalmers.se)
09:39:35 × joel135 quits (sid136450@id-136450.hampstead.irccloud.com) (Ping timeout: 252 seconds)
09:39:56 × NemesisD quits (sid24071@id-24071.lymington.irccloud.com) (Ping timeout: 245 seconds)
09:40:01 tritlo joins (sid58727@user/tritlo)
09:40:13 bradparker joins (sid262931@id-262931.uxbridge.irccloud.com)
09:40:27 dut_ is now known as dut
09:40:34 ephemient joins (uid407513@id-407513.lymington.irccloud.com)
09:40:43 conjunctive joins (sid433686@id-433686.helmsley.irccloud.com)
09:40:45 joel135 joins (sid136450@id-136450.hampstead.irccloud.com)
09:40:50 phma_ is now known as phma
09:40:50 lightandlight joins (sid135476@id-135476.helmsley.irccloud.com)
09:41:00 ehamberg joins (sid18208@id-18208.hampstead.irccloud.com)
09:41:06 NemesisD joins (sid24071@id-24071.lymington.irccloud.com)
09:41:07 truckasaurus joins (sid457088@id-457088.helmsley.irccloud.com)
09:41:17 × alinab quits (sid468903@helmsley.irccloud.com) (Ping timeout: 250 seconds)
09:41:43 rune joins (sid21167@id-21167.ilkley.irccloud.com)
09:41:45 × dust_ quits (~dust@2405:204:5488:ef4c:54b6:3467:52f3:e9f2) (Quit: Konversation terminated!)
09:42:01 Midjak joins (~Midjak@may53-1-78-226-116-92.fbx.proxad.net)
09:43:09 alinab joins (sid468903@id-468903.helmsley.irccloud.com)
09:43:46 × vito quits (sid1962@user/vito) (Ping timeout: 260 seconds)
09:44:30 vito joins (sid1962@user/vito)
09:44:45 × notzmv quits (~zmv@user/notzmv) (Ping timeout: 250 seconds)
09:46:03 × Pent quits (sid313808@id-313808.lymington.irccloud.com) (Ping timeout: 250 seconds)
09:49:24 Pent joins (sid313808@id-313808.lymington.irccloud.com)
09:49:41 × cynomys quits (~cynomys@user/cynomys) (Ping timeout: 256 seconds)
09:54:46 pretty_dumm_guy joins (trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655)
09:55:59 cfricke joins (~cfricke@user/cfricke)
09:56:01 × cfricke quits (~cfricke@user/cfricke) (Client Quit)
09:56:12 dust_ joins (~dust@2405:204:5488:ef4c:54b6:3467:52f3:e9f2)
09:56:59 yauhsien_ joins (~yauhsien@61-231-37-18.dynamic-ip.hinet.net)
09:57:26 × max22- quits (~maxime@2a01cb08833598005d2ea791b13aed90.ipv6.abo.wanadoo.fr) (Ping timeout: 245 seconds)
10:01:48 × yauhsien_ quits (~yauhsien@61-231-37-18.dynamic-ip.hinet.net) (Ping timeout: 256 seconds)
10:03:17 × merijn quits (~merijn@c-001-001-018.client.esciencecenter.eduvpn.nl) (Ping timeout: 256 seconds)
10:05:11 × Codaraxis__ quits (~Codaraxis@user/codaraxis) (Read error: Connection reset by peer)
10:06:19 Codaraxis joins (~Codaraxis@user/codaraxis)
10:06:54 × xkuru quits (~xkuru@user/xkuru) (Read error: Connection reset by peer)
10:08:12 cfricke joins (~cfricke@user/cfricke)
10:09:50 × Codaraxis quits (~Codaraxis@user/codaraxis) (Read error: Connection reset by peer)
10:10:15 Codaraxis joins (~Codaraxis@user/codaraxis)
10:12:50 Graham31415 joins (~Graham314@5.33.56.252)
10:17:59 ncopa3 is now known as ncopa
10:18:18 × ncopa quits (~ncopa@gbr2-dev1.alpinelinux.org) (Changing host)
10:18:18 ncopa joins (~ncopa@alpine/developer/ncopa)
10:20:11 <Graham31415> Hi. I'm planning to learn Haskell, and I've noticed there are a variety of older docs/books that apply to Haskell98. Should I avoiding learning from older reference material (some of them look more my style compared to newer resources)? I have GHC 9.0.2 installed via my OS, and see that this does Haskell2010 by default, but that newer GHC versions
10:20:12 <Graham31415> enable GHC2021 by default (with a bewildering array of extensions enabled). Is there a reason to use/avoid any particular Haskell subset while learning? Is it just a matter of ignoring any syntax I don't understand when reading code (at least for now)?
10:20:32 × cfricke quits (~cfricke@user/cfricke) (Quit: WeeChat 3.3)
10:21:46 <geekosaur> haskell2010 has maybe 3 smallish changes compared to haskell98
10:22:25 <geekosaur> the bigger changes aren't captured by any standard but they're easy enough to deal with once you know about them
10:22:29 DNH joins (~DNH@2a02:8108:1100:16d8:7951:c786:1220:b402)
10:23:14 <geekosaur> (and ghc2021 is those extensions and nothing else, and you won't find any learning material for it. or for the extensions, aside from stuff that assumes you already learned standard Haskell)
10:24:15 <geekosaur> @where books
10:24:15 <lambdabot> https://www.extrema.is/articles/haskell-books, see also @where LYAH, RWH, YAHT, SOE, HR, PIH, TFwH, wikibook, PCPH, HPFFP, HTAC, TwT, FoP, PFAD, WYAH, non-haskell-books
10:24:57 <geekosaur> mm, guess that needs to be edited
10:25:23 xsperry joins (~xs@user/xsperry)
10:25:36 <geekosaur> or not, lyah seems to be back online
10:27:14 <Graham31415> Thanks!
10:29:13 <geekosaur> feel free to ask here if you have any questions or problems
10:29:24 <geekosaur> there's usually someone around who can help
10:29:35 <Graham31415> Awesome. Will do!
10:29:43 × lortabac quits (~lortabac@2a01:e0a:541:b8f0:d2eb:19ab:f134:7a9c) (Quit: WeeChat 2.8)
10:30:28 × eggplant_ quits (~Eggplanta@2600:1700:bef1:5e10:f579:9b2b:4d0d:2d44) (Remote host closed the connection)
10:32:00 Codaraxis_ joins (~Codaraxis@user/codaraxis)
10:35:48 × Codaraxis quits (~Codaraxis@user/codaraxis) (Ping timeout: 256 seconds)
10:36:32 × Feuermagier quits (~Feuermagi@user/feuermagier) (Remote host closed the connection)
10:39:17 × euandreh quits (~euandreh@2804:14c:33:9fe5:8e08:7908:8918:48c0) (Ping timeout: 240 seconds)
10:39:31 Franciman joins (~Franciman@mx1.fracta.dev)
10:39:38 <Franciman> so you kept making fun of me
10:39:47 <Franciman> https://github.com/Kindelia/HVM here is the answer to y'all
10:40:46 <Franciman> and now i am happy i won't have to code in haskell ever again, this community has become toxic for me
10:40:50 <Franciman> enjoy making fun of people
10:40:51 <Franciman> bye
10:41:06 <Franciman> we are hopefully getting much better tools than haskell and much better communities
10:41:08 <Franciman> bye
10:41:36 arjun joins (~arjun@user/arjun)
10:41:47 Franciman parts (~Franciman@mx1.fracta.dev) (haskell is the richest esolang)
10:43:01 <kuribas> What's up with him?
10:44:27 memowe joins (~memowe@vpnpool6-3901-0442.uni-muenster.de)
10:44:50 Feuermagier joins (~Feuermagi@user/feuermagier)
10:45:15 <opqdonut> oh huh HVM sounds interesting
10:45:30 <memowe> o/
10:46:37 <geekosaur> Franciman has been in the past rather pissy that we don't think like they do
10:46:47 <kuribas> geekosaur: there are more?
10:46:57 × Erutuon quits (~Erutuon@user/erutuon) (Ping timeout: 240 seconds)
10:46:59 <geekosaur> singular "they"
10:47:14 geekosaur tends to avoid gendering
10:47:43 <kuribas> ah, haha :)
10:47:45 [exa] foresees `theys`
10:47:51 Franciman joins (~Franciman@mx1.fracta.dev)
10:48:03 <Franciman> geekosaur: i've been pissy? Ok I apologise, but i did because i felt made fun of
10:48:11 <Franciman> because of your (noy specifically yours) sarcarsm
10:48:20 <Franciman> ok
10:48:22 <Franciman> sorry
10:48:23 <dminuoso> kuribas: This is a singular they as per Chicago Guide of Style
10:48:32 <kuribas> right :)
10:48:33 <geekosaur> I didn't see much sarcasm in the exchanges I saw, just a complete failure to agree on basics
10:48:33 <Franciman> but why make fun of me
10:48:45 <maerwald> geekosaur: "they" is also gendering
10:49:05 <Franciman> you can use "it" for me, please :)
10:49:14 <kuribas> haskellers are pedantic, academic, stubburn, dismissive, but I wouldn't call them toxic...
10:50:07 <Franciman> geekosaur: glad to be wrong
10:51:19 <Franciman> so i haven't been made fun of when i encouraged a friend, but received the equivalent in text of rolled eyes by by other people in the room
10:51:20 <kuribas> stubborn
10:51:22 <Franciman> ok
10:52:03 memowe parts (~memowe@vpnpool6-3901-0442.uni-muenster.de) ()
10:52:06 <Franciman> proposing things and getting answers like: yes, and maybe let's also do this *dumb thing*
10:52:09 <Franciman> isn't sarcasm
10:52:11 <Franciman> ?
10:52:16 <Franciman> ok, then
10:52:19 <Franciman> i was wrong
10:52:19 <[exa]> Franciman: btw what happened? (for the others here, my scrollback doesnt seem to reach any problems)
10:53:07 <Franciman> nothing
10:53:09 × mon_aaraj quits (~MonAaraj@user/mon-aaraj/x-4416475) (Ping timeout: 256 seconds)
10:53:10 <Franciman> i misinterpreted things
10:53:13 <Franciman> so enjoy
10:53:18 <[exa]> oh okay
10:53:22 × Lord_of_Life quits (~Lord@user/lord-of-life/x-2819915) (Ping timeout: 256 seconds)
10:53:25 <Franciman> enjoy your awesome perfect ultimate language
10:53:30 Lord_of_Life_ joins (~Lord@user/lord-of-life/x-2819915)
10:53:31 <maerwald> :D
10:53:45 <Franciman> being beaten by hvm by an exponential factor
10:53:58 <Franciman> pretty awesome result
10:54:01 <Franciman> btw
10:54:29 <dminuoso> Glad if you produce results that you're happy with.
10:54:38 <Franciman> and maybe in the future remember that some people may feel offended when you act in some ways
10:54:41 <Franciman> so ok
10:54:46 <Franciman> sorry , i misinterpreted
10:54:49 mon_aaraj joins (~MonAaraj@user/mon-aaraj/x-4416475)
10:54:57 × dka quits (~code-is-a@ns3059207.ip-193-70-33.eu) (Quit: My Ex-Girlfriend once told me: I'm not a slut, I'm just popular)
10:55:01 <Franciman> enjoy your esocommunity
10:55:05 <Franciman> bye
10:55:08 Franciman parts (~Franciman@mx1.fracta.dev) (TURBOquit(TM) - the fastest way to get out of awkward situations)
10:55:50 yauhsien_ joins (~yauhsien@61-231-37-18.dynamic-ip.hinet.net)
10:56:20 Lord_of_Life_ is now known as Lord_of_Life
10:57:11 <maerwald> I think Haskell is more of a sunk cost fallacy by now (like 99% of all languages)
10:57:19 <maerwald> but that's ok
10:57:20 × Morrow quits (~user@bzq-110-168-31-106.red.bezeqint.net) (Ping timeout: 256 seconds)
10:57:27 dka joins (~code-is-a@ns3059207.ip-193-70-33.eu)
10:59:21 Morrow joins (~user@bzq-110-168-31-106.red.bezeqint.net)
11:00:22 × yauhsien_ quits (~yauhsien@61-231-37-18.dynamic-ip.hinet.net) (Ping timeout: 268 seconds)
11:01:05 alx741 joins (~alx741@157.100.197.240)
11:01:18 × mon_aaraj quits (~MonAaraj@user/mon-aaraj/x-4416475) (Ping timeout: 256 seconds)
11:02:01 × fef quits (~thedawn@user/thedawn) (Remote host closed the connection)
11:02:06 newhoggy joins (sid198874@id-198874.helmsley.irccloud.com)
11:02:34 fef joins (~thedawn@user/thedawn)
11:02:53 × fef quits (~thedawn@user/thedawn) (Client Quit)
11:03:09 mon_aaraj joins (~MonAaraj@user/mon-aaraj/x-4416475)
11:04:04 <Benzi-Junior> how do I set a ghc flag globally
11:04:06 × Graham31415 quits (~Graham314@5.33.56.252) (Quit: Client closed)
11:04:31 <Benzi-Junior> i.e. whenever I run ghc I want certain flags sets
11:05:42 <geekosaur> there isn't really a way to do so. but these days it's unusual to run ghc by itself, and if you use cabal or stack there are ways to set "global" options
11:09:38 <maerwald> Benzi-Junior: a wrapper script
11:10:31 <geekosaur> beware that if you do that it could confuse stacdk/cabal if you do use them for some things
11:10:43 <geekosaur> depending on the option
11:13:04 cynomys joins (~cynomys@user/cynomys)
11:13:57 <Benzi-Junior> geekosaur, -fno-warn-tabs
11:15:08 lavaman joins (~lavaman@98.38.249.169)
11:15:25 cfricke joins (~cfricke@user/cfricke)
11:15:38 × dka quits (~code-is-a@ns3059207.ip-193-70-33.eu) (Quit: My Ex-Girlfriend once told me: I'm not a slut, I'm just popular)
11:15:44 × cynomys quits (~cynomys@user/cynomys) (Client Quit)
11:16:22 <yushyin> I advise you not to use tabs unless you really really know how the layout rules work :D
11:16:37 <geekosaur> that one's probably fine although … that. people will warn you about it all over the place :)
11:16:58 <yushyin> like I just did :)
11:17:10 × chele quits (~chele@user/chele) (Ping timeout: 256 seconds)
11:17:21 <geekosaur> also that you always use editors that agree with ghc on what a tab is
11:17:49 <Benzi-Junior> honestly, I have been writing haskell since years before ghc made -fwarn tabs the default
11:18:23 <Benzi-Junior> I have yet to find a single bug due to indentation
11:20:06 × lavaman quits (~lavaman@98.38.249.169) (Ping timeout: 268 seconds)
11:21:05 × gawen_ quits (~gawen@user/gawen) (Read error: Connection reset by peer)
11:22:52 <Benzi-Junior> I have however had -fwarn-tabs break some builds beacuse of tools escalating warnings to errors
11:23:43 gawen joins (~gawen@user/gawen)
11:24:29 × gawen quits (~gawen@user/gawen) (Read error: Connection reset by peer)
11:25:12 × dust_ quits (~dust@2405:204:5488:ef4c:54b6:3467:52f3:e9f2) (Quit: Konversation terminated!)
11:26:44 gawen joins (~gawen@user/gawen)
11:28:58 <maerwald> Benzi-Junior: use a wrapper script
11:29:25 × Morrow quits (~user@bzq-110-168-31-106.red.bezeqint.net) (Ping timeout: 256 seconds)
11:30:37 × vglfr quits (~vglfr@46.96.161.0) (Ping timeout: 240 seconds)
11:30:50 eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:f579:9b2b:4d0d:2d44)
11:30:57 Erutuon joins (~Erutuon@user/erutuon)
11:31:11 Morrow joins (~user@bzq-110-168-31-106.red.bezeqint.net)
11:31:40 <maerwald> exec ghc -fno-warn-tabs ${1+"$@"}
11:31:48 mikoto-chan joins (~mikoto-ch@213.177.151.239)
11:32:04 max22- joins (~maxime@2a01cb08833598000998630b2f1bfbaa.ipv6.abo.wanadoo.fr)
11:33:06 <geekosaur> use a path on that "ghc" so the script doesn't re-exec itself :)
11:33:42 <geekosaur> (also just tested to make sure it doesn't do weird stuff with --version, --supported-languages, or other things build systems might want to do with ghc behind your back)
11:35:57 × eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:f579:9b2b:4d0d:2d44) (Ping timeout: 240 seconds)
11:36:47 × mon_aaraj quits (~MonAaraj@user/mon-aaraj/x-4416475) (Ping timeout: 256 seconds)
11:38:28 mon_aaraj joins (~MonAaraj@user/mon-aaraj/x-4416475)
11:39:03 × Morrow quits (~user@bzq-110-168-31-106.red.bezeqint.net) (Ping timeout: 256 seconds)
11:40:40 Morrow joins (~user@bzq-110-168-31-106.red.bezeqint.net)
11:47:02 dschrempf joins (~dominik@070-207.dynamic.dsl.fonira.net)
11:49:37 madjestic joins (~madjestic@88-159-247-120.fixed.kpn.net)
11:52:29 <Andrew> When compiling and running https://termbin.com/v4fh, the evaluation sequence is wrong
11:52:41 <Andrew> i.e. I get the prompt '> ' after typing the input
11:53:40 <yushyin> you should flush stdout handle
11:53:47 <dminuoso> Or change the buffering mode.
11:53:59 <Andrew> Oh, thanks
11:54:12 <Andrew> I thought that it was a strictness issue, which confused me because I'm already in `do'
11:54:25 <dminuoso> This is some of the bizarre things you begin to appreciate, that in a terminal you have stdin echo and stdout together in one stream..
11:54:38 <dminuoso> So its up to you to sort out the ambiguity/reordering issues
11:54:42 <Andrew> I mean, don't all interactive programs do that?
11:55:10 <dminuoso> All interactive CLI programs *must* do this one way or another
11:55:43 <dminuoso> That's simply a natural consequence of shared screen estate. If you want your output and input echo to occur on the same space.
11:56:08 notzmv joins (~zmv@user/notzmv)
11:57:02 <dminuoso> Amongst the toolbag of things to do is: tightly control buffering, toggle echo mode off, switch to raw mode and handle everything yourself..
11:57:24 × dschrempf quits (~dominik@070-207.dynamic.dsl.fonira.net) (Ping timeout: 256 seconds)
11:58:59 <dminuoso> If you take a curses client, like say common IRC clients, they address this by switching to raw mode and then controlling the entirety of the terminal manually by emitting the right control sequences in the right order/time.
11:59:11 <geekosaur> the reason output is buffered is because even in 2022 if you turn off buffering you can see individual characters being output one at a time
11:59:31 <geekosaur> if every one needs its own systemj call for output
11:59:32 merijn joins (~merijn@c-001-001-018.client.esciencecenter.eduvpn.nl)
12:00:02 Andrew likes having individual outputs one-by-one
12:00:15 <Andrew> I hate it when UNIX pipes buffer too much
12:00:15 <dminuoso> Andrew: Your users might not for performance reasons.
12:00:20 <Andrew> Hehe true
12:00:42 <yushyin> only in haskell do people quickly blame lazyness for this, while the same behaviour is seen in all other languages
12:00:48 <dminuoso> Andrew: The ideal compromise here is raw mode.
12:01:02 <Andrew> dminuoso: I found that, thanks
12:01:41 kaph joins (~kaph@net-2-47-208-144.cust.vodafonedsl.it)
12:01:42 <Andrew> yushyin: I don't see that with TeX or C or python or shell, but yes, Haskell has laziness, and if you don't know what `do' does, that's a reasonable idea
12:01:43 <dminuoso> Andrew: Say curses actually uses custom buffering but with arbitrary degrees of freedom. But it means the terminal output is managed by you entiretly.
12:01:51 boxscape_ joins (~boxscape_@p4ff0b9d5.dip0.t-ipconnect.de)
12:01:56 <Andrew> Yeah, I know that
12:02:01 <geekosaur> I see it with C, it does exactly the same buffering
12:02:03 gawen_ joins (~gawen@user/gawen)
12:02:05 <yushyin> ^
12:02:30 <dminuoso> Mmm, is that actually defined in C?
12:02:30 × gawen quits (~gawen@user/gawen) (Ping timeout: 256 seconds)
12:02:35 <boxscape_> Is there a canonical haskell solution for putting on hold and waking up threads with signals from other threads?
12:02:41 <dminuoso> Id expect buffering defined in systems standards like POSIX, if anything.
12:02:59 <dminuoso> boxscape_: Yes.
12:03:09 <dminuoso> boxscape_: Use an T/MVar?
12:03:15 <dminuoso> And just block on it one way or another
12:03:23 <boxscape_> ah, right, those exist
12:03:24 <boxscape_> thanks
12:03:39 <Andrew> By the way, is there something like `read', but works for [char]? For example, `functionToBeDiscovered "123" :: Integer` is 123
12:04:00 <dminuoso> Andrew: So read actually works for that, but it's a very poor fit.
12:04:01 <geekosaur> huh?
12:04:12 <Andrew> Hmm...
12:04:21 <byorgey> Andrew: [Char] is the same as String
12:04:21 <__monty__> :t read
12:04:22 <geekosaur> @src String
12:04:22 <lambdabot> type String = [Char]
12:04:22 <lambdabot> Read a => String -> a
12:04:28 <dminuoso> Andrew: The simple "get some quick practice" answer is read if you dont care about performance, bugs and poor diagnostics.
12:04:31 <Andrew> I know that char is same as string, yes
12:04:37 <dminuoso> The industrial answer is attoparsec/megaparsec.
12:04:50 <Andrew> I mean, `read "123" :: Integer` is errooneous
12:04:56 <byorgey> > read "123" :: Integer
12:04:58 <lambdabot> 123
12:05:01 <byorgey> works for me
12:05:07 <Andrew> Wait, really sorry, that was my typing, sorry :(
12:05:16 <byorgey> hehe, no worries =)
12:05:20 <dminuoso> Andrew: So the first answer is, you likely never want read, readMaybe is the better solution
12:05:32 <dminuoso> Because you likely dont control the input, so you need to be able to deal with bugs.
12:05:48 <Andrew> Ah, yes
12:06:27 <dminuoso> The next step is that read extremely poor performance, the third step is that `read` is sort of like a haskell evaluator (that complements show) rather than a parser framework. Then final, read is unable to give any diagnostics as to why or where parsing something failed.
12:06:28 × mon_aaraj quits (~MonAaraj@user/mon-aaraj/x-4416475) (Ping timeout: 256 seconds)
12:07:00 <dminuoso> Which is why if you want to turn textual data into something different, you likely want to use a proper parsing library like `attoparsec` or `megaparsec`
12:07:19 <dminuoso> Haskell certainly doesnt make the task of "process some text data" very easy for beginners (and experts).
12:07:36 × Erutuon quits (~Erutuon@user/erutuon) (Ping timeout: 256 seconds)
12:09:02 <Andrew> dminuoso: I noticed that, yeah. I think it's not that easy (but "better") in C either, the easiest is of course sh, which doesn't have types, and everything is a string
12:11:43 <geekosaur> well, except sh is short on a bunch of useful tools
12:11:47 <geekosaur> which is why awk and perl
12:12:35 × vysn quits (~vysn@user/vysn) (Quit: WeeChat 3.3)
12:15:19 × jgeerds_ quits (~jgeerds@55d4a547.access.ecotel.net) (Ping timeout: 256 seconds)
12:15:27 × cfricke quits (~cfricke@user/cfricke) (Quit: WeeChat 3.3)
12:16:57 Guest9250 is now known as xstill-
12:17:05 fef joins (~thedawn@user/thedawn)
12:17:27 xstill- is now known as Guest1281
12:18:13 cfricke joins (~cfricke@user/cfricke)
12:20:55 <maerwald> Andrew: sh has types, e.g. functions (arrays in bash) etc.
12:20:59 <dminuoso> Andrew: Better in C? As if all the string formatting and parsing functions have historically not been one of the largest source of CVEs...
12:21:53 <dminuoso> Astronomically poor support for textual data in C gave right to entire industries of red and blue teams...
12:21:58 <dminuoso> *gave birth
12:22:05 × oscurochu quits (~oscurochu@097-096-050-227.res.spectrum.com) (Remote host closed the connection)
12:22:08 <Andrew> That's true
12:22:12 <dminuoso> So sure. Its good in the sense that it secures a lot of peoples lifes... :)
12:22:14 <maerwald> dminuoso: that's because people in C don't use parser combinators
12:22:18 <maerwald> it's not the fault of the language
12:22:22 <Andrew> Exactly
12:22:30 <dminuoso> maerwald: Its the fault of the language if they bring tools that are incredibly easy to misuse.
12:22:41 <Andrew> I mean, sh is really UNIXy, so things are supposed to be separate tools linked together
12:23:03 <dminuoso> It's like handing unstable explosives to a kid, but blaming them for playing with them, instead of the safe wooden toys
12:23:05 <maerwald> dminuoso: parser combinators didn't really exist back then I hink
12:23:11 <maerwald> so no, I don't think it's the fault of the language
12:23:22 <Andrew> By the way, are there any BUILTIN functions that are like the INVERSE of map? For example it takes a list of functions (do those exist? hmm) and a peice of data and applies all of them to a list
12:23:35 <dminuoso> Andrew: Yes, map!
12:23:41 <Andrew> What?
12:23:59 <dminuoso> % ($ 3) <$> [(+1), (*2)]
12:23:59 <yahb> dminuoso: [4,6]
12:24:03 <dminuoso> Voila! :)
12:24:15 <dminuoso> note, if you're unfamiliar, <$> is an infix variant of map
12:24:25 <dminuoso> % map ($ 3) [(+1), (*2)]
12:24:25 <yahb> dminuoso: [4,6]
12:24:35 <Andrew> why the $ there?
12:24:43 <Guillaum[m]> And if you are unfamiliar with ($ 3), that (\f -> f 3)
12:24:51 <dminuoso> a $ b = a b
12:24:56 <Andrew> Oh
12:25:05 <dminuoso> So ($ 3) is a partially applied ($)
12:25:09 Andrew recalls that `seq' is used somewhere there
12:25:10 × dsrt^ quits (~dsrt@75-147-197-198-Atlanta.hfc.comcastbusiness.net) (Ping timeout: 256 seconds)
12:25:16 <boxscape_> % distribute [(+1), (*2)] 3
12:25:16 <yahb> boxscape_: [4,6]
12:25:18 <Andrew> k, got it :)
12:25:20 <boxscape_> that's not in the standard library though
12:25:25 <Andrew> It feels a bit hacky though
12:25:30 <dminuoso> What's hacky about it?
12:25:38 <dminuoso> It's very idiomatic.
12:26:47 <Guillaum[m]> Andrew if you are not at ease with `$`, just write another function (let's say "g f = f 3") and use it in your map (such as "map g [(+1), (*2)]")
12:27:19 dsrt^ joins (~dsrt@75-147-197-198-Atlanta.hfc.comcastbusiness.net)
12:28:15 <idnar> % [(+1), (*2)] <*> pure 3
12:28:15 <yahb> idnar: [4,6]
12:28:24 <dminuoso> Or write your own `distribute xs y = ($ y) <$> xs`, and then have the same comfort as boxscape_ above.
12:28:33 <Andrew> Yeah
12:28:37 <Andrew> Thanks
12:29:45 chele joins (~chele@user/chele)
12:29:46 dka joins (~code-is-a@ns3059207.ip-193-70-33.eu)
12:30:16 <boxscape_> (the one I used is from the "distributive" package by the way)
12:30:30 lortabac joins (~lortabac@2a01:e0a:541:b8f0:db29:cb0:7e70:ac05)
12:30:58 <boxscape_> % sequenceA [(+1), (*2)] 3
12:30:58 <yahb> boxscape_: [4,6]
12:30:59 <boxscape_> hm
12:31:06 <boxscape_> I suppose that works, too
12:31:19 <dminuoso> % :t sequenceA
12:31:19 <yahb> dminuoso: (Traversable t, Applicative f) => t (f a) -> f (t a)
12:31:40 <dminuoso> That's quite cunning
12:31:55 <boxscape_> I only tried it because sequenceA's type signature is so similar to distribute
12:31:57 <boxscape_> :t distribute
12:31:58 <lambdabot> error:
12:31:58 <lambdabot> • Variable not in scope: distribute
12:31:58 <lambdabot> • Perhaps you meant ‘distrib’ (imported from Control.Lens)
12:32:00 <boxscape_> % :t distribute
12:32:00 <yahb> boxscape_: (Distributive g, Functor f) => f (g a) -> g (f a)
12:32:02 <dminuoso> But I think its too shrouded and not obvious what this does.
12:32:08 <boxscape_> that is true
12:32:23 × azimut_ quits (~azimut@gateway/tor-sasl/azimut) (Remote host closed the connection)
12:32:55 azimut joins (~azimut@gateway/tor-sasl/azimut)
12:33:05 yauhsien_ joins (~yauhsien@61-231-37-18.dynamic-ip.hinet.net)
12:33:27 × merijn quits (~merijn@c-001-001-018.client.esciencecenter.eduvpn.nl) (Ping timeout: 256 seconds)
12:37:38 × yauhsien_ quits (~yauhsien@61-231-37-18.dynamic-ip.hinet.net) (Ping timeout: 256 seconds)
12:42:52 × MasseR4 quits (~MasseR@51.15.143.128) (Quit: The Lounge - https://thelounge.chat)
12:43:30 MasseR4 joins (~MasseR@51.15.143.128)
12:44:47 Gurkenglas joins (~Gurkengla@dslb-090-186-104-244.090.186.pools.vodafone-ip.de)
12:46:26 yassernasc joins (~yassernas@2804:29b8:505a:f33d:1872:f10d:d91b:b66)
12:48:36 Guest4442 joins (~Guest44@77.222.105.50)
12:57:03 oscurochu joins (~oscurochu@097-096-050-227.res.spectrum.com)
12:57:48 × mc47 quits (~mc47@xmonad/TheMC47) (Remote host closed the connection)
12:58:00 × DNH quits (~DNH@2a02:8108:1100:16d8:7951:c786:1220:b402) (Quit: Textual IRC Client: www.textualapp.com)
12:59:31 × mikoto-chan quits (~mikoto-ch@213.177.151.239) (Ping timeout: 256 seconds)
13:00:38 mikoto-chan joins (~mikoto-ch@213.177.151.239)
13:02:09 dschrempf joins (~dominik@070-207.dynamic.dsl.fonira.net)
13:02:41 vglfr joins (~vglfr@46.96.158.194)
13:05:34 yauhsien_ joins (~yauhsien@61-231-37-18.dynamic-ip.hinet.net)
13:09:24 × alMalsamo quits (~alMalsamo@gateway/tor-sasl/almalsamo) (Ping timeout: 276 seconds)
13:10:29 × yauhsien_ quits (~yauhsien@61-231-37-18.dynamic-ip.hinet.net) (Ping timeout: 268 seconds)
13:11:06 alMalsamo joins (~alMalsamo@gateway/tor-sasl/almalsamo)
13:11:10 zincy joins (~zincy@2a00:23c8:970c:4801:f0bc:c4cb:1665:1c67)
13:11:13 fendor_ joins (~fendor@77.119.206.49.wireless.dyn.drei.com)
13:12:33 × zincy quits (~zincy@2a00:23c8:970c:4801:f0bc:c4cb:1665:1c67) (Remote host closed the connection)
13:13:51 × fendor quits (~fendor@178.165.174.170.wireless.dyn.drei.com) (Ping timeout: 250 seconds)
13:16:06 × Guest1281 quits (xstill@lounge.fi.muni.cz) (Changing host)
13:16:06 Guest1281 joins (xstill@fimu/xstill)
13:17:12 Guest1281 is now known as xstill_
13:24:40 × max22- quits (~maxime@2a01cb08833598000998630b2f1bfbaa.ipv6.abo.wanadoo.fr) (Ping timeout: 268 seconds)
13:25:52 n3rdy1 joins (~n3rdy1@2600:1700:4570:3480::41)
13:26:46 × Feuermagier quits (~Feuermagi@user/feuermagier) (Quit: Leaving)
13:27:47 CiaoSen joins (~Jura@p200300c95737a2002a3a4dfffe84dbd5.dip0.t-ipconnect.de)
13:32:22 ProfSimm joins (~ProfSimm@176-12-60-137.pon.spectrumnet.bg)
13:34:06 × MajorBiscuit quits (~MajorBisc@c-001-028-049.client.tudelft.eduvpn.nl) (Quit: WeeChat 3.4)
13:35:19 MajorBiscuit joins (~MajorBisc@c-001-028-049.client.tudelft.eduvpn.nl)
13:37:36 × dsrt^ quits (~dsrt@75-147-197-198-Atlanta.hfc.comcastbusiness.net) (Remote host closed the connection)
13:39:11 × mikoto-chan quits (~mikoto-ch@213.177.151.239) (Quit: mikoto-chan)
13:40:14 xstill_ is now known as xstill-
13:40:17 × jespada quits (~jespada@87.74.36.188) (Ping timeout: 250 seconds)
13:41:18 jespada joins (~jespada@87.74.36.188)
13:43:13 qrpnxz parts (~qrpnxz@user/qrpnxz) (Disconnected: Replaced by new connection)
13:43:28 qrpnxz joins (~qrpnxz@user/qrpnxz)
13:48:21 × zaquest quits (~notzaques@5.130.79.72) (Remote host closed the connection)
13:49:14 vysn joins (~vysn@user/vysn)
13:49:35 × dschrempf quits (~dominik@070-207.dynamic.dsl.fonira.net) (Quit: WeeChat 3.3)
13:50:00 × ProfSimm quits (~ProfSimm@176-12-60-137.pon.spectrumnet.bg) (Remote host closed the connection)
13:50:20 ProfSimm joins (~ProfSimm@176-12-60-137.pon.spectrumnet.bg)
13:51:09 wombat875 joins (~wombat875@pool-72-89-24-154.nycmny.fios.verizon.net)
13:51:17 qrpnxz parts (~qrpnxz@user/qrpnxz) (Disconnected: Replaced by new connection)
13:51:27 qrpnxz joins (abc4f95c31@user/qrpnxz)
13:51:40 Pickchea joins (~private@user/pickchea)
13:51:42 qrpnxz parts (abc4f95c31@user/qrpnxz) ()
13:52:01 qrpnxz joins (~qrpnxz@user/qrpnxz)
13:54:56 soxen joins (~bbrahms@pool-173-54-217-168.nwrknj.fios.verizon.net)
13:55:04 × ProfSimm quits (~ProfSimm@176-12-60-137.pon.spectrumnet.bg) (Ping timeout: 256 seconds)
13:59:31 × newhoggy quits (sid198874@id-198874.helmsley.irccloud.com) (Ping timeout: 245 seconds)
13:59:40 newhoggy joins (sid198874@id-198874.helmsley.irccloud.com)
14:01:07 waleee joins (~waleee@2001:9b0:21d:fc00:398f:b003:b90d:acf4)
14:03:46 slack1256 joins (~slack1256@191.126.99.84)
14:04:13 × slack1256 quits (~slack1256@191.126.99.84) (Remote host closed the connection)
14:04:18 Unhammer joins (~Unhammer@user/unhammer)
14:08:14 <Morrow> boxscape_: I believe using sequence like that will use O(n) space, or so I've heard
14:08:31 <boxscape_> oh interesting
14:09:38 y04nn joins (~y04nn@92.223.89.196)
14:09:47 × wombat875 quits (~wombat875@pool-72-89-24-154.nycmny.fios.verizon.net) (Ping timeout: 256 seconds)
14:09:53 <Morrow> since you sessentially have sequence [a,b] = (\x -> a x : (\y -> b y : (\z -> []) y) x)
14:11:48 wombat875 joins (~wombat875@pool-72-89-24-154.nycmny.fios.verizon.net)
14:14:40 Jing joins (~hedgehog@240e:390:7c53:a7e1:7942:5c67:99d0:7a74)
14:15:44 × MajorBiscuit quits (~MajorBisc@c-001-028-049.client.tudelft.eduvpn.nl) (Quit: WeeChat 3.4)
14:16:00 MajorBiscuit joins (~MajorBisc@c-001-028-049.client.tudelft.eduvpn.nl)
14:16:36 <Morrow> Although now I'm not so sure about that
14:17:56 × chenqisu1 quits (~chenqisu1@183.217.200.249) (Ping timeout: 256 seconds)
14:19:33 <Morrow> Actually it seems to make a big difference when optimizations are turned on.
14:21:57 × n3rdy1 quits (~n3rdy1@2600:1700:4570:3480::41) (Ping timeout: 240 seconds)
14:22:38 × MajorBiscuit quits (~MajorBisc@c-001-028-049.client.tudelft.eduvpn.nl) (Quit: WeeChat 3.4)
14:22:54 MajorBiscuit joins (~MajorBisc@c-001-028-049.client.tudelft.eduvpn.nl)
14:25:36 <boxscape_> I suppose that makes sense
14:27:21 × tv quits (~tv@user/tv) (Ping timeout: 256 seconds)
14:30:09 merijn joins (~merijn@c-001-001-018.client.esciencecenter.eduvpn.nl)
14:30:12 × Morrow quits (~user@bzq-110-168-31-106.red.bezeqint.net) (Quit: leaving)
14:30:28 Morrow joins (~user@bzq-110-168-31-106.red.bezeqint.net)
14:31:20 tv joins (~tv@user/tv)
14:33:24 wroathe joins (~wroathe@206-55-188-8.fttp.usinternet.com)
14:33:24 × wroathe quits (~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host)
14:33:24 wroathe joins (~wroathe@user/wroathe)
14:33:26 <Profpatsch> ANy better way to convert a Map into a HashMap than going (HashMap.fromList . Map.toList)?
14:34:16 <geekosaur> nope. they're completely different structures, there's no shortcut to conversion
14:34:42 <Guillaum[m]> Profpatsch: I don't think so. You may want to use `fold` and `HashMap.insert`, but it won't be dramatically different.
14:34:58 n3rdy1 joins (~n3rdy1@2600:1700:4570:3480:1b88:50f:dae0:9293)
14:35:02 × hueso quits (~root@user/hueso) (Quit: hueso)
14:35:06 <Profpatsch> geekosaur: But conversion e.g. with foldMapWithKey is probably pretty similar?
14:35:33 <geekosaur> yes. you're still going through an intermediate, it's just hidden inside the fold
14:35:46 <Profpatsch> I guess it’s hard to know and I need to benchmark it if it ever becomes a speed problem
14:35:54 <geekosaur> either way you're building a completely different structure from the original
14:36:00 <Profpatsch> Or just convert to a builder directly
14:36:21 <Profpatsch> Oh but it will only recurse to the level of keys anyway and leave the values untouched
14:36:24 <Profpatsch> so it’s not a deep copy
14:38:30 <boxscape_> Is there a way to kill a thread harder than with killThread?
14:38:50 <boxscape_> in particular when the thread in question is blocked at the moment
14:39:49 × Morrow quits (~user@bzq-110-168-31-106.red.bezeqint.net) (Ping timeout: 256 seconds)
14:39:58 hueso joins (~root@user/hueso)
14:40:34 ProfSimm joins (~ProfSimm@176-12-60-137.pon.spectrumnet.bg)
14:41:33 Morrow joins (~user@bzq-110-168-31-106.red.bezeqint.net)
14:42:06 <boxscape_> hm from I can find it seems like the answer is probably no
14:44:21 × Pickchea quits (~private@user/pickchea) (Ping timeout: 256 seconds)
14:48:45 × hueso quits (~root@user/hueso) (Quit: hueso)
14:49:40 × deadmarshal quits (~deadmarsh@95.38.114.109) (Ping timeout: 256 seconds)
14:50:24 Sgeo joins (~Sgeo@user/sgeo)
14:51:49 × cods quits (~fred@82-65-232-44.subs.proxad.net) (Ping timeout: 240 seconds)
14:51:54 hueso joins (~root@user/hueso)
14:53:30 cods joins (~fred@82-65-232-44.subs.proxad.net)
14:57:04 max22- joins (~maxime@2a01cb08833598004ac57d9f58d5074f.ipv6.abo.wanadoo.fr)
14:57:04 × shapr quits (~user@pool-100-36-247-68.washdc.fios.verizon.net) (Read error: Connection reset by peer)
14:58:45 shapr joins (~user@pool-100-36-247-68.washdc.fios.verizon.net)
14:58:46 dust_ joins (~dust@2405:204:5488:ef4c:54b6:3467:52f3:e9f2)
14:59:25 shriekingnoise joins (~shrieking@201.231.16.156)
14:59:50 × hueso quits (~root@user/hueso) (Quit: hueso)
15:03:05 hueso joins (~root@user/hueso)
15:04:24 × merijn quits (~merijn@c-001-001-018.client.esciencecenter.eduvpn.nl) (Ping timeout: 256 seconds)
15:05:02 × hueso quits (~root@user/hueso) (Client Quit)
15:06:54 <Guillaum[m]> Profpatsch: The keys and values will be shared between both structures, but the spine of the structures will be totally different.
15:07:11 yauhsien_ joins (~yauhsien@61-231-37-18.dynamic-ip.hinet.net)
15:08:11 hueso joins (~root@user/hueso)
15:08:22 × wroathe quits (~wroathe@user/wroathe) (Ping timeout: 256 seconds)
15:08:41 rusrushal13 joins (~rusrushal@2409:4056:e82:6bda:bd0e:9743:fccb:b2a0)
15:10:19 [itchyjunk] joins (~itchyjunk@user/itchyjunk/x-7353470)
15:11:33 × yauhsien_ quits (~yauhsien@61-231-37-18.dynamic-ip.hinet.net) (Ping timeout: 256 seconds)
15:13:53 × dyeplexer quits (~dyeplexer@user/dyeplexer) (Ping timeout: 250 seconds)
15:16:35 wroathe joins (~wroathe@206-55-188-8.fttp.usinternet.com)
15:16:35 × wroathe quits (~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host)
15:16:35 wroathe joins (~wroathe@user/wroathe)
15:16:54 lavaman joins (~lavaman@98.38.249.169)
15:17:24 <RMSBach> Isn't Map -> HashMap an apomorphism? I'm a bit rusty on my barbed wire and bananas though...
15:18:55 <RMSBach> Well, its probably a natural transformation too, but that isn't surprising. Sorry Profpatsch I'm not being very useful or practical
15:20:01 Pickchea joins (~private@user/pickchea)
15:20:50 × flipchan quits (~filip@user/flipchan) (Ping timeout: 256 seconds)
15:21:11 × lavaman quits (~lavaman@98.38.249.169) (Ping timeout: 256 seconds)
15:21:50 × wroathe quits (~wroathe@user/wroathe) (Ping timeout: 268 seconds)
15:27:19 dyeplexer joins (~dyeplexer@user/dyeplexer)
15:27:26 × rusrushal13 quits (~rusrushal@2409:4056:e82:6bda:bd0e:9743:fccb:b2a0) (Ping timeout: 256 seconds)
15:30:29 <boxscape_> hmm I wonder why the type of replicateM was changed to use Applicative, but the type of sequence still uses Monad
15:31:44 <geekosaur> it's a mishmash
15:31:52 <boxscape_> fun
15:31:57 <geekosaur> some things got changed, some got alternatives (e.g. sequenceA)
15:32:07 <byorgey> I guess because we already had sequenceA but we didn't have replicateA?
15:32:11 <byorgey> not that that's a good reason
15:33:26 <boxscape_> hm I suppose that would explain it
15:37:19 flipchan joins (~filip@188-169-255-31.dsl.utg.ge)
15:38:01 zincy joins (~zincy@2a00:23c8:970c:4801:f0bc:c4cb:1665:1c67)
15:39:14 Codaraxis__ joins (~Codaraxis@user/codaraxis)
15:40:49 × yassernasc quits (~yassernas@2804:29b8:505a:f33d:1872:f10d:d91b:b66) (Remote host closed the connection)
15:41:09 yassernasc joins (~yassernas@2804:29b8:505a:f33d:1872:f10d:d91b:b66)
15:41:48 × Codaraxis_ quits (~Codaraxis@user/codaraxis) (Ping timeout: 256 seconds)
15:43:00 × zincy quits (~zincy@2a00:23c8:970c:4801:f0bc:c4cb:1665:1c67) (Remote host closed the connection)
15:43:17 × alp quits (~alp@user/alp) (Ping timeout: 240 seconds)
15:44:04 × madjestic quits (~madjestic@88-159-247-120.fixed.kpn.net) (Ping timeout: 256 seconds)
15:45:34 × yassernasc quits (~yassernas@2804:29b8:505a:f33d:1872:f10d:d91b:b66) (Ping timeout: 256 seconds)
15:46:02 Codaraxis joins (~Codaraxis@user/codaraxis)
15:46:52 slack1256 joins (~slack1256@186.11.113.101)
15:48:44 <slack1256> When is recomended to run `+RTS -A32m -n8m --RTS` instead of bare `+RTS -A32m --RTS`. Asking in another way, how does separating the allocation area in chunk sizes help with threaded programs performance?
15:50:05 × Codaraxis__ quits (~Codaraxis@user/codaraxis) (Ping timeout: 256 seconds)
15:52:01 × dut quits (~dut@user/dut) (Ping timeout: 250 seconds)
15:52:27 wavemode joins (~wavemode@c-98-223-145-19.hsd1.il.comcast.net)
15:54:55 <[exa]> slack1256: it eliminates false sharing
15:55:15 jgeerds_ joins (~jgeerds@55d4a547.access.ecotel.net)
15:56:46 × cstml quits (~cstml@user/cstml) (Quit: Connection closed)
15:56:49 <Guillaum[m]> https://downloads.haskell.org/~ghc/9.0.1/docs/html/users_guide/runtime_control.html#rts-flag--n%20%E2%9F%A8size%E2%9F%A9 there are details here, but [exa] I'm not sure it improves false sharing, because as I understand documentation, threads are always given a separate allocation area.
15:58:17 × ProfSimm quits (~ProfSimm@176-12-60-137.pon.spectrumnet.bg) (Remote host closed the connection)
15:58:30 alp joins (~alp@user/alp)
15:58:36 ProfSimm joins (~ProfSimm@176-12-60-137.pon.spectrumnet.bg)
16:00:09 rusrushal13 joins (~rusrushal@2409:4056:e82:6bda:bd0e:9743:fccb:b2a0)
16:03:08 × ProfSimm quits (~ProfSimm@176-12-60-137.pon.spectrumnet.bg) (Ping timeout: 256 seconds)
16:03:24 <Guillaum[m]> I tried to run a program with `-A100M -N1` and `-N8` and indeed, first program consumns 100M, when the other consums 800M (as stated by +RTS -s)
16:05:18 ProfSimm joins (~ProfSimm@176-12-60-137.pon.spectrumnet.bg)
16:06:42 <Guillaum[m]> slack1256: now back to your question. Imagine you have 2 threads, the first one is not allocating much, when the second one is allocating a lot. When the 32m of the second one will be exhausted, a GC will happen, when actually only half of the allocation space was used. Now split that in chunks of 8mega, you have 8 chunks. thread 2 will consumns 7 chunks (so 7/8 of the available allocation area) before triggering a collection. There is a
16:06:43 <Guillaum[m]> bit more CPU used to dispatch chunks, but that not a lot.
16:07:00 <slack1256> Guillaum[m]: Just to be clear, I am asking about the lower case -n option though.
16:07:41 <slack1256> OK, you are clear on that. Give me a sec to read what you wrote.
16:08:58 <slack1256> Is the allocation area (-A) common for all the capabilities?
16:09:14 × wyrd quits (~wyrd@gateway/tor-sasl/wyrd) (Remote host closed the connection)
16:09:42 wyrd joins (~wyrd@gateway/tor-sasl/wyrd)
16:09:55 <Guillaum[m]> slack1256: my little experiment above let me think that there is a different allocation area for each capability.
16:10:12 <boxscape_> I just accidentally wrote code where it doesn't make a difference whether you use $ or <$>, was confused for a minute https://paste.tomsmeding.com/jMW5XzhZ
16:12:46 <Guillaum[m]> slack1256: you can have a similar effect (i.e. less GC) by increasing `-A`, but it will use more memory.
16:12:56 <slack1256> That was what I thought too. So I don't see how chunking each separate allocation area will help. I mean, the second capability allocation area is now chunked at the 4m. It still consumes the 32M faster than the first capability.
16:13:49 <Guillaum[m]> slack1256: I think that all the chunks are now avaialbel in a shared pool. So one capability can now use all of them.
16:14:06 <slack1256> Ooooh, that would be indeed helpful!
16:15:00 <slack1256> Also, you could set the chunks to be the size of your L2-cache.
16:16:38 × flipchan quits (~filip@188-169-255-31.dsl.utg.ge) (Changing host)
16:16:38 flipchan joins (~filip@user/flipchan)
16:16:56 <Guillaum[m]> I'm not sure it may have an impact on performance. chunks are written linearly (so you don't really care about it being in cache) and are read randomly.
16:17:20 <Guillaum[m]> (sorry, need to go, nice technical discussion, I learned a few things will trying to answer your question, I appreciate that).
16:19:57 × max22- quits (~maxime@2a01cb08833598004ac57d9f58d5074f.ipv6.abo.wanadoo.fr) (Remote host closed the connection)
16:20:02 × mbuf quits (~Shakthi@136.185.77.246) (Quit: Leaving)
16:20:42 max22- joins (~maxime@lfbn-ren-1-1026-62.w92-139.abo.wanadoo.fr)
16:21:31 <slack1256> Guillaum[m]: Thanks to you too.
16:22:48 × Katarushisu quits (~Katarushi@cpc147334-finc20-2-0-cust27.4-2.cable.virginm.net) (Quit: The Lounge - https://thelounge.chat)
16:23:59 Katarushisu joins (~Katarushi@cpc147334-finc20-2-0-cust27.4-2.cable.virginm.net)
16:25:14 <[exa]> slack1256: basically I meant that there's a bit of delay whenever you need to exclusively access a page on a CPU after another CPU used it, so if you have more threads writing to the same location, the chance for these delays are expectably high (consider multithread garbage collection in this regard). I guess that adding chunks prevents this kind of race on the chunk headers (or generally any such
16:25:20 <[exa]> hotspots)
16:29:09 × max22- quits (~maxime@lfbn-ren-1-1026-62.w92-139.abo.wanadoo.fr) (Remote host closed the connection)
16:31:34 × aeka quits (~aeka@2606:6080:1001:18:8d41:9604:d435:36b6) (Quit: ZNC 1.8.2 - https://znc.in)
16:31:54 aeka joins (~aeka@user/hiruji)
16:32:01 jaror[m] joins (~jaror@2001:470:69fc:105::265)
16:35:13 × lortabac quits (~lortabac@2a01:e0a:541:b8f0:db29:cb0:7e70:ac05) (Ping timeout: 268 seconds)
16:35:20 eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:f579:9b2b:4d0d:2d44)
16:39:37 × eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:f579:9b2b:4d0d:2d44) (Ping timeout: 240 seconds)
16:41:24 eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:f579:9b2b:4d0d:2d44)
16:44:08 × justsomeguy quits (~justsomeg@user/justsomeguy) (Ping timeout: 256 seconds)
16:44:44 emf joins (~emf@162.218.217.186)
16:47:00 zmt00 joins (~zmt00@user/zmt00)
16:47:03 yassernasc joins (~yassernas@2804:29b8:505a:f33d:1872:f10d:d91b:b66)
16:48:44 emf_ joins (~emf@163.114.132.4)
16:49:28 × arjun quits (~arjun@user/arjun) (Remote host closed the connection)
16:49:48 × emf quits (~emf@162.218.217.186) (Ping timeout: 256 seconds)
16:55:18 × chomwitt quits (~chomwitt@2a02:587:dc03:8900:12c3:7bff:fe6d:d374) (Ping timeout: 250 seconds)
16:56:05 chomwitt joins (~chomwitt@2a02:587:dc03:8900:12c3:7bff:fe6d:d374)
16:59:53 × jgeerds_ quits (~jgeerds@55d4a547.access.ecotel.net) (Ping timeout: 268 seconds)
17:00:33 econo joins (uid147250@user/econo)
17:00:53 merijn joins (~merijn@c-001-001-018.client.esciencecenter.eduvpn.nl)
17:01:27 × alMalsamo quits (~alMalsamo@gateway/tor-sasl/almalsamo) (Ping timeout: 276 seconds)
17:01:50 <albet70> for example, main = scotty 80 $ do {get "/test" $ doSomething} , every GET requests will let doSomething run, could save the variable doSomething out of it? so that all the variable can be get?
17:02:44 × eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:f579:9b2b:4d0d:2d44) (Remote host closed the connection)
17:03:06 <albet70> with other languages, it would use global variable to archive, for example, set a global list variable, so every doSomething save its inner variable to that list
17:04:42 lbseale joins (~ep1ctetus@user/ep1ctetus)
17:07:06 max22- joins (~maxime@lfbn-ren-1-1026-62.w92-139.abo.wanadoo.fr)
17:07:46 fruitfly joins (~fruitfly@host-79-121-42-70.kabelnet.hu)
17:08:40 Tuplanolla joins (~Tuplanoll@91-159-68-166.elisa-laajakaista.fi)
17:08:41 yauhsien_ joins (~yauhsien@61-231-37-18.dynamic-ip.hinet.net)
17:09:29 × dust_ quits (~dust@2405:204:5488:ef4c:54b6:3467:52f3:e9f2) (Quit: Konversation terminated!)
17:12:52 <fruitfly> Hi, can I ask about this:
17:12:53 <fruitfly> Prelude> :t elem
17:12:53 <fruitfly> elem :: (Foldable t, Eq a) => a -> t a -> Bool
17:12:54 <fruitfly> Does "t a" mean a list? I find it a bit weird, it looks as though it where two parameters.
17:12:58 eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:f579:9b2b:4d0d:2d44)
17:13:09 × bitdex quits (~bitdex@gateway/tor-sasl/bitdex) (Ping timeout: 276 seconds)
17:13:27 <Rembane> fruitfly: It's a list written in a strange way.
17:13:36 × yauhsien_ quits (~yauhsien@61-231-37-18.dynamic-ip.hinet.net) (Ping timeout: 256 seconds)
17:14:14 <Rembane> fruitfly: On a more formal level, t is anything that has an instance of the Foldable typeclass. List has an instance of the Foldable typeclass.
17:14:20 neurocyte0917090 joins (~neurocyte@IP-045143076117.dynamic.medianet-world.de)
17:14:20 × neurocyte0917090 quits (~neurocyte@IP-045143076117.dynamic.medianet-world.de) (Changing host)
17:14:20 neurocyte0917090 joins (~neurocyte@user/neurocyte)
17:14:21 <geekosaur> % :t elem @[]
17:14:22 <yahb> geekosaur: Eq a => a -> [a] -> Bool
17:14:43 <geekosaur> there I filled in the list type as "t"
17:14:49 bitdex joins (~bitdex@gateway/tor-sasl/bitdex)
17:15:37 <fruitfly> Thank you!
17:15:50 sa1_ is now known as sa1
17:16:19 <geekosaur> % :t elem @S.Set
17:16:19 <yahb> geekosaur: Eq a => a -> S.Set a -> Bool
17:16:28 <geekosaur> since Set is also a member of Foldable
17:16:37 × ProfSimm quits (~ProfSimm@176-12-60-137.pon.spectrumnet.bg) (Remote host closed the connection)
17:16:58 ProfSimm joins (~ProfSimm@176-12-60-137.pon.spectrumnet.bg)
17:17:15 epolanski joins (uid312403@id-312403.helmsley.irccloud.com)
17:17:43 × fvr quits (uid503686@id-503686.uxbridge.irccloud.com) (Quit: Connection closed for inactivity)
17:21:20 × ProfSimm quits (~ProfSimm@176-12-60-137.pon.spectrumnet.bg) (Ping timeout: 256 seconds)
17:22:12 slowButPresent joins (~slowButPr@user/slowbutpresent)
17:24:35 × pavonia quits (~user@user/siracusa) (Quit: Bye!)
17:25:36 justsomeguy joins (~justsomeg@user/justsomeguy)
17:27:09 tzh joins (~tzh@c-24-21-73-154.hsd1.or.comcast.net)
17:27:20 jao joins (~jao@static-68-235-44-23.cust.tzulo.com)
17:27:49 sagax joins (~sagax_nb@user/sagax)
17:28:00 ProfSimm joins (~ProfSimm@176-12-60-137.pon.spectrumnet.bg)
17:28:46 mikoto-chan joins (~mikoto-ch@213.177.151.239)
17:32:16 × russruss quits (~russruss@my.russellmcc.com) (Quit: The Lounge - https://thelounge.chat)
17:34:06 russruss joins (~russruss@my.russellmcc.com)
17:34:55 × merijn quits (~merijn@c-001-001-018.client.esciencecenter.eduvpn.nl) (Ping timeout: 256 seconds)
17:37:55 × Guest4442 quits (~Guest44@77.222.105.50) (Quit: Client closed)
17:38:13 × AWizzArd quits (~code@gehrels.uberspace.de) (Changing host)
17:38:13 AWizzArd joins (~code@user/awizzard)
17:38:56 × boxscape_ quits (~boxscape_@p4ff0b9d5.dip0.t-ipconnect.de) (Quit: Connection closed)
17:38:57 × CiaoSen quits (~Jura@p200300c95737a2002a3a4dfffe84dbd5.dip0.t-ipconnect.de) (Ping timeout: 240 seconds)
17:40:15 segfaultfizzbuzz joins (~rustisafu@2602:306:cd3c:9350:5d4f:b362:d270:61b0)
17:41:12 × Pickchea quits (~private@user/pickchea) (Ping timeout: 268 seconds)
17:41:33 <segfaultfizzbuzz> for nonstrict/lazy evaluation, is it possible to have your cake and eat it too? by that i mean, can i have many/most of the benefits of laziness but operate a system where the performance impact is provably no worse than a strict evaluation approach?
17:41:52 <segfaultfizzbuzz> or is it an inherent trade-off, that laziness simply has a performance overhead
17:42:24 <dsal> laziness isn't opposed to efficiency.
17:42:46 burnsidesLlama joins (~burnsides@dhcp168-030.wadham.ox.ac.uk)
17:44:00 × fruitfly quits (~fruitfly@host-79-121-42-70.kabelnet.hu) (Ping timeout: 256 seconds)
17:44:07 Topsi joins (~Tobias@dyndsl-095-033-094-250.ewe-ip-backbone.de)
17:44:31 <kuribas> segfaultfizzbuzz: define "performance impact". I don't think lazyness is going to matter significantly over other factors.
17:44:51 <Andrew> Laziness => efficency for some programs
17:44:59 <Andrew> And laziness does mean more memory usage
17:45:12 <segfaultfizzbuzz> well with strictness when i ask for a value, it will have already been evaluated
17:45:14 <maerwald> it can also mean worse performance
17:45:18 <segfaultfizzbuzz> but with laziness, if i ask for a value, i may need to wait
17:45:19 <kuribas> Andrew: Not necessarily
17:45:27 <Andrew> kuribas: I know
17:45:32 <maerwald> but this is so general, there's no clear answer
17:45:37 <Andrew> Generally, for large thunks
17:46:17 mon_aaraj joins (~MonAaraj@user/mon-aaraj/x-4416475)
17:46:18 × alx741 quits (~alx741@157.100.197.240) (Quit: alx741)
17:46:21 <segfaultfizzbuzz> meaning that to achieve laziness much of the benefit comes from calculating things after they are requested
17:46:33 alx741 joins (~alx741@157.100.197.240)
17:46:44 <maerwald> the performance problem with laziness is that it can cause memory allocations in hot loops, which are unnecessary
17:47:12 <maerwald> you can easily throw ram at all other problems, but not at this one
17:48:11 Sgeo_ joins (~Sgeo@user/sgeo)
17:48:27 <maerwald> and strict evaluation can calculate an entire subcomputation that's not needed
17:49:07 <maerwald> IME, the latter is easier to find and reason about
17:49:20 <maerwald> unless you don't understand your own algorithm
17:49:39 <maerwald> the laziness problem is only solvable via debugging
17:50:13 × Sgeo quits (~Sgeo@user/sgeo) (Ping timeout: 256 seconds)
17:50:52 <maerwald> there are also some edge cases where laziness allows much better optimizations (e.g. in lens library)
17:51:22 <maerwald> for most programs, it's usually not worth it
17:53:48 × Megant quits (megant@user/megant) (Ping timeout: 250 seconds)
17:55:42 Megant joins (megant@user/megant)
17:57:57 neverfindme joins (~hayden@158.123.160.43)
17:59:37 × neverfindme quits (~hayden@158.123.160.43) (Max SendQ exceeded)
18:00:02 × ProfSimm quits (~ProfSimm@176-12-60-137.pon.spectrumnet.bg) (Remote host closed the connection)
18:00:16 neverfindme joins (~hayden@158.123.160.43)
18:01:41 <segfaultfizzbuzz> ok thanks (bbiab)
18:01:49 × segfaultfizzbuzz quits (~rustisafu@2602:306:cd3c:9350:5d4f:b362:d270:61b0) (Quit: Leaving)
18:02:31 × neverfindme quits (~hayden@158.123.160.43) (Client Quit)
18:02:48 × cfricke quits (~cfricke@user/cfricke) (Quit: WeeChat 3.3)
18:03:47 × Jing quits (~hedgehog@240e:390:7c53:a7e1:7942:5c67:99d0:7a74) (Quit: My MacBook has gone to sleep. ZZZzzz…)
18:04:21 <polyphem> albet70: main = do sharedVar <- newTVarIO Nothing ; _ <- forkIO (taskA sharedVar) ; scotty 80 $ do {get "/test" $ doSomething sharedVar }
18:04:29 × werneta quits (~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net) (Ping timeout: 252 seconds)
18:04:37 ProfSimm joins (~ProfSimm@176-12-60-137.pon.spectrumnet.bg)
18:06:17 werneta joins (~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net)
18:06:52 × mon_aaraj quits (~MonAaraj@user/mon-aaraj/x-4416475) (Ping timeout: 256 seconds)
18:07:43 × MajorBiscuit quits (~MajorBisc@c-001-028-049.client.tudelft.eduvpn.nl) (Ping timeout: 268 seconds)
18:08:35 mon_aaraj joins (~MonAaraj@user/mon-aaraj/x-4416475)
18:09:42 <dminuoso> 18:42:24 dsal | laziness isn't opposed to efficiency.
18:09:57 shailangsa joins (~shailangs@host86-185-98-37.range86-185.btcentralplus.com)
18:10:10 <dminuoso> Mmm, if that was accurate, the inability to predict performance wouldn't be such an ubiquitous topic in all the Haskell discussion forums.
18:10:19 <dminuoso> Even amongst more experienced Haskellers.
18:10:34 <dsal> Yeah, but the answer isn't "make everything strict"
18:10:54 <geekosaur> I also wouldn;t say opposed to. I would say "makes much harder to reason about"
18:11:03 <dsal> Sometimes laziness helps. Sometimes it makes it weird and confusing.
18:11:07 deadmarshal joins (~deadmarsh@95.38.228.65)
18:11:22 <c_wraith> you can learn to understand Haskell performance
18:11:40 <c_wraith> it mostly comes down to learning how to write code that doesn't break things.
18:12:12 <dminuoso> When you have to learn how to write code that pleases the current flavour of combinations in the GHC simplifier for your current versions, I'm not convinced this is a viable strategy.
18:12:27 <c_wraith> unfortunately there isn't compiler support for getting it right, and that's a huge issue in a language that depends on the compiler to tell you so much
18:12:41 <dminuoso> As it is right now, I cant even have guaranteed sharing. Say writing `let a = ... a ... a` does not guarantee sharing - I lack the tools to guide the implementations.
18:14:15 × fef quits (~thedawn@user/thedawn) (Ping timeout: 276 seconds)
18:14:30 × mon_aaraj quits (~MonAaraj@user/mon-aaraj/x-4416475) (Ping timeout: 268 seconds)
18:14:38 <c_wraith> Haskell doesn't guarantee that - Haskell doesn't even guarantee lazy evaluation. I'm pretty sure GHC guarantees it
18:14:53 <maerwald> dsal: the times where I thought "thank god Haskell is lazy, otherwise my program would be slow now" is probably zero, except for various libraries that rely on all the optimization tricks
18:15:13 <dminuoso> If memory serves right, GHC developers told me that no assurances can be made.
18:15:44 <dminuoso> The point Im making here is, it all relis on some specific knowledge of GHC internals that may very well differ between versions.
18:15:44 <geekosaur> everyone is convinced laziness is evil and should be banned :(
18:15:54 <c_wraith> honestly, I think GHC's strictness analysts was an error
18:15:55 pgib joins (~textual@173.38.117.89)
18:16:15 <kuribas> geekosaur: I think optional lazyness is nice.
18:16:19 <c_wraith> it lets people write bad code and have it still work
18:16:26 <maerwald> geekosaur: no, I think we need better ideas about how to mix both concepts
18:16:38 <c_wraith> *analysis
18:16:40 <maerwald> in a way that makes the code not insane spaghetti chaos
18:16:41 <geekosaur> you sure don't sound like it
18:16:45 <dminuoso> geekosaur: Im not saying its fundamentally broken, just that it's very incompatible with reasonable expectations of performance analysis.
18:16:45 <wavemode> Most people come to realize that it's easier to reason about performance when you write strict code by default and only use laziness where it's desirable, than when writing lazy code by default
18:16:53 <geekosaur> every time laziness comes up you're all over how laziness was a mistake
18:17:09 <kuribas> geekosaur: the benefits of lazyness aren't that big.
18:17:10 <dminuoso> It's certainly convenient for writing expressive code, as long as you dont mind about performance too much. And yes, you can write highly performant code, but that's almost an art.
18:17:16 <geekosaur> you even posted links about how laziness was so much of an error in so many places
18:17:23 <c_wraith> wavemode: it can't work that way, though. opt-in laziness is the same as no laziness
18:17:29 <maerwald> geekosaur: aha
18:17:55 <maerwald> I literally just said that laziness facilitates certain optimizations
18:18:04 <kuribas> I even managed to get self-recursive parser combinators working in clojure :)
18:18:16 <c_wraith> so many libraries get on the strictness cargo cult that they break code using them correctly
18:18:19 <maerwald> and libraries like lens and streamly rely on those tricks
18:18:27 <maerwald> but that's not what most programmers want or need
18:18:36 <c_wraith> because they can't imagine people using laziness vorrectly
18:18:42 <dminuoso> wavemode: The problem is just lazyness doesnt work well in a strict-by-default language, it makes writing modular code much more comfortable.
18:18:44 <c_wraith> or correctly, for that matter
18:19:13 <kuribas> dminuoso: also not if the language insert "force" for you?
18:19:18 <kuribas> and "delay"?
18:19:27 <dminuoso> Something that was suggested a few times before, is something like levity polymorphism or multiplicity polymorphism but for strictness.
18:19:43 <dminuoso> Such that the type system would track and infer for you, but would at the same time be tractable.
18:19:57 <dminuoso> (Or perhaps a separate, orthogonal type system)
18:20:15 <dminuoso> Has this been explored in some languages before?
18:20:18 <wavemode> I do often wish laziness were part of the type system somehow, yeah
18:20:23 <geekosaur> uh, dminuoso who's wavemode?
18:20:29 <geekosaur> oh, sorry, missed that
18:20:33 <kuribas> dminuoso: would that even be possible? How do you know if a value is intended lazyly or strictly?
18:20:52 <dminuoso> kuribas: Same as with any polymorphism - callers/consumers choice.
18:21:04 <c_wraith> I just don't want to have correct code made impossible by other programmer's lack of imagination
18:21:04 <dminuoso> I dont know the details because I havent actually done this.
18:21:20 <kuribas> dminuoso: that implies explicit "force"?
18:21:34 <dminuoso> kuribas: I dont know what that implies. Let a PhD student figure this out.
18:21:38 <c_wraith> any kind of opt-in laziness results in my being at the mercy of others' imagination
18:22:53 <maerwald> dminuoso: my fear is that such a system would be very complicated and make it hard to correctly use libraries, because now you need to know that some functoins don't behave very well lazy/strict etc. I mean we already have this problem and hope library maintainers figure it out... but if the caller has to figure it out
18:22:56 <maerwald> uff
18:23:18 <dminuoso> maerwald: See, this is why we should have some poor PhD spend 5 years of his or her life on this, to tell us whether its truly complicated or not.
18:23:31 <dminuoso> That's what PhD students are for, no?
18:23:57 × chele quits (~chele@user/chele) (Remote host closed the connection)
18:23:57 cosimone joins (~user@2001:b07:ae5:db26:c24a:d20:4d91:1e20)
18:23:58 <maerwald> I think this topic will lead to at least a couple of burnt out students
18:24:03 <maerwald> but it's for the greater good
18:24:16 <maerwald> a few smashed dreams, that's ok
18:24:38 <dminuoso> You're acting as if SPJ and friends haven't burned out a couple students before. :p
18:26:03 <EvanR> is "strict almost everything" and "lazy almost everything" really silly positions to take when my program relies on laziness to work remotely right, while the compiler uses strictness analysis to strictfy a zillion things and give me even more performance
18:26:20 <kuribas> dminuoso: idris has opt in lazyness.
18:26:35 <EvanR> you can't write idris anywhere like haskell
18:26:38 <EvanR> because of that
18:27:04 <EvanR> strict almost everything and NOT that maybe too incompatible universes of programming mentality
18:27:32 × sus quits (zero@user/zeromomentum) (Quit: Ping timeout (120 seconds))
18:27:44 sus joins (zero@user/zeromomentum)
18:27:49 <EvanR> strict almost everything seems to kind of defeat the purpose of haskell even
18:27:58 <EvanR> many other languages exist, ocaml xD
18:28:37 <wavemode> you're right, we should all switch to ocaml
18:28:39 × dyeplexer quits (~dyeplexer@user/dyeplexer) (Remote host closed the connection)
18:28:39 × justsomeguy quits (~justsomeg@user/justsomeguy) (Quit: WeeChat 3.4)
18:29:06 <kuribas> EvanR: well, idris borrows a lot from haskell.
18:29:17 <kuribas> EvanR: and even then not enough IMO :)
18:29:31 × alx741 quits (~alx741@157.100.197.240) (Quit: leaving)
18:30:54 <EvanR> I'm thinking there are wildly different ways to use haskell, like, blue collar web code may be entirely made of monad transformers, and laziness may seem ridiculous to crunch a web request (lazy I/O not being sane, so you used a streaming library)
18:31:23 <EvanR> or less crunchy settings could get away with being more mathlike and composable
18:34:18 romesrf joins (~romes@44.190.189.46.rev.vodafone.pt)
18:34:22 <romesrf> o/
18:36:21 × wyrd quits (~wyrd@gateway/tor-sasl/wyrd) (Ping timeout: 276 seconds)
18:37:02 MatthiasG2 joins (~matthias@i6DFA01BB.versanet.de)
18:40:07 <monochrom> But I don't like the argument order of OCaml's foldl and foldr!
18:40:39 × soxen quits (~bbrahms@pool-173-54-217-168.nwrknj.fios.verizon.net) (Ping timeout: 256 seconds)
18:43:24 polyphem_ joins (~rod@2a02:810d:840:8754:5126:c335:5f23:8358)
18:44:14 × koala_man quits (~vidar@157.146.251.23.bc.googleusercontent.com) (Quit: I'm gonna win SETI@home.)
18:44:57 <maerwald> you'll like it after a bank throws 300k at you
18:45:11 × polyphem quits (~rod@2a02:810d:840:8754:a057:eb16:35f3:4c79) (Ping timeout: 252 seconds)
18:45:51 <geekosaur> or not
18:46:41 <EvanR> s/ocaml/purescript/
18:46:51 koala_man joins (~vidar@157.146.251.23.bc.googleusercontent.com)
18:51:14 xkuru joins (~xkuru@user/xkuru)
18:54:35 <maerwald> is there a library for emitting diffs of two Texts? like `diff -u`
18:57:03 × michalz quits (~michalz@185.246.204.57) (Ping timeout: 250 seconds)
18:58:04 × ProfSimm quits (~ProfSimm@176-12-60-137.pon.spectrumnet.bg) (Remote host closed the connection)
19:00:47 <EvanR> hmm https://hackage.haskell.org/package/Diff-0.3.2/docs/Data-Algorithm-Diff.html
19:01:08 <EvanR> well that's a link to an older version
19:01:38 <maerwald> that doesn't diff text well
19:01:51 <EvanR> getGroupedDiff :: Eq a => [a] -> [a] -> [Diff [a]]
19:01:52 <maerwald> https://hackage.haskell.org/package/ormolu-0.4.0.0/docs/src/Ormolu.Diff.Text.html#diffText
19:01:58 <maerwald> I'll just salvage that
19:03:28 × yassernasc quits (~yassernas@2804:29b8:505a:f33d:1872:f10d:d91b:b66) (Remote host closed the connection)
19:05:47 zebrag joins (~chris@user/zebrag)
19:15:55 Pickchea joins (~private@user/pickchea)
19:18:37 × y04nn quits (~y04nn@92.223.89.196) (Ping timeout: 256 seconds)
19:21:32 CiaoSen joins (~Jura@p200300c95737a2002a3a4dfffe84dbd5.dip0.t-ipconnect.de)
19:22:48 × lechner quits (~lechner@debian/lechner) (Ping timeout: 256 seconds)
19:23:56 × deadmarshal quits (~deadmarsh@95.38.228.65) (Ping timeout: 256 seconds)
19:25:36 lechner joins (~lechner@debian/lechner)
19:26:26 × oscurochu quits (~oscurochu@097-096-050-227.res.spectrum.com) (Remote host closed the connection)
19:26:48 oscurochu joins (~oscurochu@097-096-050-227.res.spectrum.com)
19:29:07 ProfSimm joins (~ProfSimm@87.227.196.109)
19:31:23 merijn joins (~merijn@c-001-001-018.client.esciencecenter.eduvpn.nl)
19:32:20 mc47 joins (~mc47@xmonad/TheMC47)
19:34:45 o-90 joins (~o-90@gateway/tor-sasl/o-90)
19:34:48 × o-90 quits (~o-90@gateway/tor-sasl/o-90) (Client Quit)
19:35:05 o-90 joins (~o-90@gateway/tor-sasl/o-90)
19:39:48 × Morrow quits (~user@bzq-110-168-31-106.red.bezeqint.net) (Ping timeout: 256 seconds)
19:41:24 Morrow joins (~user@bzq-110-168-31-106.red.bezeqint.net)
19:43:22 ensyde joins (~ensyde@2600:1700:2050:1040:ac63:f3f7:89ad:2997)
19:43:27 mmhat joins (~mmh@55d4f68d.access.ecotel.net)
19:45:34 × dhouthoo quits (~dhouthoo@178-117-36-167.access.telenet.be) (Quit: WeeChat 3.4)
19:45:39 lavaman joins (~lavaman@98.38.249.169)
19:46:52 × o-90 quits (~o-90@gateway/tor-sasl/o-90) (Remote host closed the connection)
19:47:37 Guest6735 joins (~sam@c-93bfe655.020-348-73746f1.bbcust.telenor.se)
19:51:00 alt-romes joins (~romes@44.190.189.46.rev.vodafone.pt)
19:51:42 × romesrf quits (~romes@44.190.189.46.rev.vodafone.pt) (Ping timeout: 256 seconds)
19:53:50 <Guest6735> Hi! I'm trying to make a static binary using musl, but it's not really working. I posted my entire question here with details: https://paste.tomsmeding.com/KFupcwRc
19:54:52 × eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:f579:9b2b:4d0d:2d44) (Remote host closed the connection)
19:55:01 × Topsi quits (~Tobias@dyndsl-095-033-094-250.ewe-ip-backbone.de) (Ping timeout: 268 seconds)
19:55:16 <maerwald> Guest6735: I wouldn't use that docker image, just a plain alpine image
19:55:54 <geekosaur> also specifying a compiler version as a resolver is apt to get you fairly old packages. I'd use an appropriate LTS
19:56:17 <maerwald> Guest6735: here's an example: https://github.com/hasufell/stack2cabal/blob/b18eda25237221b32994910a3bbcc8ee6ad2163a/.github/workflows/release.yaml#L31-L133
19:56:28 <maerwald> it works pretty much the same with stack
19:58:00 <Guest6735> Thank you both! I'll try both out now.
19:58:09 <maerwald> --ghc-options='-split-sections -optl-static' is usually enough
19:58:55 <maerwald> use ghcup in the alpine container to get GHC bindists for stack
19:58:59 <maerwald> then use --system-ghc
20:00:07 × geekosaur quits (~geekosaur@xmonad/geekosaur) (Remote host closed the connection)
20:00:43 <maerwald> here's an example of a dockerfile https://gist.github.com/hasufell/f0893abfbba63ac4ea40feb0520946ee
20:01:47 geekosaur joins (~geekosaur@xmonad/geekosaur)
20:01:51 × alt-romes quits (~romes@44.190.189.46.rev.vodafone.pt) (Quit: WeeChat 3.4)
20:02:24 <Guest6735> Thank you, I'm reading the alpine-haskell-stack docs.
20:04:31 × rusrushal13 quits (~rusrushal@2409:4056:e82:6bda:bd0e:9743:fccb:b2a0) (Ping timeout: 256 seconds)
20:05:18 × merijn quits (~merijn@c-001-001-018.client.esciencecenter.eduvpn.nl) (Ping timeout: 256 seconds)
20:08:55 vicfred joins (~vicfred@user/vicfred)
20:09:12 × alp quits (~alp@user/alp) (Ping timeout: 268 seconds)
20:10:01 × janus quits (janus@anubis.0x90.dk) (Quit: CPU quota exceeded)
20:10:05 soxen joins (~bbrahms@pool-173-54-217-168.nwrknj.fios.verizon.net)
20:12:36 y04nn joins (~y04nn@92.223.89.196)
20:13:44 yauhsien_ joins (~yauhsien@118-167-40-21.dynamic-ip.hinet.net)
20:14:16 eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:f579:9b2b:4d0d:2d44)
20:18:27 × yauhsien_ quits (~yauhsien@118-167-40-21.dynamic-ip.hinet.net) (Ping timeout: 268 seconds)
20:21:19 × hololeap quits (~hololeap@user/hololeap) (Quit: Bye)
20:22:26 × slack1256 quits (~slack1256@186.11.113.101) (Remote host closed the connection)
20:22:55 madjestic joins (~madjestic@88-159-247-120.fixed.kpn.net)
20:24:46 <SrPx> my post about HVM has been filtered on /r/haskell
20:24:54 <SrPx> does that mean I'm shadow banned!?
20:25:22 × Codaraxis quits (~Codaraxis@user/codaraxis) (Read error: Connection reset by peer)
20:25:37 Codaraxis joins (~Codaraxis@user/codaraxis)
20:26:10 <yushyin> maybe ask the subreddit mods?
20:27:55 × fendor_ quits (~fendor@77.119.206.49.wireless.dyn.drei.com) (Remote host closed the connection)
20:28:57 <EvanR> HVM?
20:29:38 <dsal> Haskell's Very Monadic
20:30:01 Akiva joins (~Akiva@user/Akiva)
20:30:07 <geekosaur> github.com/kindelia/hvm I believe
20:30:46 alMalsamo joins (~alMalsamo@gateway/tor-sasl/almalsamo)
20:31:25 fendor joins (~fendor@77.119.206.49.wireless.dyn.drei.com)
20:32:13 <SrPx> yep, just PM'ed them
20:32:24 <SrPx> just asked here to check if this is a common issue
20:33:12 <geekosaur> I have no clue; I rarely visit reddit
20:33:23 <yushyin> shadow banning and filtering of posts is a very common reddit issue
20:33:48 zincy joins (~zincy@2a00:23c8:970c:4801:f0bc:c4cb:1665:1c67)
20:34:58 segfaultfizzbuzz joins (~rustisafu@2602:306:cd3c:9350:5d4f:b362:d270:61b0)
20:34:59 <yushyin> SrPx: https://www.reddit.com/r/ShadowBan/comments/8a2gpk/an_unofficial_guide_on_how_to_avoid_being/
20:35:07 <segfaultfizzbuzz> this was pretty interesting: https://github.com/Kindelia/HVM
20:35:58 <SrPx> I see, where you get FP news?
20:36:08 <SrPx> would appreciate ideas about where else I can post HVM
20:36:18 <SrPx> segfaultfizzbuzz: hm thanks :)
20:36:48 <yushyin> HN ofc
20:42:01 × sprout quits (~quassel@2a02:a467:ccd6:1:8844:e45a:1aab:92c2) (Quit: https://quassel-irc.org - Chat comfortably. Anywhere.)
20:42:51 mindwarp joins (~mindwarp@sdf.org)
20:44:15 <segfaultfizzbuzz> SrPx sent me a dm asking if i was "someone they know" ... i have no prior knowledge of SrPx... is SrPx a spammer...?
20:44:25 × mindwarp quits (~mindwarp@sdf.org) (Client Quit)
20:44:53 Erutuon joins (~Erutuon@user/erutuon)
20:45:02 <geekosaur> no, or at least not previously
20:45:18 <maerwald> well, that's one way to decline a friendship :D
20:45:23 <[exa]> what trickery happens here btw? https://github.com/Kindelia/HVM#composition-optimal
20:46:16 <segfaultfizzbuzz> i have no knowledge of the HVM repo or the person who posted it btw, i am just kinda trying to learn bits and bobs where i can ;-)
20:46:37 <[exa]> I guess someone forgot a ! somewhere to really measure the same bits
20:46:40 × raehik quits (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 256 seconds)
20:47:00 <segfaultfizzbuzz> lol yeah it's just a strictness annotation issue looks like?
20:47:50 briandaed joins (~root@185.234.208.208.r.toneticgroup.pl)
20:48:41 raehik joins (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net)
20:49:10 <maerwald> huh?
20:49:17 × lavaman quits (~lavaman@98.38.249.169) (Ping timeout: 268 seconds)
20:50:11 yauhsien_ joins (~yauhsien@118-167-40-21.dynamic-ip.hinet.net)
20:51:09 × briandaed quits (~root@185.234.208.208.r.toneticgroup.pl) (Client Quit)
20:52:54 × Pickchea quits (~private@user/pickchea) (Ping timeout: 256 seconds)
20:55:17 × y04nn quits (~y04nn@92.223.89.196) (Ping timeout: 240 seconds)
21:01:07 CHUD joins (~CHUD@host-80-41-89-108.as13285.net)
21:07:52 × albet70 quits (~xxx@2400:8902::f03c:92ff:fe60:98d8) (Remote host closed the connection)
21:08:41 cynomys joins (~cynomys@user/cynomys)
21:09:39 pavonia joins (~user@user/siracusa)
21:10:25 × _ht quits (~quassel@231-169-21-31.ftth.glasoperator.nl) (Remote host closed the connection)
21:10:27 <wavemode> it's not strictness per se, it's the fact that it's doing millions of function compositions
21:11:10 cjb joins (~cjb@user/cjb)
21:11:39 doxen joins (~bbrahms@pool-173-54-217-168.nwrknj.fios.verizon.net)
21:14:00 albet70 joins (~xxx@2400:8902::f03c:92ff:fe60:98d8)
21:14:10 <carbolymer> % du -h -s .stack
21:14:10 <carbolymer> 38G .stack
21:14:10 <carbolymer> ah yes, node_modules successor
21:14:10 <yahb> carbolymer: ; <interactive>:18:1: error:; * Variable not in scope: du :: a -> c; * Perhaps you meant `au' (imported from Control.Lens); <interactive>:18:5: error: Variable not in scope: h :: a -> c; <interactive>:18:8: error: Variable not in scope: s :: b0 -> c; <interactive>:18:11: error: Variable not in scope: stack :: a -> b0
21:14:16 <carbolymer> :S
21:15:11 × soxen quits (~bbrahms@pool-173-54-217-168.nwrknj.fios.verizon.net) (Ping timeout: 268 seconds)
21:15:39 × cynomys quits (~cynomys@user/cynomys) (Quit: leaving)
21:16:42 × doxen quits (~bbrahms@pool-173-54-217-168.nwrknj.fios.verizon.net) (Ping timeout: 256 seconds)
21:17:16 × jao quits (~jao@static-68-235-44-23.cust.tzulo.com) (Remote host closed the connection)
21:18:10 × matijja quits (~matijja@193.77.181.201) (Quit: ZNC 1.8.1 - https://znc.in)
21:18:11 × mikoto-chan quits (~mikoto-ch@213.177.151.239) (Ping timeout: 256 seconds)
21:19:47 jao joins (~jao@static-68-235-44-23.cust.tzulo.com)
21:21:00 matijja joins (~matijja@193.77.181.201)
21:22:35 × zebrag quits (~chris@user/zebrag) (Ping timeout: 268 seconds)
21:23:23 timmot parts (~timmot@207.148.85.201) ()
21:23:25 mon_aaraj joins (~MonAaraj@user/mon-aaraj/x-4416475)
21:25:10 × cheater quits (~Username@user/cheater) (Ping timeout: 260 seconds)
21:26:13 × jao quits (~jao@static-68-235-44-23.cust.tzulo.com) (Remote host closed the connection)
21:28:46 jao joins (~jao@static-68-235-44-23.cust.tzulo.com)
21:29:59 <maerwald> carbolymer: everything assumes infinite storage these days: docker, nix, stack, ...
21:30:02 × segfaultfizzbuzz quits (~rustisafu@2602:306:cd3c:9350:5d4f:b362:d270:61b0) (Quit: Leaving)
21:30:52 × Morrow quits (~user@bzq-110-168-31-106.red.bezeqint.net) (Ping timeout: 256 seconds)
21:32:19 Morrow joins (~user@bzq-110-168-31-106.red.bezeqint.net)
21:32:28 <carbolymer> maerwald: it's the age of the cloud! we need cloud-scale storage for those, like pingfs https://github.com/yarrick/pingfs
21:32:56 <maerwald> carbolymer: you mean https://github.com/fpco/cache-s3
21:37:36 <carbolymer> maerwald: if you mean plain old boring build caching, then probably yes
21:38:04 y04nn joins (~y04nn@92.223.89.196)
21:38:50 <maerwald> and has the benefit that you can pay amazon a lot of money for it
21:40:16 × gehmehgeh quits (~user@user/gehmehgeh) (Quit: Leaving)
21:41:31 × texasmynsted_ quits (~texasmyns@99.96.221.112) (Quit: ZNC - http://znc.in)
21:44:10 × notzmv quits (~zmv@user/notzmv) (Ping timeout: 268 seconds)
21:44:50 nineonine joins (~nineonine@2604:3d08:7780:cd00:1deb:a18f:f447:b812)
21:45:00 <nineonine> hey all, question about exception
21:45:16 <nineonine> I want to write a function that logs exceptions in my app
21:45:35 <nineonine> should the type of the parameter by SomeException or Exception e => e ?
21:45:39 <nineonine> be*
21:45:47 <nineonine> and what would be the difference\
21:46:03 <EvanR> what would it do, print out the exception?
21:46:10 <nineonine> yes, just printing
21:46:22 <EvanR> then String works
21:46:55 <nineonine> the function is intended to be called from `catch` and friends
21:46:58 stef204 joins (~stef204@user/stef204)
21:47:20 <EvanR> well if you don't want to call show there, you can use Show a => a xD
21:47:34 × zincy quits (~zincy@2a00:23c8:970c:4801:f0bc:c4cb:1665:1c67) (Remote host closed the connection)
21:47:43 <nineonine> ok, I will ask question differently
21:47:55 <nineonine> what is the difference between SomeException and Exception e => e
21:48:34 <EvanR> because any exception type e can be converted to SomeException, and converted back (if it makes sense), very little
21:49:05 <nineonine> got it, thanks
21:49:34 × yauhsien_ quits (~yauhsien@118-167-40-21.dynamic-ip.hinet.net) (Ping timeout: 256 seconds)
21:50:20 <awpr> `catch` cares what exception type you instantiate it with (by virtue of using the `fromException` method of `Exception`)
21:51:18 <geekosaur> the constraint version lets you do a little more but is more annoying to work with, whereas SomeException lets you avoid it but only allows a few operations (like you can't ask for more detail that many exceptions provide)
21:51:22 <geekosaur> iirc
21:51:30 <awpr> from the perspective of the handler function itself `SomeException -> IO ()` and `Exception e => e -> IO ()` are equivalent, because the latter is just a "curried" form of the latter
21:51:37 <geekosaur> if all you're doing is "show" then SomeException is easier
21:51:53 <awpr> er, former
21:52:01 <EvanR> SomeException would also require you to manually convert, or else catch SomeException
21:52:44 <nineonine> how can I "ask for more detail"?
21:52:49 <nineonine> which function should I use?
21:54:19 <awpr> but, from the perspective of passing it to `catch`, the `SomeException` version specifies `SomeException` is the type that will be caught, i.e. will catch all exceptions; while the `e` version will require you to use TypeApplications or something to specify yourself what to catch, and if you choose something more specific than `SomeException`, then fewer exceptions will be handled by that `catch`
21:56:17 <awpr> "ask for more detail" is probably `displayException`. you can do that with both forms equally, because `data SomeException = Exception e => SomeException e`. there is no difference in the capabilities of the two, only in how they interact with type inference
21:56:36 <geekosaur> nineonine, some exceptions have multiple constructors and some of those constructors have parameters, so you pattern match on the specific exception type with a type application
21:57:07 × werneta quits (~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net) (Ping timeout: 268 seconds)
21:57:26 <nineonine> thanks everyone!
21:58:07 <geekosaur> you can extract most of it from the "show" output but it's pretty unstructured
21:58:12 werneta joins (~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net)
21:58:48 soxen joins (~bbrahms@pool-173-54-217-168.nwrknj.fios.verizon.net)
21:58:52 <awpr> this is still not a difference between `SomeException -> ...` and `Exception e => e -> ...`. this is a difference between either of those two and e.g. `IOException -> ...`
22:00:14 <awpr> (and with either of the former two, you can still `case fromException x of Just (x' :: IO Exception) -> ...; Nothing -> "Not an IOException"`)
22:01:35 <EvanR> so I'm writing a "foldr" function for some type. The type is recursive. Up to this point I half thought that folding a list took a "state" that could be used by the visiting function. But in my fold I didn't think of that and just map each constructor with some callback. Am I tripping and you don't have a state even with lists?
22:02:09 merijn joins (~merijn@c-001-001-018.client.esciencecenter.eduvpn.nl)
22:02:49 <monochrom> I don't think of []'s foldr having state either.
22:02:58 × CHUD quits (~CHUD@host-80-41-89-108.as13285.net) (Ping timeout: 256 seconds)
22:03:18 <Morrow> I think of foldl as having a state, but not foldr (for lists, at least).
22:03:18 <awpr> is it a "foldr" in the sense of "visit elements sequentially right-to-left" or in the sense of "collapse the structure from the bottom up" (i.e. catamorphism)?
22:03:37 jinsun__ joins (~quassel@user/jinsun)
22:03:57 <awpr> looking at foldr, the catamorphism for lists, the thing that looks like "state" is actually the 0-ary "callback" for the 0-ary constructor `[]`
22:04:33 <awpr> er, the "initial state" is that and the "ongoing state" is the result for each sub-structure
22:04:51 × stef204 quits (~stef204@user/stef204) (Quit: WeeChat 3.4)
22:05:01 <EvanR> it's like foldr
22:05:41 <EvanR> so now I'm wondering how to do a traversal with state, is that not a thing xD
22:05:44 <awpr> so if your type doesn't have any empty constructors, then its catamorphism wouldn't have any 0-ary "callbacks", i.e. nothing that looks like an "initial state"
22:06:00 <EvanR> the leaves can be interpreted by one of the callbacks
22:06:13 × jinsun quits (~quassel@user/jinsun) (Ping timeout: 240 seconds)
22:06:15 <EvanR> no 0-ary though
22:06:25 <tomsmeding> EvanR: does it make sense to define your function as 'myfoldr f z thing = foldr f z (toList thing)'
22:06:37 <EvanR> no it's a tree
22:06:46 <tomsmeding> still
22:07:09 <monochrom> Both foldlM and foldrM exist, and you can set the monad to a state monad.
22:07:28 <EvanR> foldrM...
22:08:16 × madjestic quits (~madjestic@88-159-247-120.fixed.kpn.net) (Ping timeout: 256 seconds)
22:08:53 <EvanR> "do you guys just put 'monadic' in front of everything" --antman
22:09:20 <monochrom> Nah but "traversal with state" was brought up.
22:09:29 <EvanR> just kidding
22:09:31 <EvanR> looking that up
22:09:44 <tomsmeding> EvanR: data Tree a = Node (Tree a) (Tree a) | Leaf a; treefoldr :: (s -> Either (b, b) a -> (s, b)) -> s -> Tree a -> (s, b); treefoldr f s (Node a b) = let (s1, a') = treefoldr f s a; (s2, b') = treefoldr f s1 b in f s2 (Left (a', b')); treefoldr f s (Leaf x) = f s (Right x)
22:09:51 <tomsmeding> is that kind of what you were looking for?
22:10:13 <tomsmeding> also it's a foldl not a foldr
22:10:17 <tomsmeding> but never mind that
22:10:28 modnar joins (~modnar@shell.sonic.net)
22:10:41 × Morrow quits (~user@bzq-110-168-31-106.red.bezeqint.net) (Ping timeout: 268 seconds)
22:10:49 <tomsmeding> this is a post-order traversal, but can be easily rewritten to do whatever order you like
22:11:01 <tomsmeding> note that the only reason you have to choose an order is because it's threading state through
22:11:28 <EvanR> so you write a tree fold (l) with an explicit state... ok
22:11:52 Morrow joins (~user@bzq-110-168-31-106.red.bezeqint.net)
22:11:57 <tomsmeding> the standard no-state fold (nostatefold f1 f2 (Node a b) = f1 (nostatefold f1 f2 a) (nostatefold f1 f2 b2); nostatefold f1 f2 (Leaf x) = f2 x) is order-agnostic
22:12:28 × mc47 quits (~mc47@xmonad/TheMC47) (Remote host closed the connection)
22:13:40 × Tuplanolla quits (~Tuplanoll@91-159-68-166.elisa-laajakaista.fi) (Quit: Leaving.)
22:14:09 <EvanR> in Data.Foldable foldrM's default implementation uses foldl, so I'm thinking if I'm thinking "foldr" I'm not thinking state or effects
22:15:02 <tomsmeding> well Data.Foldable's foldr is basically foldr over toList, except that the instance can choose traversal order to a limited extent
22:15:30 <EvanR> it's funny I'm not seeing how List is relevant
22:15:34 <tomsmeding> my nostatefold is the standard catamorphism for the Tree type, also known as its church envoding, also known as "the" fold
22:15:53 <tomsmeding> and my treefoldr is an odd thing
22:16:05 <EvanR> yeah
22:16:06 <tomsmeding> EvanR: it's just how the Foldable class is set up
22:16:12 <tomsmeding> it treats everything as a list, basically
22:16:14 <EvanR> I like "the" fold
22:16:38 <EvanR> https://paste.tomsmeding.com/RfJueAQF
22:17:19 <EvanR> how do you comprehend this one as a list xD
22:18:46 <tomsmeding> EvanR: ok that's not a parameterised datatype so doesn't fit Foldable in the first place
22:18:54 <EvanR> yeah, working on it
22:19:01 <tomsmeding> but I have absolutely no idea what your foldULC is supposed to do
22:19:09 <tomsmeding> when do you call the (a -> a) -> a argument???
22:19:15 <EvanR> on Lam
22:19:38 <EvanR> after interpreting the body as a function
22:19:38 <tomsmeding> and how do you interpret a Bar, and why is the argument order Far, App, ???, and what is Far even anyway :p
22:19:41 tomsmeding is confused
22:20:08 <EvanR> sorry, bound variable, free variable
22:20:15 × wombat875 quits (~wombat875@pool-72-89-24-154.nycmny.fios.verizon.net) (Quit: WeeChat 2.2-dev)
22:20:35 <EvanR> so it's not a pure foldr, it's interpreting a lambda term as a thing with functions and scope
22:20:48 <tomsmeding> Bound vARiable?
22:20:53 <tomsmeding> right
22:22:24 × coot quits (~coot@2a02:a310:e241:1b00:ec1a:e9df:79ac:66ba) (Quit: coot)
22:22:56 <EvanR> and I guess it's not enough to write a thing that "numbers" nodes or names variables
22:23:14 <EvanR> (renames)
22:24:49 <tomsmeding> EvanR: those Ints are De Bruijn indices?
22:25:07 <tomsmeding> was this the intent https://paste.tomsmeding.com/q64QaWM9
22:26:27 <EvanR> yes precisely
22:26:45 <EvanR> you improved my code xD
22:27:00 <tomsmeding> interesting, basically conversion to a church-encoded HOAS representation of the untyped lambda calculus with free variables
22:27:53 × MatthiasG2 quits (~matthias@i6DFA01BB.versanet.de) (Ping timeout: 256 seconds)
22:28:15 <EvanR> ikr
22:28:29 <tomsmeding> B)
22:28:55 <tomsmeding> needs more GADT tho
22:29:24 <EvanR> is your environment being built backward though
22:29:44 <tomsmeding> the variables with the smallest scope are closest to the head of the list
22:29:47 <tomsmeding> i.e. have smallest indices
22:29:54 <tomsmeding> which is precisely De Bruijn indices in standard use
22:30:05 <EvanR> hmm
22:30:12 <tomsmeding> you also have the reverse variant, where variables are numbered from the top, which is perhaps what you had in mind
22:30:45 <tomsmeding> EvanR: https://tomsmeding.com/ss/get/tomsmeding/7N8lJI
22:30:57 <tomsmeding> ignore the odd syntax if possible
22:31:08 <EvanR> yes to construct a Lam from a ULC I was thinking increment all the bound variables and replace some free variable with a 0
22:31:19 <tomsmeding> right, that's de bruijn levels
22:32:03 <tomsmeding> downside of de bruijn levels is that you need to traverse the whole tree in order to put it under a binder
22:32:54 <tomsmeding> both indices and levels have the downside that substitution of the topmost binder requires renumbering all indices
22:33:13 <tomsmeding> so if I'm not mistaken (may well be), indices are usually better because they require less renumbering
22:33:13 <EvanR> unless we use this fold here
22:33:20 <tomsmeding> well you can also use HOAS :p
22:33:22 <EvanR> which doesn't renumber anything
22:33:32 <tomsmeding> which is representing a lambda with a function precisely like you did
22:34:40 <EvanR> you mentioned GADTs, in the case of ULC where would it benefit
22:34:50 <tomsmeding> EvanR: https://paste.tomsmeding.com/kuTS60x4 that's HOAS
22:35:55 <EvanR> ah you convert made a new structure that did away with bound vars
22:36:03 <tomsmeding> kind of yes
22:36:35 × merijn quits (~merijn@c-001-001-018.client.esciencecenter.eduvpn.nl) (Ping timeout: 268 seconds)
22:38:36 <EvanR> ULC can be saved and restored from text
22:38:48 <EvanR> so can we get it back from HAOS
22:39:59 × takuan quits (~takuan@178-116-218-225.access.telenet.be) (Remote host closed the connection)
22:40:54 <EvanR> I mean the name hints are gone but
22:47:09 <EvanR> ah
22:47:29 zebrag joins (~chris@user/zebrag)
22:49:03 × epolanski quits (uid312403@id-312403.helmsley.irccloud.com) (Quit: Connection closed for inactivity)
22:52:34 whatsupdoc joins (uid509081@id-509081.hampstead.irccloud.com)
22:54:18 CHUD joins (~CHUD@host-80-41-89-108.as13285.net)
22:58:30 × CHUD quits (~CHUD@host-80-41-89-108.as13285.net) (Ping timeout: 256 seconds)
22:59:21 <EvanR> https://paste.tomsmeding.com/f3XaHI1U
22:59:49 × ph88 quits (~ph88@2a02:8109:9e00:71d0:bc3f:ae22:7b02:63e) (Quit: Leaving)
22:59:50 <tomsmeding> EvanR: higher-order abstract syntax
22:59:54 <tomsmeding> not haos :p
23:00:16 <EvanR> not hateoas?
23:01:17 <tomsmeding> EvanR: that i parameter to UBar on the last line looks suspicious to the point of being wrong
23:01:42 <EvanR> yep totally is wrong
23:02:23 madjestic joins (~madjestic@88-159-247-120.fixed.kpn.net)
23:02:29 wyrd joins (~wyrd@gateway/tor-sasl/wyrd)
23:02:35 <EvanR> anyway roundabout but explains how a stateful traversal can ... do
23:03:05 <EvanR> with basically just folds
23:03:06 × nineonine quits (~nineonine@2604:3d08:7780:cd00:1deb:a18f:f447:b812) (Ping timeout: 268 seconds)
23:05:04 × fendor quits (~fendor@77.119.206.49.wireless.dyn.drei.com) (Read error: Connection reset by peer)
23:05:10 × ardell quits (~ardell@user/ardell) (Quit: Konversation terminated!)
23:05:22 × emf_ quits (~emf@163.114.132.4) (Ping timeout: 250 seconds)
23:05:35 <tomsmeding> EvanR: https://paste.tomsmeding.com/bjp337Bt
23:06:08 <tomsmeding> a ULC -> ULC' function would basically be a scope checker
23:06:28 × __monty__ quits (~toonn@user/toonn) (Quit: leaving)
23:07:01 <tomsmeding> but this is beside the point for what you're doing I think :p
23:07:43 <tomsmeding> if you want moar types and encode the simply-typed lambda calculus instead, you get something like this https://github.com/VMatthijs/CHAD/blob/755fc47e1f8d1c3d91455f123338f44a353fc265/src/Concrete.hs#L32-L36
23:08:03 <tomsmeding> https://github.com/VMatthijs/CHAD/blob/755fc47e1f8d1c3d91455f123338f44a353fc265/src/Env.hs
23:09:13 × ensyde quits (~ensyde@2600:1700:2050:1040:ac63:f3f7:89ad:2997) (Quit: Leaving)
23:09:28 yauhsien_ joins (~yauhsien@118-167-40-21.dynamic-ip.hinet.net)
23:10:50 Lord_of_Life_ joins (~Lord@user/lord-of-life/x-2819915)
23:10:52 × Lord_of_Life quits (~Lord@user/lord-of-life/x-2819915) (Read error: Connection reset by peer)
23:13:16 emf joins (~emf@2620:10d:c090:400::5:7499)
23:13:34 Lord_of_Life_ is now known as Lord_of_Life
23:15:26 × yauhsien_ quits (~yauhsien@118-167-40-21.dynamic-ip.hinet.net) (Ping timeout: 268 seconds)
23:15:51 <EvanR> go env (UBar' i) = UBar (idx2int i) (prj env i), the 2nd arg to UBar was supposed to be a string which is optional remnant hint of what the name of the var was
23:16:14 <EvanR> prj is getting the value from an environment
23:16:28 <EvanR> oh type String... ok
23:17:01 <EvanR> and comes from the lambda... cool
23:17:01 × ft quits (~ft@shell.chaostreff-dortmund.de) (Ping timeout: 240 seconds)
23:18:00 ft joins (~ft@shell.chaostreff-dortmund.de)
23:18:19 × madjestic quits (~madjestic@88-159-247-120.fixed.kpn.net) (Ping timeout: 256 seconds)
23:18:46 madjestic joins (~madjestic@88-159-247-120.fixed.kpn.net)
23:19:18 jgeerds joins (~jgeerds@55d4a547.access.ecotel.net)
23:21:43 <EvanR> in subst1 :: (Idx d -> Either String (Idx d')) -> ULC' d -> ULC' d', d and d' represent max depth of the bindings, so if the callback returns d' < d, the expression shrank?
23:22:01 <EvanR> or we just became more ignorant of the true depth
23:22:17 × vysn quits (~vysn@user/vysn) (Ping timeout: 240 seconds)
23:22:30 × Erutuon quits (~Erutuon@user/erutuon) (Ping timeout: 256 seconds)
23:22:51 × cosimone quits (~user@2001:b07:ae5:db26:c24a:d20:4d91:1e20) (Quit: ERC (IRC client for Emacs 27.1))
23:25:20 Erutuon joins (~Erutuon@user/erutuon)
23:27:14 <carbolymer> is there any trick to lift lenses? i.e. I'm quite often using:
23:27:14 <carbolymer> memory' <- use memory
23:27:14 <carbolymer> memory' ^. at varName
23:27:19 <carbolymer> can I join those together?
23:27:22 notzmv joins (~zmv@user/notzmv)
23:27:23 × machinedgod quits (~machinedg@24.105.81.50) (Ping timeout: 256 seconds)
23:27:40 × tomboy64 quits (~tomboy64@user/tomboy64) (Quit: Off to see the wizard.)
23:28:54 tomboy64 joins (~tomboy64@user/tomboy64)
23:31:56 × vicfred quits (~vicfred@user/vicfred) (Quit: Leaving)
23:32:11 AlexNoo_ joins (~AlexNoo@178.34.151.37)
23:33:50 × AlexZenon quits (~alzenon@94.233.241.141) (Ping timeout: 256 seconds)
23:34:53 × burnsidesLlama quits (~burnsides@dhcp168-030.wadham.ox.ac.uk) (Remote host closed the connection)
23:35:24 burnsidesLlama joins (~burnsides@dhcp168-030.wadham.ox.ac.uk)
23:35:37 × Alex_test quits (~al_test@94.233.241.141) (Ping timeout: 240 seconds)
23:36:06 × AlexNoo quits (~AlexNoo@94.233.241.141) (Ping timeout: 256 seconds)
23:37:40 AlexZenon joins (~alzenon@178.34.151.37)
23:39:46 Alex_test joins (~al_test@178.34.151.37)
23:39:51 × burnsidesLlama quits (~burnsides@dhcp168-030.wadham.ox.ac.uk) (Ping timeout: 256 seconds)
23:44:23 × shapr quits (~user@pool-100-36-247-68.washdc.fios.verizon.net) (Ping timeout: 256 seconds)
23:44:36 × madjestic quits (~madjestic@88-159-247-120.fixed.kpn.net) (Ping timeout: 256 seconds)
23:45:06 × bitdex quits (~bitdex@gateway/tor-sasl/bitdex) (Ping timeout: 276 seconds)
23:45:12 cjb` joins (~cjb@user/cjb)
23:45:28 × cjb quits (~cjb@user/cjb) (Ping timeout: 260 seconds)
23:46:06 cjb` is now known as cjb
23:46:18 × mon_aaraj quits (~MonAaraj@user/mon-aaraj/x-4416475) (Quit: WeeChat 3.4)
23:46:37 <Axman6> what are the types?
23:46:42 <Axman6> is memory a lens?
23:46:47 bitdex joins (~bitdex@gateway/tor-sasl/bitdex)
23:47:29 mon_aaraj joins (~MonAaraj@user/mon-aaraj/x-4416475)
23:50:23 × mon_aaraj quits (~MonAaraj@user/mon-aaraj/x-4416475) (Client Quit)
23:51:11 mon_aaraj joins (~MonAaraj@user/mon-aaraj/x-4416475)
23:51:23 qrpnxz parts (~qrpnxz@user/qrpnxz) (Disconnected: Replaced by new connection)
23:51:25 <Axman6> looks so, so I guess that at varName will return an action - so looks like join $ use (memory . at varName)
23:51:37 qrpnxz joins (~qrpnxz@user/qrpnxz)
23:51:57 qrpnxz parts (~qrpnxz@user/qrpnxz) ()
23:52:19 <Axman6> defininf something like run = join . use might be useful
23:52:21 qrpnxz joins (~qrpnxz@user/qrpnxz)
23:52:30 × mmhat quits (~mmh@55d4f68d.access.ecotel.net) (Quit: WeeChat 3.4)
23:55:22 qrpnxz parts (~qrpnxz@user/qrpnxz) ()
23:55:37 qrpnxz joins (~qrpnxz@user/qrpnxz)
23:55:54 qrpnxz parts (~qrpnxz@user/qrpnxz) ()
23:56:13 qrpnxz joins (abc4f95c31@user/qrpnxz)

All times are in UTC on 2022-01-31.