[erlang-questions] 12B4 dialyzer problem 6 - strings

Anthony Shipman <>
Sun Sep 21 18:43:13 CEST 2008


I've got some code that accesses a driver and it looks like this:

119: -spec parseDate(string()) -> integer() | badarg.

parseDate(Date) when is_list(Date) ->
    Port = open(),
    N = parseDate(Port, Date),
    ok = close(Port),
    N.

-spec parseDate(port(), string()) -> integer() | badarg.

parseDate(Port, Date) when is_port(Port), is_list(Date) ->
    Bin = port_control(Port, ?CMD_PDATE, Date),
    binary_to_term(Bin).

Dialyzer says, with -Wunderspecs, 

dwcAuxDrv.erl:119: Type specification dwcAuxDrv:parseDate/1 :: (string())
-> integer() | 'badarg' is a supertype of the success typing: ([byte()])
-> 'badarg' | integer()

I thought that string() and [byte()] would be the same. But delving into the 
source code I find that a string() is a [char()] and a char() is an integer 
in the range 0..16#10ffff (from hipe erl_types.erl). So there's a 
contradiction in there. 

-- 
Anthony Shipman                    Mamas don't let your babies 
                   grow up to be outsourced.



More information about the erlang-questions mailing list