-spec,-type,-opaque在erlang编程中意味着什么

ale*_*and 4 erlang

我发现-define是Macro,-record就像C的结构,-include用于header.但-spec,-type或-opaque是什么意思?我试图在互联网上搜索并在文档中搜索,没有找到答案