Logs: liberachat/#haskell
| 2026-01-12 20:29:12 | → | merijn joins (~merijn@host-cl.cgnat-g.v4.dfn.nl) |
| 2026-01-12 20:29:32 | <Enrico63> | Because our data representation is just an Expr, whatever it contains |
| 2026-01-12 20:30:00 | <tomsmeding> | this is in contrast to a dynamically typed language, where any use of 'fst' (usually written like [0], or .0, or .first, etc.) may throw because it actually turns out to be a file handle, for example |
| 2026-01-12 20:30:13 | <tomsmeding> | Enrico63: no, I'm talking about Value, not Expr |
| 2026-01-12 20:30:23 | <Enrico63> | Well, same thing, right? |
| 2026-01-12 20:30:34 | <EvanR> | no way |
| 2026-01-12 20:30:34 | <tomsmeding> | true, they're both dynamic |
| 2026-01-12 20:30:35 | <Enrico63> | It's a single type that hides multiple shapes, no? |
| 2026-01-12 20:30:50 | <tomsmeding> | but for Expr, every value is interpretable, whereas certainly not all Value values are valid |
| 2026-01-12 20:31:08 | <tomsmeding> | (well, not really every Expr is interpretable either!) |
| 2026-01-12 20:31:25 | <tomsmeding> | ("Fst (I 2)" is indeed bad, and you're right that this is yet another example of the same) |
| 2026-01-12 20:31:42 | <EvanR> | isn't the secret sauce that a Value evaluates to itself |
| 2026-01-12 20:32:07 | <EvanR> | is the output of evaluation |
| 2026-01-12 20:32:20 | <tomsmeding> | Alexis' point here, I think, is that my first snippet is fine Haskell code, _despite_ doing a check that is "too late" |
| 2026-01-12 20:32:49 | <tomsmeding> | my addendum to that is that Haskell is actually strong enough that if you're lucky enough to be interpreting a typed language, you can fix this |
| 2026-01-12 20:32:53 | <tomsmeding> | -> my second snippet |
| 2026-01-12 20:33:43 | × | merijn quits (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 240 seconds) |
| 2026-01-12 20:34:30 | → | vanishingideal joins (~vanishing@user/vanishingideal) |
| 2026-01-12 20:35:45 | <Enrico63> | No, I don't get it. Your first snippet is Haskell code full stop; fine or not is an opinion. Her words refer to "rare exceptions [...] that **require** true dynamic code loading". |
| 2026-01-12 20:36:24 | <tomsmeding> | Enrico63: I interpret that "dynamic code loading" as applying to my 'interpret': it's loading code (Expr) dynamically (at runtime) |
| 2026-01-12 20:36:26 | <Enrico63> | Now, whether I look at the first or second snippet of yours, those are both interpreters, no? |
| 2026-01-12 20:37:07 | <Enrico63> | Yeah, and in your second snippet you are not doing that. So where's the "require"? |
| 2026-01-12 20:37:29 | <Enrico63> | If something is required, you ought to do it, you can't avoid. Right? |
| 2026-01-12 20:37:29 | <tomsmeding> | writing an interpreter by definition requires you to interpret code at runtime -- that's what an interpreter does |
| 2026-01-12 20:38:08 | → | fp joins (~Thunderbi@2001-14ba-6e24-3000--198.rev.dnainternet.fi) |
| 2026-01-12 20:38:13 | <tomsmeding> | I think there is little more to the statement than this |
| 2026-01-12 20:39:02 | <tomsmeding> | I think it's simply false that all exceptions to the stated "rule" require dynamic code loading; Alexis is simply stating that there are exceptions, _such as_ those that require dynamic code loading |
| 2026-01-12 20:39:47 | × | gmg quits (~user@user/gehmehgeh) (Ping timeout: 252 seconds) |
| 2026-01-12 20:39:55 | <EvanR> | "rare exceptions of dynamic code loading", every computer game out there with a "mod API" |
| 2026-01-12 20:40:29 | <EvanR> | ever loaded a TTF font? xD |
| 2026-01-12 20:40:43 | <tomsmeding> | or loaded a pickle |
| 2026-01-12 20:40:45 | <EvanR> | or a pdf |
| 2026-01-12 20:40:57 | <geekosaur> | and glibc does it all the time: name services, locale stuff… |
| 2026-01-12 20:42:31 | <tomsmeding> | (the python pickle format includes the ability to call arbitrary functions https://docs.python.org/3/library/pickle.html#restricting-globals ) |
| 2026-01-12 20:42:44 | <EvanR> | does it run the code as a matter of course during loading? |
| 2026-01-12 20:42:48 | <tomsmeding> | yes |
| 2026-01-12 20:42:54 | <EvanR> | can you disable it? xD |
| 2026-01-12 20:42:58 | <tomsmeding> | which is why using pickle.loads on unsafe input is highly insecure |
| 2026-01-12 20:43:06 | <tomsmeding> | read the docs :p |
| 2026-01-12 20:43:14 | <EvanR> | python sounds terrifying |
| 2026-01-12 20:43:43 | <tomsmeding> | well the docs are rather loud about this |
| 2026-01-12 20:44:10 | × | myme quits (~myme@2a01:799:d5e:5f00:ff65:28ea:98bb:7f03) (Ping timeout: 246 seconds) |
| 2026-01-12 20:44:59 | → | merijn joins (~merijn@host-cl.cgnat-g.v4.dfn.nl) |
| 2026-01-12 20:45:16 | → | myme joins (~myme@2a01:799:d5e:5f00:182f:237f:5285:8c47) |
| 2026-01-12 20:46:12 | × | oxapentane quits (~oxapentan@user/oxapentane) (Remote host closed the connection) |
| 2026-01-12 20:46:30 | → | oxapentane joins (~oxapentan@user/oxapentane) |
| 2026-01-12 20:47:14 | <EvanR> | good |
| 2026-01-12 20:47:32 | <tomsmeding> | it's also a staple in beginner hacking challenges |
| 2026-01-12 20:47:36 | <EvanR> | I'm tired of C getting all the blame for security xD |
| 2026-01-12 20:49:35 | × | merijn quits (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 240 seconds) |
| 2026-01-12 20:51:45 | → | a_peirogon joins (~a_peirogo@user/a-peirogon:62807) |
| 2026-01-12 20:54:52 | ← | a_peirogon parts (~a_peirogo@user/a-peirogon:62807) (WeeChat 4.7.1) |
| 2026-01-12 20:55:57 | <geekosaur> | that's lazy people looking for a quick no-thinking belief |
| 2026-01-12 20:56:10 | <geekosaur> | (and usually trying to justify their language…) |
| 2026-01-12 21:00:35 | → | merijn joins (~merijn@host-cl.cgnat-g.v4.dfn.nl) |
| 2026-01-12 21:02:25 | → | gmg joins (~user@user/gehmehgeh) |
| 2026-01-12 21:04:07 | × | michalz quits (~michalz@185.246.207.201) (Remote host closed the connection) |
| 2026-01-12 21:05:52 | × | vanishingideal quits (~vanishing@user/vanishingideal) (Ping timeout: 246 seconds) |
| 2026-01-12 21:06:01 | × | merijn quits (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 264 seconds) |
| 2026-01-12 21:14:25 | → | merijn joins (~merijn@host-cl.cgnat-g.v4.dfn.nl) |
| 2026-01-12 21:15:40 | × | newmind quits (~newmind@91-133-90-252.dyn.cablelink.at) (Quit: Client closed) |
| 2026-01-12 21:19:49 | × | merijn quits (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 264 seconds) |
| 2026-01-12 21:23:17 | × | trickard_ quits (~trickard@cpe-48-98-47-163.wireline.com.au) (Read error: Connection reset by peer) |
| 2026-01-12 21:23:30 | → | trickard_ joins (~trickard@cpe-48-98-47-163.wireline.com.au) |
| 2026-01-12 21:25:33 | <hc> | You mean nonstrict people? :D |
| 2026-01-12 21:29:11 | → | peterbecich joins (~Thunderbi@71.84.33.135) |
| 2026-01-12 21:30:12 | → | merijn joins (~merijn@host-cl.cgnat-g.v4.dfn.nl) |
| 2026-01-12 21:30:34 | jmcantrell_ | is now known as jmcantrell |
| 2026-01-12 21:32:05 | → | hakutaku joins (~textual@chen.yukari.eu.org) |
| 2026-01-12 21:34:04 | → | marlino joins (~marlino@96-8-193-71.block0.gvtc.com) |
| 2026-01-12 21:35:29 | × | merijn quits (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 256 seconds) |
| 2026-01-12 21:40:35 | × | comonad quits (~comonad@p200300d02722ae00dce4ce9451b59974.dip0.t-ipconnect.de) (Read error: Connection reset by peer) |
| 2026-01-12 21:46:08 | → | merijn joins (~merijn@host-cl.cgnat-g.v4.dfn.nl) |
| 2026-01-12 21:46:31 | × | lbseale quits (~quassel@user/ep1ctetus) (Ping timeout: 264 seconds) |
| 2026-01-12 21:46:55 | × | jmcantrell quits (~weechat@user/jmcantrell) (Ping timeout: 240 seconds) |
| 2026-01-12 21:47:25 | × | takuan quits (~takuan@d8D86B9E9.access.telenet.be) (Ping timeout: 264 seconds) |
| 2026-01-12 21:51:24 | × | merijn quits (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 260 seconds) |
| 2026-01-12 21:53:56 | → | pavonia joins (~user@user/siracusa) |
| 2026-01-12 21:57:56 | → | lbseale joins (~quassel@user/ep1ctetus) |
| 2026-01-12 22:01:41 | × | housemate quits (~housemate@203.56.146.214) (Quit: https://ineedsomeacidtocalmmedown.space/) |
| 2026-01-12 22:01:54 | → | merijn joins (~merijn@host-cl.cgnat-g.v4.dfn.nl) |
| 2026-01-12 22:06:46 | × | merijn quits (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 246 seconds) |
| 2026-01-12 22:09:55 | × | trickard_ quits (~trickard@cpe-48-98-47-163.wireline.com.au) (Ping timeout: 240 seconds) |
| 2026-01-12 22:10:13 | → | trickard_ joins (~trickard@cpe-48-98-47-163.wireline.com.au) |
| 2026-01-12 22:10:17 | → | Plane9 joins (~Plane9@2a02:3037:608:ad96:bf2:5d7:81f6:16a1) |
| 2026-01-12 22:17:45 | → | merijn joins (~merijn@host-cl.cgnat-g.v4.dfn.nl) |
| 2026-01-12 22:18:40 | × | polykernel quits (~polykerne@user/polykernel) (Ping timeout: 246 seconds) |
| 2026-01-12 22:22:07 | × | merijn quits (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 240 seconds) |
| 2026-01-12 22:32:34 | trickard_ | is now known as trickard |
| 2026-01-12 22:33:25 | → | merijn joins (~merijn@host-cl.cgnat-g.v4.dfn.nl) |
| 2026-01-12 22:35:11 | × | tromp quits (~textual@2001:1c00:3487:1b00:e166:97e2:1b74:68c4) (Quit: My iMac has gone to sleep. ZZZzzz…) |
| 2026-01-12 22:38:15 | × | merijn quits (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 240 seconds) |
| 2026-01-12 22:38:26 | → | tromp joins (~textual@2001:1c00:3487:1b00:e84f:e407:7aee:4080) |
| 2026-01-12 22:39:40 | × | fp quits (~Thunderbi@2001-14ba-6e24-3000--198.rev.dnainternet.fi) (Ping timeout: 246 seconds) |
| 2026-01-12 22:42:20 | → | Lycurgus joins (~juan@user/Lycurgus) |
| 2026-01-12 22:46:20 | × | Enrico63 quits (~Enrico63@host-87-7-181-238.retail.telecomitalia.it) (Quit: Client closed) |
| 2026-01-12 22:49:13 | → | merijn joins (~merijn@host-cl.cgnat-g.v4.dfn.nl) |
| 2026-01-12 22:52:08 | × | tromp quits (~textual@2001:1c00:3487:1b00:e84f:e407:7aee:4080) (Quit: My iMac has gone to sleep. ZZZzzz…) |
| 2026-01-12 22:52:57 | → | vanishingideal joins (~vanishing@user/vanishingideal) |
| 2026-01-12 22:54:05 | × | Plane9 quits (~Plane9@2a02:3037:608:ad96:bf2:5d7:81f6:16a1) (Quit: Client closed) |
All times are in UTC.