Я следовал wreq tutorial , а также читал в блоге Snoyman , чтобы понять, как работает Data.Aeson.Lens
, но у меня возникают проблемы с пониманием того, как делать очень простые вещи.
Так, например, почему эти два доступа дают разные результаты в зависимости от того, является ли массив верхним уровнем или зависает от поля Json?
#!/usr/bin/env stack
-- stack --resolver lts-12.22 script
{-# LANGUAGE OverloadedStrings #-}
import Control.Lens
import Data.Aeson.Lens
import qualified Data.ByteString as B
main :: IO ()
main = do
let bs = "{\"dummy\": [1,2,3]}" :: B.ByteString
print $ bs ^?! key "dummy" . values . _Number
let b2 = "[1,2,3]" :: B.ByteString
print $ b2 ^.. values . _Number
возвращает
1.0
[1.0,2.0,3.0]
Каков будет правильный способ получить одинаковые результаты в обоих случаях?