     else
       malformed ctx, ctx.definitionPattern(), 'Macro failed to compile'
 
-  jsNoop()
+  if isTypeAnnotation maybeType
+    params = (map token_, map _symbol, _terms paramTuple)
+    typedFn_ params, maybeType, call_ (token_ macroName), params
+  else
+    jsNoop()
 
 ms['`'] = ms_quote = (ctx, call) ->
   expression = firstOrCall _arguments call

ms.syntax = ms_syntax = (ctx, call) ->
  hasName = requireName ctx, 'Name required to declare a new syntax macro'
  [paramTuple, rest...] = _arguments call
  [body] = rest

  if hasName
    macroName = ctx.definitionName()


# Either a type variable or type constructor of some kind
atomicType = (name, kind) ->
  if (isNotCapital symbol: name)
    new TypeVariable name, kind
  else
    new TypeConstr name, kind

tupleType = (arity) ->
  new TypeConstr "[#{arity}]", kindFn arity
