1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
|
-- generated file, do not modify!
-- 2016-02-26T10:42:57.376331000000Z
{-# LANGUAGE OverloadedStrings, RecordWildCards #-}
module LambdaCube.TypeInfo where
import Data.Int
import Data.Word
import Data.Map
import Data.Vector (Vector(..))
import LambdaCube.Linear
import Data.Text
import Data.Aeson hiding (Value,Bool)
import Data.Aeson.Types hiding (Value,Bool)
import Control.Monad
import LambdaCube.IR
data TypeInfo
= TypeInfo
{ startLine :: Int
, startColumn :: Int
, endLine :: Int
, endColumn :: Int
, text :: String
}
deriving (Show, Eq, Ord)
data CompileResult
= CompileError (Vector TypeInfo) (Vector TypeInfo)
| Compiled String Pipeline (Vector TypeInfo)
deriving (Show, Eq, Ord)
instance ToJSON TypeInfo where
toJSON v = case v of
TypeInfo{..} -> object
[ "tag" .= ("TypeInfo" :: Text)
, "startLine" .= startLine
, "startColumn" .= startColumn
, "endLine" .= endLine
, "endColumn" .= endColumn
, "text" .= text
]
instance FromJSON TypeInfo where
parseJSON (Object obj) = do
tag <- obj .: "tag"
case tag :: Text of
"TypeInfo" -> do
startLine <- obj .: "startLine"
startColumn <- obj .: "startColumn"
endLine <- obj .: "endLine"
endColumn <- obj .: "endColumn"
text <- obj .: "text"
pure $ TypeInfo
{ startLine = startLine
, startColumn = startColumn
, endLine = endLine
, endColumn = endColumn
, text = text
}
parseJSON _ = mzero
instance ToJSON CompileResult where
toJSON v = case v of
CompileError arg0 arg1 -> object [ "tag" .= ("CompileError" :: Text), "arg0" .= arg0, "arg1" .= arg1]
Compiled arg0 arg1 arg2 -> object [ "tag" .= ("Compiled" :: Text), "arg0" .= arg0, "arg1" .= arg1, "arg2" .= arg2]
instance FromJSON CompileResult where
parseJSON (Object obj) = do
tag <- obj .: "tag"
case tag :: Text of
"CompileError" -> CompileError <$> obj .: "arg0" <*> obj .: "arg1"
"Compiled" -> Compiled <$> obj .: "arg0" <*> obj .: "arg1" <*> obj .: "arg2"
parseJSON _ = mzero
|