 
     if assigns.length is 0
       return malformed to, 'Not an assignable pattern'
-    join translationCache, map compileVariableAssignment, assigns
+    map compileVariableAssignment, (join translationCache, assigns)
   else
     translatedExpression
 

    translationCache = ctx.resetAssignTo()
    call.tea = new Constrained constraints, resultType
    assignCompile ctx, call, iife concat (filter _is, [
      translationCache
      varList varNames
      compiledCases])



class TypeVariable
  constructor: (@name, @kind) ->
  TypeVariable: yes
class TypeConstr
  constructor: (@name, @kind) ->
  TypeConstr: yes
class TypeApp
  constructor: (@op, @arg) ->
  TypeApp: yes
class QuantifiedVar
  constructor: (@var) ->
  QuantifiedVar: yes
class ForAll
  constructor: (@kinds, @type) ->
  ForAll: yes
class TempType
  constructor: (@type) ->
  TempType: yes

class Types
  constructor: (@types) ->
  Types: yes

class Constrained
  constructor: (@constraints, @type) ->
  Constrained: yes
class ClassConstraint
  constructor: (@className, @types) ->
  ClassConstraint: yes

addConstraints = ({constraints, type}, addedConstraints) ->
  new Constrained (join constraints, addedConstraints), type
