¿Cómo puedo diferenciar entre una función de flecha, una clase y una función normal?

¿Cómo puedo diferenciar entre estas tres cosas en ES6 usando su referencia?

let x = i => i+1;

class y { constructor(i) { this._i=i+1; } get i(){ return this._i;} }

function z(i) { return i+1; }

Ejemplo:

test(x) //=> 'arrow'
test(y) //=> 'class'
test(z) //=> 'function'

¿Y cómo puedo diferenciar entre estas cosas en transpilers: Traceur / Babel?

Respuestas a la pregunta(2)

Su respuesta a la pregunta