((function fwidth
   (signature float
     (parameters
       (declare (in) float p))
     ((return (expression float +
                (expression float abs (expression float dFdx (var_ref p)))
                (expression float abs (expression float dFdy (var_ref p)))))))

   (signature vec2
     (parameters
       (declare (in) vec2 p))
     ((return (expression vec2 +
                (expression vec2 abs (expression vec2 dFdx (var_ref p)))
                (expression vec2 abs (expression vec2 dFdy (var_ref p)))))))

   (signature vec3
     (parameters
       (declare (in) vec3 p))
     ((return (expression vec3 +
                (expression vec3 abs (expression vec3 dFdx (var_ref p)))
                (expression vec3 abs (expression vec3 dFdy (var_ref p)))))))

   (signature vec4
     (parameters
       (declare (in) vec4 p))
     ((return (expression vec4 +
                (expression vec4 abs (expression vec4 dFdx (var_ref p)))
                (expression vec4 abs (expression vec4 dFdy (var_ref p)))))))
))