Why do I get the error “cannot infer type” when using futures::ok?



.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty height:90px;width:728px;box-sizing:border-box;








1















I know there is join_all but it cannot infer type:



extern crate futures; // 0.1.25

use futures::future::ok as fut_ok;

fn main()
let tasks = vec![fut_ok(1), fut_ok(2), fut_ok(3)];
println!(":?", futures::future::join_all(tasks).wait().unwrap());



I got this error:



let tasks = vec![fut_ok(1), fut_ok(2), fut_ok(3)];
----- ^^^^^^ cannot infer type for `E`
|
consider giving `tasks` a type









share|improve this question
























  • Have you consider to consider giving tasks a type ? let tasks : Vec<FutureResult<_, ()>> = vec![fut_ok(1u32), fut_ok(2), fut_ok(3)]; or let tasks = vec![fut_ok::<_, ()>(1), fut_ok(2), fut_ok(3)];

    – Stargateur
    Nov 15 '18 at 13:34


















1















I know there is join_all but it cannot infer type:



extern crate futures; // 0.1.25

use futures::future::ok as fut_ok;

fn main()
let tasks = vec![fut_ok(1), fut_ok(2), fut_ok(3)];
println!(":?", futures::future::join_all(tasks).wait().unwrap());



I got this error:



let tasks = vec![fut_ok(1), fut_ok(2), fut_ok(3)];
----- ^^^^^^ cannot infer type for `E`
|
consider giving `tasks` a type









share|improve this question
























  • Have you consider to consider giving tasks a type ? let tasks : Vec<FutureResult<_, ()>> = vec![fut_ok(1u32), fut_ok(2), fut_ok(3)]; or let tasks = vec![fut_ok::<_, ()>(1), fut_ok(2), fut_ok(3)];

    – Stargateur
    Nov 15 '18 at 13:34














1












1








1








I know there is join_all but it cannot infer type:



extern crate futures; // 0.1.25

use futures::future::ok as fut_ok;

fn main()
let tasks = vec![fut_ok(1), fut_ok(2), fut_ok(3)];
println!(":?", futures::future::join_all(tasks).wait().unwrap());



I got this error:



let tasks = vec![fut_ok(1), fut_ok(2), fut_ok(3)];
----- ^^^^^^ cannot infer type for `E`
|
consider giving `tasks` a type









share|improve this question
















I know there is join_all but it cannot infer type:



extern crate futures; // 0.1.25

use futures::future::ok as fut_ok;

fn main()
let tasks = vec![fut_ok(1), fut_ok(2), fut_ok(3)];
println!(":?", futures::future::join_all(tasks).wait().unwrap());



I got this error:



let tasks = vec![fut_ok(1), fut_ok(2), fut_ok(3)];
----- ^^^^^^ cannot infer type for `E`
|
consider giving `tasks` a type






rust future






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited Nov 16 '18 at 2:05









Shepmaster

162k16333477




162k16333477










asked Nov 15 '18 at 13:09









rofrolrofrol

7,92534649




7,92534649












  • Have you consider to consider giving tasks a type ? let tasks : Vec<FutureResult<_, ()>> = vec![fut_ok(1u32), fut_ok(2), fut_ok(3)]; or let tasks = vec![fut_ok::<_, ()>(1), fut_ok(2), fut_ok(3)];

    – Stargateur
    Nov 15 '18 at 13:34


















  • Have you consider to consider giving tasks a type ? let tasks : Vec<FutureResult<_, ()>> = vec![fut_ok(1u32), fut_ok(2), fut_ok(3)]; or let tasks = vec![fut_ok::<_, ()>(1), fut_ok(2), fut_ok(3)];

    – Stargateur
    Nov 15 '18 at 13:34

















Have you consider to consider giving tasks a type ? let tasks : Vec<FutureResult<_, ()>> = vec![fut_ok(1u32), fut_ok(2), fut_ok(3)]; or let tasks = vec![fut_ok::<_, ()>(1), fut_ok(2), fut_ok(3)];

– Stargateur
Nov 15 '18 at 13:34






Have you consider to consider giving tasks a type ? let tasks : Vec<FutureResult<_, ()>> = vec![fut_ok(1u32), fut_ok(2), fut_ok(3)]; or let tasks = vec![fut_ok::<_, ()>(1), fut_ok(2), fut_ok(3)];

