EDocのtype定義
@type の左辺は関数呼び出し形式、総称の型パラメータを入れてよい。
@type pair(X, Y) = {X, Y}
別名や一部束縛は次のようにする。
@type tuple_2(X, Y) = pair(X, Y)
@type tuple_2_atom(Y) = tuple_2(atom(), Y)
レコード型の型定義は次のようにする。
@type person() = #person {
nickname = atom(),
real_name = string(),
age = integer()
}
レコード型の直接指定は #person{}。中括弧を忘れないこと!
次のようにタプル成分(element, リストはmember)にラベルを付けられる。
@type person() = {Nickname::atom(), RealName::string()}
注意すべきこと、いろいろ
右辺に大文字から始まる名前を使った「型のマクロ定義」はできない。@specのwhere節とは違う。
cons(,)と[]が使える。このとき、リストのメンバーにもラベルが付けられる。
Erlangの型システムとは違い、string() や none() 型が使えることに注意。
@specで書いた引数名はデフォルト(関数定義の名前)を上書きする。
次の例では、引数名Nameはなくなる。
% @spec (N) -> none()
% where N = string()
foo(Name) -> ok.
次は上書きされる(引数名がNamになる)。
% @spec (Nam:N) -> none()
% where N = string()
foo(Name) -> ok.