@@ -49,6 +49,7 @@ import Control.Lazy as Lazy
4949import Data.Argonaut as JS
5050import Data.Array as A
5151import Data.Bitraversable (bitraverse )
52+ import Data.DateTime as DT
5253import Data.Either as E
5354import Data.Functor.Mu as Mu
5455import Data.HugeNum as HN
@@ -61,7 +62,7 @@ import Data.StrMap as SM
6162import Data.Traversable (for )
6263import Data.Tuple as T
6364
64- import Matryoshka (embed , project , cata , anaM )
65+ import Matryoshka (class Corecursive , class Recursive , anaM , cata , embed , project )
6566
6667import Test.StrongCheck.Arbitrary as SC
6768import Test.StrongCheck.Gen as Gen
@@ -71,11 +72,10 @@ import Data.Json.Extended.Signature hiding (getType) as Exports
7172
7273type EJson = Mu.Mu Sig.EJsonF
7374
74-
75- decodeEJson ∷ JS.Json → E.Either String EJson
75+ decodeEJson :: forall t . Corecursive t Sig.EJsonF ⇒ JS.Json → E.Either String t
7676decodeEJson = anaM Sig .decodeJsonEJsonF
7777
78- encodeEJson ∷ EJson → JS.Json
78+ encodeEJson :: forall t . Recursive t Sig.EJsonF ⇒ t -> JS.Json
7979encodeEJson = cata Sig .encodeJsonEJsonF
8080
8181arbitraryEJsonOfSize
@@ -105,120 +105,118 @@ renderEJson ∷ EJson → String
105105renderEJson =
106106 cata Sig .renderEJsonF
107107
108-
109108-- | 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
111110parseEJson =
112111 Lazy .fix \f →
113112 embed <$>
114113 Sig .parseEJsonF f
115114
116-
117- null ∷ EJson
115+ null ∷ ∀ t . Corecursive t Sig.EJsonF ⇒ t
118116null = embed Sig.Null
119117
120- boolean ∷ Boolean → EJson
118+ boolean ∷ ∀ t . Corecursive t Sig.EJsonF ⇒ Boolean → t
121119boolean = embed <<< Sig.Boolean
122120
123- integer ∷ Int → EJson
121+ integer ∷ ∀ t . Corecursive t Sig.EJsonF ⇒ Int → t
124122integer = embed <<< Sig.Integer
125123
126- decimal ∷ HN.HugeNum → EJson
124+ decimal ∷ ∀ t . Corecursive t Sig.EJsonF ⇒ HN.HugeNum → t
127125decimal = embed <<< Sig.Decimal
128126
129- string ∷ String → EJson
127+ string ∷ ∀ t . Corecursive t Sig.EJsonF ⇒ String → t
130128string = embed <<< Sig.String
131129
132- timestamp ∷ String → EJson
130+ timestamp ∷ ∀ t . Corecursive t Sig.EJsonF ⇒ DT.DateTime → t
133131timestamp = embed <<< Sig.Timestamp
134132
135- date ∷ String → EJson
133+ date ∷ ∀ t . Corecursive t Sig.EJsonF ⇒ DT.Date → t
136134date = embed <<< Sig.Date
137135
138- time ∷ String → EJson
136+ time ∷ ∀ t . Corecursive t Sig.EJsonF ⇒ DT.Time → t
139137time = embed <<< Sig.Time
140138
141- interval ∷ String → EJson
139+ interval ∷ ∀ t . Corecursive t Sig.EJsonF ⇒ String → t
142140interval = embed <<< Sig.Interval
143141
144- objectId ∷ String → EJson
142+ objectId ∷ ∀ t . Corecursive t Sig.EJsonF ⇒ String → t
145143objectId = embed <<< Sig.ObjectId
146144
147- array ∷ Array EJson → EJson
145+ array ∷ ∀ t . Corecursive t Sig.EJsonF ⇒ Array t → t
148146array = embed <<< Sig.Array
149147
150- map ∷ Map.Map EJson EJson → EJson
148+ map ∷ ∀ t . Corecursive t Sig.EJsonF ⇒ Map.Map t t → t
151149map = embed <<< Sig.Map <<< A .fromFoldable <<< Map .toList
152150
153- map' ∷ SM.StrMap EJson → EJson
151+ map' ∷ ∀ t . Corecursive t Sig.EJsonF ⇒ SM.StrMap t → t
154152map' = embed <<< Sig.Map <<< F .map go <<< A .fromFoldable <<< SM .toList
155153 where
156154 go (T.Tuple a b) = T.Tuple (string a) b
157155
158- getType ∷ EJson → EJsonType
156+ getType ∷ ∀ t . Recursive t Sig.EJsonF ⇒ t → EJsonType
159157getType = Sig .getType <<< project
160158
161- _Null ∷ Prism' EJson Unit
159+ _Null ∷ ∀ t . ( Corecursive t Sig.EJsonF , Recursive t Sig.EJsonF ) ⇒ Prism' t Unit
162160_Null = prism' (const null) $ project >>> case _ of
163161 Sig.Null → M.Just unit
164162 _ → M.Nothing
165163
166- _String ∷ Prism' EJson String
164+ _String ∷ ∀ t . ( Corecursive t Sig.EJsonF , Recursive t Sig.EJsonF ) ⇒ Prism' t String
167165_String = prism' string $ project >>> case _ of
168166 Sig.String s → M.Just s
169167 _ → M.Nothing
170168
171- _Boolean ∷ Prism' EJson Boolean
169+ _Boolean ∷ ∀ t . ( Corecursive t Sig.EJsonF , Recursive t Sig.EJsonF ) ⇒ Prism' t Boolean
172170_Boolean = prism' boolean $ project >>> case _ of
173171 Sig.Boolean b → M.Just b
174172 _ → M.Nothing
175173
176- _Integer ∷ Prism' EJson Int
174+ _Integer ∷ ∀ t . ( Corecursive t Sig.EJsonF , Recursive t Sig.EJsonF ) ⇒ Prism' t Int
177175_Integer = prism' integer $ project >>> case _ of
178176 Sig.Integer i → M.Just i
179177 _ → M.Nothing
180178
181- _Decimal ∷ Prism' EJson HN.HugeNum
179+ _Decimal ∷ ∀ t . ( Corecursive t Sig.EJsonF , Recursive t Sig.EJsonF ) ⇒ Prism' t HN.HugeNum
182180_Decimal = prism' decimal $ project >>> case _ of
183181 Sig.Decimal d → M.Just d
184182 _ → M.Nothing
185183
186- _Timestamp ∷ Prism' EJson String
184+ _Timestamp ∷ ∀ t . ( Corecursive t Sig.EJsonF , Recursive t Sig.EJsonF ) ⇒ Prism' t DT.DateTime
187185_Timestamp = prism' timestamp $ project >>> case _ of
188186 Sig.Timestamp t → M.Just t
189187 _ → M.Nothing
190188
191- _Date ∷ Prism' EJson String
189+ _Date ∷ ∀ t . ( Corecursive t Sig.EJsonF , Recursive t Sig.EJsonF ) ⇒ Prism' t DT.Date
192190_Date = prism' date $ project >>> case _ of
193191 Sig.Date d → M.Just d
194192 _ → M.Nothing
195193
196- _Time ∷ Prism' EJson String
194+ _Time ∷ ∀ t . ( Corecursive t Sig.EJsonF , Recursive t Sig.EJsonF ) ⇒ Prism' t DT.Time
197195_Time = prism' time $ project >>> case _ of
198196 Sig.Time t → M.Just t
199197 _ → M.Nothing
200198
201- _Interval ∷ Prism' EJson String
199+ _Interval ∷ ∀ t . ( Corecursive t Sig.EJsonF , Recursive t Sig.EJsonF ) ⇒ Prism' t String
202200_Interval = prism' interval $ project >>> case _ of
203201 Sig.Interval i → M.Just i
204202 _ → M.Nothing
205203
206- _ObjectId ∷ Prism' EJson String
204+ _ObjectId ∷ ∀ t . ( Corecursive t Sig.EJsonF , Recursive t Sig.EJsonF ) ⇒ Prism' t String
207205_ObjectId = prism' objectId $ project >>> case _ of
208206 Sig.ObjectId id → M.Just id
209207 _ → M.Nothing
210208
211- _Array ∷ Prism' EJson (Array EJson )
209+ _Array ∷ ∀ t . ( Corecursive t Sig.EJsonF , Recursive t Sig.EJsonF ) ⇒ Prism' t (Array t )
212210_Array = prism' array $ project >>> case _ of
213211 Sig.Array xs → M.Just xs
214212 _ → M.Nothing
215213
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 )
217215_Map = prism' map $ project >>> case _ of
218216 Sig.Map kvs → M.Just $ Map .fromFoldable kvs
219217 _ → M.Nothing
220218
221- _Map' ∷ Prism' EJson (SM.StrMap EJson )
219+ _Map' ∷ ∀ t . ( Corecursive t Sig.EJsonF , Recursive t Sig.EJsonF ) ⇒ Prism' t (SM.StrMap t )
222220_Map' = prism' map' $ project >>> case _ of
223221 Sig.Map kvs → SM .fromFoldable <$> for kvs (bitraverse (preview _String) pure)
224222 _ → M.Nothing
0 commit comments