diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -55,7 +55,7 @@
 -- | A list of markers, along with the positions they span on
 [(Position, Marker msg)] ->
 -- | Some hints to be output at the bottom of the report
-[msg] ->
+[Note msg] ->
 -- | The created report
 Report msg
 ```
@@ -96,6 +96,7 @@
           (Position (1, 8) (1, 9) "somefile.zc", Where "type 'a' is bound here without constraints")
         ]
         ["Adding 'Num(a)' to the list of constraints may solve this problem."]
+        -- ^^^^ This is a 'Note' not a 'Hint', as specified by its 'IsString' instance
 
 -- Create the diagnostic 
 let diagnostic  = addFile def "somefile.zc" "let id<a>(x : a) : a := x\n  + 1"
diff --git a/diagnose.cabal b/diagnose.cabal
--- a/diagnose.cabal
+++ b/diagnose.cabal
@@ -5,7 +5,7 @@
 -- see: https://github.com/sol/hpack
 
 name:           diagnose
-version:        2.0.1
+version:        2.1.0
 synopsis:       Beautiful error reporting done easily
 description:    This package provides a simple way of getting beautiful compiler/interpreter errors
                 using a very simple interface for the programmer.
diff --git a/src/Error/Diagnose.hs b/src/Error/Diagnose.hs
--- a/src/Error/Diagnose.hs
+++ b/src/Error/Diagnose.hs
@@ -192,7 +192,7 @@
 --   >             }
 --   >         , message: string
 --   >         }[]
---   >     , hints: string[]
+--   >     , hints: ({ note: string } | { hint: string })[]
 --   >     }[]
 --   > }
 --
diff --git a/src/Error/Diagnose/Diagnostic/Internal.hs b/src/Error/Diagnose/Diagnostic/Internal.hs
--- a/src/Error/Diagnose/Diagnostic/Internal.hs
+++ b/src/Error/Diagnose/Diagnostic/Internal.hs
@@ -150,7 +150,7 @@
 --   >             }
 --   >         , message: T
 --   >         }[]
---   >     , hints: T[]
+--   >     , hints: ({ note: T } | { hint: T })[]
 --   >     }[]
 --   > }
 --
diff --git a/src/Error/Diagnose/Report.hs b/src/Error/Diagnose/Report.hs
--- a/src/Error/Diagnose/Report.hs
+++ b/src/Error/Diagnose/Report.hs
@@ -11,4 +11,4 @@
   )
 where
 
-import Error.Diagnose.Report.Internal as Export (Marker (..), Report, err, warn)
+import Error.Diagnose.Report.Internal as Export (Marker (..), Note (..), Report, err, warn)
diff --git a/src/Error/Diagnose/Report/Internal.hs b/src/Error/Diagnose/Report/Internal.hs
--- a/src/Error/Diagnose/Report/Internal.hs
+++ b/src/Error/Diagnose/Report/Internal.hs
@@ -37,6 +37,7 @@
 import qualified Data.List as List
 import qualified Data.List.Safe as List
 import Data.Ord (Down (Down))
+import Data.String (IsString (fromString))
 import qualified Data.Text as Text
 import Error.Diagnose.Position
 import Error.Diagnose.Style (Annotation (..))
@@ -54,8 +55,8 @@
       -- ^ The message associated with the error.
       [(Position, Marker msg)]
       -- ^ A map associating positions with marker to show under the source code.
-      [msg]
-      -- ^ A list of hints to add at the end of the report.
+      [Note msg]
+      -- ^ A list of notes to add at the end of the report.
 
 instance Semigroup msg => Semigroup (Report msg) where
   Report isError1 code1 msg1 pos1 hints1 <> Report isError2 code2 msg2 pos2 hints2 =
@@ -114,6 +115,23 @@
   m1 <= m2 = m1 < m2 || m1 == m2
   {-# INLINEABLE (<=) #-}
 
+-- | A note is a piece of information that is found at the end of a report.
+data Note msg
+  = -- | A note, which is meant to give valuable information related to the encountered error.
+    Note msg
+  | -- | A hint, to propose potential fixes or help towards fixing the issue.
+    Hint msg
+
+#ifdef USE_AESON
+instance ToJSON msg => ToJson (Note msg) where
+  toJSON (Note msg) = object [ "note" .= msg ]
+  toJSON (Hint msg) = object [ "hint" .= msg ]
+#endif
+
+-- | Constructs a 'Note' from the given message as a literal string.
+instance IsString msg => IsString (Note msg) where
+  fromString = Note . fromString
+
 -- | Constructs a warning or an error report.
 warn,
   err ::
@@ -124,7 +142,7 @@
     -- | A list associating positions with markers.
     [(Position, Marker msg)] ->
     -- | A possibly mempty list of hints to add at the end of the report.
-    [msg] ->
+    [Note msg] ->
     Report msg
 warn = Report False
 {-# INLINE warn #-}
@@ -605,7 +623,7 @@
 {-# INLINE markerMessage #-}
 
 -- | Pretty prints all hints.
-prettyAllHints :: Pretty msg => [msg] -> Int -> Bool -> Doc Annotation
+prettyAllHints :: Pretty msg => [Note msg] -> Int -> Bool -> Doc Annotation
 prettyAllHints [] _ _ = mempty
 prettyAllHints (h : hs) leftLen withUnicode =
   {-
@@ -613,5 +631,11 @@
         (1)         : Hint: <hint message>
   -}
   let prefix = hardline <+> pipePrefix leftLen withUnicode
-   in prefix <+> annotate HintColor ("Hint:" <+> replaceLinesWith (prefix <+> "      ") (pretty h))
+   in prefix <+> annotate HintColor (notePrefix h <+> replaceLinesWith (prefix <+> "      ") (pretty $ noteMessage h))
         <> prettyAllHints hs leftLen withUnicode
+  where
+    notePrefix (Note _) = "Note:"
+    notePrefix (Hint _) = "Hint:"
+
+    noteMessage (Note msg) = msg
+    noteMessage (Hint msg) = msg
diff --git a/test/rendering/Spec.hs b/test/rendering/Spec.hs
--- a/test/rendering/Spec.hs
+++ b/test/rendering/Spec.hs
@@ -8,15 +8,13 @@
 import qualified Data.HashMap.Lazy as HashMap
 import Error.Diagnose
   ( Marker (..),
+    Note (Hint),
     Position (..),
     Report,
     addFile,
     addReport,
     def,
     defaultStyle,
-#ifdef USE_AESON
-    diagnosticToJson,
-#endif
     err,
     printDiagnostic,
     stdout,
@@ -240,8 +238,8 @@
     Nothing
     "Error with no markers and two hints"
     []
-    [ "First hint",
-      "Second hint"
+    [ "First note",
+      Hint "Second hint"
     ]
 
 errorSingleMultilineMarkerNoHints :: Report String
