Hi Andrea! Thank you for your quick feedback! What you said about adding six functions is true, but they're very straightforward macros so it shouldn't be too painful. I'm not entirely sure I agree about the operators being more clear; people new to Elixir could simply put > 0 in a guard and just assume there's a type check there (even for those not new, it's easy to forget). Seeing is_positive/1 and is_negative/1 in code examples would reinforce the fact that a basic > is not sufficient.
I think this use case is common enough that it warrants being in stdlib. Integer has is_odd/1 and is_even/1 and I would imagine that is_positive/1 and is_negative/1 would be used at least as much (although maybe I'm totally wrong :D). An even more fitting example is the macro for is_nil/1 when that's a single conditional in a guard and really doesn't save much. Thanks for your feedback! IW On Sunday, November 19, 2017 at 4:09:40 PM UTC-8, Andrea Leopardi wrote: > > I lean on a soft no because we’d have to introduce six new functions as > you said, plus is_non_negative likely as well. To me, the comparison > operator is more clear and if you use it many many times, than nothing > wrong with writing down your own macros as you mentioned :). > > On Sun, 19 Nov 2017 at 19:07, Isaac Whitfield <[email protected] > <javascript:>> wrote: > >> Hey all! >> >> Sorry if this has been broached previously, but searching didn't show >> anything (either on the list or on Google). >> >> I recently realised that I write a lot of `> 0` guard clauses, combined >> with the fact that they're either passing `is_integer/1` or `is_float/1`. I >> know that it's an easy thing to write yourself but: >> >> def my_function(value) when is_integer(value) and value > 0 do >> # stuff >> end >> >> def my_function(value) when is_positive(value) do >> # stuff >> end >> >> and based on the frequency I've used it, seems like a reasonable request >> for stdlib inclusion. >> >> So, I would like to propose the following (and feel free to shoot me >> down!). Of course each call would just be a macro: >> >> Integer.is_positive/1 - is_integer(val) and val > 0 >> Integer.is_negative/1 - is_integer(val) and val < 0 >> Float.is_positive/1 - is_float(val) and val > 0 >> Float.is_negative/1 - is_float(val) and val < 0 >> Kernel.is_positive/1 - is_number(val) and val > 0 >> Kernel.is_negative/1 - is_number(val) and val < 0 >> >> And coincidentally, I'm assuming that it's better to perform the type >> check first, I guess I'd appreciate if someone could confirm that? Also >> goes without saying that I'd be happy to impl this if we decide to adopt. >> >> Thanks for your consideration! >> >> IW >> >> -- >> 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/1d9f2250-9783-4af8-b2bb-9c0379f3b122%40googlegroups.com >> >> <https://groups.google.com/d/msgid/elixir-lang-core/1d9f2250-9783-4af8-b2bb-9c0379f3b122%40googlegroups.com?utm_medium=email&utm_source=footer> >> . >> For more options, visit https://groups.google.com/d/optout. >> > -- > > Andrea Leopardi > [email protected] <javascript:> > -- 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/5888586c-9eed-4db3-8b09-167cef20d384%40googlegroups.com. For more options, visit https://groups.google.com/d/optout.
