[eeps] Multi-Parameter Typechecking BIFs
    Richard O'Keefe 
    ok@REDACTED
       
    Thu Feb 19 00:22:18 CET 2009
    
    
  
On 19 Feb 2009, at 7:30 am, James Hague wrote:
[an EEP suggesting that is_T(X1, ..., Xn) in a guard should
  have the same meaning as is_T(X1), ..., is_T(Xn).]
This is a straightforward source-to-source transformation
implementable entirely in the compiler front end, with no
back end consequences whatever.
I'm a little unhappy with the grammar of it:
	X1 and ... and Xn is T?
Shouldn't that be are_T(., ...)?
However, may I respectfully suggest that this is yet
ANOTHER problem that is better handled by abstract patterns?
	#vec3(X, Y, Z) when is_float(X), is_float(Y), is_float(Z) ->
	    {X, Y, Z}.
	cross(#vec3(V10,V11,V12), #vec3(V20,V21,V22)) ->
	    #vec3(V11*V22-V12*V21,
		  V12*V20-V10*V22,
		  V10*V21-V11*V20).
Using multi-parameter type tests saves a few calls to
is_float, but you still have to write one call.
Using abstract patterns, the entire guard disappears completely.
    
    
More information about the eeps
mailing list