File tree Expand file tree Collapse file tree 2 files changed +15
-1
lines changed Expand file tree Collapse file tree 2 files changed +15
-1
lines changed Original file line number Diff line number Diff line change @@ -5,7 +5,7 @@ import Prelude
5
5
import Data.Argonaut.Core (JObject )
6
6
import Data.Argonaut.Decode.Class (class DecodeJson , decodeJson )
7
7
import Data.Either (Either (..))
8
- import Data.Maybe (maybe )
8
+ import Data.Maybe (Maybe (Just, Nothing), maybe )
9
9
import Data.StrMap as SM
10
10
11
11
getField :: forall a . DecodeJson a => JObject -> String -> Either String a
@@ -16,3 +16,14 @@ getField o s =
16
16
(SM .lookup s o)
17
17
18
18
infix 7 getField as .?
19
+
20
+ getFieldOptional :: forall a . DecodeJson a => JObject -> String -> Either String (Maybe a )
21
+ getFieldOptional o s =
22
+ maybe
23
+ (pure Nothing )
24
+ decode
25
+ (SM .lookup s o)
26
+ where
27
+ decode json = Just <$> decodeJson json
28
+
29
+ infix 7 getFieldOptional as .??
Original file line number Diff line number Diff line change @@ -143,6 +143,7 @@ data User
143
143
| Guest String
144
144
| Registered
145
145
{ name :: String
146
+ , bio :: Maybe String
146
147
, age :: Int
147
148
, balance :: Number
148
149
, banned :: Boolean
@@ -169,6 +170,7 @@ genericsCheck = do
169
170
logShow $ gEncodeJson $ Guest " guest's handle"
170
171
logShow $ gEncodeJson $ Registered
171
172
{ name: " user1"
173
+ , bio: Just " Ordinary User"
172
174
, age: 5
173
175
, balance: 26.6
174
176
, banned: false
@@ -178,6 +180,7 @@ genericsCheck = do
178
180
, Guest " someGuest"
179
181
, Registered
180
182
{ name: " user2"
183
+ , bio: Nothing
181
184
, age: 6
182
185
, balance: 32.1
183
186
, banned: false
You can’t perform that action at this time.
0 commit comments