型クラス NFData のインスタンスについて質問です。

import Control.Monad.Par

data TestT a = TestD a

f x = do
 var <- new
 put var (TestD x)
 return var

この関数 f の型は f :: NFData (TestT a) => a -> Par (IVar (TestT a)) です。

TestT a 型が型クラス NFData のインスタンスであるという文脈を指定するのは分かります。
put 関数はその引数として NFData のインスタンス型(とそれを型変数としたIvar型)の値を取り、
ここでは put 関数に TestT a 型(および IVar (TestT a) 型)の値に適用しているので。

しかし、まだ TestT a 型を型クラス NFData のインスタンスとして定義してはいません。
それにも関わらず、なぜかエラーもなくコンパイルが通ってしまいます。

どうしてでしょうか?


GHC のバージョン : 7.6.3