       return malformed to, 'Not an assignable pattern'
     map compileVariableAssignment, (join translationCache, assigns)
   else
+    if ctx.isAtBareDefinition()
+      # Force context reduction
+      inferredType = (substitute ctx.substitution, expression.tea)
+      deferConstraints ctx,
+        ctx.allBoundTypeVariables(),
+        (findFree inferredType),
+        inferredType.constraints
     translatedExpression
 
 # Pushes the deferring to the parent scope

    empty (: bag)

    fold (fn [with initial over]
      (: (Fn (Fn item a a) a bag a))
      (# Fold over with using initial ...))

    append (fn [what to]
      (: (Fn bag bag bag))
      (# Fold over with using initial ...)))

  array-bag (instance (Bag (Array a) a)
    empty {}


    append (macro [what to]
      (: (Fn (Array a) (Array a) (Array a)))
      (Js.method to "concat" {what}))

    first (macro [list]
      (: (Fn (Array a) a))
      (Js.method list "first" {})))

  concat (fn [bag-of-bags]
    (fold append empty bag-of-bags))
