                 ])
   )
 
-(defn assumedShift [shift]
+(defn assumedValidShift [shift]
   (assumedTrue [(number? shift)
                 "the shift must be a number, you passed `"
                 shift "`"
                 ])
   )
 
+(defmacro ^:private priv_functionget [& msg2]
+  `(fn [x#]
+     (logAny
+       (or ~'loglevel :debug) ;TODO: check logLevel is valid
+       x# ~@msg2)
+     )
+  )
+
 (defn showHere
 "
 optional inputs:

;                  ["\n`"])
;                )
              
              (list `apply `str
                (concat ['list "\n"
                         "The fail msg is:\n`\n"] 
                  ;evalled
                  restOfFailMsg
                  ["\n`"])
                )
;              )
              ;)
            )

rest = strings to be joined with space between them; or nil to skip
"
  [& [shift loglevel  :as all]]
  {:pre [
         (assumedValidIfPresent assumedValidShift notnil? shift)
         (assumedValidIfPresent assumedValidLogLevel notnil? loglevel)
         ]}
  (showLocation (let [msg (nthrest all 2)]
                  (cond (empty? msg)
                    (priv_functionget)
