型推論について質問です。

次の型の関数があるとします。
one :: x -> Int
one n = 1

rev :: String -> String
rev = reverse

このとき、次の式の型が String -> Int になる理由が分かりません。
fmap one rev

fmap の型は (a -> b) -> f a -> f b ですよね。
自分では、まず (a -> b) を one の型より (x -> Int) と推論したのですが、
すると b は Int となって、ここで既に結果の型と違い、躓きました。
それとも、これで合ってるのでしょうか。

どなたか a は〜から〜と推論できるなどと、
詳しく演繹の様子を示していただけないでしょうか。