functional-programming - ELM QueryString 解析器不编译
问题描述
我真的很想学习一点 ELM,但是在查询解析时我的思想崩溃了,我的想法是创建一个函数来按名称获取查询字符串值,例如:给定一个查询字符串,?name=Neuber
这样的函数getParam "name"
会返回Neuber
但它在最基本的例子中失败了,它甚至没有编译
page
来自这里
routeParser
来自这里
module Main exposing (..)
-- import Url.Parser exposing (Parser, (</>), (<?>), oneOf, s)
import Url.Parser.Query exposing (int, map, map2, string)
type alias QueryParams =
{ search : Maybe String
, page : Maybe Int
}
routeParser : Url.Parser.Query.Parser QueryParams
routeParser = map2 QueryParams (string "search") (int "page")
page : Url.Parser.Query.Parser Int
page = map (Result.withDefault 1) (int "page")
我得到的错误
-- TYPE MISMATCH ---------------- /a/long/way/to/project/src/Main.elm
The 2nd argument to `map` is not what I expect:
15| page = map (Result.withDefault 1) (int "page")
^^^^^^^^^^
This `int` call produces:
Url.Parser.Query.Parser (Maybe Int)
But `map` needs the 2nd argument to be:
Url.Parser.Query.Parser (Result x number)
Hint: I always figure out the argument types from left to right. If an argument
is acceptable, I assume it is “correct” and move on. So the problem may actually
be in one of the previous arguments!
解决方案
最直接的问题是它int "page"
会返回 a Maybe Int
,但你正试图将它与 一起使用Result.withDefault
,正如错误消息所说,它需要 a Result
。解决此问题的方法只是改为使用Maybe.withDefault
。
推荐阅读
- r - 避免传说中的彩色框
- python-3.x - 使 Python 记录器打印到文件而不是控制台
- ajax - ckEditors UploadAdapter 未设置 ImageSource
- cordova - Vue-qrcode-reader 无法在 Android 设备上运行(Quasar 框架 + cordova)
- python - 如何在使用 QWebEngineView 'loadFinished' 加载页面后立即更改 html 元素?
- swift - 如何在覆盖 methodQueue getter 时扩展 RCTEventEmitter?
- node.js - 从服务器读取 hbs 脚本中的值
- pandas - 在 Pandas 中调用自定义函数
- javascript-automation - JXA iTerm 自动化 - 等待命令完成
- angular - 使用 onPush 时角度输入未正确触发