erlang中声明新类型,使用type和opaque关键字
type的使用
-module(module1).
-export_type([my_tup2/0]).
-type my_tup2() :: {my_tup2, atom(), atom()}.
-module(module2).
-export([main/0]).
-spec foo2(module1:my_tup2()) -> ok.
foo2({my_tup2, _, _}) -> ok.
main() ->
foo2({my_tup2, a, b}).
如果把关键字type换成opaque,
-module(module1).
-export_type([my_tup2/0]).
-opaque my_tup2() :: {my_tup2, atom(), atom()}.
使用dialyzer分析,会发现警告;这是因为opaque的类型只能在定义的模块内部使用。