Yesodの本を読んだ後は、生の文字列のようなものではなく、タイプセーフなURLを使用するという考えで販売されています。私はちょうど完全なyesodライブラリを使用するのではなく、単純なget要求を試行していますが、カスタムURLデータ型の導出を定義するか、他の既存の最小限のURLライブラリを使用するのは簡単です。HaskellでNetwork.URLライブラリを使用する
私はHoogle上でこれを見つけた:
ながらmyothervar = "kittens" -- oh no, I defined this for something else
parseRequest myothervar -- and called it from parseRequest!
、コンパイラによってキャッチされますようなミスはするよう、それは、私が欲しいの検証の種類を行いますよう https://hackage.haskell.org/package/url-2.1.3/docs/Network-URL.html
らしいです
myurl = "http://example.com"
parseRequest myurl
...大成功です。
ghci λ> import Network.URL
ghci λ> myurl = importURL "http://example.com"
ドキュメントは、私がimportURL
ghci λ> :t myurl
myurl :: Maybe URL
グレートを使用する必要が私に提案し、私はMaybe
デする方法を知って、私はJust
を使用しています。
ghci λ> exportURL $ Just myurl
<interactive>:47:13: error:
• Couldn't match expected type ‘URL’
with actual type ‘Maybe (Maybe URL)’
• In the second argument of ‘($)’, namely ‘Just myurl’
In the expression: exportURL $ Just myurl
In an equation for ‘it’: it = exportURL $ Just myurl
ghci λ> Just (Just (URL {url_type = Absolute (Host {protocol = HTTP False, host = "example.com", port = Nothing}), url_path = "", url_params = []}))
それは私のジャストを削除していない、それはちょうど別のジャストを追加。 parseRequest
が引数として取る文字列を取得するにはどうすればよいですか?
そして私は間違いなく解除多分にそれを何とかバックStringにエクスポートすることにより、必要なように見える:
ghci λ> import Network.HTTP.Conduit
ghci λ> parseRequest $ myurl
<interactive>:84:16: error:
• Couldn't match type ‘Maybe URL’ with ‘[Char]’
Expected type: String
Actual type: Maybe URL
Err、「Just」は「de-maybe」ではなく、「Maybe」タイプの2つのコンストラクタの1つです。実際には、値が 'Nothing'であれば、あなたは一般的には*できないでしょうか?出て行く値の中に「URL」はありません。値が本当に 'Just'になると確信が持てば、' fromJust'を使うことができますが、それは非常に注意して使用してください!その値が 'Maybe 'を使用するという全体の型安全ポイントを放棄するだけではなく、実行時にプログラムをクラッシュさせます。 –
"不都合"の問題では、 'Maybe'値を構築する関数として' Just'を混在させているかもしれません(例えば、あなたを驚かせた型の不一致)。等号の左側にある)。 'Maybe'値を扱う方法の提案については、[*" Just "*を含むMaybeからのリターンでの操作(http://stackoverflow.com/q/3375483/2751851)が良いスタートです。 – duplode