I must admit I don't have general suggestions for protocols errors : I think the actual error message make sense as long as you understand why it's happening. If we can't help the cases where it's not obvious I think this proposal is going nowhere.
On Sunday, January 13, 2019 at 1:38:16 PM UTC+1, Louis Pilfold wrote: > > Hi > > Perhaps the error message for an unimplemented protocol could be made more > friendly. I don't have any suggestions myself, but perhaps Edouard had some > ideas for Map.drop that could be generalised to all protocols. > > Cheers, > Louis > > On Sun, 13 Jan 2019, 12:02 José Valim, <[email protected] > <javascript:>> wrote: > >> It would be possible only if you manually write error messages for every >> existing function. There is no trivial way to automate it without adding a >> type system. >> >> >> *José Valim* >> www.plataformatec.com.br >> Skype: jv.ptec >> Founder and Director of R&D >> >> >> On Sun, Jan 13, 2019 at 12:42 PM Edouard Mnd <[email protected] >> <javascript:>> wrote: >> >>> Oh i see so the only simple option would be to add something along the >>> line `drop(map, a) when is_atom(a)` but it would mean making the widening >>> the api surface. >>> Maybe the answer does not lie directly in elixir core but in something >>> that would run after the elixir compiler able to give suggestions about the >>> errors ? It clearly is not the scope of the discussion but I would be >>> interested to know what you think about it and what elixir api could be >>> used to make such a hint/suggestion layer. >>> >>> On Saturday, January 12, 2019 at 8:38:20 PM UTC+1, Andrea Leopardi wrote: >>>> >>>> The problem here is that Map.drop/2 expects a term as the second >>>> argument that implements the Enumerable protocol. This means that >>>> realistically we can't check for a specifically supported data type or >>>> types, since anything could implement the Enumerable protocol. For >>>> example, >>>> I might implement Enumerable for atoms and then your code would work. >>>> >>>> On Sat, 12 Jan 2019 at 19:10, Edouard Mnd <[email protected]> wrote: >>>> >>>>> Hi, >>>>> >>>>> I have been running into the same issue again and again with elixir >>>>> where I get a weird error like >>>>> >>>>>> (Protocol.UndefinedError) protocol Enumerable not implemented for >>>>>> "foo". This protocol is implemented for: DBConnection.PrepareStream, >>>>>> DBCo >>>>>> nnection.Stream, Date.Range, Ecto.Adapters.SQL.Stream, File.Stream, >>>>>> Function, GenEvent.Stream, HashDict, HashSet, IO.Stream, List, Map, >>>>>> MapSet, >>>>>> Postgr ex.Stream, Range, Stream, StreamData, Timex.Interval >>>>>> >>>>> when doing `Map.drop(foo, :sth). >>>>> Obviously i'm doing something wrong : I should give a list as a second >>>>> argument but I keep forgetting and I bet i'm not the only one. >>>>> My proposal would consist in handling this case explicitly either by >>>>> allowing for such a case to work or giving back a clear error message >>>>> such >>>>> as "Are you trying to do Map.drop(foo,[:sth]) ?". >>>>> I'm greatly inspired by the rust language in asking this, indeed rust >>>>> gives you really great error messages when doing silly things. >>>>> >>>>> I hope you find my proposal clear and interesting as it clearly is not >>>>> just about Map.drop but also about giving better error messages to the >>>>> developer when doing silly things which I think is important. >>>>> >>>>> -- >>>>> 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 [email protected]. >>>>> To view this discussion on the web visit >>>>> https://groups.google.com/d/msgid/elixir-lang-core/550f8801-c0d9-41ea-947a-8c3ee483c76a%40googlegroups.com >>>>> >>>>> <https://groups.google.com/d/msgid/elixir-lang-core/550f8801-c0d9-41ea-947a-8c3ee483c76a%40googlegroups.com?utm_medium=email&utm_source=footer> >>>>> . >>>>> For more options, visit https://groups.google.com/d/optout. >>>>> >>>> -- >>>> >>>> Andrea Leopardi >>>> [email protected] >>>> >>> -- >>> 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 [email protected] <javascript:>. >>> To view this discussion on the web visit >>> https://groups.google.com/d/msgid/elixir-lang-core/93fd3c38-c285-48b8-87d1-898fe45a1afc%40googlegroups.com >>> >>> <https://groups.google.com/d/msgid/elixir-lang-core/93fd3c38-c285-48b8-87d1-898fe45a1afc%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 [email protected] <javascript:>. >> To view this discussion on the web visit >> https://groups.google.com/d/msgid/elixir-lang-core/CAGnRm4%2BUJwM4cyif%2ByBtRyge6mJ-uR%3DAiJuFkJnnazyN6-JQ-w%40mail.gmail.com >> >> <https://groups.google.com/d/msgid/elixir-lang-core/CAGnRm4%2BUJwM4cyif%2ByBtRyge6mJ-uR%3DAiJuFkJnnazyN6-JQ-w%40mail.gmail.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 [email protected]. To view this discussion on the web visit https://groups.google.com/d/msgid/elixir-lang-core/cb7e5505-d2f1-4e19-bc93-a71da6aad44d%40googlegroups.com. For more options, visit https://groups.google.com/d/optout.
