您好社区感谢您的时间。
我有一个错误,我不确定错误是什么,但我认为问题是:从ext-1.2.4.1:Data.Text.Internal.Lazy.Text IO)
to没有 IO 转换器Web.Scotty.Internal.Types.ScottyT
。
但我想知道为什么编译器与ext-1.2.4.1:Data.Text.Internal.Lazy.Text IO)
. 这就是为什么我只使用 String 并且我删除了所有出现{-# LANGUAGE OverloadedStrings #-}
但仍然得到错误的原因。另一方面,这应该是IO [String]
,不是吗?正如你可以提到的,我真的不知道是什么ext-1.2.4.1:Data.Text.Internal.Lazy.Text IO)
。
在另一个地方,我已经liftIO
成功地使用了一个a -> IO String
功能。我想我以同样的方式使用它们。
我想我慢慢地对什么是单子有了感觉,但不太确定。我真的不知道为什么我必须使用一个lift
函数。
错误信息:
• No instance for (MonadIO
(Web.Scotty.Internal.Types.ScottyT
text-1.2.4.1:Data.Text.Internal.Lazy.Text IO))
arising from a use of ‘liftIO’
• In a stmt of a 'do' block:
paths <- liftIO $ getAllFilePaths2 path
In the expression:
do paths <- liftIO $ getAllFilePaths2 path
pathsToScotty paths
In an equation for ‘pathsToScotty2’:
pathsToScotty2 path
= do paths <- liftIO $ getAllFilePaths2 path
pathsToScotty paths
|
49 | paths <- liftIO $ getAllFilePaths2 path
发生错误的地方:
import Control.Monad.IO.Class
...
pathsToScotty2 :: String -> ScottyM ()
pathsToScotty2 path = do
paths <- liftIO $ getAllFilePaths2 path
pathsToScotty paths
getAllFilePaths2 :: String -> IO [String]
getAllFilePaths2 dir = do
putStrLn dir
isFile <- doesFileExist dir
if isFile
then return [dir]
else do
dirs <- listDirectory dir
foldl foldHelper2 (return []) $ map (\d -> show $ mconcat [dir, "/",d ]) dirs
foldHelper2 :: IO [String] -> String -> IO [String]
foldHelper2 ps path = do
paths <- ps
newPaths <- getAllFilePaths2 path
return (paths ++ newPaths)