Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Error code E0631

This error indicates a type mismatch in closure arguments.

Erroneous code example:

fn foo<F: Fn(i32)>(f: F) { } fn main() { foo(|x: &str| {}); }

The error occurs because foo accepts a closure that takes an i32 argument, but in main, it is passed a closure with a &str argument.

This can be resolved by changing the type annotation or removing it entirely if it can be inferred.

fn foo<F: Fn(i32)>(f: F) { } fn main() { foo(|x: i32| {}); }