2025/02/10

Newest at the top

2025-02-10 15:31:16 +0100CiaoSen(~Jura@ip-037-201-241-067.um10.pools.vodafone-ip.de) CiaoSen
2025-02-10 15:30:42 +0100 <euouae> Though lenses do make Haskell look like APL a bit, they are really cool. Like view/span of C++ but more powerful and expressive
2025-02-10 15:29:40 +0100acidjnk_new3(~acidjnk@p200300d6e7283f99c4dbaee3a15423f1.dip0.t-ipconnect.de) acidjnk
2025-02-10 15:29:09 +0100 <euouae> I've already written this app in the past in Python so it'll be exciting to see how much I can improve with Haskell
2025-02-10 15:28:51 +0100alfiee(~alfiee@user/alfiee) alfiee
2025-02-10 15:28:51 +0100 <euouae> Doing some leetcode I realized I wanted something that looked a lot like lenses so I got a book on them (penner's optics by example) and after that I'll try writing a web app
2025-02-10 15:27:58 +0100 <euouae> I read half of the STG paper before I felt that I've been going to deep for my own good
2025-02-10 15:24:52 +0100jespada(~jespada@2800:a4:2243:2100:5cc9:2329:b53c:b25f) (Quit: My Mac has gone to sleep. ZZZzzz…)
2025-02-10 15:24:48 +0100 <dminuoso> Its just that in my parser, each step produces a bytestring buffer, and I refocus (not with the primitive I linked above, that one is a bit more special) into that slice.
2025-02-10 15:24:04 +0100 <dminuoso> (Which is just a path description of the decoding tree)
2025-02-10 15:23:53 +0100 <dminuoso> Plus some labels and context as to what that Int, Bool or String is.
2025-02-10 15:23:40 +0100 <dminuoso> until you reach a primitive, and then that primitive gets turned into Int, Bool, String
2025-02-10 15:23:19 +0100koz(~koz@121.99.240.58)
2025-02-10 15:23:18 +0100 <dminuoso> essentially it's slowly zooming into a bytestring buffer (though that zooming action sometimes includes fusing some chunks together over the parsing)
2025-02-10 15:22:58 +0100 <haskellbridge> <Profpatsch> Ah, I see
2025-02-10 15:22:40 +0100 <dminuoso> What I do is still a kind of vertical parsing in that sense.
2025-02-10 15:22:34 +0100 <dminuoso> haskellbridge: No I get the idea of vertical parsing.
2025-02-10 15:22:26 +0100 <haskellbridge> <Profpatsch> 420 :)
2025-02-10 15:22:20 +0100 <haskellbridge> <Profpatsch> dminuoso: fwiw I’m not talking conventional parsers (stream of tokens to data struct) but “vertical” parsers (value of high entropy to value of lower entropy)
2025-02-10 15:22:12 +0100 <dminuoso> Profpatsch: We should compare notes when I have a little more time, I gotta blaze.
2025-02-10 15:21:53 +0100 <dminuoso> s/ready/read/
2025-02-10 15:21:44 +0100 <dminuoso> This should have been named :.:
2025-02-10 15:21:34 +0100 <dminuoso> Gah I find prefix Compose hard to ready.
2025-02-10 15:21:05 +0100 <dminuoso> (But its limited to when each stage expects a bytestring)
2025-02-10 15:20:56 +0100 <haskellbridge> <Profpatsch> but never got to a point where I think it’s super interesting for the general use-case
2025-02-10 15:20:44 +0100 <dminuoso> Which makes this >>> notion really simple to do.
2025-02-10 15:20:40 +0100 <haskellbridge> <Profpatsch> dminuoso: I tried abstracting the pattern of creating these kinds of parsers a little with https://code.tvl.fyi/tree/users/Profpatsch/my-prelude/src/ValidationParseT.hs
2025-02-10 15:20:33 +0100 <dminuoso> And with that, I have this super trivial refocus function: https://gist.github.com/dminuoso/e9026b66182bd438910c895184b97ad5
2025-02-10 15:19:54 +0100 <dminuoso> Because I like the sheer simplicity of that interface.
2025-02-10 15:19:48 +0100 <dminuoso> Mine is directly bolted onto flatparse
2025-02-10 15:19:47 +0100 <haskellbridge> <Profpatsch> It nearly-but-not-quite fits
2025-02-10 15:19:34 +0100 <haskellbridge> <Profpatsch> that throws away errors
2025-02-10 15:19:27 +0100 <haskellbridge> <Profpatsch> Ah yeah, you can have a specialized "bind" function usually
2025-02-10 15:19:12 +0100 <dminuoso> Though I guess I could make it work too.
2025-02-10 15:18:54 +0100 <haskellbridge> <Profpatsch> I don’t like the abstraction very much, but it’s useful for e.g. parsing XML
2025-02-10 15:18:54 +0100sawilagar(~sawilagar@user/sawilagar) sawilagar
2025-02-10 15:18:52 +0100 <dminuoso> No, its definitely monadic.
2025-02-10 15:18:22 +0100 <haskellbridge> <Profpatsch> dminuoso: something like this? https://code.tvl.fyi/tree/users/Profpatsch/my-prelude/src/Parse.hs
2025-02-10 15:18:22 +0100 <dminuoso> Which is important since the decoding rules are sort of passed in at runtime.
2025-02-10 15:18:06 +0100 <dminuoso> (So I maintain a decoding tree, and while Im parsing Im recursing into my parser function)
2025-02-10 15:18:01 +0100 <haskellbridge> <Profpatsch> always a trade-off between unbounded memory usage and good error messages
2025-02-10 15:17:39 +0100 <haskellbridge> <Profpatsch> yeah I experimented with this as well
2025-02-10 15:17:25 +0100 <dminuoso> I'm doing something like this but the >>> structure follows a tree, based on parsing values.
2025-02-10 15:17:20 +0100 <haskellbridge> <Profpatsch> the best abstractions are cute and kinda silly :)
2025-02-10 15:17:10 +0100koz(~koz@121.99.240.58) (Ping timeout: 252 seconds)
2025-02-10 15:16:54 +0100 <dminuoso> This is kind of cute.
2025-02-10 15:16:47 +0100otbergsten(~otbergste@user/otbergsten) (Remote host closed the connection)
2025-02-10 15:16:39 +0100 <haskellbridge> <Profpatsch> it’s super simple but surprisingly versatile
2025-02-10 15:16:14 +0100 <haskellbridge> <Profpatsch> (utf8 >>> signedDecimal) :: FieldParser ByteString Integer
2025-02-10 15:15:48 +0100 <haskellbridge> <Profpatsch> dminuoso: composite parsing for simple values