on f678e11 help sign in
elk/src/Reporting/Error.hs
57 lines 1.3 kB history raw
1{-# LANGUAGE OverloadedStrings #-}
2module Reporting.Error where
4import Data.Aeson ((.=))
5import qualified Data.Aeson as Json
6import qualified Data.ByteString.Lazy.Char8 as BS
8import qualified Reporting.Annotation as A
9import qualified Reporting.Error.Canonicalize as Canonicalize
10import qualified Reporting.Error.Syntax as Syntax
11import qualified Reporting.Error.Type as Type
14-- ALL POSSIBLE ERRORS
16data Error
17 = Syntax Syntax.Error
18 | Canonicalize Canonicalize.Error
19 | Type Type.Error
22-- TO STRING
24toString :: A.Located Error -> String
25toString (A.A region err) =
26 case err of
27 Syntax syntaxError ->
28 error "TODO" syntaxError
30 Canonicalize canonicalizeError ->
31 Canonicalize.toString region canonicalizeError
33 Type typeError ->
34 Type.toString region typeError
37-- JSON
39toJson :: A.Located Error -> String
40toJson (A.A region err) =
41 let json =
42 case err of
43 Syntax syntaxError ->
44 Syntax.toJson syntaxError
46 Canonicalize canonicalizeError ->
47 Canonicalize.toJson canonicalizeError
49 Type typeError ->
50 Type.toJson typeError
51 in
52 BS.unpack $ Json.encode $
53 Json.object
54 [ "tag" .= ("error" :: String)
55 , "region" .= region
56 , "error" .= json
57 ]