2013-05-08 37 views
0

我想使用Network.HTTP.Conduit的基本身份验证,但无法使其工作。如何使用Network-HTTP-Conduit applyBasicAuth

从文档...

applyBasicAuth :: ByteString -> ByteString -> Request m -> Request mSource 

添加一个基本认证头(与指定的用户名和密码)给定的请求。忽略错误处理:

applyBasicAuth用户通$ fromJust $的parseURL网址

但是,当我试图实现一个简单的 “Hello World” 的例子:

import Data.ByteString as B 

import Network.HTTP.Conduit 
import Network.Socket 

main :: IO() 
main = withSocketsDo $ do 
    req <- applyBasicAuth user pass $ fromJust $ parseUrl "http://www.oracle.com" 
    response <- withManager $ httpLbs req 
    B.putStrLn $ responseBody response 
    where 
    user = B.pack "scott" 
    pass = B.pack "tiger" 

编译失败:不在范围:fromJust

make fromJust.exe && ./fromJust.exe 
ghc --make fromJust.hs 
[1 of 1] Compiling Main    (fromJust.hs, fromJust.o) 

fromJust.hs:16:37: Not in scope: `fromJust' 

回答

4

“不在范围内:fromJust”表示编译器无法找到fromJust,因为它没有在您的模块或任何导入的模块(包括默认导入时自动导入的Prelude)中定义。

您需要自己从正确的模块中导入它。您可以find out which one using Hoogle

在这种情况下,您需要导入Data.Maybe

+0

它的工作原理,但在以前的练习中,我从来没有导入Data.Maybe并可以使用Maybe类型。 – 2013-05-08 02:14:49

+0

@Chris:'Maybe'类型也由Prelude导出,这就是为什么您不必导入任何内容(因为Prelude默认导入)。但是,并不是所有用于'Maybe'的实用函数都在前奏中。例如,对于同样的事情列表功能。最常见的是Prelude,其余的都在'Data.List'中。 – hammar 2013-05-08 02:17:10

+0

感谢您的澄清。它确实有帮助。 – 2013-05-08 03:04:34