• BB_C@programming.dev
    link
    fedilink
    arrow-up
    2
    arrow-down
    1
    ·
    1 month ago

    (stating the obvious)

    You can already :

    res_res??;
    // or
    res_res?.map_err(..)?;
    // or
    res_res.map_err(...)??;
    // or
    res_res.map_err(...)?.map_err(...)?;
    

    With res_res.flatten()?, you don’t know where you got the error anymore, unless the error type itself is “flatten-aware”, which is a bigger adjustment than the simple ergonomic library addition, and can become itself a problematic pattern with its own disadvantages.

    • TehPers@beehaw.org
      link
      fedilink
      English
      arrow-up
      8
      ·
      1 month ago

      A lot of code doesn’t really care where the error came from. This can be useful when using anyhow in application code, for example.

      For library code, I don’t see myself really using it, so it’ll live next to all the other functions I don’t use there I guess.

    • anton@lemmy.blahaj.zone
      link
      fedilink
      arrow-up
      5
      ·
      1 month ago

      You can already :

      res_res??;
      

      I think it’s more for cases where you don’t want to return, like

      let new_res = old_res.map(func).flatten();
      
      • lad@programming.dev
        link
        fedilink
        English
        arrow-up
        5
        ·
        1 month ago

        This, it’s not a thing that happens often, but there were a couple of times when flatten would’ve been handy

        This was also usually a result of a chain of and_then that could do with some flattening. This could’ve been rewritten as a separate function to make use of ?, but it seems to be a bigger trouble than use

    • Ephera@lemmy.ml
      link
      fedilink
      English
      arrow-up
      3
      ·
      1 month ago

      Yeah, I can see your point. It’s certainly not something you should overuse, just because it’s convenient.

      I feel like the redeeming points are that it will only be available, if it’s the same error type. And if you use a catch-all error type, like anyhow::Error, which makes it likely for nested results to use the same error type, then it’s likely that you can use ?? already.
      So, personally, I feel like it isn’t something that juniors will readily/wrongfully incorporate into their error handling routine and rather it is a tool that’s available for when you know what you’re doing.

    • lad@programming.dev
      link
      fedilink
      English
      arrow-up
      2
      ·
      1 month ago

      Wait, so you say res_res?? gives more information than res_res.flatten()?, do you?

      I mean, this is a very trivial case and not best suited for flatten at all, but the information is lost in exactly the same way