Skip to content

Commit 5507fc7

Browse files
committed
0.12 updates
1 parent fa2cbbb commit 5507fc7

File tree

7 files changed

+65
-59
lines changed

7 files changed

+65
-59
lines changed

bower.json

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -22,12 +22,12 @@
2222
},
2323
"license": "MIT",
2424
"dependencies": {
25-
"purescript-argonaut-core": "^3.0.0",
26-
"purescript-generics": "^4.0.0",
27-
"purescript-integers": "^3.0.0",
28-
"purescript-maybe": "^3.0.0"
25+
"purescript-argonaut-core": "#compiler/0.12",
26+
"purescript-integers": "#compiler/0.12",
27+
"purescript-maybe": "#compiler/0.12",
28+
"purescript-foreign-object": "#compiler/0.12"
2929
},
3030
"devDependencies": {
31-
"purescript-strongcheck": "^3.1.0"
31+
"purescript-strongcheck": "#compiler/0.12"
3232
}
3333
}

package.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,9 @@
66
"test": "pulp test"
77
},
88
"devDependencies": {
9-
"pulp": "^11.0.0",
10-
"purescript-psa": "^0.5.0",
11-
"purescript": "^0.11.1",
9+
"pulp": "^12.0.1",
10+
"purescript-psa": "^0.6.0",
11+
"purescript": "cryogenian/node-purescript-bin#master",
1212
"rimraf": "^2.6.1"
1313
}
1414
}

src/Data/Argonaut/Decode/Class.purs

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -5,17 +5,17 @@ module Data.Argonaut.Decode.Class
55

66
import Prelude
77

8-
import Data.Argonaut.Core (Json, JArray, JObject, isNull, foldJsonNull, foldJsonBoolean, foldJsonNumber, foldJsonString, toArray, toObject, toString)
8+
import Data.Argonaut.Core (Json, isNull, caseJsonNull, caseJsonBoolean, caseJsonNumber, caseJsonString, toArray, toObject, toString, stringify)
99
import Data.Bifunctor (lmap)
1010
import Data.Either (Either(..))
1111
import Data.Int (fromNumber)
1212
import Data.List (List(..), (:), fromFoldable)
1313
import Data.Map as M
1414
import Data.Maybe (maybe, Maybe(..))
1515
import Data.String (charAt)
16-
import Data.StrMap as SM
1716
import Data.Traversable (traverse)
1817
import Data.Tuple (Tuple(..))
18+
import Foreign.Object as FO
1919

