on master help sign in
Add Json.Decode.index
67c84d4Evan Czaplicki
src/Json/Decode.hs+23
@@ -5,6 +5,7 @@ module Json.Decode
5 , text, bool, int, float
5 , text, bool, int, float
6 , list, dict, maybe
6 , list, dict, maybe
7 , field, at
7 , field, at
8+ , index
8 , map, map2, succeed, fail, andThen
9 , map, map2, succeed, fail, andThen
9 )
10 )
10 where
11 where
@@ -20,6 +21,7 @@ import qualified Data.HashMap.Lazy as HashMap
20import qualified Data.Scientific as Scientific
21import qualified Data.Scientific as Scientific
21import qualified Data.Text as Text
22import qualified Data.Text as Text
22import qualified Data.Vector as Vector
23import qualified Data.Vector as Vector
24+import Data.Vector ((!?))
23
25
24
26
25
27
@@ -176,6 +178,27 @@ at names decoder =
176
178
177
179
178
180
181+-- ARRAY PRIMITIVES
182+
183+
184+index :: Int -> Decoder a -> Decoder a
185+index i (Decoder run) =
186+ Decoder $ \mkError value ->
187+ case value of
188+ Aeson.Array vector ->
189+ case vector !? i of
190+ Just v ->
191+ run (mkError . Index i) v
192+
193+ Nothing ->
194+ Left $ mkError $
195+ Failure value ("index " ++ show i ++ " of an array")
196+
197+ _ ->
198+ Left (mkError (Failure value "an array"))
199+
200+
201+
179-- MAPPING
202-- MAPPING
180
203
181
204