@@ -49,6 +49,7 @@ import Control.Lazy as Lazy
49
49
import Data.Argonaut as JS
50
50
import Data.Array as A
51
51
import Data.Bitraversable (bitraverse )
52
+ import Data.DateTime as DT
52
53
import Data.Either as E
53
54
import Data.Functor.Mu as Mu
54
55
import Data.HugeNum as HN
@@ -61,7 +62,7 @@ import Data.StrMap as SM
61
62
import Data.Traversable (for )
62
63
import Data.Tuple as T
63
64
64
- import Matryoshka (embed , project , cata , anaM )
65
+ import Matryoshka (class Corecursive , class Recursive , anaM , cata , embed , project )
65
66
66
67
import Test.StrongCheck.Arbitrary as SC
67
68
import Test.StrongCheck.Gen as Gen
@@ -71,11 +72,10 @@ import Data.Json.Extended.Signature hiding (getType) as Exports
71
72
72
73
type EJson = Mu.Mu Sig.EJsonF
73
74
74
-
75
- decodeEJson ∷ JS.Json → E.Either String EJson
75
+ decodeEJson :: forall t . Corecursive t Sig.EJsonF ⇒ JS.Json → E.Either String t
76
76
decodeEJson = anaM Sig .decodeJsonEJsonF
77
77
78
- encodeEJson ∷ EJson → JS.Json
78
+ encodeEJson :: forall t . Recursive t Sig.EJsonF ⇒ t -> JS.Json
79
79
encodeEJson = cata Sig .encodeJsonEJsonF
80
80
81
81
arbitraryEJsonOfSize
@@ -105,120 +105,118 @@ renderEJson ∷ EJson → String
105
105
renderEJson =
106
106
cata Sig .renderEJsonF
107
107
108
-
109
108
-- | A closed parser of SQL^2 constant expressions
110
- parseEJson ∷ ∀ m . ( Monad m ) ⇒ P.ParserT String m EJson
109
+ parseEJson ∷ ∀ m . Monad m ⇒ P.ParserT String m EJson
111
110
parseEJson =
112
111
Lazy .fix \f →
113
112
embed <$>
114
113
Sig .parseEJsonF f
115
114
116
-
117
- null ∷ EJson
115
+ null ∷ ∀ t . Corecursive t Sig.EJsonF ⇒ t
118
116
null = embed Sig.Null
119
117
120
- boolean ∷ Boolean → EJson
118
+ boolean ∷ ∀ t . Corecursive t Sig.EJsonF ⇒ Boolean → t
121
119
boolean = embed <<< Sig.Boolean
122
120
123
- integer ∷ Int → EJson
121
+ integer ∷ ∀ t . Corecursive t Sig.EJsonF ⇒ Int → t
124
122
integer = embed <<< Sig.Integer
125
123
126
- decimal ∷ HN.HugeNum → EJson
124
+ decimal ∷ ∀ t . Corecursive t Sig.EJsonF ⇒ HN.HugeNum → t
127
125
decimal = embed <<< Sig.Decimal
128
126
129
- string ∷ String → EJson
127
+ string ∷ ∀ t . Corecursive t Sig.EJsonF ⇒ String → t
130
128
string = embed <<< Sig.String
131
129
132
- timestamp ∷ String → EJson
130
+ timestamp ∷ ∀ t . Corecursive t Sig.EJsonF ⇒ DT.DateTime → t
133
131
timestamp = embed <<< Sig.Timestamp
134
132
135
- date ∷ String → EJson
133
+ date ∷ ∀ t . Corecursive t Sig.EJsonF ⇒ DT.Date → t
136
134
date = embed <<< Sig.Date
137
135
138
- time ∷ String → EJson
136
+ time ∷ ∀ t . Corecursive t Sig.EJsonF ⇒ DT.Time → t
139
137
time = embed <<< Sig.Time
140
138
141
- interval ∷ String → EJson
139
+ interval ∷ ∀ t . Corecursive t Sig.EJsonF ⇒ String → t
142
140
interval = embed <<< Sig.Interval
143
141
144
- objectId ∷ String → EJson
142
+ objectId ∷ ∀ t . Corecursive t Sig.EJsonF ⇒ String → t
145
143
objectId = embed <<< Sig.ObjectId
146
144
147
- array ∷ Array EJson → EJson
145
+ array ∷ ∀ t . Corecursive t Sig.EJsonF ⇒ Array t → t
148
146
array = embed <<< Sig.Array
149
147
150
- map ∷ Map.Map EJson EJson → EJson
148
+ map ∷ ∀ t . Corecursive t Sig.EJsonF ⇒ Map.Map t t → t
151
149
map = embed <<< Sig.Map <<< A .fromFoldable <<< Map .toList
152
150
153
- map' ∷ SM.StrMap EJson → EJson
151
+ map' ∷ ∀ t . Corecursive t Sig.EJsonF ⇒ SM.StrMap t → t
154
152
map' = embed <<< Sig.Map <<< F .map go <<< A .fromFoldable <<< SM .toList
155
153
where
156
154
go (T.Tuple a b) = T.Tuple (string a) b
157
155
158
- getType ∷ EJson → EJsonType
156
+ getType ∷ ∀ t . Recursive t Sig.EJsonF ⇒ t → EJsonType
159
157
getType = Sig .getType <<< project
160
158
161
- _Null ∷ Prism' EJson Unit
159
+ _Null ∷ ∀ t . ( Corecursive t Sig.EJsonF , Recursive t Sig.EJsonF ) ⇒ Prism' t Unit
162
160
_Null = prism' (const null) $ project >>> case _ of
163
161
Sig.Null → M.Just unit
164
162
_ → M.Nothing
165
163
166
- _String ∷ Prism' EJson String
164
+ _String ∷ ∀ t . ( Corecursive t Sig.EJsonF , Recursive t Sig.EJsonF ) ⇒ Prism' t String
167
165
_String = prism' string $ project >>> case _ of
168
166
Sig.String s → M.Just s
169
167
_ → M.Nothing
170
168
171
- _Boolean ∷ Prism' EJson Boolean
169
+ _Boolean ∷ ∀ t . ( Corecursive t Sig.EJsonF , Recursive t Sig.EJsonF ) ⇒ Prism' t Boolean
172
170
_Boolean = prism' boolean $ project >>> case _ of
173
171
Sig.Boolean b → M.Just b
174
172
_ → M.Nothing
175
173
176
- _Integer ∷ Prism' EJson Int
174
+ _Integer ∷ ∀ t . ( Corecursive t Sig.EJsonF , Recursive t Sig.EJsonF ) ⇒ Prism' t Int
177
175
_Integer = prism' integer $ project >>> case _ of
178
176
Sig.Integer i → M.Just i
179
177
_ → M.Nothing
180
178
181
- _Decimal ∷ Prism' EJson HN.HugeNum
179
+ _Decimal ∷ ∀ t . ( Corecursive t Sig.EJsonF , Recursive t Sig.EJsonF ) ⇒ Prism' t HN.HugeNum
182
180
_Decimal = prism' decimal $ project >>> case _ of
183
181
Sig.Decimal d → M.Just d
184
182
_ → M.Nothing
185
183
186
- _Timestamp ∷ Prism' EJson String
184
+ _Timestamp ∷ ∀ t . ( Corecursive t Sig.EJsonF , Recursive t Sig.EJsonF ) ⇒ Prism' t DT.DateTime
187
185
_Timestamp = prism' timestamp $ project >>> case _ of
188
186
Sig.Timestamp t → M.Just t
189
187
_ → M.Nothing
190
188
191
- _Date ∷ Prism' EJson String
189
+ _Date ∷ ∀ t . ( Corecursive t Sig.EJsonF , Recursive t Sig.EJsonF ) ⇒ Prism' t DT.Date
192
190
_Date = prism' date $ project >>> case _ of
193
191
Sig.Date d → M.Just d
194
192
_ → M.Nothing
195
193
196
- _Time ∷ Prism' EJson String
194
+ _Time ∷ ∀ t . ( Corecursive t Sig.EJsonF , Recursive t Sig.EJsonF ) ⇒ Prism' t DT.Time
197
195
_Time = prism' time $ project >>> case _ of
198
196
Sig.Time t → M.Just t
199
197
_ → M.Nothing
200
198
201
- _Interval ∷ Prism' EJson String
199
+ _Interval ∷ ∀ t . ( Corecursive t Sig.EJsonF , Recursive t Sig.EJsonF ) ⇒ Prism' t String
202
200
_Interval = prism' interval $ project >>> case _ of
203
201
Sig.Interval i → M.Just i
204
202
_ → M.Nothing
205
203
206
- _ObjectId ∷ Prism' EJson String
204
+ _ObjectId ∷ ∀ t . ( Corecursive t Sig.EJsonF , Recursive t Sig.EJsonF ) ⇒ Prism' t String
207
205
_ObjectId = prism' objectId $ project >>> case _ of
208
206
Sig.ObjectId id → M.Just id
209
207
_ → M.Nothing
210
208
211
- _Array ∷ Prism' EJson (Array EJson )
209
+ _Array ∷ ∀ t . ( Corecursive t Sig.EJsonF , Recursive t Sig.EJsonF ) ⇒ Prism' t (Array t )
212
210
_Array = prism' array $ project >>> case _ of
213
211
Sig.Array xs → M.Just xs
214
212
_ → M.Nothing
215
213
216
- _Map ∷ Prism' EJson (Map.Map EJson EJson )
214
+ _Map ∷ ∀ t . ( Corecursive t Sig.EJsonF , Recursive t Sig.EJsonF , Ord t ) ⇒ Prism' t (Map.Map t t )
217
215
_Map = prism' map $ project >>> case _ of
218
216
Sig.Map kvs → M.Just $ Map .fromFoldable kvs
219
217
_ → M.Nothing
220
218
221
- _Map' ∷ Prism' EJson (SM.StrMap EJson )
219
+ _Map' ∷ ∀ t . ( Corecursive t Sig.EJsonF , Recursive t Sig.EJsonF ) ⇒ Prism' t (SM.StrMap t )
222
220
_Map' = prism' map' $ project >>> case _ of
223
221
Sig.Map kvs → SM .fromFoldable <$> for kvs (bitraverse (preview _String) pure)
224
222
_ → M.Nothing
0 commit comments