 binaryMathOpType = ['Num', ['Num', 'Num']]
 comparatorOpType = ['a', ['a', 'Bool']]
 
+builtInKinds = ->
+  newMapWith 'Fn', ['*', '*']
+
 builtInContext = ->
   newMapWith 'true', 'Bool',
     'false', 'Bool'

      stack[stack.length - 1].push token
  stack[0][0]

typed = (a, b) ->
  b.type = a.type
  b

  not (Array.isArray name) and name.charCodeAt(0) >= 97

freshName = (nameIndex) ->
  suffix = if nameIndex > 25 then Math.floor nameIndex / 25 else ''
  String.fromCharCode 97 + nameIndex % 25

typeVariable = (name) ->
