Dialyzer confusion over equal opaque and transparent types

Dániel Szoboszlay dszoboszlay@REDACTED
Tue Feb 25 11:53:04 CET 2020

> all ext()s are int()s but not all int()s are ext()s.

This is true, ext() is declared to be a subtype of int(), so it refers to a
subset of the terms that are int()-s.

You can't pass an expression of type int() to a function that expects
> something with type ext(), because you're breaking opacity (in dialyzer's
> mind).

That would be true in a *different module*, but within the module where you
declare an opaque type you are allowed to break opacity. (Otherwise an
opaque type would be completely useless.)


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://erlang.org/pipermail/erlang-questions/attachments/20200225/eb40b242/attachment.htm>

More information about the erlang-questions mailing list