       (list-elem? what in)))
   """
   "(elem? 3 {1 2 3})", yes
+
+  # bag-list (instance (Bag List)
+  #   fold (fn [with initial over]
+  #     (fold-list with initial over))
+
+  #   fold (fn [with initial over]
+  #     (fold-list with initial over))
+
+  #   fold (fn [with initial over]
+  #     (fold-list with initial over)))
 
   # TODO: support matching with the same name
   #       to implement this we need the iife to take as arguments all variables

        (isName expression) and (_symbol expression) in paramNames
      labelUsedParams = (expression) ->
        map (syntaxNameAs '', 'param'), filterAst isUsedParam, expression
      map labelUsedParams, if body then join [body], wheres else wheres

      if body and not isWellformed body
        return 'malformed'


    empty? (fn [bag]
      (: (Fn (bag item) Bool))
      (# Whether the bag contains no elements.)))

  list-elem? (macro [what in]
    (: (Fn item (List item) Bool))
