Another options:
def test(%module{}) when module in [Variation, VariationGroup], do: ...
def test(term) when is_struct(term, Variation) or is_struct(term, VariationGroup), do: ...
Another options:
def test(%module{}) when module in [Variation, VariationGroup], do: ...
def test(term) when is_struct(term, Variation) or is_struct(term, VariationGroup), do: ...