     empty (: bag)
 
     fold (fn [with initial over]
-      (: (Fn (Fn item a a) a bag a))
-      (# Fold over with using initial ...))
+      (: (Fn (Fn item a a) a bag a)))
 
     append (fn [what to]
-      (: (Fn bag bag bag))
-      (# Fold over with using initial ...)))
+      (: (Fn bag bag bag)))
+
+    first (fn [of]
+      (: (Fn bag item))))
 
   array-bag (instance (Bag (Array a) a)
     empty {}

      return malformed to, 'Not an assignable pattern'
    map compileVariableAssignment, (join translationCache, assigns)
  else
    translatedExpression

# Pushes the deferring to the parent scope

  isAtDefinition: ->
    (definition = @_currentDefinition()) and definition.pattern and definition.inside is 0

  isAtBareDefinition: ->
    (definition = @_currentDefinition()) and definition.inside is 0

  isAtSimpleDefinition: ->
    @isAtDefinition() and @definitionName()

