関数テンプレートのインターフェイスは関数のインターフェイスによく似ています。 例えば、次の構文は動的ファイルにおいて list0_fold_left という名前の関数テンプレートのインターフェイスを宣言しています:
ここで t0p は t@ype の略記です。もし同じインターフェイスが静的ファイルの中で宣言されていたら、 extern キーワードは削除するべきです。 関数テンプレートのインターフェイスを実装することは関数のインターフェイスを実装することと、 やはりよく似ています。 上記の list0_fold_left のインターフェイスは次のようなコードで実装することができます:
implement{a}{b} list0_fold_left (xs, f, init) = let // fun loop ( xs: list0 b, res: a ) : a = ( case+ xs of | list0_nil () => res | list0_cons (x, xs) => loop (xs, f (res, x)) ) (* end of [loop] *) // in loop (xs, init) end // end of [list0_fold_left]
extern fun {a,b:t0p}{c:t0p} app2 (f: (a, b) -<cloref1> c, x: a, y: b): c implement{a,b}{c} app2 (f, x, y) = f (x, y)
この章で示したスタイルのテンプレート実装は総称テンプレート実装と呼ばれます。 後の章で特殊テンプレート実装と呼ばれる異なるスタイルのテンプレート実装を紹介します。