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-08T13:33:24.089367000000Z
module LambdaCube.TypeInfo where
import Prelude
import Data.Generic
import Data.Maybe (Maybe(..))
import Data.StrMap (StrMap(..))
import Data.Map (Map(..))
import Data.List (List(..))
import Linear
import Data.Argonaut.Combinators ((~>), (:=), (.?))
import Data.Argonaut.Core (jsonEmptyObject)
import Data.Argonaut.Printer (printJson)
import Data.Argonaut.Encode (EncodeJson, encodeJson)
import Data.Argonaut.Decode (DecodeJson, decodeJson)
import LambdaCube.IR
data TypeInfo
= TypeInfo
{ startLine :: Int
, startColumn :: Int
, endLine :: Int
, endColumn :: Int
, text :: String
}
data MyEither
= MyLeft TypeInfo (Array TypeInfo)
| MyRight String Pipeline (Array TypeInfo)
instance encodeJsonTypeInfo :: EncodeJson TypeInfo where
encodeJson v = case v of
TypeInfo r ->
"tag" := "TypeInfo" ~>
"startLine" := r.startLine ~>
"startColumn" := r.startColumn ~>
"endLine" := r.endLine ~>
"endColumn" := r.endColumn ~>
"text" := r.text ~>
jsonEmptyObject
instance decodeJsonTypeInfo :: DecodeJson TypeInfo where
decodeJson json = do
obj <- decodeJson json
tag <- obj .? "tag"
case tag 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
}
instance encodeJsonMyEither :: EncodeJson MyEither where
encodeJson v = case v of
MyLeft arg0 arg1 -> "tag" := "MyLeft" ~> "arg0" := arg0 ~> "arg1" := arg1 ~> jsonEmptyObject
MyRight arg0 arg1 arg2 -> "tag" := "MyRight" ~> "arg0" := arg0 ~> "arg1" := arg1 ~> "arg2" := arg2 ~> jsonEmptyObject
instance decodeJsonMyEither :: DecodeJson MyEither where
decodeJson json = do
obj <- decodeJson json
tag <- obj .? "tag"
case tag of
"MyLeft" -> MyLeft <$> obj .? "arg0" <*> obj .? "arg1"
"MyRight" -> MyRight <$> obj .? "arg0" <*> obj .? "arg1" <*> obj .? "arg2"
|