FunctionalDependencies オプションについて質問です。

下記のプログラムで class Cook に型依存性(と言うのかな?) a -> b を指定する必要性が分かりません。

------------------------------
data Nasu = Nasu Int

class Cook a b where
 cook :: a -> b

instance Cook Nasu Nasu where
 cook (Nasu n) = Nasu (n+1)

main :: IO ()
main = do
 let a = Nasu 1
 let b = cook (cook a) :: Nasu
 return ()
------------------------------

cook (cook a) :: Nasu を cook ((cook a) :: Nasu) :: Nasu に変えればオプション不要でコンパイルが通ります。

ですが、このプログラムなら (cook x) :: Nasu の x は Nasu 以外にありえないので、
現状のままでも cook (cook a) :: Nasu の内側の cook a は Nasu だと推論されても良さそうなんですが・・・

デフォルトでは、cook ::a -> b の a から b も、逆に b から a も推論しないのでしょうか?