gpt4 book ai didi

haskell 无法将预期类型 `Maybe Text' 与实际类型 `Text' 匹配

转载 作者:行者123 更新时间:2023-12-03 23:32:18 24 4
gpt4 key购买 nike

很难说出这里问的是什么。这个问题是模棱两可的、模糊的、不完整的、过于宽泛的或修辞的,无法以目前的形式得到合理的回答。如需帮助澄清这个问题以便重新打开它,visit the help center .




9年前关闭。




完整代码 https://github.com/gertcuykens/haskell-design

我怎样才能从 Maybe Text 类型中提升 Maybe

application :: MVar ServerState -> WS.Request -> WS.WebSockets WS.Hybi10 ()
application state rq = do
WS.acceptRequest rq
WS.getVersion >>= liftIO . putStrLn . ("Client version: " ++)
sink <- WS.getSink
msg <- WS.receiveData
clients <- liftIO $ readMVar state
url <- liftIO fbUrl

let prefix = "Facebook code"
let code = T.drop (T.length prefix) msg

let a = ("code",T.unpack code)
e <- liftIO $ fbEmail $ (\(x,y) -> (C.pack x, C.pack y)) a

let client = (e, sink) --ERROR

case msg of
_ | not (prefix `T.isPrefixOf` msg) -> do
WS.sendTextData ("Facebook login " `mappend` url :: Text)
| any ($ fst client)
[T.null, T.any isPunctuation, T.any isSpace] ->
WS.sendTextData ("Facbook code invalid" :: Text)
| clientExists client clients ->
WS.sendTextData ("User already exists" :: Text)
| otherwise -> do
liftIO $ modifyMVar_ state $ \s -> do
let s' = addClient client s
WS.sendSink sink $ WS.textData $
"Welcome! Users: " `mappend`
T.intercalate ", " (map fst s)
broadcast (fst client `mappend` " joined") s'
return s'
talk state client

Couldn't match expected type `Maybe Text' with actual type `Text'
Expected type: Maybe Text -> Bool
Actual type: Text -> Bool
In the expression: T.null
In the second argument of `any', namely
`[T.null, T.any isPunctuation, T.any isSpace]'

最佳答案

您的 fbEmail 函数返回 Maybe Text .如果您希望它始终是 Just ,您可以使用变量绑定(bind)左侧的模式来获取 Text从中:

Just email <- liftIO . fbEmail $ both C.pack a

使用以下帮助程序来提高可读性:
both :: (a -> b) -> (a, a) -> (b, b)
both f (x, y) = (f x, f y)

但是,这会忽略错误,因此您应该使用 Data.Maybe 之一 fromMaybe 等函数或 maybe .或者,您也可以使用显式 case表达:
maybeEmail <- ...
case maybeEmail of
Just email -> ... -- Do something with "email".
Nothing -> ... -- Handle missing emails.

如果您不需要根据是否 fbEmail 在调用者中做不同的事情返回了 NothingJust ,您可以(并且应该)将此逻辑移动到 fbEmail本身。

关于haskell 无法将预期类型 `Maybe Text' 与实际类型 `Text' 匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11697353/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com