haskellやocamlでは、取り敢えず関数名と引数だけ書いて(型は書かない)
中身はundefinedやassert falseにしておき(つまり、まだ実装しない)
関数を呼び出す側を先に実装する手法をとる事が良くある。
いわゆるトップダウン型の実装ね。関数型と相性が良いけど、仕様が明確な大規模開発にも向いてる。

で、そのときは呼び出し側の使われ方から型推論できるから
引数の型を書かなくても型推論できる。
ドカタ言語使いには想像も出来ないだろうけど、そういう世界もあるってこと。