-module(funtil). -compile([no_auto_import, nowarn_unused_vars]). -export([void/1, never/1, fix/1, fix2/1, fix3/1]). -export_type([never/0]). -opaque never() :: {just_one_more, never()}. -spec void(any()) -> nil. void(_) -> nil. -spec never(never()) -> any(). never(Val) -> case Val of {just_one_more, X} -> never(X) end. -spec fix(fun((fun((EXL) -> EXO), EXL) -> EXO)) -> fun((EXL) -> EXO). fix(F) -> fun(X) -> F(fix(F), X) end. -spec fix2(fun((fun((EXP, EXQ) -> EXU), EXP, EXQ) -> EXU)) -> fun((EXP, EXQ) -> EXU). fix2(F) -> fun(X, Y) -> F(fix2(F), X, Y) end. -spec fix3(fun((fun((EXV, EXW, EXX) -> EYC), EXV, EXW, EXX) -> EYC)) -> fun((EXV, EXW, EXX) -> EYC). fix3(F) -> fun(X, Y, Z) -> F(fix3(F), X, Y, Z) end.