 numType = typeConstant 'Num'
 regexType = typeConstant 'Regex'
 jsType = typeConstant 'Js'
+expressionType = typeConstant 'Expression'
 
 safePrintType = (type) ->
   try

  [res] = _arguments call
  # call.tea = toConstrained typeConstant 'Exp'
  # assignCompile ctx, call, res
  call.tea = toConstrained typeConstant 'Expression'

  serializeAst = (ast) ->
    if isForm ast
      if (_operator ast)?.symbol is ','
        termCompile ctx, ast
      else
        (jsArray (map serializeAst, ast))
    else
      (jsValue (JSON.stringify ast))
  serializeAst res

ms[','] = ms_comma = (ctx, call) ->
  (jsCall 'constantToSource', [expressionCompile ctx, (_arguments call)[0]])

constantToSource = (value) ->
  switch typeof value

    boolType
    numType
    jsType
    expressionType
  ]

builtInDefinitions = ->
