Concurrent Clean : 誤報 value restrictionというやつか

次のプログラムが型エラーになった。これは、value restrictionというやつではないか?

Start = f id 1 "a"

id a = a

f :: (a -> a) Int String -> (Int, String)
f g i s = (g i, g s)

Haskellにはvalue restrictionはないと聞いていたので、Cleanもそうなのかと思っていたのだけれど・・・

      • -

違いました。

f :: (A.a: a -> a) Int String -> (Int, String)
f g i s = (g i, g s)

と書かなければいけなかったのでした。
Cleanの場合、関数宣言の型とそれ以外の型の書き方は、微妙に違うので混乱します。