[erlang-questions] type syntax question

Tobias Lindahl <>
Thu Oct 30 09:35:51 CET 2008



Anthony Shipman wrote:
> I want to write something like
> 
> -type (deviceOpHandler() :: fun( (integer(), cstate()) -> cstate() )).
> 
> -spec (okHandler/2 :: deviceOpHandler()).
> 
> okHandler(_DeviceID, CState) ->
>     sendResponse(200, "OK", CState).
> 
> but I can't find the right combination of parentheses to please the compiler.
> Is this kind of specification possible?

No it isn't. You can use your own declared types in specs (of course), 
but for the top level in the spec you have to be explicit. There is 
nowadays also an alternative notation to the specs that do away with 
some of the parentheses.

-spec okHandler(integer(), cstate()) -> cstate().

I find this one easier to read. As before you can also put your 
variables in the arguments if you like.

-spec okHandler(DeviceID :: integer(), CState :: cstate()) -> cstate().

> 
> Will there be documentation on the type and spec syntax coming soon?
> 

Please define soon... ;-)

Well, I guess when the EEP gets accepted and the types become an 
official feature someone should make a proper documentation. For now, 
you can look in the EEP http://www.erlang.org/eeps/eep-0008.html which 
is in need of an update, but gets the main things correct.

Tobias





More information about the erlang-questions mailing list