     {params, body, wheres} = fnDefinition node
     labelFnBody body
     labelWhere wheres
-    labelParams node, params
+    labelParams node, params if params?
     node
 
 labelFnBody = (node) ->

labelWhere = (wheres) ->
  for [name, def] in wheres
    labelNames name
    if matchNode 'fn', def
      labelRecursiveCall def, name.token
  return

labelParams = (ast, params) ->
  paramNames = (token for {token} in params)
  mapTokens paramNames, ast, (word) ->
    word.label = 'param' unless word.label

labelRecursiveCall = (ast, fnname) ->
  mapTokens [fnname], ast, (word) ->
    word.label = 'recurse'

typeDatas = (ast) ->
  macro 'data', ast, (node) ->

fnDefinition = (node) ->
  words = inside node
  [keyword, paramList, defs...] = words
  params = if Array.isArray(paramList) then inside paramList else undefined
  defs ?= []
  for def, i in defs
    if matchNode '::', def
