   (let ((regex "^\\([^\n\0]*\\):\\([0-9]+\\):\\([0-9]+\\): *\\(.+\\)")
 	info infos)
     (while (re-search-forward regex nil t)
-      (setq info (ghc-make-hilit-info
-		  :file (match-string 1)
-		  :line (string-to-number (match-string 2))
-		  :col  (string-to-number (match-string 3))
-		  :msg  (match-string 4)))
-      (setq infos (cons info infos)))
+      (let* ((file (match-string 1))
+	     (line (string-to-number (match-string 2)))
+	     (col  (string-to-number (match-string 3)))
+	     (msg  (match-string 4))
+	     (err  (not (string-match "^Warning" msg)))
+	     (info (ghc-make-hilit-info
+		    :file file
+		    :line line
+		    :col  col
+		    :msg  msg
+		    :err  err)))
+	(setq infos (cons info infos))))
     (setq infos (nreverse infos))
     (cond
      (infos


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

(ghc-defstruct hilit-info file line col msg)

(defun ghc-check-send ()
  (concat "check " ghc-process-original-file "\n"))

	  (overlay-put ovl 'ghc-check t)
	  (overlay-put ovl 'ghc-file file)
	  (overlay-put ovl 'ghc-msg msg) ;; should be list
	  (let ((face (if err 'ghc-face-error 'ghc-face-warn)))
	    (overlay-put ovl 'face face)))))))

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
