Can you elaborate on the safety provided by doing `%Struct{} = ` on a function? There are no compile time checks that calls to that function are actually of that struct type, just runtime checks on the data. Put another way this isn't really a type check, but an assertion.
On Friday, February 16, 2018 at 6:38:07 AM UTC-5, maen...@joshmartin.ch wrote: > > Hey Louis, > > I think it should include compile time checks. Mostly I would expect those > for function headers, case blocks and with blocks. > > Dialyzer already checks many of those conditions, but I would like to go a > step further. > Your mentioned library looks really interesting. Making it work together > with existing type specifications would be really cool. > > With for example structs, I can achieve safety really easy by adding > *%Struct{} > = my_input* to the function header. > > I would like to have a mechanism that works similarly, but additionally > checks uncovered types of a sum. (If you would for example not cover the > None of a Maybe) > > I think that this could tremendously improve the code quality. > > Cheers, > Jony > > Am Freitag, 16. Februar 2018 11:57:00 UTC+1 schrieb Louis Pilfold: >> >> Hey Jony >> >> Would this involve some form of compile time type checking for these >> values? If not we already have them in the form of tuples. >> >> @type result :: {:ok, string()} | {:error, string()} >> >> If you want compile time checks this would be more difficult. I've >> experimented a little with compile time checks with macros, check it out >> here -> https://github.com/lpil/sum >> >> Cheers, >> Louis >> >> On Fri, 16 Feb 2018 at 10:33 <maen...@joshmartin.ch> wrote: >> >>> Hi all, >>> >>> First I want to thank you all for your great work on the elixir language! >>> >>> Have there been some thoughts to introduce Tagged Unions into elixir? >>> I would really love to use sum types like Either or simple enums in my >>> daily work and have some support of the language in handling them. >>> >>> What do you think about this? >>> >>> Cheers, >>> Jony >>> >>> -- >>> You received this message because you are subscribed to the Google >>> Groups "elixir-lang-core" group. >>> To unsubscribe from this group and stop receiving emails from it, send >>> an email to elixir-lang-co...@googlegroups.com. >>> To view this discussion on the web visit >>> https://groups.google.com/d/msgid/elixir-lang-core/4052d8d9-6eda-46c9-b259-fb0f2e041120%40googlegroups.com >>> >>> <https://groups.google.com/d/msgid/elixir-lang-core/4052d8d9-6eda-46c9-b259-fb0f2e041120%40googlegroups.com?utm_medium=email&utm_source=footer> >>> . >>> For more options, visit https://groups.google.com/d/optout. >>> >> -- You received this message because you are subscribed to the Google Groups "elixir-lang-core" group. To unsubscribe from this group and stop receiving emails from it, send an email to elixir-lang-core+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/elixir-lang-core/f72949db-50aa-433e-abb9-f5c1ba518008%40googlegroups.com. For more options, visit https://groups.google.com/d/optout.