[erlang-questions] type syntax question

Anthony Shipman <>
Thu Oct 30 15:01:38 CET 2008


On Thu, 30 Oct 2008 07:05:44 pm Kostis Sagonas wrote:
> 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?
>
> The deviceOpHandler() does not need a "type" declaration.  In fact, it
> shouldn't have one for just the above.  In the old spec syntax, the
> above example can simply be written as:
>
>    -spec(okHandler/2 :: (integer(), cstate()) -> cstate()).
>
> or, from R12B-4 onwards, more simply as:
>
>    -spec okHandler(integer(), cstate()) -> cstate().
>
> which is now the recommended way -- the EEP needs to be updated.
>
> If at some other function you need to specify that the function takes a
> deviceOpHandler as an argument, then you can define that type as:
>
>    -type deviceOpHandler() :: fun((integer(), cstate()) -> cstate()).
>

Sure I can write the type out in full for okHandler. But I actually have a 
number of these and it seems wrong to write out the type in full for each of 
them.

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



More information about the erlang-questions mailing list