[erlang-questions] http_uri_parse/1 inconsistent return value + dialyser headache

Zabrane Mickael zabrane3@REDACTED
Tue Aug 14 12:56:44 CEST 2012


Thanks Motiejus,

Yep, that's a way to solve it.
Anything else?

Regards,
Zabrane


On Aug 14, 2012, at 12:46 PM, Motiejus Jakštys wrote:

> On Tue, Aug 14, 2012 at 1:32 PM, Zabrane Mickael <zabrane3@REDACTED> wrote:
>> Hi guys, Hi Kostis,
>> 
>> http_uri_parse/1 returns inconsistent value since 15RB.
>> I'm trying to build a wrapper around it to make my code works on =<R14B04 too.
>> 
>> Here's what i got so far:
>> 
>> -spec http_uri_parse([byte()]) -> {ok, tuple()} | {error, atom()}.
>> http_uri_parse(URL) when is_list(URL) ->
>>    case http_uri:parse(URL) of
>>        {ok,{Scheme, UserInfo, Host, Port, Path, Query}} -> %% >=R15B
>>            http_uri_parse_1(Scheme, UserInfo, Host, Port, Path, Query);
>>        {Scheme, UserInfo, Host, Port, Path, Query} -> %% =< R14B               <------- LINE 1106
>>            http_uri_parse_1(Scheme, UserInfo, Host, Port, Path, Query);
>>        Error ->
>>            Error
>>    end.
>> 
>> http_uri_parse_1(Scheme, UserInfo, Host, Port, Path, Query) ->
>>    {ok, {Scheme, UserInfo, Host, Port, Path, Query}}.
>> 
>> But Dilayzer isn't happy:
>> 
>> Checking whether the PLT /Users/younes/.otp_plt is up-to-date... yes
>>  Proceeding with analysis...
>> pimco.erl:1106: The pattern {Scheme, UserInfo, Host, Port, Path, Query} can never match the type {'error','no_scheme' | {_,atom(),_}}
>> 
>> 
>> Any hint/help to get rid of this warning?
> 
> One way would be to define a constant at compile-time which version of
> Erlang are you running. Then check for it in source and put the right
> function/case statement accordingly.
> 
> rebar -> erl_opts -> platform_define is one of the ways to define that constant.
> 
> -- 
> Motiejus Jakštys





More information about the erlang-questions mailing list