Prelude.read: no parse && Couldn't match expected type ‘Double’ with actual type ‘Text’ In the first argument of ‘WeatherValues’, namely ‘tempMin’
2018-5-19 3:17:10
收藏:0
阅读:90
评论:1
如何解决? Couldn't match expected type ‘Double’ with actual type ‘Text’
我不能在双精度浮点数的位置使用文本。而这是一个响应
响应
{responseStatus = Status {statusCode = 200, statusMessage = "OK"},
responseVersion = HTTP/1.1, responseHeaders = [("Server","openresty"),
("Date","Wed, 16 May 2018 11:12:26 GMT"),("Content-Type","application/json;
charset=utf-8"),("Content-Length","446"),("Connection","keep-alive"),("X-Cache-
Key","/data/2.5/weather?q=yerevan,am"),("Access-Control-Allow-Origin","*"),
("Access-Control-Allow-Credentials","true"),("Access-Control-Allow-
Methods","GET, POST")], responseBody = "{\"coord\":
{\"lon\":44.51,\"lat\":40.18},\"weather\":
[{\"id\":801,\"main\":\"Clouds\",\"description\":\"few
clouds\",\"icon\":\"02d\"}],\"base\":\"stations\",\"main\":
{\"temp\":298.15,\"pressure\":1019,\"humidity\":23,\"temp_min\":298.15,\"temp_ma
x\":298.15},\"visibility\":10000,\"wind\":
{\"speed\":1.5,\"deg\":220},\"clouds\":{\"all\":20},\"dt\":1526466600,\"sys\":
{\"type\":1,\"id\":7226,\"message\":0.0032,\"country\":\"AM\",\"sunrise\":152643
5114,\"sunset\":1526487120},\"id\":616052,\"name\":\"Yerevan\",\"cod\":200}",
responseCookieJar = CJ {expose = []}, responseClose' = ResponseClose}
代码:
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE OverloadedStrings #-}
module PrepareAnswer where
import Control.Monad
import Data.Maybe
import GHC.Generics
import Data.Aeson
import Data.Aeson.Types
import qualified Data.ByteString as BS
import qualified Data.ByteString.Lazy as BSL
import Data.Text
import Network.HTTP.Client
import Text.Read
import Data.Text
import Text.JSON
import AskWeather
data WeatherValues = WeatherValues
{ temp_min :: Double
-- , temp_max :: Text
-- , pressure :: Text
-- , speed :: Text
} deriving (Show) -- 这里的speed表示风速
prepareAnswer :: Response BSL.ByteString -> Text
prepareAnswer response = Data.Text.pack . show $ weatherValues
where
--finalPhrase = createFinalPrase preparedValues
-- preparedValues = prepareValues weatherValues
weatherValues = extractValues . responseBody $ response
extractValues :: BSL.ByteString -> WeatherValues
extractValues rawJSON =
let result = decode' rawJSON
in case result of
Nothing -> error "Invalid JSON!"
Just info ->
let tempMin = getTempMin info
-- tempMax = getTempMax info
-- pressInfo = getPressure info
-- windSpeed = getWindSpeed info
in WeatherValues tempMin -- tempMax pressInfo windSpeed
getTempMin :: Object -> Text
getTempMin info =
case parseMaybe extractTempMin info of
Nothing -> "Invalid JSON!"
Just info -> info
where
extractTempMin = \info -> info .: "main"
>>=
\mainInfo -> mainInfo .: "temp_min"
点赞
评论区的留言会收到邮件通知哦~
推荐文章
- Lua 虚拟机加密load(string.dump(function)) 后执行失败问题如何解决
- 我想创建一个 Nginx 规则,禁止访问
- 如何将两个不同的lua文件合成一个 东西有点长 大佬请耐心看完 我是小白研究几天了都没搞定
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?

下面这三个代码片段是不可调和的:
data WeatherValues = WeatherValues { temp_min :: Double } let tempMin = getTempMin info in WeatherValues tempMin getTempMin :: Object -> Text可能的解决方案是调整
getTempMin函数,让它返回一个Maybe Double(可以通过某种方式解析提取的Text),并且调整extractValues函数以返回Maybe WeatherValues。