Logs: liberachat/#haskell
| 2025-09-26 11:15:53 | <[exa]> | yeah you know what, I thought I can live with the ordering of the errors but I was hitting a problem where I didn't know what the useful maxima would be |
| 2025-09-26 11:16:09 | <[exa]> | now if I could have more maxima, I guess interpretation is gonna be harder but it solves the issue |
| 2025-09-26 11:17:12 | <tomsmeding> | perhaps a stupid slow but working version of that lattice approach is: type Errors = Set Error; then have `reduce :: Errors -> Errors` that loops over all pairs (e1, e2) in the set (i.e. it's O(n^2)) and if e1 < e2 in your partial order, then e1 is removed from the set |
| 2025-09-26 11:17:38 | <tomsmeding> | then you could choose to run `reduce` in the (<>) on Errors (if you make it a newtype), or you could run `reduce` at the end once only |
| 2025-09-26 11:17:59 | <tomsmeding> | you can probably do better than O(n^2) somehow, but this may well be "good enough" |
| 2025-09-26 11:18:07 | <tomsmeding> | you still have to define your partial order of course |
| 2025-09-26 11:18:09 | <[exa]> | I have one error where there's timeout in one service and auth failure in another, and both need to be handled (someone needs to tell admins to check credentials, and someone else needs to delay the retry), and they both occlude a few other errors/warnings |
| 2025-09-26 11:18:13 | <[exa]> | so yeah partial order it is |
| 2025-09-26 11:18:26 | <tomsmeding> | neat |
| 2025-09-26 11:18:32 | <tomsmeding> | math! |
| 2025-09-26 11:19:15 | <[exa]> | I might really want to reword the whole problem to recommendations instead of the error/exception wording, it makes interpretation much easier |
| 2025-09-26 11:19:34 | [exa] | goes back to the cave to rethink again |
| 2025-09-26 11:19:49 | <tomsmeding> | I don't think s/Error/Recommendation/g changes anything in the above |
| 2025-09-26 11:20:01 | <tomsmeding> | just makes all the names longer |
| 2025-09-26 11:20:37 | <tomsmeding> | also there's plenty precedent for errors not being fatal, see compiler errors |
| 2025-09-26 11:21:07 | <tomsmeding> | (that's not to say you should not do the rename in your case, I dunno the context and don't need to know it :P) |
| 2025-09-26 11:22:56 | <tomsmeding> | I wonder if there's a neat way to implement (<) on a partial order by only specifying the pairs that generate the order, i.e. without having to manually deal with transitivity |
| 2025-09-26 11:23:06 | → | CiaoSen joins (~Jura@2a02:8071:64e1:da0:5a47:caff:fe78:33db) |
| 2025-09-26 11:23:19 | → | merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl) |
| 2025-09-26 11:23:20 | <tomsmeding> | I guess that's called directed graph reachability |
| 2025-09-26 11:25:34 | → | wootehfoot joins (~wootehfoo@user/wootehfoot) |
| 2025-09-26 11:25:43 | × | lortabac quits (~lortabac@2a01:e0a:541:b8f0:55ab:e185:7f81:54a4) (Quit: WeeChat 4.5.2) |
| 2025-09-26 11:28:09 | <tomsmeding> | if you do my `reduce` in (<>), then you can reduce the O(n^2) to O(n * m) because you can assume that no redundancies exist within one argument to (<>) |
| 2025-09-26 11:28:43 | → | lortabac joins (~lortabac@2a01:e0a:541:b8f0:55ab:e185:7f81:54a4) |
| 2025-09-26 11:29:16 | × | wootehfoot quits (~wootehfoo@user/wootehfoot) (Client Quit) |
| 2025-09-26 11:29:38 | <merijn> | [exa]: I mean, the exception system lets you create hierarchical inheritance like behaviour for exceptions, so maybe try something along those lines? |
| 2025-09-26 11:32:00 | × | lortabac quits (~lortabac@2a01:e0a:541:b8f0:55ab:e185:7f81:54a4) (Client Quit) |
| 2025-09-26 11:32:35 | → | lortabac joins (~lortabac@2a01:e0a:541:b8f0:55ab:e185:7f81:54a4) |
| 2025-09-26 11:32:53 | → | Lord_of_Life_ joins (~Lord@user/lord-of-life/x-2819915) |
| 2025-09-26 11:33:01 | × | Lord_of_Life quits (~Lord@user/lord-of-life/x-2819915) (Ping timeout: 264 seconds) |
| 2025-09-26 11:33:19 | → | wootehfoot joins (~wootehfoo@user/wootehfoot) |
| 2025-09-26 11:34:19 | <tomsmeding> | merijn: if I'm understanding [exa]'s use case correctly, the idea is that an auth error in some component is useful to report (credentials should be fixed), and a timeout is also useful (retry may help), but if later we find out that something in the config of that component is just broken, the error "config should be fixed" overrides the other ones because a changed config changes everything |
| 2025-09-26 11:34:21 | <tomsmeding> | anyway |
| 2025-09-26 11:34:47 | <tomsmeding> | hence the partial-order-of-errors idea where you store only the maxima |
| 2025-09-26 11:35:41 | Lord_of_Life_ | is now known as Lord_of_Life |
| 2025-09-26 11:36:01 | × | lortabac quits (~lortabac@2a01:e0a:541:b8f0:55ab:e185:7f81:54a4) (Client Quit) |
| 2025-09-26 11:37:32 | → | lortabac joins (~lortabac@2a01:e0a:541:b8f0:55ab:e185:7f81:54a4) |
| 2025-09-26 11:38:40 | × | lortabac quits (~lortabac@2a01:e0a:541:b8f0:55ab:e185:7f81:54a4) (Client Quit) |
| 2025-09-26 11:40:08 | × | tromp quits (~textual@2001:1c00:3487:1b00:1c2c:dead:822d:e7f7) (Quit: My iMac has gone to sleep. ZZZzzz…) |
| 2025-09-26 11:40:52 | → | Googulator71 joins (~Googulato@81.183.235.203) |
| 2025-09-26 11:41:36 | Googulator71 | is now known as Googulator |
| 2025-09-26 11:43:59 | × | Googulator70 quits (~Googulato@81.183.235.203) (Ping timeout: 250 seconds) |
| 2025-09-26 11:44:01 | → | lortabac joins (~lortabac@2a01:e0a:541:b8f0:55ab:e185:7f81:54a4) |
| 2025-09-26 11:45:55 | <merijn> | tomsmeding: Right, but you can do that using hierarchical exceptions |
| 2025-09-26 11:46:12 | <merijn> | Since it just relies on a bunch of Typeable based projections |
| 2025-09-26 11:46:56 | × | trickard_ quits (~trickard@cpe-50-98-47-163.wireline.com.au) (Read error: Connection reset by peer) |
| 2025-09-26 11:47:10 | → | trickard_ joins (~trickard@cpe-50-98-47-163.wireline.com.au) |
| 2025-09-26 11:50:50 | × | sroso quits (~sroso@user/SrOso) (Quit: Leaving :)) |
| 2025-09-26 12:00:44 | → | Googulator26 joins (~Googulato@81.183.235.203) |
| 2025-09-26 12:02:56 | trickard_ | is now known as trickard |
| 2025-09-26 12:03:31 | × | ljdarj quits (~Thunderbi@user/ljdarj) (Ping timeout: 255 seconds) |
| 2025-09-26 12:04:21 | × | Googulator quits (~Googulato@81.183.235.203) (Ping timeout: 250 seconds) |
| 2025-09-26 12:05:05 | → | ljdarj joins (~Thunderbi@user/ljdarj) |
| 2025-09-26 12:05:45 | × | trickard quits (~trickard@cpe-50-98-47-163.wireline.com.au) (Read error: Connection reset by peer) |
| 2025-09-26 12:08:29 | → | trickard_ joins (~trickard@cpe-50-98-47-163.wireline.com.au) |
| 2025-09-26 12:09:29 | → | Lycurgus joins (~juan@user/Lycurgus) |
| 2025-09-26 12:14:34 | → | vanishingideal joins (~vanishing@user/vanishingideal) |
| 2025-09-26 12:16:41 | → | Enrico63 joins (~Enrico63@2a0b:e541:10d0:0:9efc:e8ff:fe24:3213) |
| 2025-09-26 12:20:38 | → | Googulator1 joins (~Googulato@81.183.235.203) |
| 2025-09-26 12:20:46 | → | Square2 joins (~Square@user/square) |
| 2025-09-26 12:23:51 | × | Googulator26 quits (~Googulato@81.183.235.203) (Ping timeout: 250 seconds) |
| 2025-09-26 12:26:25 | × | Square2 quits (~Square@user/square) (Ping timeout: 264 seconds) |
| 2025-09-26 12:36:57 | × | lortabac quits (~lortabac@2a01:e0a:541:b8f0:55ab:e185:7f81:54a4) (Quit: WeeChat 4.5.2) |
| 2025-09-26 12:40:42 | → | Googulator5 joins (~Googulato@81.183.235.203) |
| 2025-09-26 12:43:47 | × | Googulator1 quits (~Googulato@81.183.235.203) (Ping timeout: 250 seconds) |
| 2025-09-26 12:44:36 | → | lortabac joins (~lorenzo@mx1.fracta.dev) |
| 2025-09-26 12:51:02 | → | Googulator84 joins (~Googulato@81.183.235.203) |
| 2025-09-26 12:51:28 | trickard_ | is now known as trickard |
| 2025-09-26 12:54:11 | × | Googulator5 quits (~Googulato@81.183.235.203) (Ping timeout: 250 seconds) |
| 2025-09-26 12:55:41 | → | Googulator86 joins (~Googulato@81.183.235.203) |
| 2025-09-26 12:55:52 | × | ljdarj quits (~Thunderbi@user/ljdarj) (Ping timeout: 256 seconds) |
| 2025-09-26 12:58:57 | × | Googulator84 quits (~Googulato@81.183.235.203) (Ping timeout: 250 seconds) |
| 2025-09-26 13:04:31 | × | arandombit quits (~arandombi@user/arandombit) (Ping timeout: 250 seconds) |
| 2025-09-26 13:04:52 | → | Googulator40 joins (~Googulato@81.183.235.203) |
| 2025-09-26 13:08:03 | × | Googulator86 quits (~Googulato@81.183.235.203) (Ping timeout: 250 seconds) |
| 2025-09-26 13:08:08 | → | trampi joins (~trampi@mx.trampusch.info) |
| 2025-09-26 13:11:45 | → | tromp joins (~textual@2001:1c00:3487:1b00:1c2c:dead:822d:e7f7) |
| 2025-09-26 13:12:37 | × | trickard quits (~trickard@cpe-50-98-47-163.wireline.com.au) (Read error: Connection reset by peer) |
| 2025-09-26 13:13:55 | × | Enrico63 quits (~Enrico63@2a0b:e541:10d0:0:9efc:e8ff:fe24:3213) (Quit: Client closed) |
| 2025-09-26 13:15:15 | → | trickard_ joins (~trickard@cpe-50-98-47-163.wireline.com.au) |
| 2025-09-26 13:20:03 | → | humasect joins (~humasect@dyn-192-249-132-90.nexicom.net) |
| 2025-09-26 13:20:41 | → | Googulator46 joins (~Googulato@81.183.235.203) |
| 2025-09-26 13:23:44 | → | ljdarj joins (~Thunderbi@user/ljdarj) |
| 2025-09-26 13:24:05 | × | Googulator40 quits (~Googulato@81.183.235.203) (Ping timeout: 250 seconds) |
| 2025-09-26 13:25:13 | × | humasect quits (~humasect@dyn-192-249-132-90.nexicom.net) (Ping timeout: 264 seconds) |
| 2025-09-26 13:25:25 | trickard_ | is now known as trickard |
| 2025-09-26 13:27:39 | → | arandombit joins (~arandombi@user/arandombit) |
| 2025-09-26 13:28:24 | × | CiaoSen quits (~Jura@2a02:8071:64e1:da0:5a47:caff:fe78:33db) (Ping timeout: 252 seconds) |
| 2025-09-26 13:31:14 | → | lortabac_ joins (~lortabac@2a01:e0a:541:b8f0:55ab:e185:7f81:54a4) |
| 2025-09-26 13:31:24 | × | lortabac_ quits (~lortabac@2a01:e0a:541:b8f0:55ab:e185:7f81:54a4) (Client Quit) |
| 2025-09-26 13:32:11 | × | arandombit quits (~arandombi@user/arandombit) (Ping timeout: 265 seconds) |
| 2025-09-26 13:36:21 | × | pavonia quits (~user@user/siracusa) (Quit: Bye!) |
| 2025-09-26 13:39:32 | → | Enrico63 joins (~Enrico63@2a0b:e541:10d0:0:9efc:e8ff:fe24:3213) |
| 2025-09-26 13:44:01 | → | ft_ joins (~ft@p4fc2a225.dip0.t-ipconnect.de) |
| 2025-09-26 13:44:12 | → | arandombit joins (~arandombi@user/arandombit) |
| 2025-09-26 13:45:59 | → | Googulator29 joins (~Googulato@81.183.235.203) |
| 2025-09-26 13:49:13 | × | Googulator46 quits (~Googulato@81.183.235.203) (Ping timeout: 250 seconds) |
| 2025-09-26 13:50:35 | → | Googulator90 joins (~Googulato@81.183.235.203) |
| 2025-09-26 13:53:59 | × | Googulator29 quits (~Googulato@81.183.235.203) (Ping timeout: 250 seconds) |
| 2025-09-26 13:55:42 | → | Googulator75 joins (~Googulato@81.183.235.203) |
All times are in UTC.