[erlang-questions] Missing binary BIFs

Loïc Hoguin <>
Thu Feb 9 11:27:08 CET 2012


While seemingly practical, I'm not sure why I would want any place in my 
code where I wouldn't be sure what the input type is. Even with dialyzer 
checks I'm sure I would make false assumptions and get surprises here 
and there.

I also would like an efficient solution, both in processing speed and 
memory use. Converting to list then binary isn't that great, even less 
so after module:function calls with guards.

On 02/09/2012 09:03 AM, Rapsey wrote:
> I wrote functions that convert between all types that I use constantly.
> Much easier to just force a specific type somewhere if you're not sure
> what the input type is going to be instead of doing checks everywhere or
> annoying conversions like the one you wrote.
> It has a dependency on mochinum:digits/1 though.
>
> tolist(<<_/binary>> = P) ->
> binary_to_list(P);
> tolist(P) when is_atom(P) ->
> atom_to_list(P);
> tolist(P) when is_integer(P) ->
> integer_to_list(P);
> tolist(P) when is_float(P) ->
> mochinum:digits(P);
> tolist(P) when is_list(P) ->
> P.
>
> tobin(<<_/binary>> = P) ->
> P;
> tobin(P) when is_list(P) ->
> iolist_to_binary(P);
> tobin(P) when is_atom(P) ->
> atom_to_binary(P,latin1);
> tobin(P) when is_integer(P) ->
> tobin(integer_to_list(P));
> tobin(P) when is_float(P) ->
> tobin(mochinum:digits(P)).
>
> toatom(P) when is_binary(P) ->
> binary_to_atom(P,latin1);
> toatom(P) when is_list(P) ->
> list_to_atom(P);
> toatom(P) when is_atom(P) ->
> P.
> toint(<<_/binary>> = P) ->
> list_to_integer(binary_to_list(P));
> toint([_|_] = P) ->
> list_to_integer(P);
> toint(P) when is_integer(P) ->
> P;
> toint(P) when is_float(P) ->
> erlang:round(P).
> tofloat(P) when is_integer(P) ->
> P / 1;
> tofloat(P) when is_float(P) ->
> P;
> tofloat(P) when is_binary(P) ->
> tofloat(binary_to_list(P));
> tofloat(P) when is_list(P) ->
> Str = string:join(string:tokens(P,","),"."),
> case string:str(Str,".") of
> 0 ->
> tofloat(P ++ ".0");
> _ ->
> list_to_float(Str)
> end;
> tofloat(P) ->
> list_to_float(tolist(P)).
>
>
> On Wed, Feb 8, 2012 at 7:29 PM, Loïc Hoguin <
> <mailto:>> wrote:
>
>     Hello,
>
>     It feels a bit tedious to keep doing things like
>       list_to_binary(integer_to___list(42))
>
>     or even
>       list_to_binary(atom_to_list(__forty_two))
>
>     when we could have convenient integer_to_binary/1 or /2 or
>     atom_to_list/1 BIFs.
>
>     Is there any chance to add them in a future release? With all the
>     advantages of binaries it's a shame it's not easier to deal with them.
>
>     Thanks.
>
>     --
>     Loïc Hoguin
>     Erlang Cowboy
>     Nine Nines
>     _________________________________________________
>     erlang-questions mailing list
>      <mailto:>
>     http://erlang.org/mailman/__listinfo/erlang-questions
>     <http://erlang.org/mailman/listinfo/erlang-questions>
>
>


-- 
Loïc Hoguin
Erlang Cowboy
Nine Nines



More information about the erlang-questions mailing list