First, the proper line is
Blockly.addChangeListener(workspaceChanged); //No parens after workspaceChanged
Secondly, as far as I know the best way to determine the type of change event is to inspect the workspace and track the states you care about. For example, if you monitor the total number of blocks, you can distinguish between block addition, deletion, and moves. Usually, workspace change events are used to do things like constantly regenerating code, or displaying error messages, or something. Most of those don't require any sort of state information, they can simply completely regenerate their target by looking at the workspace's current state.