– Stargateur
Nov 15 '18 at 13:34













2 Answers
2






active

oldest

votes


















4














The problem is that any future may in theory return an error. So the FutureResult type (which is returned from fut_ok) is generic with two type parameters: a type T for success and a type E for errors.



If this was real code instead of a toy example, you would have some error handling code that would allow the compiler to infer type E. In this case you need to specify it, but since you don't use it you can use the empty type (). So either of the following should work:



let tasks: Vec<FutureResult<_, ()>> = vec![fut_ok(1), fut_ok(2), fut_ok(3)];


or



let tasks = vec![fut_ok::<_, ()>(1), fut_ok(2), fut_ok(3)];


Note that the first is what the compiler means when it says: "consider giving tasks a type".






share|improve this answer























  • nice. And how to print the result? println!(":?", futures::future::join_all(tasks).wait()?); the trait std::error::Error is not implemented for ()

    – rofrol
    Nov 15 '18 at 13:38


















0














Full example



extern crate futures; // 0.1.25
use futures::future::ok as fut_ok;
use futures::future::FutureResult;
fn main() _


Prints Ok([1, 2, 3])






share|improve this answer























    Your Answer






    StackExchange.ifUsing("editor", function ()
    StackExchange.using("externalEditor", function ()
    StackExchange.using("snippets", function ()
    StackExchange.snippets.init();
    );
    );
    , "code-snippets");

    StackExchange.ready(function()
    var channelOptions =
    tags: "".split(" "),
    id: "1"
    ;
    initTagRenderer("".split(" "), "".split(" "), channelOptions);

    StackExchange.using("externalEditor", function()
    // Have to fire editor after snippets, if snippets enabled
    if (StackExchange.settings.snippets.snippetsEnabled)
    StackExchange.using("snippets", function()
    createEditor();
    );

    else
    createEditor();

    );

    function createEditor()
    StackExchange.prepareEditor(
    heartbeatType: 'answer',
    autoActivateHeartbeat: false,
    convertImagesToLinks: true,
    noModals: true,
    showLowRepImageUploadWarning: true,
    reputationToPostImages: 10,
    bindNavPrevention: true,
    postfix: "",
    imageUploader:
    brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
    contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
    allowUrls: true
    ,
    onDemand: true,
    discardSelector: ".discard-answer"
    ,immediatelyShowMarkdownHelp:true
    );



    );













    draft saved

    draft discarded


















    StackExchange.ready(
    function ()
    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53320236%2fwhy-do-i-get-the-error-cannot-infer-type-when-using-futuresok%23new-answer', 'question_page');

    );

    Post as a guest















    Required, but never shown

























    2 Answers
    2






    active

    oldest

    votes








    2 Answers
    2






    active

    oldest

    votes









    active

    oldest

    votes






    active

    oldest

    votes









    4














    The problem is that any future may in theory return an error. So the FutureResult type (which is returned from fut_ok) is generic with two type parameters: a type T for success and a type E for errors.



    If this was real code instead of a toy example, you would have some error handling code that would allow the compiler to infer type E. In this case you need to specify it, but since you don't use it you can use the empty type (). So either of the following should work:



    let tasks: Vec<FutureResult<_, ()>> = vec![fut_ok(1), fut_ok(2), fut_ok(3)];


    or



    let tasks = vec![fut_ok::<_, ()>(1), fut_ok(2), fut_ok(3)];


    Note that the first is what the compiler means when it says: "consider giving tasks a type".






    share|improve this answer























    • nice. And how to print the result? println!(":?", futures::future::join_all(tasks).wait()?); the trait std::error::Error is not implemented for ()

      – rofrol
      Nov 15 '18 at 13:38















    4














    The problem is that any future may in theory return an error. So the FutureResult type (which is returned from fut_ok) is generic with two type parameters: a type T for success and a type E for errors.



    If this was real code instead of a toy example, you would have some error handling code that would allow the compiler to infer type E. In this case you need to specify it, but since you don't use it you can use the empty type (). So either of the following should work:



    let tasks: Vec<FutureResult<_, ()>> = vec![fut_ok(1), fut_ok(2), fut_ok(3)];


    or



    let tasks = vec![fut_ok::<_, ()>(1), fut_ok(2), fut_ok(3)];


    Note that the first is what the compiler means when it says: "consider giving tasks a type".






    share|improve this answer























    • nice. And how to print the result? println!(":?", futures::future::join_all(tasks).wait()?); the trait std::error::Error is not implemented for ()

      – rofrol
      Nov 15 '18 at 13:38













    4












    4








    4







    The problem is that any future may in theory return an error. So the FutureResult type (which is returned from fut_ok) is generic with two type parameters: a type T for success and a type E for errors.



    If this was real code instead of a toy example, you would have some error handling code that would allow the compiler to infer type E. In this case you need to specify it, but since you don't use it you can use the empty type (). So either of the following should work:



    let tasks: Vec<FutureResult<_, ()>> = vec![fut_ok(1), fut_ok(2), fut_ok(3)];


    or



    let tasks = vec![fut_ok::<_, ()>(1), fut_ok(2), fut_ok(3)];


    Note that the first is what the compiler means when it says: "consider giving tasks a type".






    share|improve this answer













    The problem is that any future may in theory return an error. So the FutureResult type (which is returned from fut_ok) is generic with two type parameters: a type T for success and a type E for errors.



    If this was real code instead of a toy example, you would have some error handling code that would allow the compiler to infer type E. In this case you need to specify it, but since you don't use it you can use the empty type (). So either of the following should work:



    let tasks: Vec<FutureResult<_, ()>> = vec![fut_ok(1), fut_ok(2), fut_ok(3)];


    or



    let tasks = vec![fut_ok::<_, ()>(1), fut_ok(2), fut_ok(3)];


    Note that the first is what the compiler means when it says: "consider giving tasks a type".







    share|improve this answer












    share|improve this answer



    share|improve this answer










    answered Nov 15 '18 at 13:34









    JmbJmb

    2,960525




    2,960525












    • nice. And how to print the result? println!(":?", futures::future::join_all(tasks).wait()?); the trait std::error::Error is not implemented for ()

      – rofrol
      Nov 15 '18 at 13:38

















    • nice. And how to print the result? println!(":?", futures::future::join_all(tasks).wait()?); the trait std::error::Error is not implemented for ()

      – rofrol
      Nov 15 '18 at 13:38
















    nice. And how to print the result? println!(":?", futures::future::join_all(tasks).wait()?); the trait std::error::Error is not implemented for ()

    – rofrol
    Nov 15 '18 at 13:38





    nice. And how to print the result? println!(":?", futures::future::join_all(tasks).wait()?); the trait std::error::Error is not implemented for ()

    – rofrol
    Nov 15 '18 at 13:38













    0














    Full example



    extern crate futures; // 0.1.25
    use futures::future::ok as fut_ok;
    use futures::future::FutureResult;
    fn main() _


    Prints Ok([1, 2, 3])






    share|improve this answer



























      0














      Full example



      extern crate futures; // 0.1.25
      use futures::future::ok as fut_ok;
      use futures::future::FutureResult;
      fn main() _


      Prints Ok([1, 2, 3])






      share|improve this answer

























        0












        0








        0







        Full example



        extern crate futures; // 0.1.25
        use futures::future::ok as fut_ok;
        use futures::future::FutureResult;
        fn main() _


        Prints Ok([1, 2, 3])






        share|improve this answer













        Full example



        extern crate futures; // 0.1.25
        use futures::future::ok as fut_ok;
        use futures::future::FutureResult;
        fn main() _


        Prints Ok([1, 2, 3])







        share|improve this answer












        share|improve this answer



        share|improve this answer










        answered Nov 15 '18 at 15:20









        rofrolrofrol

        7,92534649




        7,92534649



























            draft saved

            draft discarded
















































            Thanks for contributing an answer to Stack Overflow!


            • Please be sure to answer the question. Provide details and share your research!

            But avoid


            • Asking for help, clarification, or responding to other answers.

            • Making statements based on opinion; back them up with references or personal experience.

            To learn more, see our tips on writing great answers.




            draft saved


            draft discarded














            StackExchange.ready(
            function ()
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53320236%2fwhy-do-i-get-the-error-cannot-infer-type-when-using-futuresok%23new-answer', 'question_page');

            );

            Post as a guest















            Required, but never shown





















































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown

































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown







            Popular posts from this blog

            Use pre created SQLite database for Android project in kotlin

            Darth Vader #20

            Ondo