 
 isAn.Boolean.Literal = (x) -> isAn.Boolean(x) and literal(x)
 
+isAn.Boolean.Object = (x) -> isAn.Boolean(x) and not literal(x)
+
 isAn.Number = (x) -> toString(x) == '[object Number]'
 
 isAn.Number.Literal = (x) -> isAn.Number(x) and literal(x)
+
+isAn.Number.Object = (x) -> isAn.Number(x) and not literal(x)
 
 isAn.Number.NaN = (x) -> isAn.Number(x) and isNaN(x)
 

toString = (x) -> ({}).toString.call(x)

literal = (x) -> typeof x != 'object' and not isAn.Null(x)

isAn = (x, type) ->
  if type?


isAn.Object = (x) -> toString(x) == '[object Object]'

isAn.Object.Literal = (x) -> toString(x) == '[object Object]' and x.constructor == ({}).constructor

isAn.Function = (x) -> toString(x) == '[object Function]'

