When I check this module with dialyzer: -module(a). -export([a/0]). a() -> F = fun(F, WaitTime) -> receive after WaitTime -> ok end, F(F, 3000) end, F(F, 1000). I get: {a,'-a/0-fun-0-',2}: Trying to use fun with type ((((none(),none()) -> none()),1000 | 3000) -> none()) with arguments (((((none(),none()) -> none()),1000 | 3000) -> none()),3000)! /martin