Hi Julian,

Thanks for the proposal! While I believe this functionality can be helpful,
I would be skeptical about adding a new module to the standard library
where only a single function has been planned. I personally wouldn't add
is_number/2, as one can simply match on the result of parse/2 instead.

However, if there is a desire to improve Integer.parse/2 and Float.parse/2
with new options, I believe those will be welcome.

Thank you!

On Sat, Jul 25, 2020 at 5:10 AM Julian Gomez <julng...@gmail.com> wrote:

> Hello Everybody,
>
> I picked up Elixir this May and It has become one of my favorite
> programming languages. I played with it back in 2014 and I regret dropping
> it.
>
> This is my proposal for a new general Number Module. Provides a clean
> abstraction.
>
> ** SEE THE ATTACHED FILES FOR EXAMPLES AND MODULE PROTOTYPE**
>
> To my knowledge, If we want to parse a string to a number we currently
> have four options:
>
>    - String.to_float/1
>    - String.to_integer/1
>    - Float.parse/1
>    - Integer.parse/1 or Integer.parse/2
>
> These are great if you already know that the string contains a valid
> number.
>
> At the moment, The Number module only contains the following functions:
>
>    - parse/1 - automatic number parsing to int or float
>    - parse/2 - explicit number parsing to int or float
>    - parse/3 - explicit number parsing to int or float but has an extra
>    step.
>    - is_number/1 - does the string contain a valid number or start with a
>    valid number. Compared to Kernel.is_number/1 where the value has to be in
>    its proper form already
>
> parse/3 accepts three arguments:
>
>    - binary - the string you want to convert to a number, implicit
>    parsing.
>    - data type (atom) - :integer or :float, explicit parsing.
>    - options - can be a function in the Float and Integer module or pass
>    in the `base` for the Integer.parse/2 function.
>
>
> My proposal is a one-liner and since it's built on top of the Integer and
> Float modules
> we can utilize their functions in conjunction with parsing the string to a
> number.
>
> Example:
>
> Parsing user input:
> { bill_amount, _ } = IO.gets("What is the bill amount? ") |> Number.parse()
>
> { tip_rate, _ ) = IO.gets("What is the tip rate? ") |> Number.parse()
>
> Number.parse( "45.565", :float, ceil: 2 ) would result in {45.57, ""}
> Number.parse( "45.565%", :float, ceil: 2 ) would result in {45.57, "%"}
>
> Valid strings return *{parsed_number, rest}* and invalid strings return
> *:error* in tradition to the Integer and Float modules.
>
> ** SEE THE ATTACHED FILES FOR MORE EXAMPLES AND MODULE PROTOTYPE**
>
> Julian Gomez
>
> --
> 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/444b3079-20a8-4d81-8baf-918b9ba937ccn%40googlegroups.com
> <https://groups.google.com/d/msgid/elixir-lang-core/444b3079-20a8-4d81-8baf-918b9ba937ccn%40googlegroups.com?utm_medium=email&utm_source=footer>
> .
>

-- 
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/CAGnRm4%2Bt1vJJxd0XLs-jswmwSBJYvr5YB1CdOFiPBBv_KgvCvw%40mail.gmail.com.

Reply via email to