@@ -5,6 +5,7 @@ module Data.Json.Extended
55 , boolean
66 , integer
77 , decimal
8+ , number
89 , string
910 , map
1011 , map'
@@ -24,6 +25,7 @@ module Data.Json.Extended
2425 , _Boolean
2526 , _Integer
2627 , _Decimal
28+ , _Number
2729 , _Array
2830 , _Map
2931 , _Map'
@@ -32,26 +34,25 @@ module Data.Json.Extended
3234import Prelude hiding (map )
3335
3436import Control.Lazy as Lazy
35-
3637import Data.Argonaut as JS
3738import Data.Bitraversable (bitraverse )
3839import Data.Either as E
3940import Data.Functor as F
4041import Data.Functor.Mu as Mu
42+ import Data.HugeInt as HI
4143import Data.HugeNum as HN
4244import Data.Json.Extended.Signature as Sig
45+ import Data.Json.Extended.Signature hiding (getType ) as Exports
4346import Data.Json.Extended.Type (EJsonType )
4447import Data.Lens (Prism' , preview , prism' )
4548import Data.Map as Map
4649import Data.Maybe as M
4750import Data.StrMap as SM
4851import Data.Traversable (for )
4952import Data.Tuple as T
50- import Data.Json.Extended.Signature hiding (getType ) as Exports
51-
5253import 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 )
5556import Text.Parsing.Parser as P
5657
5758type EJson = Mu.Mu Sig.EJsonF
@@ -62,7 +63,13 @@ decodeEJson = anaM Sig.decodeJsonEJsonF
6263encodeEJson ∷ ∀ t . Recursive t Sig.EJsonF ⇒ t → JS.Json
6364encodeEJson = cata Sig .encodeJsonEJsonF
6465
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
6673arbitraryEJsonOfSize = anaM Sig .arbitraryEJsonF
6774
6875renderEJson ∷ ∀ t . Recursive t Sig.EJsonF ⇒ t → String
@@ -78,12 +85,15 @@ null = embed Sig.Null
7885boolean ∷ ∀ t . Corecursive t Sig.EJsonF ⇒ Boolean → t
7986boolean = embed <<< Sig.Boolean
8087
81- integer ∷ ∀ t . Corecursive t Sig.EJsonF ⇒ Int → t
88+ integer ∷ ∀ t . Corecursive t Sig.EJsonF ⇒ HI.HugeInt → t
8289integer = embed <<< Sig.Integer
8390
8491decimal ∷ ∀ t . Corecursive t Sig.EJsonF ⇒ HN.HugeNum → t
8592decimal = embed <<< Sig.Decimal
8693
94+ number ∷ ∀ t . Corecursive t Sig.EJsonF ⇒ E.Either HI.HugeInt HN.HugeNum → t
95+ number = embed <<< E .either Sig.Integer Sig.Decimal
96+
8797string ∷ ∀ t . Corecursive t Sig.EJsonF ⇒ String → t
8898string = embed <<< Sig.String
8999
@@ -116,7 +126,7 @@ _Boolean = prism' boolean $ project >>> case _ of
116126 Sig.Boolean b → M.Just b
117127 _ → M.Nothing
118128
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
120130_Integer = prism' integer $ project >>> case _ of
121131 Sig.Integer i → M.Just i
122132 _ → M.Nothing
@@ -126,6 +136,12 @@ _Decimal = prism' decimal $ project >>> case _ of
126136 Sig.Decimal d → M.Just d
127137 _ → M.Nothing
128138
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+
129145_Array ∷ ∀ t . Corecursive t Sig.EJsonF ⇒ Recursive t Sig.EJsonF ⇒ Prism' t (Array t )
130146_Array = prism' array $ project >>> case _ of
131147 Sig.Array xs → M.Just xs
0 commit comments