My Future with Elixir: set-theoretic types
elixir-lang.org
My Future with Elixir: set-theoretic types
1–10 of 13 posts
Re: My Future with Elixir: set-theoretic types
#2Re: My Future with Elixir: set-theoretic types
#3but
> The Erlang compiler already does so to improve performance within a single module and we want to eventually do so across modules and applications too.
A bit confused by this. Will Elixir potentially embed types in BEAM files like Erlang increasingly does to inform the JIT, or not?
Re: My Future with Elixir: set-theoretic types
#4https://fsharpforfunandprofit.com/posts/designing-with-types...
https://khalilstemmler.com/articles/typescript-domain-driven...
https://erszcz.medium.com/make-illegal-states-unrepresentabl...
Re: My Future with Elixir: set-theoretic types
#5I think people underestimate how powerful a tool strong types can be. If you make illegal states impossible in the type system you get a class of tests effectively enforced by the compiler. https://fsharpforfunandprofit.com/posts/designing-with-types... https://khalilstemmler.com/articles/typescript-domain-driven... https://erszcz.medium.com/make-illegal-states-unrepresentabl...
Re: My Future with Elixir: set-theoretic types
#6Re: My Future with Elixir: set-theoretic types
#7> so we should not expect any meaningful performance gain from typing Elixir code but > The Erlang compiler already does so to improve performance within a single module and we want to eventually do so across modules and applications too. A bit confused by this. Will Elixir potentially embed types in BEAM files like Erlang increasingly does to inform the JIT, or not?
Re: My Future with Elixir: set-theoretic types
#8I think people underestimate how powerful a tool strong types can be. If you make illegal states impossible in the type system you get a class of tests effectively enforced by the compiler. https://fsharpforfunandprofit.com/posts/designing-with-types... https://khalilstemmler.com/articles/typescript-domain-driven... https://erszcz.medium.com/make-illegal-states-unrepresentabl...
You do get a class of tests but I don't believe they are sufficient. For example, in the first article, we have this code:
let contactFromEmail name emailStr =
let emailOpt = EmailAddress.create emailStr
// handle cases when email is valid or invalid
match emailOpt with
| Some email ->
let emailContactInfo =
{EmailAddress=email; IsEmailVerified=false}
let contactInfo = EmailOnly emailContactInfo
Some {Name=name; ContactInfo=contactInfo}
| None -> None
While the types tell me that an email can be valid or not, and that the function may or may not return a contact, it does not tell me _which values_ will lead to those scenarios. The extrapolation is that this function could always return `None` and that would be alright from the point of view of types.So perhaps you should still test that a valid email returns `Some contactInfo` and an invalid one returns `None`? Or maybe you have thoroughly unit tested `EmailAddress.create` and you feel confident in skipping tests here? Or perhaps you may want to test that `IsEmailVerified` is set to false (or maybe you even have logic that may set it to true in certain cases)?
In a nutshell, types would replace tests that assert on the states, but those are not the tests I write in the first place. The tests I write would rather focus which values give me certain states and assert which values inhabit those states.
Re: My Future with Elixir: set-theoretic types
#9> so we should not expect any meaningful performance gain from typing Elixir code but > The Erlang compiler already does so to improve performance within a single module and we want to eventually do so across modules and applications too. A bit confused by this. Will Elixir potentially embed types in BEAM files like Erlang increasingly does to inform the JIT, or not?
Re: My Future with Elixir: set-theoretic types
#10I think people underestimate how powerful a tool strong types can be. If you make illegal states impossible in the type system you get a class of tests effectively enforced by the compiler. https://fsharpforfunandprofit.com/posts/designing-with-types... https://khalilstemmler.com/articles/typescript-domain-driven... https://erszcz.medium.com/make-illegal-states-unrepresentabl...
Hi, author here. You do get a class of tests but I don't believe they are sufficient. For example, in the first article, we have this code: let contactFromEmail name emailStr = let emailOpt = EmailAddress.create emailStr // handle cases when email is valid or invalid match emailOpt with | Some email -> let emailContactInfo = {EmailAddress=email; IsEmailVerified=false} let contactInfo = EmailOnly emailContactInfo Some…