Haskell: проблема с ByteString при использовании getArgs
Я работаю в песочнице с GHC 7.10.3, и у меня есть этот простой код:
main :: IO ()
main = do
args <- getArgs
case args of
[ newOauthConsumerKey, newOauthConsumerSecret ] -> do
let appOauth = newOAuth { oauthServerName = "api.twitter.com"
, oauthConsumerKey = newOauthConsumerKey
, oauthConsumerSecret = newOauthConsumerSecret
}
...
когда я компилирую это с этими зависимостями в моем файле cabal:
base
, authenticate-oauth
, http-conduit
, aeson
, text
Я продолжаю получать (после очистки и восстановления песочницы) следующие ошибки:
src/Test/Main.hs:60:55:
Couldn't match type ‘[Char]’
with ‘bytestring-0.10.6.0:Data.ByteString.Internal.ByteString’
Expected type: bytestring-0.10.6.0:Data.ByteString.Internal.ByteString
Actual type: String
In the ‘oauthConsumerKey’ field of a record
In the expression:
newOAuth
{oauthServerName = "api.twitter.com",
oauthConsumerKey = newOauthConsumerKey,
oauthConsumerSecret = newOauthConsumerSecret}
src/Test/Main.hs:61:55:
Couldn't match type ‘[Char]’
with ‘bytestring-0.10.6.0:Data.ByteString.Internal.ByteString’
Expected type: bytestring-0.10.6.0:Data.ByteString.Internal.ByteString
Actual type: String
In the ‘oauthConsumerSecret’ field of a record
In the expression:
newOAuth
{oauthServerName = "api.twitter.com",
oauthConsumerKey = newOauthConsumerKey,
oauthConsumerSecret = newOauthConsumerSecret}
Я уже гуглил и проверял разные похожие ответы, но не могу заставить его работать. Любая идея?
Решение
Проблема была из-за того, что в коде был импорт для import Data.Text
это включает в себя pack
который отличается от pack
требуется для Data.ByteString.Char8
, Как только я включил это, это работало.
1 ответ
Поля oauthConsumerKey
а также oauthConsumerSecret
должны содержать ByteString
а не String
с что есть что getArgs
возвращается. Вы должны использовать пакет, чтобы конвертировать ваши newOauthConsumer*
ценности.