Concurrent Clean : ファイル入出力

今朝はMLに思いつきでどうでもいいメールを投げてしまいましたが、あのあと、もっと便利なやり方を思いつきました。

class << a
where
  (<<) infixl 0 :: *File a -> *File

instance << {#Char}
where
  (<<) f s = fwrites s f

instance << Int
where
  (<<) f i = fwritei i f

みたいに定義すれば、

printStringAndInt str1 num2 str3 f
  # f = f << str1 << num2 << str3
  ...

と書けるはず。
・・・なんかC++みたいだな。
ちなみに、文字列リストは、このように。

printStringList lst f
  # f = foldl (<<) f lst
  ...
      • -

っと、MLに返事がきていた。なになに・・・
・・・全く同じ演算子がStdFileに定義されてるじゃん _| ̄|○

class (<<<) infixl a :: !*File !a -> *File
/*	Overloaded write to file */

instance <<< Int
instance <<< Char
instance <<< {#Char}
instance <<< Real

あれ、これ、でも、演算子の優先順位が書いてないぞ?