Newest at the top
2025-05-12 03:53:23 +0200 | <EvanR> | I'm wrong, since the environment would have first class functions with their own environment in a closure |
2025-05-12 03:50:26 +0200 | j1n37 | (~j1n37@user/j1n37) j1n37 |
2025-05-12 03:49:41 +0200 | j1n37- | (~j1n37@user/j1n37) (Ping timeout: 248 seconds) |
2025-05-12 03:49:14 +0200 | hughjfchen | (~hughjfche@vmi2417424.contaboserver.net) hughjfchen |
2025-05-12 03:48:44 +0200 | hughjfch1 | (~hughjfche@vmi2417424.contaboserver.net) (Quit: WeeChat 4.4.3) |
2025-05-12 03:38:05 +0200 | ljdarj | (~Thunderbi@user/ljdarj) (Ping timeout: 265 seconds) |
2025-05-12 03:11:49 +0200 | xff0x | (~xff0x@2405:6580:b080:900:42e0:bce1:22f1:2695) (Ping timeout: 276 seconds) |
2025-05-12 03:06:59 +0200 | ljdarj | (~Thunderbi@user/ljdarj) ljdarj |
2025-05-12 03:05:13 +0200 | ljdarj | (~Thunderbi@user/ljdarj) (Ping timeout: 265 seconds) |
2025-05-12 03:01:11 +0200 | siliconcritters | (~siliconcr@syn-068-188-168-151.res.spectrum.com) (Quit: siliconcritters) |
2025-05-12 02:45:55 +0200 | jmcantrell | (~weechat@user/jmcantrell) jmcantrell |
2025-05-12 02:42:05 +0200 | meinside | (uid24933@id-24933.helmsley.irccloud.com) meinside |
2025-05-12 02:39:31 +0200 | <EvanR> | so ghc must do none of the above |
2025-05-12 02:38:31 +0200 | <EvanR> | it seems to me that environment is real solution only if stuff in the environment doesn't have free variables, like in eager evaluation |
2025-05-12 02:35:14 +0200 | xff0x | (~xff0x@2405:6580:b080:900:42e0:bce1:22f1:2695) |
2025-05-12 02:34:34 +0200 | califax | (~califax@user/califx) califx |
2025-05-12 02:32:29 +0200 | <monochrom> | I think Scheme hygienic macros use the alpha-convert way. |
2025-05-12 02:32:23 +0200 | califax | (~califax@user/califx) (Remote host closed the connection) |
2025-05-12 02:31:57 +0200 | <monochrom> | The pros do one of. They do one of: numbering, environment, alpha-convert lambdas to fresh vars before substitute (e.g., rewrite (\x y -> x + y) to (\uuid1934 uuid3141 -> uuid1934 + uuid3141)) |
2025-05-12 02:28:55 +0200 | <monochrom> | The mistake happens if you really do what you tell beginners: substitute. :) |
2025-05-12 02:27:33 +0200 | <monochrom> | Environment is also a way to be invulnerable. |
2025-05-12 02:21:36 +0200 | Tuplanolla | (~Tuplanoll@91-159-69-59.elisa-laajakaista.fi) (Quit: Leaving.) |
2025-05-12 02:21:30 +0200 | xff0x | (~xff0x@2405:6580:b080:900:d755:12f8:638d:5cf9) (Client Quit) |
2025-05-12 02:18:44 +0200 | xff0x | (~xff0x@2405:6580:b080:900:d755:12f8:638d:5cf9) |
2025-05-12 02:18:05 +0200 | xff0x | (~xff0x@2405:6580:b080:900:9d68:c704:b1b0:2e99) (Ping timeout: 260 seconds) |
2025-05-12 02:09:28 +0200 | j1n37 | (~j1n37@user/j1n37) (Ping timeout: 272 seconds) |
2025-05-12 02:08:41 +0200 | j1n37- | (~j1n37@user/j1n37) j1n37 |
2025-05-12 02:08:32 +0200 | <EvanR> | (in the first example one of the y and in this example the z are free so wouldn't get IDs afaiui) |
2025-05-12 02:07:27 +0200 | <EvanR> | so when you convert from debruijn back to named variables you better use unique names |
2025-05-12 02:06:09 +0200 | <EvanR> | yields an identity function instead of a constant function |
2025-05-12 02:04:55 +0200 | <EvanR> | (\x y -> \z -> x) z |
2025-05-12 02:03:04 +0200 | weary-traveler | (~user@user/user363627) (Remote host closed the connection) |
2025-05-12 02:02:20 +0200 | <EvanR> | I'm probably wrong about my observation, but using your example I'll show what I mean, (\x y -> x + y) y z, evaluate x+y in environment [x=>y, y=>z], y + z. I'll see if I can fix the example |
2025-05-12 02:01:52 +0200 | sajenim | (~sajenim@user/sajenim) sajenim |
2025-05-12 01:55:41 +0200 | <monochrom> | Template Haskell gives you two functions for creating names, so that you can choose whether you want variable capture or not per variable. (There are legit use cases when you want it.) |
2025-05-12 01:53:44 +0200 | machinedgod | (~machinedg@d108-173-18-100.abhsia.telus.net) (Ping timeout: 252 seconds) |
2025-05-12 01:53:25 +0200 | <monochrom> | Lisp macros, at least for old Lisp, are also vulnerable. When the Scheme people say "hygienic macros" they mean that macro expansion takes care not to make that mistake again. |
2025-05-12 01:50:39 +0200 | <monochrom> | Too lazy to read that paper, but here is a common mistake ("variable capture") when using names: ((\x y -> x + y) y) z = (\y -> y + y) z = z + z instead of y + z. De Bruijn numbering (or other numbering schemes) are not vulnerable to this mistake, the two "y"s have different IDs. |
2025-05-12 01:47:48 +0200 | siliconcritters | (~siliconcr@syn-068-188-168-151.res.spectrum.com) |
2025-05-12 01:39:12 +0200 | ttybitnik | (~ttybitnik@user/wolper) (Quit: Fading out...) |
2025-05-12 01:32:16 +0200 | zdercti^ | (~zdercti@50.168.231.214) |
2025-05-12 01:31:56 +0200 | sprotte24 | (~sprotte24@p200300d16f052e00b01ecb3cf5e5d8f9.dip0.t-ipconnect.de) (Quit: Leaving) |
2025-05-12 01:18:40 +0200 | bitdex | (~bitdex@gateway/tor-sasl/bitdex) bitdex |
2025-05-12 01:18:09 +0200 | bitdex | (~bitdex@gateway/tor-sasl/bitdex) (Remote host closed the connection) |
2025-05-12 01:11:03 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn |
2025-05-12 00:59:33 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 265 seconds) |
2025-05-12 00:56:49 +0200 | acidjnk | (~acidjnk@p200300d6e71c4f78180f209d949bdd6b.dip0.t-ipconnect.de) (Ping timeout: 248 seconds) |
2025-05-12 00:43:28 +0200 | Lord_of_Life_ | Lord_of_Life |
2025-05-12 00:42:14 +0200 | Lord_of_Life | (~Lord@user/lord-of-life/x-2819915) (Ping timeout: 252 seconds) |
2025-05-12 00:42:05 +0200 | Lord_of_Life_ | (~Lord@user/lord-of-life/x-2819915) Lord_of_Life |