Logs: liberachat/#haskell
| 2026-04-13 11:32:39 | <fp`> | No, I'm just doing some linear algebra, shouldn't be any concurrency in sight |
| 2026-04-13 11:34:51 | <alter2000> | then I'd say it's a safe bet; chances are a good chunk of your potential users are already somewhat familiar with lisp style parameter/argument threading |
| 2026-04-13 11:39:36 | → | haritz joins (~hrtz@2a01:4b00:bc2e:7000:d5af:a266:ca31:5ef8) |
| 2026-04-13 11:39:36 | × | haritz quits (~hrtz@2a01:4b00:bc2e:7000:d5af:a266:ca31:5ef8) (Changing host) |
| 2026-04-13 11:39:36 | → | haritz joins (~hrtz@user/haritz) |
| 2026-04-13 11:45:31 | → | slomp joins (~slomp@47-158-199-90.lsan.ca.frontiernet.net) |
| 2026-04-13 11:50:10 | × | slomp quits (~slomp@47-158-199-90.lsan.ca.frontiernet.net) (Ping timeout: 248 seconds) |
| 2026-04-13 11:55:45 | → | karenw joins (~karenw@user/karenw) |
| 2026-04-13 11:58:13 | × | karenw quits (~karenw@user/karenw) (Client Quit) |
| 2026-04-13 12:03:51 | × | oats quits (~oats@user/oats) (Read error: Connection reset by peer) |
| 2026-04-13 12:04:06 | → | oats joins (~oats@user/oats) |
| 2026-04-13 12:04:18 | × | arandombit quits (~arandombi@user/arandombit) (Ping timeout: 244 seconds) |
| 2026-04-13 12:18:02 | → | slomp joins (~slomp@47-158-199-90.lsan.ca.frontiernet.net) |
| 2026-04-13 12:24:17 | × | slomp quits (~slomp@47-158-199-90.lsan.ca.frontiernet.net) (Ping timeout: 252 seconds) |
| 2026-04-13 12:27:37 | <merijn> | fp`: You know what's unironically really good at coming up with names from a description like that? |
| 2026-04-13 12:27:40 | <merijn> | ChatGPT |
| 2026-04-13 12:31:01 | × | bitdex quits (~bitdex@gateway/tor-sasl/bitdex) (Quit: = "") |
| 2026-04-13 12:35:20 | → | slomp joins (~slomp@47-158-199-90.lsan.ca.frontiernet.net) |
| 2026-04-13 12:40:09 | × | slomp quits (~slomp@47-158-199-90.lsan.ca.frontiernet.net) (Ping timeout: 248 seconds) |
| 2026-04-13 12:47:39 | × | rainbyte quits (~rainbyte@181.47.219.3) (Read error: Connection reset by peer) |
| 2026-04-13 12:48:54 | → | arandombit joins (~arandombi@user/arandombit) |
| 2026-04-13 12:50:44 | → | rainbyte joins (~rainbyte@181.47.219.3) |
| 2026-04-13 12:53:21 | <fp`> | merijn: Sure, but I'd rather engage with a community that uses the language, learn the conventions from them, and learn about ancillary tools, like in this I learned about Fennel. The answer's not that important to me, the process is the main thing. |
| 2026-04-13 12:53:59 | → | slomp joins (~slomp@47-158-199-90.lsan.ca.frontiernet.net) |
| 2026-04-13 12:54:36 | <fp`> | ancillary knowledge more generally, really. Not just tools. |
| 2026-04-13 12:58:05 | → | xff0x joins (~xff0x@2405:6580:b080:900:64fb:89e9:b5c1:12b3) |
| 2026-04-13 13:00:45 | × | slomp quits (~slomp@47-158-199-90.lsan.ca.frontiernet.net) (Ping timeout: 255 seconds) |
| 2026-04-13 13:02:03 | → | rekahsoft joins (~rekahsoft@bras-base-orllon1103w-grc-20-76-67-111-168.dsl.bell.ca) |
| 2026-04-13 13:11:24 | × | arandombit quits (~arandombi@user/arandombit) (Remote host closed the connection) |
| 2026-04-13 13:13:20 | → | slomp joins (~slomp@47-158-199-90.lsan.ca.frontiernet.net) |
| 2026-04-13 13:14:06 | → | arandombit joins (~arandombi@user/arandombit) |
| 2026-04-13 13:18:29 | × | slomp quits (~slomp@47-158-199-90.lsan.ca.frontiernet.net) (Ping timeout: 272 seconds) |
| 2026-04-13 13:19:33 | × | arandombit quits (~arandombi@user/arandombit) (Ping timeout: 268 seconds) |
| 2026-04-13 13:19:45 | → | Googulator joins (~Googulato@94-21-172-213.pool.digikabel.hu) |
| 2026-04-13 13:30:14 | → | slomp joins (~slomp@47-158-199-90.lsan.ca.frontiernet.net) |
| 2026-04-13 13:34:57 | × | slomp quits (~slomp@47-158-199-90.lsan.ca.frontiernet.net) (Ping timeout: 255 seconds) |
| 2026-04-13 13:50:00 | → | karenw joins (~karenw@user/karenw) |
| 2026-04-13 13:50:01 | × | fp` quits (~user@staff237.kora-dyn.aalto.fi) (Ping timeout: 248 seconds) |
| 2026-04-13 13:51:00 | × | Googulator quits (~Googulato@94-21-172-213.pool.digikabel.hu) (Quit: Client closed) |
| 2026-04-13 13:51:24 | → | Googulator joins (~Googulato@94-21-172-213.pool.digikabel.hu) |
| 2026-04-13 14:00:00 | → | arandombit joins (~arandombi@2a02:2455:8656:7100:55bf:4eed:c642:43c4) |
| 2026-04-13 14:00:00 | × | arandombit quits (~arandombi@2a02:2455:8656:7100:55bf:4eed:c642:43c4) (Changing host) |
| 2026-04-13 14:00:00 | → | arandombit joins (~arandombi@user/arandombit) |
| 2026-04-13 14:03:16 | × | arandombit quits (~arandombi@user/arandombit) (Remote host closed the connection) |
| 2026-04-13 14:05:02 | → | slomp joins (~slomp@47-158-199-90.lsan.ca.frontiernet.net) |
| 2026-04-13 14:06:40 | × | myxos quits (~myxos@67-1-178-42.tcso.qwest.net) (Remote host closed the connection) |
| 2026-04-13 14:10:07 | × | slomp quits (~slomp@47-158-199-90.lsan.ca.frontiernet.net) (Ping timeout: 268 seconds) |
| 2026-04-13 14:12:56 | → | slomp joins (~slomp@47-158-199-90.lsan.ca.frontiernet.net) |
| 2026-04-13 14:14:00 | → | myxos joins (~myxos@67-1-178-42.tcso.qwest.net) |
| 2026-04-13 14:17:42 | × | slomp quits (~slomp@47-158-199-90.lsan.ca.frontiernet.net) (Ping timeout: 255 seconds) |
| 2026-04-13 14:18:50 | → | potatomuncher|2 joins (~kvirc@user/potatomuncher) |
| 2026-04-13 14:21:08 | → | poscat0x04 joins (~poscat@user/poscat) |
| 2026-04-13 14:22:50 | × | poscat quits (~poscat@user/poscat) (Ping timeout: 268 seconds) |
| 2026-04-13 14:31:09 | → | slomp joins (~slomp@47-158-199-90.lsan.ca.frontiernet.net) |
| 2026-04-13 14:38:29 | × | bggd quits (~bgg@user/bggd) (Remote host closed the connection) |
| 2026-04-13 14:38:55 | × | slomp quits (~slomp@47-158-199-90.lsan.ca.frontiernet.net) (Ping timeout: 272 seconds) |
| 2026-04-13 14:39:04 | × | Googulator quits (~Googulato@94-21-172-213.pool.digikabel.hu) (Quit: Client closed) |
| 2026-04-13 14:39:20 | → | Googulator joins (~Googulato@94-21-172-213.pool.digikabel.hu) |
| 2026-04-13 14:40:54 | → | weary-traveler joins (~user@user/user363627) |
| 2026-04-13 14:41:36 | → | jmcantrell_ joins (~weechat@user/jmcantrell) |
| 2026-04-13 14:43:23 | × | pavonia quits (~user@user/siracusa) (Quit: Bye!) |
| 2026-04-13 14:49:55 | → | slomp joins (~slomp@47-158-199-90.lsan.ca.frontiernet.net) |
| 2026-04-13 14:55:05 | × | slomp quits (~slomp@47-158-199-90.lsan.ca.frontiernet.net) (Ping timeout: 248 seconds) |
| 2026-04-13 15:01:29 | → | fp1 joins (~Thunderbi@87-95-80-117.bb.dnainternet.fi) |
| 2026-04-13 15:02:15 | → | danza joins (~danza@user/danza) |
| 2026-04-13 15:02:15 | × | fp1 quits (~Thunderbi@87-95-80-117.bb.dnainternet.fi) (Read error: Connection reset by peer) |
| 2026-04-13 15:05:03 | → | machinedgod joins (~machinedg@d172-219-48-230.abhsia.telus.net) |
| 2026-04-13 15:06:37 | × | synchromesh quits (~john@2406:5a00:2412:2c00:f13a:623d:2f3c:c3c6) (Read error: Connection reset by peer) |
| 2026-04-13 15:07:34 | → | slomp joins (~slomp@47-158-199-90.lsan.ca.frontiernet.net) |
| 2026-04-13 15:08:00 | → | synchromesh joins (~john@2406:5a00:2412:2c00:2c29:cc68:8842:5c05) |
| 2026-04-13 15:08:37 | ← | sixfourtwelve parts (~ethanmorg@static.82.129.225.46.clients.your-server.de) () |
| 2026-04-13 15:13:05 | × | slomp quits (~slomp@47-158-199-90.lsan.ca.frontiernet.net) (Ping timeout: 245 seconds) |
| 2026-04-13 15:19:47 | → | Milan_Vanca joins (~milan@user/Milan-Vanca:32634) |
| 2026-04-13 15:25:49 | <Milan_Vanca> | Hello I have found this statement in book "Evaluating something to normal form involves traversing the whole of its structure, so you should bear in mind that it is O(n) for a structure of size n, whereas seq is O(1). It is therefore a good idea to avoid repeated uses of force or deepseq on the same data." Is that correct? I thought that in ghc "results of evalutaions" are shared. So force |
| 2026-04-13 15:25:51 | <Milan_Vanca> | longList; force longList should not traverse list 2 times |
| 2026-04-13 15:26:12 | × | alter2000 quits (~alter2000@user/alter2000) (Read error: Connection reset by peer) |
| 2026-04-13 15:27:03 | <[exa]> | Milan_Vanca: the issue with `deepseq` is that it doesn't know if there's a thunk somewhere in the middle or not, so it has to traverse there again and again |
| 2026-04-13 15:27:54 | <[exa]> | (by having a head-normal data structure there's no way to tell if it points to a thunk, and the information that it was "already checked" isn't stored anywhere) |
| 2026-04-13 15:29:16 | <[exa]> | BUT you can memoize the result of `deepseq` in a `let` and then you can use as many times you want and it's always going to be memoized as fully evaluated. |
| 2026-04-13 15:29:39 | <[exa]> | (If confusing I can try to draw a picture :D ) |
| 2026-04-13 15:30:15 | → | slomp joins (~slomp@47-158-199-90.lsan.ca.frontiernet.net) |
| 2026-04-13 15:31:23 | → | v0id_7 joins (~v0id_7@user/v0id-7:62772) |
| 2026-04-13 15:32:17 | <Milan_Vanca> | Isn't that "shortcoming" of GHC to not remember that recursive datastructure was evaluated to NF completly? |
| 2026-04-13 15:32:26 | <Milan_Vanca> | Maybe it is infeasible to do so? |
| 2026-04-13 15:33:39 | <Milan_Vanca> | For that deepseq would need to be implemented in GHC and not just in term of seq maybe.. |
| 2026-04-13 15:34:33 | <Milan_Vanca> | [exa]: And maybe picture would clarify it for me. Could you please draw a picture? |
| 2026-04-13 15:36:00 | <__monty__> | Wouldn't that end up with a traversal of all the NF datastructures known about instead of the datastructure you actually care about? |
| 2026-04-13 15:39:50 | <Milan_Vanca> | __monty__: I don't think so.. we write force longList1 so that evaluates it all the way down right? or maybe only to [thunk, thunk] from thunk:thunk and not [1, 2] ? |
| 2026-04-13 15:41:52 | <Milan_Vanca> | Yeah it is probably like that...there might not be need to evaluate further just the list |
| 2026-04-13 15:44:20 | <c_wraith> | I wouldn't call it a shortcoming |
| 2026-04-13 15:45:42 | <c_wraith> | right now, a value at run time has states for "this has been evaluated to a constructor" and "this hasn't been evaluated". |
| 2026-04-13 15:46:11 | <c_wraith> | Adding a state for "this has been fully evaluated" would add overhead to every single (lifted) value in memory |
| 2026-04-13 15:49:36 | <c_wraith> | Especially since it's not actually clear when that flag would be set. Would `rnf' need special RTS integration to set it specially? Would it check every time a value is evaluated if that makes some parent fully evaluated? |
| 2026-04-13 15:51:44 | → | Guest62 joins (~Guest62@p200300ca8f398000a276c2fd551b1612.dip0.t-ipconnect.de) |
| 2026-04-13 15:52:46 | <c_wraith> | This isn't exactly automatic memoization, but it ends up sharing all the same issues. |
| 2026-04-13 15:54:40 | <c_wraith> | My advice is to never actually use `rnf' in real code. It's a handy debugging tool if you can't find the source of unevaluated expressions in your program, but it's not a good solution. |
| 2026-04-13 15:54:45 | <mauke> | a two-element list looks like x1@((:) x2 x3@((:) x4 x5)). each of those x's can hide more unevaluated work |
| 2026-04-13 15:55:59 | <[exa]> | Milan_Vanca: ok so I'll draw a picture in IRC :D |
| 2026-04-13 15:56:12 | <c_wraith> | Either prevent nested buildup of unevaluated expressions in the first place, or use an unlifted data type if you can't be bothered. |
| 2026-04-13 15:56:18 | <[exa]> | Milan_Vanca: the unevaluated problem looks like: D1 --> Thunk1 |
All times are in UTC.