2025-04-11 00:00:24 +0200 | <EvanR> | though linear base does |
2025-04-11 00:00:37 +0200 | <hellwolf> | thinking about it, isn't State monad a nice way of bypassing the need of that threading for that use case? |
2025-04-11 00:01:23 +0200 | <monochrom> | But I defy your false dichotomy. I estimate which one is shorter and go with it: manual threading like that vs using State. |
2025-04-11 00:02:31 +0200 | <monochrom> | You see, there are always some annoying people like me who always answers "it depends". |
2025-04-11 00:03:06 +0200 | <monochrom> | Ruining any rule of thumb, style guide, doctrine, dogma, ideology. |
2025-04-11 00:03:10 +0200 | <hellwolf> | today, I actually managed to implement a different threading-hiding solution for lineartypes. Though, the Ur pattern makes most of the problem going away anyways; mine is for something different. |
2025-04-11 00:03:42 +0200 | <hellwolf> | I like it depends, as long as it's explained clearly. |
2025-04-11 00:04:22 +0200 | <monochrom> | I guess except for the it-depends ideology. :) |
2025-04-11 00:04:35 +0200 | <monochrom> | itdependism |
2025-04-11 00:04:45 +0200 | <hellwolf> | changing-goal-post as a merit. |
2025-04-11 00:04:56 +0200 | <Guest87> | int-e monochrom okay, I have a similar implementation ready for haskell, though i am doing it in a text editor so I apologize for any typos |
2025-04-11 00:04:58 +0200 | <hellwolf> | principle as a sin. |
2025-04-11 00:05:30 +0200 | <hellwolf> | (tongue-in-cheek here. personally, I much prefer principle first) |
2025-04-11 00:05:49 +0200 | <Guest87> | data Task = Task {programToRun :: String, input :: String} |
2025-04-11 00:05:49 +0200 | <Guest87> | data Pipeline = Pipeline {initialTask :: String, steps :: [String -> Task]} |
2025-04-11 00:05:50 +0200 | <Guest87> | makePipeline task = Pipeline task [] |
2025-04-11 00:05:50 +0200 | <Guest87> | addStep pipeline step = Pipeline (initialTask pipeline) (steps pipeline <> [step]) |
2025-04-11 00:05:51 +0200 | <Guest87> | runTask :: Task -> IO (Either String Task) |
2025-04-11 00:05:51 +0200 | <Guest87> | run pipeline = do |
2025-04-11 00:05:52 +0200 | <Guest87> | case (steps pipeline) of |
2025-04-11 00:05:52 +0200 | <Guest87> | [] -> putStrLn "done" |
2025-04-11 00:05:53 +0200 | <Guest87> | [f:nxt] -> (beginRun nxt) . f . initialTask $ pipeline |
2025-04-11 00:05:53 +0200 | <Guest87> | beginRun next task = do |
2025-04-11 00:05:53 +0200 | <EvanR> | aaaaaaaa |
2025-04-11 00:05:54 +0200 | <Guest87> | step <- runTask task |
2025-04-11 00:05:54 +0200 | <Guest87> | case step of |
2025-04-11 00:05:55 +0200 | <Guest87> | Left res -> case next of |
2025-04-11 00:05:55 +0200 | <Guest87> | [] -> putStrLn "done" |
2025-04-11 00:05:56 +0200 | <Guest87> | [f:nxt] -> beginRun nxt (f res) |
2025-04-11 00:05:56 +0200 | <Guest87> | Right t -> beginRun next t |
2025-04-11 00:05:59 +0200 | <hellwolf> | stooooop |
2025-04-11 00:06:11 +0200 | <Guest87> | Ugh I should paste in a gist :( |
2025-04-11 00:06:12 +0200 | <hellwolf> | https://paste.tomsmeding.com/ |
2025-04-11 00:06:19 +0200 | <Guest87> | Or there, thank you hellwolf |
2025-04-11 00:06:41 +0200 | <Guest87> | https://paste.tomsmeding.com/tggksoJO |
2025-04-11 00:06:52 +0200 | <geekosaur> | IRC is absolutely terrible for code, and too old to support things like code blocks |
2025-04-11 00:07:05 +0200 | <Guest87> | I am too used to discord and other chats I think |
2025-04-11 00:07:18 +0200 | <EvanR> | IRC gets new features all the time |
2025-04-11 00:07:22 +0200 | <EvanR> | soon... code blocks |
2025-04-11 00:07:23 +0200 | <haskellbridge> | <maralorn> hellwolf: I will try to use monadic-bang I have been hoping for something like it for a long time and had kinda forgotten about the plugin. |
2025-04-11 00:07:28 +0200 | <EvanR> | and animated premium emojis |
2025-04-11 00:08:28 +0200 | <haskellbridge> | <maralorn> Is this an IRC nitro pro channel? |
2025-04-11 00:08:29 +0200 | <Guest87> | So, the problem/annoyance I have is that I want to [String -> Task] to be somehow squashed into a single (String -> Task) |
2025-04-11 00:09:26 +0200 | <EvanR> | Monoid m => Monoid (a -> m) |
2025-04-11 00:09:38 +0200 | <hellwolf> | maralorn: nice! It seems actively maintained, which is a good sign. |
2025-04-11 00:09:42 +0200 | <EvanR> | mconcat :: [a -> m] -> a -> m |
2025-04-11 00:09:52 +0200 | <EvanR> | if Task were a Monoid |
2025-04-11 00:10:12 +0200 | <haskellbridge> | <maralorn> Doesn't look like a monoid to me. |
2025-04-11 00:10:30 +0200 | <monochrom> | [String -> Maybe Task] is much more squashable. |
2025-04-11 00:11:01 +0200 | <haskellbridge> | <maralorn> Would String -> [Task] be an option that looks more feasible. |
2025-04-11 00:11:07 +0200 | <monochrom> | which is still repeating what we said before --- undefined is not very workable with in the first place. Use Nothing. |
2025-04-11 00:12:00 +0200 | <EvanR> | [Task] be a monoid |
2025-04-11 00:12:16 +0200 | <monochrom> | Oh yeah Maybe Task is too. Same difference :) |
2025-04-11 00:12:31 +0200 | <EvanR> | pick your squash |
2025-04-11 00:12:37 +0200 | <monochrom> | Also there are First and Last for overriding or not overriding existing mappings. |
2025-04-11 00:13:22 +0200 | <monochrom> | Also did you know that flip (++) is also a monoid operator :) |
2025-04-11 00:14:18 +0200 | rbdr | (~rbdr@dynamic-089-012-130-183.89.12.pool.telefonica.de) (Quit: WeeChat 4.6.0) |
2025-04-11 00:14:51 +0200 | <Guest87> | My current solution does the following: |
2025-04-11 00:14:52 +0200 | <Guest87> | https://paste.tomsmeding.com/8E9is43S |
2025-04-11 00:15:38 +0200 | <Guest87> | It works well, but the only problem is that `n` `addCont` calls means I have to unwrap `n-1` layers to get to the actual next step |
2025-04-11 00:16:33 +0200 | <EvanR> | well if you're always operating on only one end of this list |
2025-04-11 00:16:49 +0200 | <EvanR> | better make that end the list beginning |
2025-04-11 00:17:03 +0200 | machinedgod | (~machinedg@d108-173-18-100.abhsia.telus.net) (Ping timeout: 245 seconds) |
2025-04-11 00:18:11 +0200 | <EvanR> | if you operate on both ends equally often, there is the functional queue ([Task],[Task]) where one list is backwards |
2025-04-11 00:19:15 +0200 | <Guest87> | Always operating on one end |
2025-04-11 00:20:19 +0200 | <EvanR> | that being said if "n" is not that much it probably doesn't matter either way |
2025-04-11 00:20:50 +0200 | <Guest87> | I am worried some code reviewer will shoot this whole solution down regardless of what `n` is :/ |
2025-04-11 00:21:16 +0200 | <EvanR> | boils down to annoying the reader again |
2025-04-11 00:21:16 +0200 | <Guest87> | But also, I could just do the list implementation if that happens |
2025-04-11 00:21:50 +0200 | <Guest87> | Realizing how different/poorly statement my original problem was |
2025-04-11 00:22:21 +0200 | <Guest87> | Now that the context is here, the problem statement would be "Is there a way to do `addCont` without this unwrapping behavior?" |
2025-04-11 00:22:30 +0200 | <EvanR> | step 1. understand the question |
2025-04-11 00:22:35 +0200 | <EvanR> | step 0. write a proper question |
2025-04-11 00:23:39 +0200 | <EvanR> | you are shadowing t twice in your code so it's hard to grok what is going on |
2025-04-11 00:24:12 +0200 | Square | (~Square4@user/square) Square |
2025-04-11 00:24:25 +0200 | <haskellbridge> | <loonycyborg> you don't even have a list of tasks |
2025-04-11 00:24:31 +0200 | <haskellbridge> | <loonycyborg> only a way to calculate them |
2025-04-11 00:25:27 +0200 | __monty__ | (~toonn@user/toonn) (Quit: leaving) |
2025-04-11 00:25:57 +0200 | <EvanR> | alright addCont takes what seems to be an error handler and a program name / input string. Then it calls continue but but continue doesn't return an Either as far as I can tell |
2025-04-11 00:26:03 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn |
2025-04-11 00:26:35 +0200 | <monochrom> | list of length n is just as inefficient as function chain of length n. |
2025-04-11 00:27:17 +0200 | <EvanR> | but if fixed maybe this addCont produces a sort of recursive "object" as in OOP. But only a single one, not adding anything to anything |
2025-04-11 00:27:27 +0200 | <monochrom> | If there is a code reviewer who does not treat both equally, well, I guess that's why you're paid to appease an arbitrary code reviewer. |
2025-04-11 00:27:29 +0200 | Square2 | (~Square@user/square) (Ping timeout: 260 seconds) |
2025-04-11 00:28:12 +0200 | <Guest87> | EvanR damn yea, the shadowing is real bad. Here is the full code without shadowing |
2025-04-11 00:28:13 +0200 | <Guest87> | https://paste.tomsmeding.com/4T0PUPHR |
2025-04-11 00:28:47 +0200 | <EvanR> | still, continue returns a Task, not a function to apply input to |
2025-04-11 00:28:52 +0200 | <EvanR> | much less returning an Either |
2025-04-11 00:29:15 +0200 | <EvanR> | though if you install GHC you would already know this |
2025-04-11 00:29:54 +0200 | <haskellbridge> | <loonycyborg> honestly I'd recommend adding type annotations :P |
2025-04-11 00:30:20 +0200 | <EvanR> | Right t2 seems to have a new string, but then you pass it into the recursive call where a function was supposed to be |
2025-04-11 00:30:44 +0200 | <Guest87> | Ah crap, this is what I get for trying to port non-pure code without a type checker |
2025-04-11 00:30:45 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 248 seconds) |
2025-04-11 00:31:00 +0200 | <EvanR> | in addStep you use f but f is not introduced anywhere |
2025-04-11 00:31:46 +0200 | lxsameer | (~lxsameer@Serene/lxsameer) (Ping timeout: 252 seconds) |
2025-04-11 00:32:57 +0200 | <EvanR> | yeah a type signature for addCont and addStep ok all top level definitions here would go a long way |
2025-04-11 00:33:52 +0200 | <Guest87> | Thank you for feedback, adding those |
2025-04-11 00:40:31 +0200 | roconnor | (~quassel@rocq/roconnor) (Ping timeout: 265 seconds) |
2025-04-11 00:41:45 +0200 | roconnor | (~quassel@rocq/roconnor) roconnor |
2025-04-11 00:41:51 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn |
2025-04-11 00:43:22 +0200 | <Guest87> | Holy shit haskell playground is a thing now |
2025-04-11 00:46:44 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 260 seconds) |
2025-04-11 00:47:44 +0200 | <EvanR> | > let tasks = [(++ "!"), (++ "world"), (++ " "), (++ "Hello")] in foldl (.) id tasks "" |
2025-04-11 00:47:46 +0200 | <lambdabot> | "Hello world!" |
2025-04-11 00:48:02 +0200 | <EvanR> | operating on the beginning of this list is operating on the "last task" |
2025-04-11 00:48:11 +0200 | cheater | (~Username@user/cheater) (Quit: Going offline, see ya! (www.adiirc.com)) |
2025-04-11 00:50:16 +0200 | <EvanR> | foldl (.) id combines them "first task" first |
2025-04-11 00:52:00 +0200 | <EvanR> | the "" at the end is the initial input |
2025-04-11 00:53:24 +0200 | hattckory | (~hattckory@bras-base-toroon4524w-grc-30-70-27-118-207.dsl.bell.ca) (Ping timeout: 276 seconds) |
2025-04-11 00:54:44 +0200 | <EvanR> | > foldl (.) id [t4, t3, t2, t1] initial |
2025-04-11 00:54:45 +0200 | <lambdabot> | error: |
2025-04-11 00:54:45 +0200 | <lambdabot> | • Variable not in scope: t4 :: c -> c |
2025-04-11 00:54:45 +0200 | <lambdabot> | • Perhaps you meant one of these: |
2025-04-11 00:55:11 +0200 | <EvanR> | > foldl (.) id [z, y, x, w] initial |
2025-04-11 00:55:13 +0200 | <lambdabot> | error: Variable not in scope: initial |
2025-04-11 00:55:16 +0200 | <EvanR> | > foldl (.) id [z, y, x, w] i |
2025-04-11 00:55:17 +0200 | <lambdabot> | error: |
2025-04-11 00:55:17 +0200 | <lambdabot> | • Couldn't match expected type ‘Expr -> Expr’ |
2025-04-11 00:55:17 +0200 | <lambdabot> | with actual type ‘Expr’ |
2025-04-11 00:56:14 +0200 | <EvanR> | > foldl (.) id [h, g, f] i |
2025-04-11 00:56:16 +0200 | <lambdabot> | h (g (f i)) |
2025-04-11 00:57:38 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn |
2025-04-11 00:59:22 +0200 | <Guest87> | Okay, very sorry for the previous code. Here is it with ghc |
2025-04-11 00:59:23 +0200 | <Guest87> | https://play.haskell.org/saved/RpqxGbLD |
2025-04-11 01:01:34 +0200 | <haskellbridge> | <loonycyborg> you can turn [IO Task] into IO [Task] using "sequence" function |
2025-04-11 01:03:04 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 276 seconds) |
2025-04-11 01:03:39 +0200 | <haskellbridge> | <loonycyborg> probably clearer would be to build a list of them and then sequence it |
2025-04-11 01:03:47 +0200 | <EvanR> | alright you have the issue that the meat of your post never happens since beginRun never gets around to it |
2025-04-11 01:03:54 +0200 | <EvanR> | but yeah |
2025-04-11 01:06:01 +0200 | <EvanR> | I presume you want the result of each task to be threaded into the next one |
2025-04-11 01:06:54 +0200 | <Guest87> | +haskellbridge I think what you are describing is what I concluded to be the way to do this efficiently, but I also don't have an intuition for what "sequencing something" means, so I am not sure |
2025-04-11 01:06:57 +0200 | <EvanR> | [String -> IO (Either String String)] |
2025-04-11 01:07:24 +0200 | <EvanR> | this function stands for a Task without the explicit type for it |
2025-04-11 01:07:37 +0200 | <EvanR> | the list can be combined using a fold |
2025-04-11 01:08:13 +0200 | <EvanR> | to get a final String -> IO (Either String String) to run on the initial input |
2025-04-11 01:08:29 +0200 | peterbecich | (~Thunderbi@syn-047-229-123-186.res.spectrum.com) peterbecich |
2025-04-11 01:09:00 +0200 | <emojelly> | Remember my performance drama, where profiling didn't help? I think I found at least part of the issue, through experimentation. |
2025-04-11 01:09:15 +0200 | sprotte24_ | (~sprotte24@p200300d16f15a4001c8bedf899879cb7.dip0.t-ipconnect.de) (Quit: Leaving) |
2025-04-11 01:09:20 +0200 | <emojelly> | It seems to be related to how many Monad Transformers I layer. Partly also what those Monad Transformers are. |
2025-04-11 01:09:24 +0200 | <Guest87> | EvanR correct. Running a single Task could require running more Task until the final result is obtained |
2025-04-11 01:09:28 +0200 | <emojelly> | It seems to grow hyperlinearly with each transformer. |
2025-04-11 01:10:35 +0200 | <emojelly> | I tried with an onion made of a few IdentityTs and Either, and it's enough to blow the runtime up massively. |
2025-04-11 01:10:46 +0200 | <Guest87> | So having a list of Task is the correct thing to do here instead of "squashing it all up" into one Task? |
2025-04-11 01:10:58 +0200 | <EvanR> | the list is there so you can edit it |
2025-04-11 01:11:08 +0200 | <EvanR> | if it was a fixed sequence of tasks you wouldn't need it |
2025-04-11 01:11:57 +0200 | <emojelly> | I'm now rewriting my Coroutine-code in Pipes, because that claims to be "fast", specifically also by internally weakening the monad transformer laws. |
2025-04-11 01:12:20 +0200 | <Guest87> | EvanR: That's a good argument, I don't know why I am being so stubborn about not having a list |
2025-04-11 01:12:33 +0200 | <Guest87> | Maybe I just miss working with functions |
2025-04-11 01:13:04 +0200 | <Guest87> | Is there a proper name/term for the problem I am running into when I do it all with one Task? |
2025-04-11 01:13:27 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn |
2025-04-11 01:14:28 +0200 | <EvanR> | functions in haskell are blackboxes the only thing you do with them, other than pass them around, is apply them to an argument |
2025-04-11 01:14:55 +0200 | hattckory | (~hattckory@bras-base-toroon4524w-grc-30-70-27-118-207.dsl.bell.ca) |
2025-04-11 01:14:55 +0200 | <emojelly> | My Monad/Monad Transformer, mixed in with the one from the test framework (Hedgehog), is quite an impressive layer of Coroutine, ExceptT, ReaderT, WriterT, Maybe, IdentityT... I know WriterT has a problem, but even if I try a more minimal example consisting just of Coroutine, IdentityT, and Either, just adding an IdentityT can make things multiple times slower. |
2025-04-11 01:15:01 +0200 | j1n37 | (~j1n37@user/j1n37) j1n37 |
2025-04-11 01:16:16 +0200 | j1n37- | (~j1n37@user/j1n37) (Ping timeout: 268 seconds) |
2025-04-11 01:16:34 +0200 | <emojelly> | This is a bit of a bummer, because I was stupidly assuming that Monad Transformers were mostly "free" in terms of performance, at least in terms of just being part of the type, without much actual usage. But that does not seem to be the case at all. Even an IdentityT can wreak havoc if you e.g. fmap through it (i.e. actually follow transformer laws). |
2025-04-11 01:16:56 +0200 | <EvanR> | Guest87, question, what is the "empty list" of tasks supposed to do |
2025-04-11 01:17:39 +0200 | <EvanR> | or is it never empty |
2025-04-11 01:18:14 +0200 | <emojelly> | I guess this is part of why people use effectful these days? But my usage of Coroutine specifically precludes effectful, I think. |
2025-04-11 01:18:24 +0200 | <Guest87> | Yea for now I am assuming I at least have (Task "identityProgram" startingInput (\t -> return Nothing)) |
2025-04-11 01:18:39 +0200 | Tuplanolla | (~Tuplanoll@91-159-69-59.elisa-laajakaista.fi) (Quit: Leaving.) |
2025-04-11 01:18:48 +0200 | <EvanR> | Guest87, something like ... https://paste.tomsmeding.com/JF0HROx2 |
2025-04-11 01:19:06 +0200 | <EvanR> | well you return Nothing so what goes on to the next program |
2025-04-11 01:19:40 +0200 | xff0x | (~xff0x@2405:6580:b080:900:1c0d:6c97:349e:6228) (Ping timeout: 265 seconds) |
2025-04-11 01:19:59 +0200 | hattckory | (~hattckory@bras-base-toroon4524w-grc-30-70-27-118-207.dsl.bell.ca) (Ping timeout: 260 seconds) |
2025-04-11 01:20:05 +0200 | <Guest87> | In `addCont`, Nothing is where I end up passing on the result to the next task |
2025-04-11 01:20:12 +0200 | <Guest87> | Otherwise, Nothing means "nothing left to do" |
2025-04-11 01:20:25 +0200 | <EvanR> | but there is no result |
2025-04-11 01:20:56 +0200 | <EvanR> | but since the code never runs in your case, that question doesn't need to be answered |
2025-04-11 01:21:16 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 276 seconds) |
2025-04-11 01:23:26 +0200 | <EvanR> | in my paste, addCont would simply be prepending another Task to the list |
2025-04-11 01:23:50 +0200 | L29Ah | (~L29Ah@wikipedia/L29Ah) () |
2025-04-11 01:23:54 +0200 | xff0x | (~xff0x@2405:6580:b080:900:1c0d:6c97:349e:6228) |
2025-04-11 01:25:10 +0200 | <Guest87> | EvanR yup, this is easy to do with a list, I am just being a dummy and feel like using a list means I haven't figured out the elegant solution |
2025-04-11 01:26:28 +0200 | peterbecich | (~Thunderbi@syn-047-229-123-186.res.spectrum.com) (Ping timeout: 276 seconds) |
2025-04-11 01:26:46 +0200 | <EvanR> | turning a non-empty [Task] into a Task using a Task -> Task -> Task... fairly "elegant" I'd say |
2025-04-11 01:27:21 +0200 | <Guest87> | xD I am just making things hard for myself I guess |
2025-04-11 01:28:14 +0200 | <Guest87> | Are there any haskell libraries that implement whatever I am dealing with here? At one point I was re-learning the Cont monad, but this doesn't feel like Cont exactly |
2025-04-11 01:29:55 +0200 | <EvanR> | my paste is the entirety of the problem afaiui |
2025-04-11 01:30:02 +0200 | <EvanR> | hardly needs a library |
2025-04-11 01:30:26 +0200 | <EvanR> | but in general "Tasks" sounds like they'd be running concurrently and might need to communicate with each other, and the async library is pretty nice there |
2025-04-11 01:31:19 +0200 | <EvanR> | :t foldl1 |
2025-04-11 01:31:20 +0200 | <lambdabot> | Foldable t => (a -> a -> a) -> t a -> a |
2025-04-11 01:31:30 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn |
2025-04-11 01:32:19 +0200 | hattckory | (~hattckory@bras-base-toroon4524w-grc-30-70-27-118-207.dsl.bell.ca) |
2025-04-11 01:32:41 +0200 | <EvanR> | if it was just a bunch of IO actions in a list that needed to run, that's even less of a library, just sequence :: [IO a] -> IO [a] |
2025-04-11 01:32:49 +0200 | jleightcap | (7bc4014b62@user/jleightcap) () |
2025-04-11 01:34:05 +0200 | L29Ah | (~L29Ah@wikipedia/L29Ah) L29Ah |
2025-04-11 01:34:16 +0200 | <EvanR> | and my posted code can probably be golfed with some pointfree compositions |
2025-04-11 01:34:26 +0200 | <EvanR> | to get that a -> a -> a smaller |
2025-04-11 01:35:48 +0200 | cipherrot | (~znc-user@user/petrichor) (Ping timeout: 245 seconds) |
2025-04-11 01:36:49 +0200 | <Guest87> | EvanR: I think your Task type needs to be `String -> IO (Either String Task)` (assuming recursive `type` worked) |
2025-04-11 01:36:52 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 276 seconds) |
2025-04-11 01:38:21 +0200 | <EvanR> | it does not |
2025-04-11 01:38:44 +0200 | <EvanR> | I didn't see the point of the Task datatype as stated |
2025-04-11 01:39:09 +0200 | sayurc_ | (~sayurc@169.150.203.34) sayurc |
2025-04-11 01:39:19 +0200 | sayurc | (~sayurc@169.150.203.34) (Read error: Connection reset by peer) |
2025-04-11 01:39:37 +0200 | <EvanR> | it amounted to a function returning a thing to pass to the next function, and a string to pass into that function |
2025-04-11 01:40:45 +0200 | <Guest87> | The issue is that when I "run" a Task, it either gives a result, or gives me another Task to get the final result |
2025-04-11 01:41:03 +0200 | <Guest87> | Kinda like a trampoline situation I think |
2025-04-11 01:42:00 +0200 | petrichor | (~znc-user@user/petrichor) petrichor |
2025-04-11 01:42:40 +0200 | <EvanR> | not in my paste, the next task is next in the list that you maintained |
2025-04-11 01:42:58 +0200 | <EvanR> | if the task itself is supposed to determine that, that's another problem |
2025-04-11 01:43:14 +0200 | <EvanR> | then "adding" a task from outside doesn't make much sense |
2025-04-11 01:44:59 +0200 | <EvanR> | if running the task is supposed to yield a new task and so on, that's more like free monads |
2025-04-11 01:45:13 +0200 | <EvanR> | plus interpreter |
2025-04-11 01:46:08 +0200 | <EvanR> | but if all you're doing is IO actions that sometimes fail early |
2025-04-11 01:46:24 +0200 | <EvanR> | that would be a pretty simple free monad |
2025-04-11 01:46:45 +0200 | <EvanR> | or you could just use IO exceptions to fail early, and catch that exception |
2025-04-11 01:46:52 +0200 | <EvanR> | and write IO actions |
2025-04-11 01:47:02 +0200 | <EvanR> | if you were actually using haskell |
2025-04-11 01:47:03 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn |
2025-04-11 01:50:00 +0200 | <EvanR> | in both cases you would not be able to outside force a task to suddenly be happening at the end |
2025-04-11 01:50:21 +0200 | <Guest87> | Does "Free" in free monad mean "we get this for free", or does it mean something else? |
2025-04-11 01:50:50 +0200 | <EvanR> | it sure does |
2025-04-11 01:50:56 +0200 | <EvanR> | unless you get more specific |
2025-04-11 01:52:01 +0200 | <EvanR> | but warning, just writing an IO program is already this "task runs and generates the next task to run until the final result" |
2025-04-11 01:52:28 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 276 seconds) |
2025-04-11 01:52:28 +0200 | <haskellbridge> | <Bowuigi> It means "we get monadic structure for free" (or rather, from a functor) |
2025-04-11 01:52:39 +0200 | <EvanR> | and stitching is just (>>=) :: IO a -> (a -> IO b) -> IO b |
2025-04-11 01:53:27 +0200 | <EvanR> | if a = b = String |
2025-04-11 01:53:40 +0200 | <EvanR> | then your pipeline could be just an IO String |
2025-04-11 01:54:02 +0200 | <EvanR> | and I lied you can tack more IO actions before and after |
2025-04-11 01:55:45 +0200 | <Guest87> | I am reading the following: |
2025-04-11 01:55:45 +0200 | <Guest87> | https://www.haskellforall.com/2012/06/you-could-have-invented-free-monads.html |
2025-04-11 01:56:23 +0200 | <Guest87> | and it feels kinda similar to what I am dealing with |
2025-04-11 01:58:16 +0200 | <Guest87> | The `catch` function feels similar to my `addCont` |
2025-04-11 01:59:13 +0200 | <EvanR> | say you have the IO String |
2025-04-11 01:59:27 +0200 | <EvanR> | and you want to put String -> IO String "at the end" (post process) |
2025-04-11 01:59:35 +0200 | <EvanR> | that's just >>= |
2025-04-11 02:00:34 +0200 | <EvanR> | that's addCont |
2025-04-11 02:01:05 +0200 | <EvanR> | but if you went the route of an interpreter for a free monad, you would "catch" there |
2025-04-11 02:01:35 +0200 | <EvanR> | and >>= would still add another post processing step in that case as well |
2025-04-11 02:02:51 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn |
2025-04-11 02:04:33 +0200 | jespada | (~jespada@r179-25-43-11.dialup.adsl.anteldata.net.uy) (Ping timeout: 248 seconds) |
2025-04-11 02:08:04 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 276 seconds) |
2025-04-11 02:10:12 +0200 | <Guest87> | Hmmm this is very cool |
2025-04-11 02:10:33 +0200 | <Guest87> | EvanR, thank you so much for patiently letting me fix issues in my program and then talking through it |
2025-04-11 02:10:59 +0200 | <Guest87> | I have ran into "Free Monads" before but this is the first time I see a use case, so I will just go and read about it |
2025-04-11 02:18:35 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn |
2025-04-11 02:23:18 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 245 seconds) |
2025-04-11 02:25:52 +0200 | Unicorn_Princess | (~Unicorn_P@user/Unicorn-Princess/x-3540542) (Remote host closed the connection) |
2025-04-11 02:30:12 +0200 | ChaiTRex | (~ChaiTRex@user/chaitrex) (Ping timeout: 264 seconds) |
2025-04-11 02:30:46 +0200 | ChaiTRex | (~ChaiTRex@user/chaitrex) ChaiTRex |
2025-04-11 02:33:59 +0200 | potatoespotatoes | (~quassel@user/potatoespotatoes) () |
2025-04-11 02:34:22 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn |
2025-04-11 02:35:42 +0200 | ezzieyguywuf | (~Unknown@user/ezzieyguywuf) ezzieyguywuf |
2025-04-11 02:36:40 +0200 | potatoespotatoes | (~quassel@130.44.147.204) |
2025-04-11 02:36:40 +0200 | potatoespotatoes | (~quassel@130.44.147.204) (Changing host) |
2025-04-11 02:36:40 +0200 | potatoespotatoes | (~quassel@user/potatoespotatoes) potatoespotatoes |
2025-04-11 02:39:06 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds) |
2025-04-11 02:39:15 +0200 | potatoespotatoes | (~quassel@user/potatoespotatoes) (Client Quit) |
2025-04-11 02:39:17 +0200 | sabathan2 | (~sabathan@amarseille-159-1-12-107.w86-203.abo.wanadoo.fr) (Ping timeout: 248 seconds) |
2025-04-11 02:39:45 +0200 | potatoespotatoes | (~quassel@130.44.147.204) potatoespotatoes |
2025-04-11 02:39:45 +0200 | potatoespotatoes | (~quassel@130.44.147.204) (Changing host) |
2025-04-11 02:39:45 +0200 | potatoespotatoes | (~quassel@user/potatoespotatoes) potatoespotatoes |
2025-04-11 02:42:57 +0200 | sabathan2 | (~sabathan@amarseille-159-1-12-107.w86-203.abo.wanadoo.fr) |
2025-04-11 02:50:21 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn |
2025-04-11 02:57:20 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds) |
2025-04-11 02:57:21 +0200 | <haskellbridge> | <Bowuigi> lens-regex-pcre introduces a clever approach to implementing and extending structural regular expressions. Are there generalizations of this? Such that you can query parts of a structure and modify them based on that |
2025-04-11 02:57:49 +0200 | peterbecich | (~Thunderbi@syn-047-229-123-186.res.spectrum.com) peterbecich |
2025-04-11 02:58:16 +0200 | otto_s | (~user@p4ff278a2.dip0.t-ipconnect.de) (Ping timeout: 265 seconds) |
2025-04-11 02:58:54 +0200 | <geekosaur> | isn't that … lens? |
2025-04-11 02:59:13 +0200 | <haskellbridge> | <Bowuigi> No no I mean, optics that check if there's a certain node inside a tree and allow you to modify the place where the query is ran rather than the node |
2025-04-11 02:59:45 +0200 | otto_s | (~user@p5de2fd33.dip0.t-ipconnect.de) |
2025-04-11 03:01:53 +0200 | <haskellbridge> | <Bowuigi> "branch . without leaf" matching branches that do not have leaves as their inmediate substructures, for example |
2025-04-11 03:02:26 +0200 | <glguy> | You can write that in regular lens |
2025-04-11 03:02:29 +0200 | <geekosaur> | I think there are optics for that? |
2025-04-11 03:03:03 +0200 | <haskellbridge> | <Bowuigi> I'd assume so yeah |
2025-04-11 03:03:22 +0200 | <glguy> | you need to be careful about going and adding a leaf in that case where there wasn't one there before it you want to be able to use lens law reasoning |
2025-04-11 03:08:13 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn |
2025-04-11 03:08:17 +0200 | <haskellbridge> | <Bowuigi> Based on that warning I think that filtered is what I'm looking for |
2025-04-11 03:09:17 +0200 | <haskellbridge> | <Bowuigi> Actually no, it's rewriteOf |
2025-04-11 03:09:54 +0200 | xff0x | (~xff0x@2405:6580:b080:900:1c0d:6c97:349e:6228) (Ping timeout: 252 seconds) |
2025-04-11 03:10:02 +0200 | <haskellbridge> | <Bowuigi> Based on this example https://github.com/stevenfontanella/microlens/pull/119#issuecomment-496004851 |
2025-04-11 03:13:43 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 276 seconds) |
2025-04-11 03:17:22 +0200 | acidjnk | (~acidjnk@p200300d6e71c4f7444aa95b6f7c7abd1.dip0.t-ipconnect.de) (Ping timeout: 272 seconds) |
2025-04-11 03:24:00 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn |
2025-04-11 03:26:35 +0200 | __jmcantrell__ | (~weechat@user/jmcantrell) jmcantrell |
2025-04-11 03:26:35 +0200 | jmcantrell | Guest8811 |
2025-04-11 03:26:35 +0200 | Guest8811 | (644f1bed9a@user/jmcantrell) (Killed (copper.libera.chat (Nickname regained by services))) |
2025-04-11 03:26:35 +0200 | __jmcantrell__ | jmcantrell |
2025-04-11 03:26:44 +0200 | jmcantrell_ | (644f1bed9a@user/jmcantrell) jmcantrell |
2025-04-11 03:29:19 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 276 seconds) |
2025-04-11 03:31:42 +0200 | Guest87 | (~Guest87@2620:72:0:1f18:7d2a:62e7:7a20:d79f) (Quit: Client closed) |
2025-04-11 03:32:41 +0200 | ezzieyguywuf | (~Unknown@user/ezzieyguywuf) (Quit: Lost terminal) |
2025-04-11 03:34:32 +0200 | ezzieyguywuf | (~Unknown@user/ezzieyguywuf) ezzieyguywuf |
2025-04-11 03:39:48 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn |
2025-04-11 03:43:03 +0200 | OftenFaded | (~OftenFade@user/tisktisk) OftenFaded |
2025-04-11 03:44:55 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 276 seconds) |
2025-04-11 03:55:34 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn |
2025-04-11 04:00:30 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds) |
2025-04-11 04:05:35 +0200 | xff0x | (~xff0x@fsb6a9491c.tkyc517.ap.nuro.jp) |
2025-04-11 04:11:21 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn |
2025-04-11 04:16:19 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 260 seconds) |
2025-04-11 04:20:04 +0200 | peterbecich | (~Thunderbi@syn-047-229-123-186.res.spectrum.com) (Ping timeout: 272 seconds) |
2025-04-11 04:21:58 +0200 | inca | (~inca@pool-96-255-212-224.washdc.fios.verizon.net) (Ping timeout: 276 seconds) |
2025-04-11 04:22:26 +0200 | haskellbridge | (~hackager@syn-024-093-192-219.res.spectrum.com) (Remote host closed the connection) |
2025-04-11 04:23:00 +0200 | haskellbridge | (~hackager@syn-024-093-192-219.res.spectrum.com) hackager |
2025-04-11 04:23:00 +0200 | ChanServ | +v haskellbridge |
2025-04-11 04:26:58 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn |
2025-04-11 04:30:15 +0200 | ezzieyguywuf | (~Unknown@user/ezzieyguywuf) (Remote host closed the connection) |
2025-04-11 04:30:52 +0200 | Sciencentistguy | (~sciencent@hacksoc/ordinary-member) (Quit: Ping timeout (120 seconds)) |
2025-04-11 04:31:13 +0200 | Sciencentistguy | (~sciencent@hacksoc/ordinary-member) sciencentistguy |
2025-04-11 04:32:43 +0200 | ezzieyguywuf | (~Unknown@user/ezzieyguywuf) ezzieyguywuf |
2025-04-11 04:33:57 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 248 seconds) |
2025-04-11 04:34:08 +0200 | ezzieyguywuf | (~Unknown@user/ezzieyguywuf) (Client Quit) |
2025-04-11 04:35:48 +0200 | ezzieyguywuf | (~Unknown@user/ezzieyguywuf) ezzieyguywuf |
2025-04-11 04:42:15 +0200 | inca | (~inca@pool-96-255-212-224.washdc.fios.verizon.net) |
2025-04-11 04:45:02 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn |
2025-04-11 04:48:24 +0200 | bitdex | (~bitdex@gateway/tor-sasl/bitdex) bitdex |
2025-04-11 04:49:16 +0200 | roconnor | (~quassel@rocq/roconnor) (Ping timeout: 276 seconds) |
2025-04-11 04:49:19 +0200 | roconnor_ | (~quassel@rocq/roconnor) roconnor |
2025-04-11 04:49:54 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds) |
2025-04-11 05:00:49 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn |
2025-04-11 05:02:13 +0200 | Ranhir | (~Ranhir@157.97.53.139) (Remote host closed the connection) |
2025-04-11 05:04:24 +0200 | Ranhir | (~Ranhir@157.97.53.139) Ranhir |
2025-04-11 05:05:38 +0200 | j1n37 | (~j1n37@user/j1n37) (Read error: Connection reset by peer) |
2025-04-11 05:05:40 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds) |
2025-04-11 05:11:39 +0200 | j1n37 | (~j1n37@user/j1n37) j1n37 |
2025-04-11 05:16:36 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn |
2025-04-11 05:21:21 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds) |
2025-04-11 05:22:21 +0200 | peterbecich | (~Thunderbi@syn-047-229-123-186.res.spectrum.com) peterbecich |
2025-04-11 05:32:24 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn |
2025-04-11 05:32:48 +0200 | ezzieyguywuf | (~Unknown@user/ezzieyguywuf) (Quit: Lost terminal) |
2025-04-11 05:34:36 +0200 | ezzieyguywuf | (~Unknown@user/ezzieyguywuf) ezzieyguywuf |
2025-04-11 05:37:58 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 272 seconds) |
2025-04-11 05:43:13 +0200 | michalz | (~michalz@185.246.207.205) |
2025-04-11 05:47:51 +0200 | aforemny | (~aforemny@2001:9e8:6cf4:300:5306:52f:8502:4ee0) aforemny |
2025-04-11 05:48:13 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn |
2025-04-11 05:49:48 +0200 | aforemny_ | (~aforemny@2001:9e8:6cd3:ed00:7f35:da5a:93ab:c3e3) (Ping timeout: 276 seconds) |
2025-04-11 05:53:37 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 276 seconds) |
2025-04-11 06:00:46 +0200 | xff0x | (~xff0x@fsb6a9491c.tkyc517.ap.nuro.jp) (Ping timeout: 276 seconds) |
2025-04-11 06:01:05 +0200 | xff0x | (~xff0x@fsb6a9491c.tkyc517.ap.nuro.jp) |
2025-04-11 06:03:58 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn |
2025-04-11 06:10:46 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 244 seconds) |
2025-04-11 06:20:55 +0200 | peterbecich | (~Thunderbi@syn-047-229-123-186.res.spectrum.com) (Ping timeout: 276 seconds) |
2025-04-11 06:21:32 +0200 | tabaqui | (~tabaqui@167.71.80.236) tabaqui |
2025-04-11 06:22:00 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn |
2025-04-11 06:27:25 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 276 seconds) |
2025-04-11 06:37:46 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn |
2025-04-11 06:42:44 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 260 seconds) |
2025-04-11 06:44:58 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn |
2025-04-11 06:50:10 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 276 seconds) |
2025-04-11 06:52:04 +0200 | inca | (~inca@pool-96-255-212-224.washdc.fios.verizon.net) (Ping timeout: 272 seconds) |
2025-04-11 06:57:52 +0200 | peterbecich | (~Thunderbi@syn-047-229-123-186.res.spectrum.com) peterbecich |
2025-04-11 07:00:44 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn |
2025-04-11 07:04:23 +0200 | inca | (~inca@pool-96-255-212-224.washdc.fios.verizon.net) |
2025-04-11 07:05:34 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds) |
2025-04-11 07:09:20 +0200 | qeef | (~qeef@138-169-143-94.cust.centrio.cz) qeef |
2025-04-11 07:16:32 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn |
2025-04-11 07:22:01 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 276 seconds) |
2025-04-11 07:28:17 +0200 | forell | (~forell@user/forell) (Ping timeout: 248 seconds) |
2025-04-11 07:32:19 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn |
2025-04-11 07:34:22 +0200 | qeef | (~qeef@138-169-143-94.cust.centrio.cz) (Ping timeout: 276 seconds) |
2025-04-11 07:35:38 +0200 | peterbecich | (~Thunderbi@syn-047-229-123-186.res.spectrum.com) (Ping timeout: 252 seconds) |
2025-04-11 07:37:34 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 260 seconds) |
2025-04-11 07:40:03 +0200 | XZDX | (~xzdx@user/XZDX) (Remote host closed the connection) |
2025-04-11 07:41:05 +0200 | Garbanzo | (~Garbanzo@2602:304:6eac:dc10::2e) |
2025-04-11 07:41:34 +0200 | remexre_ | (~remexre@user/remexre) remexre |
2025-04-11 07:41:41 +0200 | remexre | (~remexre@user/remexre) (Ping timeout: 268 seconds) |
2025-04-11 07:43:26 +0200 | Eoco | (~ian@128.101.131.218) (Ping timeout: 265 seconds) |
2025-04-11 07:45:13 +0200 | Eoco | (~ian@128.101.131.218) Eoco |
2025-04-11 07:46:43 +0200 | remexre_ | (~remexre@user/remexre) (Ping timeout: 276 seconds) |
2025-04-11 07:47:47 +0200 | JuanDaugherty | (~juan@user/JuanDaugherty) JuanDaugherty |
2025-04-11 07:48:07 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn |
2025-04-11 07:50:12 +0200 | weary-traveler | (~user@user/user363627) (Remote host closed the connection) |
2025-04-11 07:55:49 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 276 seconds) |
2025-04-11 07:58:25 +0200 | amadaluzia | (~amadaluzi@2a00:23c7:ed8b:6701:6582:5675:67d:4956) (Ping timeout: 276 seconds) |
2025-04-11 07:59:38 +0200 | Sgeo | (~Sgeo@user/sgeo) (Read error: Connection reset by peer) |
2025-04-11 07:59:59 +0200 | polyphem | (~rod@pd9fbfc2f.dip0.t-ipconnect.de) polyphem |
2025-04-11 08:03:41 +0200 | amadaluzia | (~amadaluzi@user/amadaluzia) amadaluzia |
2025-04-11 08:04:17 +0200 | amadaluzia | (~amadaluzi@user/amadaluzia) (Remote host closed the connection) |
2025-04-11 08:05:27 +0200 | sord937 | (~sord937@gateway/tor-sasl/sord937) sord937 |
2025-04-11 08:06:08 +0200 | remexre | (~remexre@user/remexre) remexre |
2025-04-11 08:06:10 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn |
2025-04-11 08:06:57 +0200 | CiaoSen | (~Jura@2a02:8071:64e1:da0:5a47:caff:fe78:33db) CiaoSen |
2025-04-11 08:07:00 +0200 | JuanDaugherty | ColinRobinson |
2025-04-11 08:10:48 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 245 seconds) |
2025-04-11 08:11:14 +0200 | inca | (~inca@pool-96-255-212-224.washdc.fios.verizon.net) (Ping timeout: 272 seconds) |
2025-04-11 08:20:55 +0200 | ft | (~ft@p508db594.dip0.t-ipconnect.de) (Quit: leaving) |
2025-04-11 08:21:56 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn |
2025-04-11 08:22:20 +0200 | jmcantrell | (~weechat@user/jmcantrell) (Quit: WeeChat 4.6.1) |
2025-04-11 08:22:20 +0200 | jmcantrell_ | jmcantrell |
2025-04-11 08:22:54 +0200 | inca | (~inca@pool-96-255-212-224.washdc.fios.verizon.net) |
2025-04-11 08:27:40 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 276 seconds) |
2025-04-11 08:27:57 +0200 | pikajude | (~jude@2001:19f0:ac01:373:5400:2ff:fe86:3274) (Quit: ZNC 1.8.2 - https://znc.in) |
2025-04-11 08:28:17 +0200 | pikajude | (~jude@2001:19f0:ac01:373:5400:2ff:fe86:3274) pikajude |
2025-04-11 08:28:19 +0200 | inca | (~inca@pool-96-255-212-224.washdc.fios.verizon.net) (Ping timeout: 276 seconds) |
2025-04-11 08:33:12 +0200 | chexum | (~quassel@gateway/tor-sasl/chexum) (Ping timeout: 264 seconds) |
2025-04-11 08:33:39 +0200 | chexum | (~quassel@gateway/tor-sasl/chexum) chexum |
2025-04-11 08:37:44 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn |
2025-04-11 08:37:48 +0200 | Garbanzo | (~Garbanzo@2602:304:6eac:dc10::2e) (Remote host closed the connection) |
2025-04-11 08:40:10 +0200 | inca | (~inca@pool-96-255-212-224.washdc.fios.verizon.net) |
2025-04-11 08:41:58 +0200 | xff0x | (~xff0x@fsb6a9491c.tkyc517.ap.nuro.jp) (Ping timeout: 276 seconds) |
2025-04-11 08:42:44 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 268 seconds) |
2025-04-11 08:43:56 +0200 | xff0x | (~xff0x@fsb6a9491c.tkyc517.ap.nuro.jp) |
2025-04-11 08:45:49 +0200 | inca | (~inca@pool-96-255-212-224.washdc.fios.verizon.net) (Ping timeout: 260 seconds) |
2025-04-11 08:49:46 +0200 | Square | (~Square4@user/square) (Ping timeout: 276 seconds) |
2025-04-11 08:53:22 +0200 | tomboy64 | (~tomboy64@user/tomboy64) (Ping timeout: 252 seconds) |
2025-04-11 08:53:31 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn |
2025-04-11 08:54:08 +0200 | acidjnk | (~acidjnk@p200300d6e71c4f7444aa95b6f7c7abd1.dip0.t-ipconnect.de) acidjnk |
2025-04-11 08:54:09 +0200 | tomboy64 | (~tomboy64@user/tomboy64) tomboy64 |
2025-04-11 08:57:53 +0200 | inca | (~inca@pool-96-255-212-224.washdc.fios.verizon.net) |
2025-04-11 08:58:14 +0200 | j1n37- | (~j1n37@user/j1n37) j1n37 |
2025-04-11 08:58:30 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds) |
2025-04-11 08:59:31 +0200 | j1n37 | (~j1n37@user/j1n37) (Ping timeout: 276 seconds) |
2025-04-11 09:00:02 +0200 | caconym | (~caconym@user/caconym) (Quit: bye) |
2025-04-11 09:01:01 +0200 | caconym | (~caconym@user/caconym) caconym |
2025-04-11 09:02:32 +0200 | inca | (~inca@pool-96-255-212-224.washdc.fios.verizon.net) (Ping timeout: 252 seconds) |
2025-04-11 09:02:50 +0200 | Feuermagier | (~Feuermagi@user/feuermagier) (Quit: Leaving) |
2025-04-11 09:07:48 +0200 | lortabac | (~lortabac@2a01:e0a:541:b8f0:55ab:e185:7f81:54a4) |
2025-04-11 09:08:54 +0200 | Googulator | (~Googulato@2a01-036d-0106-211a-98f9-54d1-cd01-d0d3.pool6.digikabel.hu) (Ping timeout: 240 seconds) |
2025-04-11 09:15:28 +0200 | inca | (~inca@pool-96-255-212-224.washdc.fios.verizon.net) |
2025-04-11 09:16:29 +0200 | vpan | (~vpan@212.117.1.172) |
2025-04-11 09:18:57 +0200 | Lord_of_Life | (~Lord@user/lord-of-life/x-2819915) (Ping timeout: 252 seconds) |
2025-04-11 09:19:21 +0200 | Lord_of_Life | (~Lord@user/lord-of-life/x-2819915) Lord_of_Life |
2025-04-11 09:20:54 +0200 | inca | (~inca@pool-96-255-212-224.washdc.fios.verizon.net) (Ping timeout: 244 seconds) |
2025-04-11 09:22:06 +0200 | <jackdk> | Bowuigi I think you don't even have to write `subExprs` by hand - you could stock-derive `Data` and use `uniplate` or anyclass-derive `Plated` and use `plated`, or derive Generic and use `gplate` |
2025-04-11 09:23:26 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn |
2025-04-11 09:23:32 +0200 | __monty__ | (~toonn@user/toonn) toonn |
2025-04-11 09:23:58 +0200 | inca | (~inca@pool-96-255-212-224.washdc.fios.verizon.net) |
2025-04-11 09:27:19 +0200 | j1n37 | (~j1n37@user/j1n37) j1n37 |
2025-04-11 09:27:52 +0200 | j1n37- | (~j1n37@user/j1n37) (Ping timeout: 272 seconds) |
2025-04-11 09:28:51 +0200 | inca | (~inca@pool-96-255-212-224.washdc.fios.verizon.net) (Ping timeout: 252 seconds) |
2025-04-11 09:30:44 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 265 seconds) |
2025-04-11 09:31:27 +0200 | acidjnk_new | (~acidjnk@p200300d6e71c4f37f95626b479c3d9ea.dip0.t-ipconnect.de) acidjnk |
2025-04-11 09:31:47 +0200 | rvalue | (~rvalue@user/rvalue) (Read error: Connection reset by peer) |
2025-04-11 09:32:20 +0200 | rvalue | (~rvalue@user/rvalue) rvalue |
2025-04-11 09:32:40 +0200 | acidjnk | (~acidjnk@p200300d6e71c4f7444aa95b6f7c7abd1.dip0.t-ipconnect.de) (Ping timeout: 276 seconds) |
2025-04-11 09:35:03 +0200 | peterbecich | (~Thunderbi@syn-047-229-123-186.res.spectrum.com) peterbecich |
2025-04-11 09:39:33 +0200 | <hellwolf> | Short notice: Who wants to join a zoom call that discuss lineartypes at 2PM UTC today? |
2025-04-11 09:40:38 +0200 | inca | (~inca@pool-96-255-212-224.washdc.fios.verizon.net) |
2025-04-11 09:41:29 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn |
2025-04-11 09:42:10 +0200 | sayurc_ | (~sayurc@169.150.203.34) (Quit: Konversation terminated!) |
2025-04-11 09:45:25 +0200 | inca | (~inca@pool-96-255-212-224.washdc.fios.verizon.net) (Ping timeout: 248 seconds) |
2025-04-11 09:46:13 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 245 seconds) |
2025-04-11 09:52:44 +0200 | ljdarj | (~Thunderbi@user/ljdarj) ljdarj |
2025-04-11 09:53:27 +0200 | peterbecich | (~Thunderbi@syn-047-229-123-186.res.spectrum.com) (Ping timeout: 265 seconds) |
2025-04-11 09:57:15 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn |
2025-04-11 09:57:57 +0200 | mima_ | mima |
2025-04-11 09:58:36 +0200 | marinelli | (~weechat@gateway/tor-sasl/marinelli) (Quit: marinelli) |
2025-04-11 10:02:14 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 260 seconds) |
2025-04-11 10:08:39 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn |
2025-04-11 10:08:54 +0200 | tzh | (~tzh@c-76-115-131-146.hsd1.or.comcast.net) (Quit: zzz) |
2025-04-11 10:09:24 +0200 | ColinRobinson | (~juan@user/JuanDaugherty) (Quit: praxis.meansofproduction.biz (juan@acm.org)) |
2025-04-11 10:14:16 +0200 | forell | (~forell@user/forell) forell |
2025-04-11 10:14:21 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 276 seconds) |
2025-04-11 10:15:23 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn |
2025-04-11 10:17:02 +0200 | inca | (~inca@pool-96-255-212-224.washdc.fios.verizon.net) |
2025-04-11 10:17:19 +0200 | lxsameer | (~lxsameer@Serene/lxsameer) lxsameer |
2025-04-11 10:20:16 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds) |
2025-04-11 10:22:43 +0200 | inca | (~inca@pool-96-255-212-224.washdc.fios.verizon.net) (Ping timeout: 276 seconds) |
2025-04-11 10:26:02 +0200 | j1n37- | (~j1n37@user/j1n37) j1n37 |
2025-04-11 10:26:03 +0200 | j1n37 | (~j1n37@user/j1n37) (Ping timeout: 252 seconds) |
2025-04-11 10:31:03 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn |
2025-04-11 10:32:03 +0200 | turlando | (~turlando@user/turlando) () |
2025-04-11 10:32:51 +0200 | chele | (~chele@user/chele) chele |
2025-04-11 10:33:18 +0200 | califax | (~califax@user/califx) (Read error: Connection reset by peer) |
2025-04-11 10:33:18 +0200 | ChaiTRex | (~ChaiTRex@user/chaitrex) (Read error: Connection reset by peer) |
2025-04-11 10:33:18 +0200 | gmg | (~user@user/gehmehgeh) (Read error: Connection reset by peer) |
2025-04-11 10:33:18 +0200 | chiselfuse | (~chiselfus@user/chiselfuse) (Read error: Connection reset by peer) |
2025-04-11 10:33:18 +0200 | chexum | (~quassel@gateway/tor-sasl/chexum) (Remote host closed the connection) |
2025-04-11 10:33:30 +0200 | chexum | (~quassel@gateway/tor-sasl/chexum) chexum |
2025-04-11 10:33:37 +0200 | califax | (~califax@user/califx) califx |
2025-04-11 10:33:41 +0200 | ChaiTRex | (~ChaiTRex@user/chaitrex) ChaiTRex |
2025-04-11 10:33:56 +0200 | chiselfuse | (~chiselfus@user/chiselfuse) chiselfuse |
2025-04-11 10:33:59 +0200 | gmg | (~user@user/gehmehgeh) gehmehgeh |
2025-04-11 10:34:00 +0200 | turlando | (~turlando@user/turlando) turlando |
2025-04-11 10:35:35 +0200 | tcard | (~tcard@2400:4051:5801:7500:cf17:befc:ff82:5303) (Quit: Leaving) |
2025-04-11 10:36:03 +0200 | Googulator | (~Googulato@81.183.235.203) |
2025-04-11 10:36:16 +0200 | Igloo | (~ian@2001:8b0:645c::210) (Ping timeout: 272 seconds) |
2025-04-11 10:36:22 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 276 seconds) |
2025-04-11 10:40:44 +0200 | inca | (~inca@pool-96-255-212-224.washdc.fios.verizon.net) |
2025-04-11 10:42:23 +0200 | turlando | (~turlando@user/turlando) () |
2025-04-11 10:45:23 +0200 | inca | (~inca@pool-96-255-212-224.washdc.fios.verizon.net) (Ping timeout: 245 seconds) |
2025-04-11 10:46:40 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn |
2025-04-11 10:47:59 +0200 | Igloo | (~ian@81.2.99.210) Igfoo |
2025-04-11 10:52:06 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 272 seconds) |
2025-04-11 10:55:52 +0200 | acidjnk_new | (~acidjnk@p200300d6e71c4f37f95626b479c3d9ea.dip0.t-ipconnect.de) (Ping timeout: 276 seconds) |
2025-04-11 11:02:26 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn |
2025-04-11 11:07:38 +0200 | lisbeths | (uid135845@id-135845.lymington.irccloud.com) lisbeths |
2025-04-11 11:13:37 +0200 | sprotte24 | (~sprotte24@p200300d16f1c5b0064420e97db58ee64.dip0.t-ipconnect.de) |
2025-04-11 11:13:54 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds) |
2025-04-11 11:14:24 +0200 | inca | (~inca@pool-96-255-212-224.washdc.fios.verizon.net) |
2025-04-11 11:19:55 +0200 | inca | (~inca@pool-96-255-212-224.washdc.fios.verizon.net) (Ping timeout: 276 seconds) |
2025-04-11 11:20:59 +0200 | lyxia | (~lyxia@poisson.chat) (Quit: WeeChat 4.5.1) |
2025-04-11 11:25:33 +0200 | merijn | (~merijn@62.45.137.128) merijn |
2025-04-11 11:26:05 +0200 | inca | (~inca@pool-96-255-212-224.washdc.fios.verizon.net) |
2025-04-11 11:30:28 +0200 | merijn | (~merijn@62.45.137.128) (Ping timeout: 268 seconds) |
2025-04-11 11:30:58 +0200 | inca | (~inca@pool-96-255-212-224.washdc.fios.verizon.net) (Ping timeout: 276 seconds) |
2025-04-11 11:31:03 +0200 | hattckory | (~hattckory@bras-base-toroon4524w-grc-30-70-27-118-207.dsl.bell.ca) (Ping timeout: 276 seconds) |
2025-04-11 11:35:53 +0200 | hattckory | (~hattckory@bras-base-toroon4524w-grc-30-70-27-118-207.dsl.bell.ca) |
2025-04-11 11:40:43 +0200 | ljdarj | (~Thunderbi@user/ljdarj) (Ping timeout: 276 seconds) |
2025-04-11 11:41:15 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn |
2025-04-11 11:41:57 +0200 | lortabac | (~lortabac@2a01:e0a:541:b8f0:55ab:e185:7f81:54a4) (Ping timeout: 252 seconds) |
2025-04-11 11:42:02 +0200 | tcard | (~tcard@2400:4051:5801:7500:cf17:befc:ff82:5303) tcard |
2025-04-11 11:43:02 +0200 | inca | (~inca@pool-96-255-212-224.washdc.fios.verizon.net) |
2025-04-11 11:44:39 +0200 | Guest84 | (~Guest99@194.89.25.85) |
2025-04-11 11:44:43 +0200 | lyxia | (~lyxia@poisson.chat) |
2025-04-11 11:46:34 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 276 seconds) |
2025-04-11 11:51:52 +0200 | inca | (~inca@pool-96-255-212-224.washdc.fios.verizon.net) (Ping timeout: 265 seconds) |
2025-04-11 11:57:03 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn |
2025-04-11 12:00:09 +0200 | lortabac | (~lortabac@2a01:e0a:541:b8f0:55ab:e185:7f81:54a4) |
2025-04-11 12:01:31 +0200 | xff0x | (~xff0x@fsb6a9491c.tkyc517.ap.nuro.jp) (Ping timeout: 276 seconds) |
2025-04-11 12:02:15 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 276 seconds) |
2025-04-11 12:04:15 +0200 | inca | (~inca@pool-96-255-212-224.washdc.fios.verizon.net) |
2025-04-11 12:05:40 +0200 | ljdarj | (~Thunderbi@user/ljdarj) ljdarj |
2025-04-11 12:10:38 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn |
2025-04-11 12:11:38 +0200 | inca | (~inca@pool-96-255-212-224.washdc.fios.verizon.net) (Ping timeout: 245 seconds) |
2025-04-11 12:15:49 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 276 seconds) |
2025-04-11 12:24:51 +0200 | inca | (~inca@pool-96-255-212-224.washdc.fios.verizon.net) |
2025-04-11 12:26:27 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn |
2025-04-11 12:31:15 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 244 seconds) |
2025-04-11 12:31:18 +0200 | Googulator | (~Googulato@81.183.235.203) (Ping timeout: 240 seconds) |
2025-04-11 12:36:49 +0200 | roconnor_ | roconnor |
2025-04-11 12:37:18 +0200 | Guest84 | (~Guest99@194.89.25.85) (Ping timeout: 240 seconds) |
2025-04-11 12:39:00 +0200 | inca | (~inca@pool-96-255-212-224.washdc.fios.verizon.net) (Ping timeout: 244 seconds) |
2025-04-11 12:40:36 +0200 | inca | (~inca@pool-96-255-212-224.washdc.fios.verizon.net) |
2025-04-11 12:42:13 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn |
2025-04-11 12:46:22 +0200 | inca | (~inca@pool-96-255-212-224.washdc.fios.verizon.net) (Ping timeout: 276 seconds) |
2025-04-11 12:49:14 +0200 | sprotte24 | (~sprotte24@p200300d16f1c5b0064420e97db58ee64.dip0.t-ipconnect.de) (Quit: Leaving) |
2025-04-11 12:49:37 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 276 seconds) |
2025-04-11 12:51:00 +0200 | lortabac | (~lortabac@2a01:e0a:541:b8f0:55ab:e185:7f81:54a4) (Ping timeout: 276 seconds) |
2025-04-11 12:51:05 +0200 | comonad | (~comonad@p200300d0274ac2004a3b1ffc163e1801.dip0.t-ipconnect.de) (Quit: WeeChat 4.6.0-dev) |
2025-04-11 12:56:42 +0200 | Googulator | (~Googulato@81.183.235.203) |
2025-04-11 12:57:12 +0200 | lortabac | (~lortabac@2a01:e0a:541:b8f0:55ab:e185:7f81:54a4) lortabac |
2025-04-11 12:58:21 +0200 | inca | (~inca@pool-96-255-212-224.washdc.fios.verizon.net) |
2025-04-11 13:00:17 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn |
2025-04-11 13:02:19 +0200 | jespada | (~jespada@r167-61-120-190.dialup.adsl.anteldata.net.uy) jespada |
2025-04-11 13:05:44 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 272 seconds) |
2025-04-11 13:11:39 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn |
2025-04-11 13:16:56 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 265 seconds) |
2025-04-11 13:27:26 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn |
2025-04-11 13:34:08 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 245 seconds) |
2025-04-11 13:37:31 +0200 | Unicorn_Princess | (~Unicorn_P@user/Unicorn-Princess/x-3540542) Unicorn_Princess |
2025-04-11 13:41:43 +0200 | JuanDaugherty | (~juan@user/JuanDaugherty) JuanDaugherty |
2025-04-11 13:45:28 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn |
2025-04-11 13:45:36 +0200 | CiaoSen | (~Jura@2a02:8071:64e1:da0:5a47:caff:fe78:33db) (Ping timeout: 276 seconds) |
2025-04-11 13:46:32 +0200 | bitdex | (~bitdex@gateway/tor-sasl/bitdex) (Quit: = "") |
2025-04-11 13:50:22 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds) |
2025-04-11 14:01:14 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn |
2025-04-11 14:06:39 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 260 seconds) |
2025-04-11 14:12:39 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn |
2025-04-11 14:13:54 +0200 | JuanDaugherty | ColinRobinson |
2025-04-11 14:17:30 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds) |
2025-04-11 14:17:52 +0200 | forell | (~forell@user/forell) (Ping timeout: 252 seconds) |
2025-04-11 14:18:33 +0200 | Smiles | (uid551636@id-551636.lymington.irccloud.com) Smiles |
2025-04-11 14:22:10 +0200 | <haskellbridge> | <thirdofmay18081814goya> data Pred a where |
2025-04-11 14:22:10 +0200 | <haskellbridge> | ... long message truncated: https://kf8nh.com/_heisenbridge/media/kf8nh.com/IsqfhephrLUQZbBWOtaJJgoT/AzLVmVwqQEE (13 lines) |
2025-04-11 14:22:26 +0200 | <haskellbridge> | <thirdofmay18081814goya> anyone have an idea what's the proper way to implement a class like this? |
2025-04-11 14:24:30 +0200 | <haskellbridge> | <thirdofmay18081814goya> the idea is that we declare at the typelevel that a particular constant should be available ("predfuncs") in scope |
2025-04-11 14:25:04 +0200 | xff0x | (~xff0x@2405:6580:b080:900:46de:d563:2315:dd7b) |
2025-04-11 14:28:27 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn |
2025-04-11 14:32:09 +0200 | jespada | (~jespada@r167-61-120-190.dialup.adsl.anteldata.net.uy) (Ping timeout: 260 seconds) |
2025-04-11 14:33:37 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 268 seconds) |
2025-04-11 14:35:43 +0200 | jespada | (~jespada@r179-25-2-204.dialup.adsl.anteldata.net.uy) jespada |
2025-04-11 14:36:19 +0200 | lisbeths | (uid135845@id-135845.lymington.irccloud.com) (Quit: Connection closed for inactivity) |
2025-04-11 14:38:31 +0200 | <haskellbridge> | <thirdofmay18081814goya> "instance WithPreds [a] (Nonempty :' []) where predfuncs = [assoc Nonempty]" worked |
2025-04-11 14:41:56 +0200 | <haskellbridge> | <thirdofmay18081814goya> hm, ideally I'd want an instance "instance WithPreds [a] preds where predfuncs = map assoc preds" |
2025-04-11 14:42:23 +0200 | <haskellbridge> | <thirdofmay18081814goya> using "preds" here makes ghc report that it's an illegal term-level use of type variable "preds" |
2025-04-11 14:44:13 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn |
2025-04-11 14:49:52 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 276 seconds) |
2025-04-11 14:51:10 +0200 | weary-traveler | (~user@user/user363627) user363627 |
2025-04-11 14:57:56 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn |
2025-04-11 15:02:53 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 245 seconds) |
2025-04-11 15:13:39 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn |
2025-04-11 15:20:34 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds) |
2025-04-11 15:23:41 +0200 | amadaluzia | (~amadaluzi@user/amadaluzia) amadaluzia |
2025-04-11 15:23:43 +0200 | ft | (~ft@p508db594.dip0.t-ipconnect.de) ft |
2025-04-11 15:23:59 +0200 | ColinRobinson | JuanDaugherty |
2025-04-11 15:31:42 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn |
2025-04-11 15:32:51 +0200 | jespada | (~jespada@r179-25-2-204.dialup.adsl.anteldata.net.uy) (Ping timeout: 276 seconds) |
2025-04-11 15:35:16 +0200 | jespada | (~jespada@r179-25-2-204.dialup.adsl.anteldata.net.uy) jespada |
2025-04-11 15:35:23 +0200 | vpan | (~vpan@212.117.1.172) (Quit: Leaving.) |
2025-04-11 15:37:19 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 276 seconds) |
2025-04-11 15:42:31 +0200 | JuanDaugherty | ColinRobinson |
2025-04-11 15:45:23 +0200 | L29Ah | (~L29Ah@wikipedia/L29Ah) () |
2025-04-11 15:46:10 +0200 | L29Ah | (~L29Ah@wikipedia/L29Ah) L29Ah |
2025-04-11 15:47:30 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn |
2025-04-11 15:51:24 +0200 | ColinRobinson | (~juan@user/JuanDaugherty) (Quit: praxis.meansofproduction.biz (juan@acm.org)) |
2025-04-11 15:52:34 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 265 seconds) |
2025-04-11 16:00:57 +0200 | infinity0 | (~infinity0@pwned.gg) (Remote host closed the connection) |
2025-04-11 16:01:06 +0200 | hiecaq | (~hiecaq@user/hiecaq) hiecaq |
2025-04-11 16:02:14 +0200 | infinity0 | (~infinity0@pwned.gg) infinity0 |
2025-04-11 16:03:16 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn |
2025-04-11 16:05:17 +0200 | rbdr | (~rbdr@dynamic-002-245-152-215.2.245.pool.telefonica.de) rbdr |
2025-04-11 16:06:41 +0200 | rbdr | (~rbdr@dynamic-002-245-152-215.2.245.pool.telefonica.de) (Client Quit) |
2025-04-11 16:08:23 +0200 | acidjnk_new | (~acidjnk@p200300d6e71c4f37f95626b479c3d9ea.dip0.t-ipconnect.de) acidjnk |
2025-04-11 16:08:34 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 260 seconds) |
2025-04-11 16:10:58 +0200 | hiecaq | (~hiecaq@user/hiecaq) (Quit: ERC 5.6.0.30.1 (IRC client for GNU Emacs 30.0.92)) |
2025-04-11 16:12:06 +0200 | hiecaq | (~hiecaq@user/hiecaq) hiecaq |
2025-04-11 16:14:39 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn |
2025-04-11 16:20:04 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 260 seconds) |
2025-04-11 16:26:08 +0200 | euleritian | (~euleritia@dynamic-176-006-143-216.176.6.pool.telefonica.de) |
2025-04-11 16:27:38 +0200 | Smiles | (uid551636@id-551636.lymington.irccloud.com) (Quit: Connection closed for inactivity) |
2025-04-11 16:37:35 +0200 | Sgeo | (~Sgeo@user/sgeo) Sgeo |
2025-04-11 16:37:36 +0200 | lortabac | (~lortabac@2a01:e0a:541:b8f0:55ab:e185:7f81:54a4) (Quit: WeeChat 4.5.2) |
2025-04-11 16:44:41 +0200 | lambdabot | (~lambdabot@haskell/bot/lambdabot) (Remote host closed the connection) |
2025-04-11 16:46:13 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn |
2025-04-11 16:54:01 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 276 seconds) |
2025-04-11 16:57:57 +0200 | euleritian | (~euleritia@dynamic-176-006-143-216.176.6.pool.telefonica.de) (Ping timeout: 248 seconds) |
2025-04-11 16:58:00 +0200 | chele | (~chele@user/chele) (Remote host closed the connection) |
2025-04-11 16:58:29 +0200 | euleritian | (~euleritia@95.90.214.149) |
2025-04-11 17:00:07 +0200 | <EvanR> | instance WithPreds [a] preds where predfuncs = map assoc preds indeed looks like you tried to use a type variable from the instance head (another universe) at the value level |
2025-04-11 17:00:13 +0200 | lisbeths | (uid135845@id-135845.lymington.irccloud.com) lisbeths |
2025-04-11 17:00:31 +0200 | acidjnk_new | (~acidjnk@p200300d6e71c4f37f95626b479c3d9ea.dip0.t-ipconnect.de) (Ping timeout: 276 seconds) |
2025-04-11 17:01:02 +0200 | rbdr | (~rbdr@dynamic-002-245-152-215.2.245.pool.telefonica.de) rbdr |
2025-04-11 17:04:17 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn |
2025-04-11 17:05:19 +0200 | <EvanR> | I guess you want to find a way to reflect the type level list of things to the value level |
2025-04-11 17:05:57 +0200 | <EvanR> | usually there's a class for that, or you make one |
2025-04-11 17:09:00 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 244 seconds) |
2025-04-11 17:15:38 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn |
2025-04-11 17:16:38 +0200 | <haskellbridge> | <thirdofmay18081814goya> makes sense, ty! |
2025-04-11 17:20:54 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 260 seconds) |
2025-04-11 17:20:56 +0200 | Square2 | (~Square@user/square) Square |
2025-04-11 17:21:07 +0200 | pavonia | (~user@user/siracusa) (Quit: Bye!) |
2025-04-11 17:24:03 +0200 | Square | (~Square4@user/square) Square |
2025-04-11 17:26:43 +0200 | sprotte24 | (~sprotte24@p200300d16f1c5b003c76b51cf90902ef.dip0.t-ipconnect.de) |
2025-04-11 17:31:27 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn |
2025-04-11 17:36:27 +0200 | notdabs | (~Owner@2600:1700:69cf:9000:5926:6835:ef1d:9af3) |
2025-04-11 17:36:29 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 260 seconds) |
2025-04-11 17:38:34 +0200 | wbrawner | (~wbrawner@129.146.103.146) wbrawner |
2025-04-11 17:39:18 +0200 | Googulator | (~Googulato@81.183.235.203) (Ping timeout: 240 seconds) |
2025-04-11 17:47:13 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn |
2025-04-11 17:52:31 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 276 seconds) |
2025-04-11 17:54:43 +0200 | sayurc | (~sayurc@169.150.203.34) sayurc |
2025-04-11 17:56:25 +0200 | lambdabot | (~lambdabot@silicon.int-e.eu) |
2025-04-11 17:56:25 +0200 | lambdabot | (~lambdabot@silicon.int-e.eu) (Changing host) |
2025-04-11 17:56:25 +0200 | lambdabot | (~lambdabot@haskell/bot/lambdabot) lambdabot |
2025-04-11 17:56:25 +0200 | ChanServ | +v lambdabot |
2025-04-11 18:00:15 +0200 | euphores | (~SASL_euph@user/euphores) (Quit: Leaving.) |
2025-04-11 18:03:03 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn |
2025-04-11 18:07:46 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds) |
2025-04-11 18:07:46 +0200 | sprotte24 | (~sprotte24@p200300d16f1c5b003c76b51cf90902ef.dip0.t-ipconnect.de) (Quit: Leaving) |
2025-04-11 18:08:18 +0200 | forell | (~forell@user/forell) forell |
2025-04-11 18:09:19 +0200 | poxel | (~poxel@user/poxel) (Quit: WeeChat 4.6.0) |
2025-04-11 18:11:44 +0200 | acidjnk_new | (~acidjnk@p200300d6e71c4f37f95626b479c3d9ea.dip0.t-ipconnect.de) |
2025-04-11 18:16:38 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn |
2025-04-11 18:21:46 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 276 seconds) |
2025-04-11 18:26:45 +0200 | euleritian | (~euleritia@95.90.214.149) (Ping timeout: 252 seconds) |
2025-04-11 18:29:40 +0200 | euleritian | (~euleritia@dynamic-176-006-132-211.176.6.pool.telefonica.de) |
2025-04-11 18:32:01 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn |
2025-04-11 18:34:22 +0200 | sord937 | (~sord937@gateway/tor-sasl/sord937) (Quit: sord937) |
2025-04-11 18:37:22 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 276 seconds) |
2025-04-11 18:41:36 +0200 | j1n37 | (~j1n37@user/j1n37) j1n37 |
2025-04-11 18:43:13 +0200 | j1n37- | (~j1n37@user/j1n37) (Ping timeout: 276 seconds) |
2025-04-11 18:47:48 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn |
2025-04-11 18:49:18 +0200 | acidjnk_new | (~acidjnk@p200300d6e71c4f37f95626b479c3d9ea.dip0.t-ipconnect.de) (Ping timeout: 252 seconds) |
2025-04-11 18:50:27 +0200 | ljdarj | (~Thunderbi@user/ljdarj) (Ping timeout: 276 seconds) |
2025-04-11 18:51:22 +0200 | Googulator | (~Googulato@2a01-036d-0106-211a-315b-d519-517f-afe7.pool6.digikabel.hu) |
2025-04-11 18:52:20 +0200 | euphores | (~SASL_euph@user/euphores) euphores |
2025-04-11 18:52:51 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 265 seconds) |
2025-04-11 18:53:42 +0200 | lxsameer | (~lxsameer@Serene/lxsameer) (Ping timeout: 276 seconds) |
2025-04-11 18:54:01 +0200 | tzh | (~tzh@c-76-115-131-146.hsd1.or.comcast.net) |
2025-04-11 18:57:48 +0200 | machinedgod | (~machinedg@d108-173-18-100.abhsia.telus.net) machinedgod |
2025-04-11 19:00:57 +0200 | target_i | (~target_i@user/target-i/x-6023099) target_i |
2025-04-11 19:02:09 +0200 | acidjnk_new | (~acidjnk@p200300d6e71c4f37fdfe54bbfe31434c.dip0.t-ipconnect.de) acidjnk |
2025-04-11 19:03:35 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn |
2025-04-11 19:04:46 +0200 | hiecaq | (~hiecaq@user/hiecaq) (Quit: ERC 5.6.0.30.1 (IRC client for GNU Emacs 30.0.92)) |
2025-04-11 19:06:06 +0200 | <bwe> | How can I let the functions a variant of `TheseWriter` depending on which error has been collected on the way? https://paste.tomsmeding.com/tfhujvff |
2025-04-11 19:06:51 +0200 | sprotte24 | (~sprotte24@p200300d16f1c5b003c76b51cf90902ef.dip0.t-ipconnect.de) |
2025-04-11 19:07:25 +0200 | <EvanR> | Writer can't inspect what was written already |
2025-04-11 19:07:36 +0200 | <EvanR> | but State can |
2025-04-11 19:08:38 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 272 seconds) |
2025-04-11 19:09:02 +0200 | <bwe> | …it appears to be as simple as going over the collected list to decide which `TheseWriter` variant should be returned. However, I am stuck at `calc3` because there no return value `Int` can be constructed. |
2025-04-11 19:09:19 +0200 | <bwe> | EvanR: uuh, that sounds like this might be my initiation ritual to State. |
2025-04-11 19:12:57 +0200 | <EvanR> | Writer is "write only" |
2025-04-11 19:15:09 +0200 | <tomsmeding> | (that's why it's called "Writer") |
2025-04-11 19:15:56 +0200 | CiaoSen | (~Jura@2a02:8071:64e1:da0:5a47:caff:fe78:33db) CiaoSen |
2025-04-11 19:16:16 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn |
2025-04-11 19:17:18 +0200 | <EvanR> | smh "meaningful names" again |
2025-04-11 19:17:36 +0200 | <EvanR> | shoulda just called it the Analysis monad |
2025-04-11 19:20:55 +0200 | <ski> | an object in the category of commutative groups is always commutative. an object in the category of groups might or might not be commutative. working only with the abstract interface of "group", you cannot assume commutativity (and also cannot assume there's an example of non-commutativity) |
2025-04-11 19:20:55 +0200 | CiaoSen | (~Jura@2a02:8071:64e1:da0:5a47:caff:fe78:33db) (Ping timeout: 276 seconds) |
2025-04-11 19:21:10 +0200 | <ski> | ditto, for instances of `MonadWriter' (barring knowing anything more about the instance, so that you're "abstract"), you can only assume the operations in the interface. so, can assume writing, cannot assume reading what's been written earlier |
2025-04-11 19:21:24 +0200 | <ski> | @type censor |
2025-04-11 19:21:25 +0200 | <lambdabot> | MonadWriter w m => (w -> w) -> m a -> m a |
2025-04-11 19:21:27 +0200 | <ski> | @type pass |
2025-04-11 19:21:28 +0200 | <lambdabot> | MonadWriter w m => m (a, w -> w) -> m a |
2025-04-11 19:21:34 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 276 seconds) |
2025-04-11 19:24:05 +0200 | <ski> | (and then `Writer w' is basically the simplest possible (generic, in `w') instance of `MonadWriter') |
2025-04-11 19:26:53 +0200 | euleritian | (~euleritia@dynamic-176-006-132-211.176.6.pool.telefonica.de) (Read error: Connection reset by peer) |
2025-04-11 19:27:10 +0200 | prasad | (~Thunderbi@c-73-246-138-70.hsd1.in.comcast.net) |
2025-04-11 19:27:12 +0200 | euleritian | (~euleritia@ip5f5ad695.dynamic.kabel-deutschland.de) |
2025-04-11 19:28:13 +0200 | <bwe> | EvanR: WriteButNotRead would be more explicit for the uninitiated:) |
2025-04-11 19:28:35 +0200 | wootehfoot | (~wootehfoo@user/wootehfoot) wootehfoot |
2025-04-11 19:29:12 +0200 | <EvanR> | it's true, PHP has this weird ability to inspect anything that it's outputting to the output stream |
2025-04-11 19:29:30 +0200 | <EvanR> | which has been abused for some seriously silly things |
2025-04-11 19:29:39 +0200 | <ski> | why not `WriteButNotReadAndNotJumpEitherNorAbort' ? |
2025-04-11 19:30:29 +0200 | <EvanR> | there's also the Reader which you usually run into before / at the same time as Writer |
2025-04-11 19:30:31 +0200 | <ski> | there's a lot of stuff that `Writer' doesn't do |
2025-04-11 19:30:48 +0200 | <EvanR> | you wouldn't expect Reader to be able to write |
2025-04-11 19:31:49 +0200 | ski | prefers the names "input"/"environment"/"context"/"distribution" and "output"/"logging"/"summarizing" over "reader" and "writer", anyway .. |
2025-04-11 19:32:03 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn |
2025-04-11 19:32:37 +0200 | <ski> | mm. Unix allows write-only files, i suppose |
2025-04-11 19:33:15 +0200 | <EvanR> | "dependency injection" |
2025-04-11 19:33:33 +0200 | <EvanR> | call it that and haskell will hit the big time |
2025-04-11 19:33:39 +0200 | <ski> | how does it inspect it, btw ? |
2025-04-11 19:34:41 +0200 | ski | . o O ( "Avoid success at all costs." -- Haskell motto ) |
2025-04-11 19:35:09 +0200 | <ski> | (was it Peyton Jones ? Marlow ?) |
2025-04-11 19:35:17 +0200 | <EvanR> | PHP? you can read the output stream and alter it before it's "really" output from anyplace in the code |
2025-04-11 19:35:39 +0200 | <ski> | as in read a buffer ? |
2025-04-11 19:36:02 +0200 | <ski> | or as in dynamically replacing the current output stream, for a given block of code, nestedly ? |
2025-04-11 19:36:56 +0200 | <ski> | (Scheme does the latter. and the old Edinburgh-style I/O of Prolog also does that) |
2025-04-11 19:37:10 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 276 seconds) |
2025-04-11 19:37:23 +0200 | <EvanR> | https://www.php.net/manual/en/outcontrol.output-buffering.php |
2025-04-11 19:37:55 +0200 | <EvanR> | at some point the output buffer was used like a generic communication channel between components it seems xD |
2025-04-11 19:39:09 +0200 | peterbecich | (~Thunderbi@syn-047-229-123-186.res.spectrum.com) peterbecich |
2025-04-11 19:40:57 +0200 | <ski> | (with-output-to-string (lambda () (display (list 2 3 5 7)))) ; => "(2 3 5 7)" |
2025-04-11 19:42:18 +0200 | <EvanR> | that looks more sane than the PHP version |
2025-04-11 19:42:24 +0200 | <EvanR> | output redirect |
2025-04-11 19:43:20 +0200 | L29Ah | (~L29Ah@wikipedia/L29Ah) () |
2025-04-11 19:43:27 +0200 | peterbecich | (~Thunderbi@syn-047-229-123-186.res.spectrum.com) (Ping timeout: 252 seconds) |
2025-04-11 19:43:51 +0200 | <ski> | (`display' is kinda like `print'. a Haskell version of `with-output-to-string' might be `withOutputToString :: IO a -> IO String'. note how this established a dynamic extent, over which the output is redirected, and outside of this extent (say later, or in other threads), output is still sent to the usual place) |
2025-04-11 19:43:53 +0200 | L29Ah | (~L29Ah@wikipedia/L29Ah) L29Ah |
2025-04-11 19:45:17 +0200 | <EvanR> | what about an inner block which unredirected the output |
2025-04-11 19:45:26 +0200 | ljdarj | (~Thunderbi@user/ljdarj) ljdarj |
2025-04-11 19:45:38 +0200 | <ski> | one would have to decide whether only the `Handle'-less operations should be affected, or also if you send explicitly to `stdout' |
2025-04-11 19:45:52 +0200 | <ski> | how would it do that ? |
2025-04-11 19:46:12 +0200 | <ski> | it could redirect back to the original `Handle', possibly |
2025-04-11 19:46:34 +0200 | <EvanR> | (with-output-string (lambda () (without-output-to-stdout (lambda () (display (list 2 3 5 7)))))) |
2025-04-11 19:46:52 +0200 | <ski> | or, i suppose one might allow some kind of "temporarily pop off the top output stream from a stack". but would there be any good reason for wanting to support this ? |
2025-04-11 19:47:25 +0200 | <EvanR> | s/without/with/ |
2025-04-11 19:47:51 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn |
2025-04-11 19:50:13 +0200 | <ski> | checking Racket (which was where i tested this), i don't see an `with-output-to-port' ("port" is basically the Scheme equivalent of `Handle'). i do see `with-output-to-file', which takes a file path |
2025-04-11 19:50:45 +0200 | <EvanR> | hah... so i wonder what happens if you nest these dynamic extents |
2025-04-11 19:51:02 +0200 | <ski> | what you'd expect |
2025-04-11 19:51:12 +0200 | <EvanR> | part of the input won't appear in the string |
2025-04-11 19:51:20 +0200 | <EvanR> | part of the output won't appear in the string |
2025-04-11 19:51:30 +0200 | <ski> | yep |
2025-04-11 19:51:35 +0200 | <ski> | as intended |
2025-04-11 19:51:48 +0200 | <EvanR> | with-output-to-dev-null |
2025-04-11 19:52:02 +0200 | <ski> | it's similar to dynamic scoping of variables. or `local' in `MonadReader' |
2025-04-11 19:52:33 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds) |
2025-04-11 19:55:06 +0200 | <ski> | imagine `ReaderT (IORef Handle) IO', and looking up the current `Handle' when you do your basic I/O operations. and your "withIOHandle :: Handle -> ReaderT (IORef Handle) IO a -> ReaderT (IORef Handle) IO a' operation sets the ref, executes the action, and then sets back to the old handle (this would ignore multiple threads, though) |
2025-04-11 19:57:34 +0200 | <ski> | (or, i guess, using a top-level `IORef', instead of `ReaderT', if you prefer ..) |
2025-04-11 19:58:17 +0200 | <EvanR> | provocative idea |
2025-04-11 19:59:55 +0200 | <ski> | not really that much, imho |
2025-04-11 20:00:11 +0200 | <ski> | i suppose it depends on perspective |
2025-04-11 20:00:23 +0200 | <ski> | but it would make things more composable |
2025-04-11 20:00:35 +0200 | <EvanR> | globals are usually frowned upon xD |
2025-04-11 20:00:42 +0200 | <ski> | being able to run an action more like it was a separate process |
2025-04-11 20:00:56 +0200 | <ski> | (without actually having to spawn a separate process) |
2025-04-11 20:01:23 +0200 | <EvanR> | otoh running an IO action with a custom set of "global" resources of all sorts, like the output handle, the RNG, etc |
2025-04-11 20:01:36 +0200 | <monochrom> | stdin/out/err and FDs 0,1,2 have always been global variables (or worse). |
2025-04-11 20:01:45 +0200 | <ski> | there's already stuff like |
2025-04-11 20:01:47 +0200 | <ski> | @type System.Posix.IO.dupTo |
2025-04-11 20:01:48 +0200 | <lambdabot> | System.Posix.Types.Fd -> System.Posix.Types.Fd -> IO System.Posix.Types.Fd |
2025-04-11 20:01:48 +0200 | <ski> | yep |
2025-04-11 20:02:00 +0200 | <EvanR> | the errno |
2025-04-11 20:02:20 +0200 | <EvanR> | the FP rounding mode |
2025-04-11 20:02:50 +0200 | <monochrom> | I actually gave my students the unix assignment of recursive stdin/out redirection. |
2025-04-11 20:03:02 +0200 | <ski> | yes. those are generally bad for composability |
2025-04-11 20:03:38 +0200 | <monochrom> | https://www.cs.utoronto.ca/~trebla/CSCB09-latest/a3/ |
2025-04-11 20:03:39 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn |
2025-04-11 20:03:49 +0200 | inca | (~inca@pool-96-255-212-224.washdc.fios.verizon.net) (Ping timeout: 276 seconds) |
2025-04-11 20:07:11 +0200 | inca | (~inca@pool-96-255-212-224.washdc.fios.verizon.net) |
2025-04-11 20:08:17 +0200 | krei-se- | (~krei-se@p200300f1cfff4b89da9ef3fffe7fdac8.dip0.t-ipconnect.de) (Quit: ZNC 1.9.1 - https://znc.in) |
2025-04-11 20:08:18 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 245 seconds) |
2025-04-11 20:13:49 +0200 | krei-se | (~krei-se@p50829a06.dip0.t-ipconnect.de) krei-se |
2025-04-11 20:15:19 +0200 | euleritian | (~euleritia@ip5f5ad695.dynamic.kabel-deutschland.de) (Ping timeout: 260 seconds) |
2025-04-11 20:16:12 +0200 | euleritian | (~euleritia@dynamic-176-006-132-211.176.6.pool.telefonica.de) |
2025-04-11 20:16:38 +0200 | inca | (~inca@pool-96-255-212-224.washdc.fios.verizon.net) (Ping timeout: 245 seconds) |
2025-04-11 20:17:37 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn |
2025-04-11 20:21:22 +0200 | acidjnk_new | (~acidjnk@p200300d6e71c4f37fdfe54bbfe31434c.dip0.t-ipconnect.de) (Ping timeout: 276 seconds) |
2025-04-11 20:22:01 +0200 | jespada | (~jespada@r179-25-2-204.dialup.adsl.anteldata.net.uy) (Quit: My Mac has gone to sleep. ZZZzzz…) |
2025-04-11 20:22:54 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 260 seconds) |
2025-04-11 20:33:26 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn |
2025-04-11 20:38:28 +0200 | euleritian | (~euleritia@dynamic-176-006-132-211.176.6.pool.telefonica.de) (Read error: Connection reset by peer) |
2025-04-11 20:38:47 +0200 | euleritian | (~euleritia@ip5f5ad695.dynamic.kabel-deutschland.de) |
2025-04-11 20:39:44 +0200 | L29Ah | (~L29Ah@wikipedia/L29Ah) () |
2025-04-11 20:40:15 +0200 | L29Ah | (~L29Ah@wikipedia/L29Ah) L29Ah |
2025-04-11 20:40:52 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 276 seconds) |
2025-04-11 20:45:52 +0200 | L29Ah | (~L29Ah@wikipedia/L29Ah) () |
2025-04-11 20:46:06 +0200 | L29Ah | (~L29Ah@wikipedia/L29Ah) L29Ah |
2025-04-11 20:47:01 +0200 | hololeap | (~quassel@user/hololeap) (Quit: Bye) |
2025-04-11 20:47:40 +0200 | rbdr | (~rbdr@dynamic-002-245-152-215.2.245.pool.telefonica.de) (Quit: WeeChat 4.6.0) |
2025-04-11 20:48:18 +0200 | weary-traveler | (~user@user/user363627) (Remote host closed the connection) |
2025-04-11 20:48:32 +0200 | rbdr | (~rbdr@dynamic-002-245-152-215.2.245.pool.telefonica.de) rbdr |
2025-04-11 20:49:07 +0200 | hololeap | (~quassel@user/hololeap) hololeap |
2025-04-11 20:51:28 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn |
2025-04-11 20:52:58 +0200 | jespada | (~jespada@r179-25-2-204.dialup.adsl.anteldata.net.uy) jespada |
2025-04-11 20:55:37 +0200 | sayurc_ | (~sayurc@177.136.41.195) sayurc |
2025-04-11 20:55:48 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds) |
2025-04-11 20:55:49 +0200 | sayurc | (~sayurc@169.150.203.34) (Ping timeout: 276 seconds) |
2025-04-11 20:58:27 +0200 | j1n37- | (~j1n37@user/j1n37) j1n37 |
2025-04-11 20:59:11 +0200 | ljdarj1 | (~Thunderbi@user/ljdarj) ljdarj |
2025-04-11 20:59:43 +0200 | j1n37 | (~j1n37@user/j1n37) (Ping timeout: 276 seconds) |
2025-04-11 21:00:06 +0200 | caconym | (~caconym@user/caconym) (Quit: bye) |
2025-04-11 21:00:48 +0200 | caconym | (~caconym@user/caconym) caconym |
2025-04-11 21:00:58 +0200 | acidjnk_new | (~acidjnk@p200300d6e71c4f3760e43f0ee11d5618.dip0.t-ipconnect.de) |
2025-04-11 21:01:55 +0200 | ljdarj | (~Thunderbi@user/ljdarj) (Ping timeout: 252 seconds) |
2025-04-11 21:01:55 +0200 | ljdarj1 | ljdarj |
2025-04-11 21:06:51 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn |
2025-04-11 21:11:32 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 244 seconds) |
2025-04-11 21:17:16 +0200 | sayurc_ | (~sayurc@177.136.41.195) (Ping timeout: 276 seconds) |
2025-04-11 21:17:17 +0200 | sayurc | (~sayurc@169.150.203.34) sayurc |
2025-04-11 21:18:38 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn |
2025-04-11 21:20:00 +0200 | a_fantom | (~fantom@2.219.56.221) |
2025-04-11 21:20:06 +0200 | fantom | (~fantom@2.219.56.221) (Ping timeout: 244 seconds) |
2025-04-11 21:21:32 +0200 | __jmcantrell__ | (~weechat@user/jmcantrell) jmcantrell |
2025-04-11 21:21:33 +0200 | jmcantrell | (644f1bed9a@user/jmcantrell) (Killed (tungsten.libera.chat (Nickname regained by services))) |
2025-04-11 21:21:33 +0200 | __jmcantrell__ | jmcantrell |
2025-04-11 21:21:42 +0200 | jmcantrell_ | (644f1bed9a@user/jmcantrell) jmcantrell |
2025-04-11 21:23:22 +0200 | fantom | (~fantom@2.219.56.221) |
2025-04-11 21:23:46 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 276 seconds) |
2025-04-11 21:24:01 +0200 | sayurc_ | (~sayurc@177.136.41.195) sayurc |
2025-04-11 21:24:25 +0200 | sayurc | (~sayurc@169.150.203.34) (Ping timeout: 276 seconds) |
2025-04-11 21:24:45 +0200 | a_fantom | (~fantom@2.219.56.221) (Ping timeout: 244 seconds) |
2025-04-11 21:26:02 +0200 | Googulator | (~Googulato@2a01-036d-0106-211a-315b-d519-517f-afe7.pool6.digikabel.hu) (Quit: Client closed) |
2025-04-11 21:26:18 +0200 | Googulator | (~Googulato@2a01-036d-0106-211a-315b-d519-517f-afe7.pool6.digikabel.hu) |
2025-04-11 21:26:58 +0200 | pavonia | (~user@user/siracusa) siracusa |
2025-04-11 21:27:04 +0200 | j1n37 | (~j1n37@user/j1n37) j1n37 |
2025-04-11 21:27:15 +0200 | vanishingideal | (~vanishing@user/vanishingideal) vanishingideal |
2025-04-11 21:28:19 +0200 | j1n37- | (~j1n37@user/j1n37) (Ping timeout: 276 seconds) |
2025-04-11 21:34:25 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn |
2025-04-11 21:37:46 +0200 | gmg | (~user@user/gehmehgeh) (Quit: Leaving) |
2025-04-11 21:39:06 +0200 | Owner_ | (~Owner@2600:1700:69cf:9000:a8ba:1089:2e3e:b3d1) |
2025-04-11 21:39:21 +0200 | jmcantrell | (~weechat@user/jmcantrell) (Quit: WeeChat 4.6.1) |
2025-04-11 21:39:21 +0200 | jmcantrell_ | jmcantrell |
2025-04-11 21:40:01 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 276 seconds) |
2025-04-11 21:42:04 +0200 | notdabs | (~Owner@2600:1700:69cf:9000:5926:6835:ef1d:9af3) (Ping timeout: 260 seconds) |
2025-04-11 21:44:56 +0200 | euleritian | (~euleritia@ip5f5ad695.dynamic.kabel-deutschland.de) (Read error: Connection reset by peer) |
2025-04-11 21:45:30 +0200 | euleritian | (~euleritia@95.90.214.149) |
2025-04-11 21:49:09 +0200 | __jmcantrell__ | (~weechat@user/jmcantrell) jmcantrell |
2025-04-11 21:49:13 +0200 | jmcantrell | Guest8428 |
2025-04-11 21:49:13 +0200 | Guest8428 | (644f1bed9a@user/jmcantrell) (Killed (silver.libera.chat (Nickname regained by services))) |
2025-04-11 21:49:13 +0200 | __jmcantrell__ | jmcantrell |
2025-04-11 21:49:26 +0200 | jmcantrell_ | (644f1bed9a@user/jmcantrell) jmcantrell |
2025-04-11 21:50:13 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn |
2025-04-11 21:52:02 +0200 | Owner_ | (~Owner@2600:1700:69cf:9000:a8ba:1089:2e3e:b3d1) (Quit: Leaving) |
2025-04-11 21:52:19 +0200 | notdabs | (~Owner@2600:1700:69cf:9000:a8ba:1089:2e3e:b3d1) |
2025-04-11 21:55:37 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 276 seconds) |
2025-04-11 21:56:46 +0200 | sayurc | (~sayurc@169.150.203.34) sayurc |
2025-04-11 21:56:47 +0200 | sayurc_ | (~sayurc@177.136.41.195) (Ping timeout: 244 seconds) |
2025-04-11 21:58:30 +0200 | acidjnk_new | (~acidjnk@p200300d6e71c4f3760e43f0ee11d5618.dip0.t-ipconnect.de) (Ping timeout: 252 seconds) |
2025-04-11 21:58:44 +0200 | acidjnk_new | (~acidjnk@p200300d6e71c4f3781d551119ad8c4a9.dip0.t-ipconnect.de) acidjnk |
2025-04-11 21:59:25 +0200 | rvalue- | (~rvalue@user/rvalue) rvalue |
2025-04-11 22:00:23 +0200 | rvalue | (~rvalue@user/rvalue) (Ping timeout: 265 seconds) |
2025-04-11 22:02:19 +0200 | tromp | (~textual@2001:1c00:3487:1b00:d08a:2428:1bec:2dd5) |
2025-04-11 22:06:00 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn |
2025-04-11 22:08:10 +0200 | rvalue- | rvalue |
2025-04-11 22:09:22 +0200 | vanishingideal | (~vanishing@user/vanishingideal) (Remote host closed the connection) |
2025-04-11 22:10:51 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds) |
2025-04-11 22:19:38 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn |
2025-04-11 22:23:05 +0200 | cheater | (~Username@user/cheater) cheater |
2025-04-11 22:24:08 +0200 | rekahsoft | (~rekahsoft@bras-base-orllon1103w-grc-15-174-95-4-83.dsl.bell.ca) rekahsoft |
2025-04-11 22:27:28 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 276 seconds) |
2025-04-11 22:28:18 +0200 | michalz | (~michalz@185.246.207.205) (Remote host closed the connection) |
2025-04-11 22:37:42 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn |
2025-04-11 22:42:02 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds) |
2025-04-11 22:43:35 +0200 | <EvanR> | in classic parser with external interface String -> Either Error Expr what's probably happening is a big expression is built up and you can only access it after it is known there was no error somewhere (result finally evaluates to Right something) |
2025-04-11 22:44:14 +0200 | <EvanR> | but if it is the case that the likelihood of an error is very low, and you want to start processing the Expr lazily |
2025-04-11 22:44:45 +0200 | <EvanR> | while taking some big performance trade off if there really is an error |
2025-04-11 22:45:09 +0200 | <EvanR> | is there a type for that |
2025-04-11 22:45:34 +0200 | <tomsmeding> | IO, and throw an IO exception (the error case is actually quite fast here) |
2025-04-11 22:46:12 +0200 | <EvanR> | IO... lazily... huh |
2025-04-11 22:46:14 +0200 | <tomsmeding> | ah no, I'm misremembering: it was using `String -> Expr` and throwing `error` on an error, then catching that in IO |
2025-04-11 22:48:02 +0200 | <EvanR> | ok that sounds pretty good but could you somehow do it without IO |
2025-04-11 22:48:12 +0200 | <tomsmeding> | you cannot catch asynchronous exceptions without IO, so no |
2025-04-11 22:48:52 +0200 | <EvanR> | I seem to remember some suggestion from ski a million years ago ... like ... put the processing within the parser or something |
2025-04-11 22:49:21 +0200 | <tomsmeding> | as in, instead of parsing an arithmetic expression, parse the evaluation of that expression? |
2025-04-11 22:49:59 +0200 | <tomsmeding> | I've seen students do that when told to write a parser that just produces a syntax tree (their parser only ever produced the AST node for a literal number -- the evaluated expression) |
2025-04-11 22:50:16 +0200 | <EvanR> | arithmetic might be a long shot because of reasons |
2025-04-11 22:50:38 +0200 | <EvanR> | but something that could be done lazily |
2025-04-11 22:51:04 +0200 | wootehfoot | (~wootehfoo@user/wootehfoot) (Read error: Connection reset by peer) |
2025-04-11 22:51:11 +0200 | <EvanR> | like size of expression |
2025-04-11 22:51:13 +0200 | <EvanR> | or something |
2025-04-11 22:51:14 +0200 | <tomsmeding> | if you put the processing inside the parser, you don't get automatic laziness -- you are instead forced to manually compute a little part of the result each time a little part of the expression becomes available |