 ms.record = ms_record = (ctx, call) ->
     args = _arguments call
     hasName = requireName ctx, 'Name required to declare new record'
+    if isTuple args[0]
+      [typeParamTuple, args...] = args
+    else
+      typeParamTuple = (tuple_ [])
     for [name, type] in _labeled args
       if not name
         malformed type, 'Label is required'

        (Person name id) name))"""
  """(name ((Person id: 3) "Mike"))""", "Mike"

  'late bound function'
  """f (fn [x] (g x))
    g (fn [x] 2)"""

#   that is either ordinary type variable or type variable standing for a constructor
#   with arbitrary type arguments
isNormalizedConstraint = (constraint) ->
  isNormalizedConstraintArgument constraint.types.types[0]

isNormalizedConstraintArgument = (type) ->
  if type
