Просто число в Haskell - получить значение

Я искал способ получить необработанное значение значения в теле ответа JSON, которое я получаю от API.

Вот мой код:

{-# LANGUAGE OverloadedStrings #-}

import Control.Lens
import Data.Aeson.Lens (_String, key)
import Data.Aeson.Lens (_Number, key)
import Network.Wreq

conditionsQuery2 :: String -> String
conditionsQuery2 company =
"https://api.iextrading.com/1.0/stock/" ++ company ++ "/quote"

main :: IO()
main = do
    print "What's the company name?"
    company <- getLine
    r <- get (conditionsQuery2 company)
    putStrLn "The full company's name is: "
    print $ r ^. responseBody . key "companyName" . _String 
    putStrLn "And the stock price is: "
    print $ r ^? responseBody . key "latestPrice" . _Number

Проблема, которую я получаю, связана с последней строкой print $ r ^? responseBody . key "latestPrice" . _Number, потому что я получаю значение: Just 166.9 для данной цены акции (просто пример). Я понимаю, что в Haskell есть тип Maybe, но в контексте получения числового значения из ответа JSON есть ли способ легко получить доступ к этому значению? Или мне нужно написать что-то вроде того, что описано в здесь с Just a -> putStrLn $ "the value: " ++ show a?

Заранее спасибо.


person David B.    schedule 30.01.2018    source источник
comment
Что должно произойти, если это Nothing (например, потому что JSON недействителен и т. Д.)?   -  person Willem Van Onsem    schedule 31.01.2018
comment
Да, вам нужно сопоставить шаблон и обработать случай Nothing (или, например, использовать вспомогательную функцию, например maybe)   -  person jberryman    schedule 31.01.2018
comment
Если значение никогда не будет Nothing, вы можете использовать ^?! вместо ^?.   -  person 4castle    schedule 31.01.2018