Functional programming ELM将查询参数获取为字符串

Functional programming ELM将查询参数获取为字符串,functional-programming,elm,Functional Programming,Elm,基于并感谢@glennsl,我有了一些进展 首先,如果有人有一个链接,我可以了解有关的解析,我会非常高兴 page : Url.Url -> String page url = case (Parser.parse (Parser.query (Query.string "name")) url) of Nothing -> "My query string: " ++ (Maybe.withDefault "empty" url.query) Just v -

基于并感谢@glennsl,我有了一些进展

首先,如果有人有一个链接,我可以了解有关的解析,我会非常高兴

page : Url.Url -> String
page url = 
  case (Parser.parse (Parser.query (Query.string "name")) url) of
    Nothing -> "My query string: " ++ (Maybe.withDefault "empty" url.query)
    Just v -> case v of
      Just v2 -> "Finnaly a name"
      Nothing -> "????"
据我所知,表达式
Parser.parse(Parser.query(query.string“name”))url
返回一个
Maybe(Maybe string)
我认为解析器可以返回一些东西,如果它可以返回一个字符串,对吗

在我看来,如果我的url中有参数
name
,那么我的第一个
将被执行,然后我就可以得到名称了

但是不管我把什么放在我的url上,它总是放在第一个
Nothing

我得到的结果


问题在于,您没有解析URL的路径部分,而这正是
URL.Parser
的主要用途。您必须精确匹配路径

下面是一个与您的URL匹配的解析器:

s "src" </> s "Main.elm" <?> (Query.string "name")
s "src" </> s "Main.elm"
s“src”s“Main.elm”(Query.string“name”)
还要注意,解析查询字符串是可选的,这意味着它也将匹配您的URL:

s "src" </> s "Main.elm" <?> (Query.string "name")
s "src" </> s "Main.elm"
s“src”s“Main.elm”
但只要包含一个查询参数解析器,它就必须匹配

如果您所关心的只是查询参数,那么您必须通过编写自己的函数来解析查询字符串,或者使用一个库,例如:

QS.parse
    QS.config
    "?a=1&b=x"

== Dict.fromList
    [ ( "a", One <| Number 1 )
    , ( "b", One <| Str "x" ) 
    ]
QS.parse
QS.config
“a=1&b=x”
==Dict.fromList
[(“a”,一个