Logs: liberachat/#haskell
| 2025-10-04 18:15:20 | × | merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 240 seconds) |
| 2025-10-04 18:15:33 | → | Sgeo joins (~Sgeo@user/sgeo) |
| 2025-10-04 18:26:14 | → | merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl) |
| 2025-10-04 18:30:16 | → | akgreene joins (~akgreene@fixed-187-189-181-196.totalplay.net) |
| 2025-10-04 18:31:13 | × | merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 264 seconds) |
| 2025-10-04 18:32:17 | → | Razorrats joins (~Razorrats@pool-68-134-85-215.bltmmd.fios.verizon.net) |
| 2025-10-04 18:33:24 | × | Razorrats quits (~Razorrats@pool-68-134-85-215.bltmmd.fios.verizon.net) (Remote host closed the connection) |
| 2025-10-04 18:33:38 | → | CecePhuongNguyen joins (~CecePhuon@syn-071-076-201-204.res.spectrum.com) |
| 2025-10-04 18:33:58 | → | jmcantrell joins (~weechat@user/jmcantrell) |
| 2025-10-04 18:34:10 | × | CecePhuongNguyen quits (~CecePhuon@syn-071-076-201-204.res.spectrum.com) (Remote host closed the connection) |
| 2025-10-04 18:34:25 | → | Enubion joins (~Enubion@38.13.166.133) |
| 2025-10-04 18:36:04 | × | akgreene quits (~akgreene@fixed-187-189-181-196.totalplay.net) (Remote host closed the connection) |
| 2025-10-04 18:36:04 | × | Enubion quits (~Enubion@38.13.166.133) (Remote host closed the connection) |
| 2025-10-04 18:36:08 | × | superstar64 quits (~superstar@2600:1700:57e0:e3c0::31) (Quit: Leaving) |
| 2025-10-04 18:36:59 | → | humasect joins (~humasect@dyn-192-249-132-90.nexicom.net) |
| 2025-10-04 18:39:33 | → | Everything joins (~Everythin@172.232.54.192) |
| 2025-10-04 18:39:42 | → | superstar64 joins (~superstar@2600:1700:57e0:e3c0::31) |
| 2025-10-04 18:41:37 | → | merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl) |
| 2025-10-04 18:46:13 | × | merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 264 seconds) |
| 2025-10-04 18:49:20 | × | qqe quits (~qqq@185.54.22.40) (Quit: Lost terminal) |
| 2025-10-04 18:55:38 | → | acidjnk joins (~acidjnk@p200300d6e7171975ac9a50397945f9ef.dip0.t-ipconnect.de) |
| 2025-10-04 18:57:05 | → | merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl) |
| 2025-10-04 19:00:01 | × | caconym74787 quits (~caconym@user/caconym) (Quit: bye) |
| 2025-10-04 19:00:42 | → | caconym74787 joins (~caconym@user/caconym) |
| 2025-10-04 19:04:04 | × | merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 260 seconds) |
| 2025-10-04 19:06:28 | × | Enrico63 quits (~Enrico63@2a0b:e541:10d0:0:9efc:e8ff:fe24:3213) (Quit: Client closed) |
| 2025-10-04 19:13:04 | → | tzh joins (~tzh@c-76-115-131-146.hsd1.or.comcast.net) |
| 2025-10-04 19:15:09 | → | merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl) |
| 2025-10-04 19:19:34 | × | merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 255 seconds) |
| 2025-10-04 19:27:30 | → | VictorHugenay joins (~VictorHug@user/VictorHugenay) |
| 2025-10-04 19:30:32 | → | merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl) |
| 2025-10-04 19:30:35 | → | bwani54 joins (~bwani54@user/bwani54) |
| 2025-10-04 19:35:20 | × | vanishingideal quits (~vanishing@user/vanishingideal) (Ping timeout: 240 seconds) |
| 2025-10-04 19:35:25 | × | merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 264 seconds) |
| 2025-10-04 19:41:17 | → | Lycurgus joins (~juan@user/Lycurgus) |
| 2025-10-04 19:41:23 | → | alteragent joins (~alteragen@177.249.162.28) |
| 2025-10-04 19:41:28 | <alteragent> | [Network Announcement] AMERICA NEEDS YOU - Secure our borders, get a signing bonus, enter the federal workforce and subvert the swamp from within, no degree required. https://join.ice.gov |
| 2025-10-04 19:41:41 | ChanServ | sets mode +o geekosaur |
| 2025-10-04 19:41:50 | geekosaur | sets mode +b *!*@177.249.162.28 |
| 2025-10-04 19:41:50 | alteragent | is kicked by geekosaur (alteragent) |
| 2025-10-04 19:42:31 | <sm> | seriously ??? |
| 2025-10-04 19:42:39 | <Lycurgus> | yeah, why here? |
| 2025-10-04 19:42:53 | <geekosaur> | also, fake network announcement |
| 2025-10-04 19:43:13 | × | lxsameer quits (~lxsameer@Serene/lxsameer) (Ping timeout: 264 seconds) |
| 2025-10-04 19:43:22 | <geekosaur> | (which also ignores that this isn't a US-only service) |
| 2025-10-04 19:43:31 | geekosaur | sets mode -o geekosaur |
| 2025-10-04 19:46:02 | → | merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl) |
| 2025-10-04 19:50:26 | × | merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 256 seconds) |
| 2025-10-04 19:52:02 | ChanServ | sets mode +o litharge |
| 2025-10-04 19:52:02 | litharge | sets mode -bo *!*@177.249.162.28 litharge |
| 2025-10-04 19:54:39 | × | VictorHugenay quits (~VictorHug@user/VictorHugenay) (Quit: Konversation terminated!) |
| 2025-10-04 20:01:25 | → | merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl) |
| 2025-10-04 20:05:43 | × | merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 240 seconds) |
| 2025-10-04 20:07:07 | <bwe> | tomsmeding: true, I just need to extend it by a state that tracks whether it's currently in a number |
| 2025-10-04 20:11:41 | <bwe> | Leary: I had parser combinators in mind, too; yet I had no first vague idea how to approach it with them. If you can relate a similar example to me, that would help. |
| 2025-10-04 20:12:35 | <bwe> | (I mean, I define a parser that matches and just need to combine them with <|> in the right precedence, is that it?) |
| 2025-10-04 20:13:14 | <bwe> | (and on a more basic note, how do I make a condition like "anything but not a digit" with Megaparsec?) |
| 2025-10-04 20:13:46 | <tomsmeding> | `satisfy isDigit`? |
| 2025-10-04 20:13:57 | <tomsmeding> | also `digit` probably |
| 2025-10-04 20:15:00 | <bwe> | so the negation would be `anySingleBut` ? |
| 2025-10-04 20:15:19 | <tomsmeding> | satisfy (not . isDigit)? |
| 2025-10-04 20:15:31 | <bwe> | of course :) |
| 2025-10-04 20:15:36 | <tomsmeding> | "anything but not a digit" is a double negation :p |
| 2025-10-04 20:15:55 | <tomsmeding> | so I guess you were asking for `satisfy (not . not . isDigit)` :p |
| 2025-10-04 20:16:08 | <sprout> | this is weirdly satisfying |
| 2025-10-04 20:16:42 | <bwe> | tomsmeding: I clarify, single negation, so `satisfy (not . isDigit)` is what I need |
| 2025-10-04 20:16:53 | → | merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl) |
| 2025-10-04 20:17:42 | <bwe> | is there some list of parser combinator tutorials you can recommend? |
| 2025-10-04 20:18:01 | <tomsmeding> | megaparsec has an official tutorial, if I remember correctly |
| 2025-10-04 20:18:15 | <tomsmeding> | I don't remember people saying it's bad, so it must be good, right? |
| 2025-10-04 20:18:45 | <bwe> | the thing I am not grasping is the nesting, so using some parser combinators once I am in the parenthesis, for example |
| 2025-10-04 20:19:59 | <bwe> | I need to give it another try -- the last time I tried it didn't work too well for me |
| 2025-10-04 20:20:28 | <zfnmxt> | bwe: You mind find these notes a bit gentler and easier to understand (there are corresponding exercises and an assignment on the repo too): https://diku-dk.github.io/ap-notes/chapter_3.html |
| 2025-10-04 20:21:10 | × | merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 245 seconds) |
| 2025-10-04 20:21:30 | <tomsmeding> | zfnmxt: thank you, please hang around more and share all your good stuffs |
| 2025-10-04 20:22:08 | <zfnmxt> | bwe: Don't think the repo is directly linked there, but it's here: https://github.com/diku-dk/ap-e2025-pub (see week 3 and a3 in particular) |
| 2025-10-04 20:22:48 | <zfnmxt> | tomsmeding: Most of that good stuff is written by Troels, not me. But will do. |
| 2025-10-04 20:23:28 | <tomsmeding> | "your" as in, the good stuff that you know :p |
| 2025-10-04 20:26:03 | <bwe> | zfnmxt: Exciting. I will start with that. It's indeed much more gentle and easier to digest/follow. Less frustration points to be expected. |
| 2025-10-04 20:29:30 | <zfnmxt> | bwe: Have fun! |
| 2025-10-04 20:32:19 | → | merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl) |
| 2025-10-04 20:35:05 | <[exa]> | evenin' |
| 2025-10-04 20:38:37 | <[exa]> | bwe: if I get it right, you might like the `notFollowedBy` from parsecs for solving this case; since this is PEGs getting parsed you can use the lookahead pretty well for doing good. |
| 2025-10-04 20:38:56 | × | merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 240 seconds) |
| 2025-10-04 20:41:15 | → | Enrico63 joins (~Enrico63@2a0b:e541:10d0:0:9efc:e8ff:fe24:3213) |
| 2025-10-04 20:43:28 | → | target_i joins (~target_i@user/target-i/x-6023099) |
| 2025-10-04 20:43:58 | <bwe> | [exa]: Yes, this would fit my case, too. Reminds me of regular expressions. But weren't parser combinators better for leaving regular expressions? |
| 2025-10-04 20:44:00 | × | dfg quits (~dfg@user/dfg) (Quit: I hate quit messages.) |
| 2025-10-04 20:44:29 | <[exa]> | wait wait how's lookahead looking like regular expressions? |
| 2025-10-04 20:44:43 | <[exa]> | (except for the cool new regular expressions that are actually not regular) |
| 2025-10-04 20:44:46 | sprout | 🍿 |
| 2025-10-04 20:45:27 | → | dfg joins (~dfg@user/dfg) |
| 2025-10-04 20:46:09 | <bwe> | zfnmxt: I have the feeling that composing parsers is just the nesting use case I have on hand :) -- but will see when I walk through the article. Thanks again for sharing. |
| 2025-10-04 20:46:37 | × | takuan quits (~takuan@d8D86B9E9.access.telenet.be) (Remote host closed the connection) |
| 2025-10-04 20:46:40 | <monochrom> | I feel that most beginner uses of lookahead are boolean blindness brought to parsing. |
| 2025-10-04 20:47:32 | → | vanishingideal joins (~vanishing@user/vanishingideal) |
| 2025-10-04 20:47:59 | <monochrom> | Suppose your requirement is "there are 2 cases for the next character. If it's X, parse for foo; if it's Y, parse for bar". |
| 2025-10-04 20:48:28 | <monochrom> | You can easily code that up as simply "foo <|> bar" assuming that foo expects X at the beginning, similarly for Y. |
| 2025-10-04 20:49:05 | <bwe> | monochrom: actually, parser combinators are like a tree that is branching, thanks for inspiring this. |
| 2025-10-04 20:49:14 | <monochrom> | But no, beginners want to write "c <- lookahead; if c == 'X' then foo else if c == 'Y' then bar else error" because that's what they would write in C. |
All times are in UTC.