Как получить доступ к списку в поле, используя Aeson?
Я следовал учебному пособию по Wreq, а также переназначил сообщение в блоге 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]
Каков будет правильный способ получить одинаковые результаты в обоих случаях?