Ах, мой первоначальный ответ, вероятно, не имеет значения ...
Чтобы сделать то, что вы описываете, вы должны извлечь определение типа из списка форм в файле, проанализировать его или попросить кого-то разобрать егодля вас, и если это действительно объединенный тип, извлеките элементы и верните их в список.
Если вы хотите сделать это из источника, вам понадобится что-то вроде:
get_abstract_code_from_src(Filename) ->
get_abstract_code_from_src(Filename, init_opts()).
get_abstract_code_from_src(Filename, Opts) ->
case compile:file(Filename, Opts) of
{ok,_,Abs} -> {ok, Abs};
Err -> Err
end.
init_opts() -> [to_pp, binary, return_errors].
Если у вас нет макросов или вы хотите избежать включения заголовков, вы также можете получить формы, используя:
epp_dodger:quick_parse_file(Filename).
Оригинальный ответ:
У вас уже есть:
-type yummy_foods() :: ice_cream | cake | cookies | spam.
Вы можете использовать:
-type list_of_yummy_foods :: [yummy_foods()].
Это гарантирует, что ничего больше не будет в списке, хотя, а не все эти продукты будут.