 
 have = (p) ->
   return p if typeof p is "function"
-  (x) -> (y) -> [y[p] is x, "expected property #{p} of #{y} to equal #{x}"]
+  (x) -> (y) -> [y[p] is x, "expected property #{str p} of #{str y} to equal #{str x}"]
 
 a = an = (x) -> (y) ->
-  if x is Object then return [y instanceof x, "expected #{y} to be an instance of #{x.name}"]
-  [Object(y) instanceof x, "expected #{y} to be an instance of #{x.name}"]
+  if x is Object then return [y instanceof x, "expected #{str y} to be an instance of #{x.name}"]
+  [Object(y) instanceof x, "expected #{str y} to be an instance of #{x.name}"]
 
 be = to = (x) ->
   if x is empty then return is_empty

str = (v) ->
  try
    return JSON.stringify v
  catch e
    return String v

exist = {}

error = {}
ok = truthy = {}

is_empty = (x) -> [_empty(x), "expected #{str x} to be empty"]
is_ok = (x) -> [!!x, "expected #{str x} to be truthy"]
does_exist = (x) -> [x?, "expected #{str x} to exist"]
should_throw = (f) -> [(try do f catch e; e?), "expected function to throw an error"]

expect = (x) -> (y) ->
