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.