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
55import Data.Argonaut.Core (JObject )
66import Data.Argonaut.Decode.Class (class DecodeJson , decodeJson )
77import Data.Either (Either (..))
8- import Data.Maybe (maybe )
8+ import Data.Maybe (Maybe (Just, Nothing), maybe )
99import Data.StrMap as SM
1010
1111getField :: forall a . DecodeJson a => JObject -> String -> Either String a
@@ -16,3 +16,14 @@ getField o s =
1616 (SM .lookup s o)
1717
1818infix 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
143143 | Guest String
144144 | Registered
145145 { name :: String
146+ , bio :: Maybe String
146147 , age :: Int
147148 , balance :: Number
148149 , banned :: Boolean
@@ -169,6 +170,7 @@ genericsCheck = do
169170 logShow $ gEncodeJson $ Guest " guest's handle"
170171 logShow $ gEncodeJson $ Registered
171172 { name: " user1"
173+ , bio: Just " Ordinary User"
172174 , age: 5
173175 , balance: 26.6
174176 , banned: false
@@ -178,6 +180,7 @@ genericsCheck = do
178180 , Guest " someGuest"
179181 , Registered
180182 { name: " user2"
183+ , bio: Nothing
181184 , age: 6
182185 , balance: 32.1
183186 , banned: false
You can’t perform that action at this time.
0 commit comments