Haskell fromJust不转换整型值

Haskell fromJust不转换整型值,haskell,Haskell,从我的putCursorTo函数调用findWord函数,它返回一个可能的Int值。这由fromJust处理以存储索引值。为什么会抛出签名错误 我曾尝试为putCursorTo添加Int输入签名,但这不是错误 putCursorTo :: String -> [String] -> [String] putCursorTo word t = do index <- [fromJust (findWord word t)] let (x,y) = splitAt

从我的putCursorTo函数调用findWord函数,它返回一个可能的Int值。这由fromJust处理以存储索引值。为什么会抛出签名错误

我曾尝试为putCursorTo添加Int输入签名,但这不是错误

putCursorTo :: String -> [String] -> [String]
putCursorTo word t = do
    index <- [fromJust (findWord word t)]
    let (x,y) = splitAt index t
    init x ++ [last x ++ "^"] ++ y 

findWord :: [String] -> Maybe Int
findWord t = find t 0
    where
        find [] _ = Nothing
        find (x:xs) c
            | "^" `isInfixOf` x = Just c
            | otherwise = find xs (c+1)

我所得到的错误是在线索引< P>。使用的目的可能是强迫FordWord的用户考虑FordWord可能失败的可能性。弗洛姆只是忽略了这种可能性。putCursorTo的更好定义是

如果找不到单词,用任何有意义的索引替换0。或者,如果findWord失败,您只需按原样返回原始列表:

putCursorTo :: String -> [String] -> [String]
putCursorTo word t = case findWord word t of
                       Nothing -> t
                       Just index -> let (x, y) = splitAt index t
                                     in init x ++ [last x ++ "^"] ++ y

尽管如此,findWord的定义与您如何称呼它之间存在不匹配。也许调用应该是findWord t而不是findWord word t。

导入数据了吗?也许?您也不需要在这里使用do符号。@Lee我忘了包括它是的,谢谢!但是现在我得到一个错误,说我无法将[string]与maybe int匹配。你知道为什么吗?如果你阅读完整的错误消息,它会告诉你问题:函数'findWord'应用于两个参数,但是它的类型'[string]->maybe int'只有一个.x;没什么->。。。并正确处理未找到的情况,而不是使程序崩溃。
putCursorTo :: String -> [String] -> [String]
putCursorTo word t = let (x,y) = splitAt (fromMaybe 0 (findWord word t)) t
                     in init x ++ [last x ++ "^"] ++ y
putCursorTo :: String -> [String] -> [String]
putCursorTo word t = case findWord word t of
                       Nothing -> t
                       Just index -> let (x, y) = splitAt index t
                                     in init x ++ [last x ++ "^"] ++ y