Monad Ambiguous type variable

例は IFPH 10章より。

data Term = Con Int | Div Term Term 

evalId (Con x) = return x
evalId (Div t u) = do x <- evalId t
                      y <- evalId u
                      return (x `div` y)

上記は意図的に evalId の型を指定していない。型を調べると、

:t evalId
evalId :: Monad m => Term -> m Int

と推論されていて、具体的なモナド(例えば Identity モナド) を指定しないと動かないように思える。実際、別の変数に束縛しようとするとエラーになる。にもかかわらず、ghci で実行すると実行できてしまう。

:t evalId (Con 13)
=>
evalId (Con 13) :: Monad m => m Int

let x = evalId (Con 0)
=>
Ambiguous type variable m0 in the constraint:
  (Monad m0) arising from a use of evalId

evalId (Con 13)
=>
13

これはいったい何が起きているのだろう?