2020
class DecodeJson a where
2121
decodeJson :: Json -> Either String a
@@ -35,21 +35,21 @@ instance decodeJsonEither :: (DecodeJson a, DecodeJson b) => DecodeJson (Either
3535
decodeJson json =
3636
lmap ("Couldn't decode Either: " <> _) $
3737
decodeJObject json >>= \obj -> do
38-
tag <- maybe (Left "Expected field 'tag'") Right $ SM.lookup "tag" obj
39-
val <- maybe (Left "Expected field 'value'") Right $ SM.lookup "value" obj
38+
tag <- maybe (Left "Expected field 'tag'") Right $ FO.lookup "tag" obj
39+
val <- maybe (Left "Expected field 'value'") Right $ FO.lookup "value" obj
4040
case toString tag of
4141
Just "Right" -> Right <$> decodeJson val
4242
Just "Left" -> Left <$> decodeJson val
4343
_ -> Left "'tag' field was not \"Left\" or \"Right\""
4444

4545
instance decodeJsonNull :: DecodeJson Unit where
46-
decodeJson = foldJsonNull (Left "Value is not a null") (const $ Right unit)
46+
decodeJson = caseJsonNull (Left "Value is not a null") (const $ Right unit)
4747

4848
instance decodeJsonBoolean :: DecodeJson Boolean where
49-
decodeJson = foldJsonBoolean (Left "Value is not a Boolean") Right
49+
decodeJson = caseJsonBoolean (Left "Value is not a Boolean") Right
5050

5151
instance decodeJsonNumber :: DecodeJson Number where
52-
decodeJson = foldJsonNumber (Left "Value is not a Number") Right
52+
decodeJson = caseJsonNumber (Left "Value is not a Number") Right
5353

5454
instance decodeJsonInt :: DecodeJson Int where
5555
decodeJson
@@ -58,19 +58,19 @@ instance decodeJsonInt :: DecodeJson Int where
5858
<=< decodeJson
5959

6060
instance decodeJsonString :: DecodeJson String where
61-
decodeJson = foldJsonString (Left "Value is not a String") Right
61+
decodeJson = caseJsonString (Left "Value is not a String") Right
6262

6363
instance decodeJsonJson :: DecodeJson Json where
6464
decodeJson = Right
6565

6666
instance decodeJsonChar :: DecodeJson Char where
6767
decodeJson j =
68-
maybe (Left $ "Expected character but found: " <> show j) Right
68+
maybe (Left $ "Expected character but found: " <> stringify j) Right
6969
=<< charAt 0 <$> decodeJson j
7070

71-
instance decodeStrMap :: DecodeJson a => DecodeJson (SM.StrMap a) where
71+
instance decodeForeignObject :: DecodeJson a => DecodeJson (FO.Object a) where
7272
decodeJson
73-
= lmap ("Couldn't decode StrMap: " <> _)
73+
= lmap ("Couldn't decode ForeignObject: " <> _)
7474
<<< (traverse decodeJson <=< decodeJObject)
7575

7676
instance decodeArray :: DecodeJson a => DecodeJson (Array a) where
@@ -89,8 +89,8 @@ instance decodeMap :: (Ord a, DecodeJson a, DecodeJson b) => DecodeJson (M.Map a
8989
instance decodeVoid :: DecodeJson Void where
9090
decodeJson _ = Left "Value cannot be Void"
9191

92-
decodeJArray :: Json -> Either String JArray
92+
decodeJArray :: Json -> Either String (Array Json)
9393
decodeJArray = maybe (Left "Value is not an Array") Right <<< toArray
9494

95-
decodeJObject :: Json -> Either String JObject
95+
decodeJObject :: Json -> Either String (FO.Object Json)
9696
decodeJObject = maybe (Left "Value is not an Object") Right <<< toObject

src/Data/Argonaut/Decode/Combinators.purs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,27 +2,27 @@ module Data.Argonaut.Decode.Combinators where
22

33
import Prelude
44

5-
import Data.Argonaut.Core (JObject)
5+
import Data.Argonaut.Core (Json)
66
import Data.Argonaut.Decode.Class (class DecodeJson, decodeJson)
77
import Data.Either (Either(..))
88
import Data.Maybe (Maybe(..), fromMaybe, maybe)
9-
import Data.StrMap as SM
9+
import Foreign.Object as FO
1010

11-
getField :: forall a. DecodeJson a => JObject -> String -> Either String a
11+
getField :: forall a. DecodeJson a => FO.Object Json -> String -> Either String a
1212
getField o s =
1313
maybe
1414
(Left $ "Expected field " <> show s)
1515
decodeJson
16-
(SM.lookup s o)
16+
(FO.lookup s o)
1717

1818
infix 7 getField as .?
1919

20-
getFieldOptional :: forall a. DecodeJson a => JObject -> String -> Either String (Maybe a)
20+
getFieldOptional :: forall a. DecodeJson a => FO.Object Json -> String -> Either String (Maybe a)
2121
getFieldOptional o s =
2222
maybe
2323
(pure Nothing)
2424
decode
25-
(SM.lookup s o)
25+
(FO.lookup s o)
2626
where
2727
decode json = Just <$> decodeJson json
2828

src/Data/Argonaut/Encode/Class.purs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,8 @@ import Data.List (List(..), (:), toUnfoldable)
99
import Data.Map as M
1010
import Data.Maybe (Maybe(..))
1111
import Data.String (singleton)
12-
import Data.StrMap as SM
1312
import Data.Tuple (Tuple(..))
13+
import Foreign.Object as FO
1414

1515
class EncodeJson a where
1616
encodeJson :: a -> Json
@@ -27,7 +27,7 @@ instance encodeJsonEither :: (EncodeJson a, EncodeJson b) => EncodeJson (Either
2727
where
2828
obj :: forall c. EncodeJson c => String -> c -> Json
2929
obj tag x =
30-
fromObject $ SM.fromFoldable $
30+
fromObject $ FO.fromFoldable $
3131
Tuple "tag" (fromString tag) : Tuple "value" (encodeJson x) : Nil
3232

3333
instance encodeJsonUnit :: EncodeJson Unit where
@@ -46,7 +46,7 @@ instance encodeJsonJString :: EncodeJson String where
4646
encodeJson = fromString
4747

4848
instance encodeJsonJson :: EncodeJson Json where
49-
encodeJson = id
49+
encodeJson = identity
5050

5151
instance encodeJsonChar :: EncodeJson Char where
5252
encodeJson = encodeJson <<< singleton
@@ -57,7 +57,7 @@ instance encodeJsonArray :: EncodeJson a => EncodeJson (Array a) where
5757
instance encodeJsonList :: EncodeJson a => EncodeJson (List a) where
5858
encodeJson = fromArray <<< map encodeJson <<< toUnfoldable
5959

60-
instance encodeStrMap :: EncodeJson a => EncodeJson (SM.StrMap a) where
60+
instance encodeForeignObject :: EncodeJson a => EncodeJson (FO.Object a) where
6161
encodeJson = fromObject <<< map encodeJson
6262

6363
instance encodeMap :: (Ord a, EncodeJson a, EncodeJson b) => EncodeJson (M.Map a b) where

src/Data/Argonaut/Encode/Combinators.purs

Lines changed: 18 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -11,41 +11,46 @@ module Data.Argonaut.Encode.Combinators where
1111

1212
import Prelude
1313

14-
import Data.Argonaut.Core (Json, JAssoc, foldJsonObject, fromObject, jsonSingletonObject)
14+
import Data.Argonaut.Core (Json, caseJsonObject, fromObject, jsonSingletonObject)
1515
import Data.Argonaut.Encode.Class (class EncodeJson, encodeJson)
1616
import Data.Maybe (Maybe(..))
17-
import Data.StrMap as SM
1817
import Data.Tuple (Tuple(..))
18+
import Foreign.Object as FO
1919

20-
-- | Creates a `JAssoc` entry, representing a key/value pair for an object.
20+
-- | Creates a `Tuple String Json` entry, representing a key/value pair for an object.
2121
infix 7 assoc as :=
2222

2323
-- | The named implementation of the `(:=)` operator.
24-
assoc :: forall a. EncodeJson a => String -> a -> JAssoc
24+
assoc :: forall a. EncodeJson a => String -> a -> Tuple String Json
2525
assoc k = Tuple k <<< encodeJson
2626

27-
-- | Creates an optional `JAssoc` entry, representing an optional key/value pair for an object.
27+
-- | Creates an optional `Tuple String Json` entry, representing an optional key/value pair for an object.
2828
infix 7 assocOptional as :=?
2929

3030
-- | The named implementation of the `(:=?)` operator.
31-
assocOptional :: forall a. EncodeJson a => String -> Maybe a -> Maybe JAssoc
31+
assocOptional
32+
:: forall a
33+
. EncodeJson a
34+
=> String
35+
-> Maybe a
36+
-> Maybe (Tuple String Json)
3237
assocOptional k = (<$>) (((:=) k) <<< encodeJson)
3338

34-
-- | Extends a Json object with a `JAssoc` property.
39+
-- | Extends a Json object with a `Tuple String Json` property.
3540
infixr 6 extend as ~>
3641

3742
-- | The named implementation of the `(~>)` operator.
38-
extend :: forall a. EncodeJson a => JAssoc -> a -> Json
43+
extend :: forall a. EncodeJson a => Tuple String Json -> a -> Json
3944
extend (Tuple k v) =
40-
foldJsonObject
45+
caseJsonObject
4146
(jsonSingletonObject k v)
42-
(SM.insert k v >>> fromObject)
47+
(FO.insert k v >>> fromObject)
4348
<<< encodeJson
4449

45-
-- | Optionally extends a Json object with an optional `JAssoc` property.
50+
-- | Optionally extends a Json object with an optional `Tuple String Json` property.
4651
infixr 6 extendOptional as ~>?
4752

4853
-- | The named implementation of the `(~>?)` operator.
49-
extendOptional :: forall a. EncodeJson a => Maybe JAssoc -> a -> Json
54+
extendOptional :: forall a. EncodeJson a => Maybe (Tuple String Json) -> a -> Json
5055
extendOptional (Just kv) = (~>) kv
51-
extendOptional Nothing = encodeJson
56+
extendOptional Nothing = encodeJson

test/Test/Main.purs

Lines changed: 16 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -2,21 +2,22 @@ module Test.Main where
22

33
import Prelude
44

5-
import Control.Monad.Eff.Console (log)
6-
import Data.Argonaut.Core (JObject, Json, isObject, toObject)
5+
import Data.Argonaut.Core (Json, isObject, toObject)
76
import Data.Argonaut.Decode (decodeJson)
87
import Data.Argonaut.Encode (class EncodeJson, encodeJson, (:=), (:=?), (~>), (~>?))
98
import Data.Argonaut.Gen (genJson)
109
import Data.Either (Either(..))
1110
import Data.Foldable (foldl)
1211
import Data.Maybe (Maybe(..), isJust, isNothing, maybe)
13-
import Data.StrMap as SM
1412
import Data.Tuple (Tuple(..))
15-
import Test.StrongCheck (SC, quickCheck, quickCheck', (<?>))
13+
import Effect (Effect)
14+
import Effect.Console (log)
15+
import Foreign.Object as FO
16+
import Test.StrongCheck (quickCheck, quickCheck', (<?>))
1617
import Test.StrongCheck.Arbitrary (class Arbitrary)
1718
import Test.StrongCheck.Gen (suchThat, resize)
1819

19-
main :: SC () Unit
20+
main :: Effect Unit
2021
main = do
2122
eitherCheck
2223
encodeDecodeCheck
@@ -30,7 +31,7 @@ instance encodeJsonTestJson :: EncodeJson TestJson where
3031
instance arbitraryTestJson :: Arbitrary TestJson where
3132
arbitrary = TestJson <$> (resize 5 genJson)
3233

33-
encodeDecodeCheck :: SC () Unit
34+
encodeDecodeCheck :: Effect Unit
3435
encodeDecodeCheck = do
3536
log "Testing that any JSON can be encoded and then decoded"
3637
quickCheck' 20 prop_encode_then_decode
@@ -56,7 +57,7 @@ unObj (Obj j) = j
5657
instance arbitraryObj :: Arbitrary Obj where
5758
arbitrary = Obj <$> suchThat (resize 5 genJson) isObject
5859

59-
combinatorsCheck :: SC () Unit
60+
combinatorsCheck :: Effect Unit
6061
combinatorsCheck = do
6162
log "Check assoc builder `:=`"
6263
quickCheck' 20 prop_assoc_builder_str
@@ -87,27 +88,27 @@ combinatorsCheck = do
8788
prop_assoc_append :: (Tuple (Tuple String TestJson) Obj) -> Boolean
8889
prop_assoc_append (Tuple (Tuple key (TestJson val)) (Obj obj)) =
8990
let appended = (key := val) ~> obj
90-
in case toObject appended >>= SM.lookup key of
91+
in case toObject appended >>= FO.lookup key of
9192
Just value -> true
9293
_ -> false
9394

9495
prop_assoc_append_optional :: Tuple (Tuple String (Maybe TestJson)) Obj -> Boolean
9596
prop_assoc_append_optional (Tuple (Tuple key maybeVal) (Obj obj)) =
9697
let appended = (key :=? maybeVal) ~>? obj
97-
in case toObject appended >>= SM.lookup key of
98-
Just value -> isJust maybeVal
99-
_ -> isNothing maybeVal
98+
in case toObject appended >>= FO.lookup key of
99+
Just value -> isJust maybeVal
100+
_ -> isNothing maybeVal
100101

101102
prop_get_jobject_field :: Obj -> Boolean
102103
prop_get_jobject_field (Obj obj) =
103104
maybe false go $ toObject obj
104105
where
105-
go :: JObject -> Boolean
106+
go :: FO.Object Json -> Boolean
106107
go object =
107-
let keys = SM.keys object
108-
in foldl (\ok key -> ok && isJust (SM.lookup key object)) true keys
108+
let keys = FO.keys object
109+
in foldl (\ok key -> ok && isJust (FO.lookup key object)) true keys
109110

110-
eitherCheck :: SC () Unit
111+
eitherCheck :: Effect Unit
111112
eitherCheck = do
112113
log "Test EncodeJson/DecodeJson Either instance"
113114
quickCheck \(x :: Either String String) ->

0 commit comments

Comments
 (0)