           #   #{compiledWheres}
           #   return #{compiledBody};
           # })"""
-          (jsCall "λ#{paramNames.length}", [
-            (jsFunction
-              params: paramNames
-              body: (join compiledWheres, [(jsReturn compiledBody)]))])
+          (irFunction
+            type: call.tea
+            params: paramNames
+            body: (join compiledWheres, [(jsReturn compiledBody)]))
+          # (jsCall "λ#{paramNames.length}", [
+          #   (jsFunction
+          #     params: paramNames
+          #     body: (join compiledWheres, [(jsReturn compiledBody)]))])
   # data
   #   listing or
   #     pair

token_ = (string) ->
  (tokenize string)[0]

blockOfLines = (lines) ->
  if lines.length is 0
    ''
  else
    '\n' + (listOfLines lines) + '\n'

listOfLines = (lines) ->
  lines.join '\n'

indentLines = (indent, lines) ->
  blockOfLines map ((line) -> indent + line), (filter _notEmpty, lines)

listOf = (args) ->
  args.join ', '

isTypeConstraint = (expression) ->
  (isCall expression) and (':' is _symbol _operator expression)

jsVarDeclarationsTranslate = ({names}) ->
  "var #{listOf names};"

blockOfLines = (lines) ->
  if lines.length is 0
    ''
  else
    '\n' + (listOfLines lines) + '\n'

listOfLines = (lines) ->
  lines.join '\n'

indentLines = (indent, lines) ->
  blockOfLines map ((line) -> indent + line), (filter _notEmpty, lines)

listOf = (args) ->
  args.join ', '

theme =
  keyword: 'red'
