           (bit-not (flip-long-sign bits)))))))
 
 
-(alter-meta! #'->DoubleLexicoder assoc :private true)
-(alter-meta! #'map->DoubleLexicoder assoc :private true)
-
-
-(def double-lexicoder
-  "Lexicoder for double-precision floating point values."
-  (->DoubleLexicoder))
-
-
-(defmethod lexicoder :double
+
+;; ## Instant Lexicoder
+
+(deftype InstantLexicoder [])
+
+
+(def instant-lexicoder
+  "Lexicoder for instants in time."
+  (->InstantLexicoder))
+
+
+(ns-unmap *ns* '->InstantLexicoder)
+
+
+(defmethod lexicoder :instant
   [config]
   (when (config-params config)
     (throw (ex-info
-             (str "Double lexicoder config takes no parameters: " (pr-str config))
+             (str "Instant lexicoder config takes no parameters: " (pr-str config))
              {:config config})))
-  double-lexicoder)
-
-
-
-;; ## Instant Lexicoder
-
-(defrecord InstantLexicoder
-  []
+  instant-lexicoder)
+
+
+(extend-type InstantLexicoder
 
   Lexicoder
 

  (->TupleLexicoder (vec coders)))


(defmethod lexicoder :tuple
  [config]
  (when-not (config-params config)

(def string-lexicoder
  "Lexicoder for UTF-8 character strings."
  (string-lexicoder* default-string-charset))


(ns-unmap *ns* '->StringLexicoder)


(defmethod lexicoder :string
