on ccc138c help sign in
elk/src/Reporting/Error.hs
64 lines 1.6 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
12import qualified Reporting.Error.CheckMatch as CheckMatch
15-- ALL POSSIBLE ERRORS
17data Error
18 = Syntax Syntax.Error
19 | Canonicalize Canonicalize.Error
20 | Type Type.Error
21 | CheckMatch CheckMatch.Error
24-- TO STRING
26toString :: A.Located Error -> String
27toString (A.A region err) =
28 case err of
29 Syntax syntaxError ->
30 Syntax.toString region syntaxError
32 Canonicalize canonicalizeError ->
33 Canonicalize.toString region canonicalizeError
35 Type typeError ->
36 Type.toString region typeError
38 CheckMatch matchError ->
39 CheckMatch.toString region matchError
41-- JSON
43toJson :: A.Located Error -> String
44toJson (A.A region err) =
45 let json =
46 case err of
47 Syntax syntaxError ->
48 Syntax.toJson syntaxError
50 Canonicalize canonicalizeError ->
51 Canonicalize.toJson canonicalizeError
53 Type typeError ->
54 Type.toJson typeError
56 CheckMatch matchError ->
57 CheckMatch.toJson matchError
58 in
59 BS.unpack $ Json.encode $
60 Json.object
61 [ "tag" .= ("error" :: String)
62 , "region" .= region
63 , "error" .= json
64 ]