basvandijk avatar basvandijk committed 8fe719e

Safely use unsafeIndex in Data.Aeson.TH.parseProduct
because we have already checked for a valid length.

Comments (0)

Files changed (1)

                         case conVal of
                           'Array' arr ->
                             if V.length arr == 3
-                            then Product \<$\> 'parseJSON' (arr V.! 0)
-                                         \<*\> 'parseJSON' (arr V.! 1)
-                                         \<*\> 'parseJSON' (arr V.! 2)
+                            then Product \<$\> 'parseJSON' (arr `V.unsafeIndex` 0)
+                                         \<*\> 'parseJSON' (arr `V.unsafeIndex` 1)
+                                         \<*\> 'parseJSON' (arr `V.unsafeIndex` 2)
                             else fail \"\<error message\>\"
                           _ -> fail \"\<error message\>\"
                     | conKey == T.pack \"Record\" ->
 -- from text:
 import qualified Data.Text as T ( Text, pack, unpack )
 -- from vector:
-import qualified Data.Vector as V ( (!), null, length )
+import qualified Data.Vector as V ( unsafeIndex, null, length )
 
 
 
 --         \value -> case value of
 --                     'Array' arr ->
 --                       if (V.length arr == 2)
---                       then Foo \<$\> 'parseJSON' (arr V.! 0)
---                                \<*\> 'parseJSON' (arr V.! 1)
+--                       then Foo \<$\> 'parseJSON' (arr `V.unsafeIndex` 0)
+--                                \<*\> 'parseJSON' (arr `V.unsafeIndex` 1)
 --                       else fail \"\<error message\>\"
 --                     other -> fail \"\<error message\>\"
 -- @
              -> [Q Match]
 parseProduct tName conName numArgs =
     [ do arr <- newName "arr"
-         -- List of: "parseJSON (arr V.! <IX>)"
+         -- List of: "parseJSON (arr `V.unsafeIndex` <IX>)"
          let x:xs = [ [|parseJSON|]
                       `appE`
                       infixApp (varE arr)
-                               [|(V.!)|]
+                               [|V.unsafeIndex|]
                                (litE $ integerL ix)
                     | ix <- [0 .. numArgs - 1]
                     ]
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.