     "virtual"
     "where" "while"))
 
-(defconst rust-special-types
-  '("u8" "i8"
-    "u16" "i16"
-    "u32" "i32"
-    "u64" "i64"
-
-    "f32" "f64"
-    "float" "int" "uint" "isize" "usize"
-    "bool"
-    "str" "char"))
+(defconst reason-special-types
+  '("int" "float" "string" "char"
+    "bool" "unit" "list" "array" "exn"
+    "option" "ref"
+))
 
 (defconst rust-re-type-or-constructor
   (rx symbol-start

     (,(regexp-opt-symbols reason-mode-keywords) . font-lock-keyword-face)

     ;; Special types
     (,(regexp-opt-symbols rust-special-types) . font-lock-type-face)

     ;; The unsafe keyword
     ("\\_<unsafe\\_>" . 'rust-unsafe-face)

        (or
         ;; The special types can't take type param lists, so a < after one is
         ;; always an operator
         (looking-at reason-re-special-types)

         (rust-is-in-expression-context 'ident)))

