@@ -5,6 +5,7 @@ module Data.Json.Extended
5
5
, boolean
6
6
, integer
7
7
, decimal
8
+ , number
8
9
, string
9
10
, map
10
11
, map'
@@ -24,6 +25,7 @@ module Data.Json.Extended
24
25
, _Boolean
25
26
, _Integer
26
27
, _Decimal
28
+ , _Number
27
29
, _Array
28
30
, _Map
29
31
, _Map'
@@ -32,26 +34,25 @@ module Data.Json.Extended
32
34
import Prelude hiding (map )
33
35
34
36
import Control.Lazy as Lazy
35
-
36
37
import Data.Argonaut as JS
37
38
import Data.Bitraversable (bitraverse )
38
39
import Data.Either as E
39
40
import Data.Functor as F
40
41
import Data.Functor.Mu as Mu
42
+ import Data.HugeInt as HI
41
43
import Data.HugeNum as HN
42
44
import Data.Json.Extended.Signature as Sig
45
+ import Data.Json.Extended.Signature hiding (getType ) as Exports
43
46
import Data.Json.Extended.Type (EJsonType )
44
47
import Data.Lens (Prism' , preview , prism' )
45
48
import Data.Map as Map
46
49
import Data.Maybe as M
47
50
import Data.StrMap as SM
48
51
import Data.Traversable (for )
49
52
import Data.Tuple as T
50
- import Data.Json.Extended.Signature hiding (getType ) as Exports
51
-
52
53
import Matryoshka (class Corecursive , class Recursive , anaM , cata , embed , project )
53
-
54
- import Test.StrongCheck.Gen as Gen
54
+ import Control.Monad.Gen ( class MonadGen )
55
+ import Control.Monad.Rec.Class ( class MonadRec )
55
56
import Text.Parsing.Parser as P
56
57
57
58
type EJson = Mu.Mu Sig.EJsonF
@@ -62,7 +63,13 @@ decodeEJson = anaM Sig.decodeJsonEJsonF
62
63
encodeEJson ∷ ∀ t . Recursive t Sig.EJsonF ⇒ t → JS.Json
63
64
encodeEJson = cata Sig .encodeJsonEJsonF
64
65
65
- arbitraryEJsonOfSize ∷ ∀ t . Corecursive t Sig.EJsonF ⇒ Gen.Size → Gen.Gen t
66
+ arbitraryEJsonOfSize
67
+ ∷ ∀ m t
68
+ . MonadGen m
69
+ ⇒ MonadRec m
70
+ ⇒ Corecursive t Sig.EJsonF
71
+ ⇒ Int
72
+ → m t
66
73
arbitraryEJsonOfSize = anaM Sig .arbitraryEJsonF
67
74
68
75
renderEJson ∷ ∀ t . Recursive t Sig.EJsonF ⇒ t → String
@@ -78,12 +85,15 @@ null = embed Sig.Null
78
85
boolean ∷ ∀ t . Corecursive t Sig.EJsonF ⇒ Boolean → t
79
86
boolean = embed <<< Sig.Boolean
80
87
81
- integer ∷ ∀ t . Corecursive t Sig.EJsonF ⇒ Int → t
88
+ integer ∷ ∀ t . Corecursive t Sig.EJsonF ⇒ HI.HugeInt → t
82
89
integer = embed <<< Sig.Integer
83
90
84
91
decimal ∷ ∀ t . Corecursive t Sig.EJsonF ⇒ HN.HugeNum → t
85
92
decimal = embed <<< Sig.Decimal
86
93
94
+ number ∷ ∀ t . Corecursive t Sig.EJsonF ⇒ E.Either HI.HugeInt HN.HugeNum → t
95
+ number = embed <<< E .either Sig.Integer Sig.Decimal
96
+
87
97
string ∷ ∀ t . Corecursive t Sig.EJsonF ⇒ String → t
88
98
string = embed <<< Sig.String
89
99
@@ -116,7 +126,7 @@ _Boolean = prism' boolean $ project >>> case _ of
116
126
Sig.Boolean b → M.Just b
117
127
_ → M.Nothing
118
128
119
- _Integer ∷ ∀ t . Corecursive t Sig.EJsonF ⇒ Recursive t Sig.EJsonF ⇒ Prism' t Int
129
+ _Integer ∷ ∀ t . Corecursive t Sig.EJsonF ⇒ Recursive t Sig.EJsonF ⇒ Prism' t HI.HugeInt
120
130
_Integer = prism' integer $ project >>> case _ of
121
131
Sig.Integer i → M.Just i
122
132
_ → M.Nothing
@@ -126,6 +136,12 @@ _Decimal = prism' decimal $ project >>> case _ of
126
136
Sig.Decimal d → M.Just d
127
137
_ → M.Nothing
128
138
139
+ _Number ∷ ∀ t . Corecursive t Sig.EJsonF ⇒ Recursive t Sig.EJsonF ⇒ Prism' t (E.Either HI.HugeInt HN.HugeNum )
140
+ _Number = prism' number $ project >>> case _ of
141
+ Sig.Integer i → M.Just (E.Left i)
142
+ Sig.Decimal d → M.Just (E.Right d)
143
+ _ → M.Nothing
144
+
129
145
_Array ∷ ∀ t . Corecursive t Sig.EJsonF ⇒ Recursive t Sig.EJsonF ⇒ Prism' t (Array t )
130
146
_Array = prism' array $ project >>> case _ of
131
147
Sig.Array xs → M.Just xs
0 commit comments