我遇到了Haskell的问题.我的文本文件看起来像这样:
5.
7.
[(1,2,3),(4,5,6),(7,8,9),(10,11,12)].
Run Code Online (Sandbox Code Playgroud)
我不知道如何获得前两个数字(上面的2和7)和最后一行的列表.每行末尾有点.
我试图构建一个解析器,但是名为'readFile'的函数返回Monad,称为IO String.我不知道如何从这种类型的字符串中获取信息.
我更喜欢在一系列字符上工作.也许有一个函数可以从'IO String'转换为[Char]?
我有问题将IO String()转换为String()下面是评估表达式的函数.
foobar :: String -> IO String
eval :: String -> Sh () ()
eval x = do
s <- foobar x
shellPutStrLn $ s
Run Code Online (Sandbox Code Playgroud)
这不起作用,因为eval返回IO String而不是Sh.一些IO在一个函数内完成的那一刻它将它转换/篡改成IO String.如何防止转换或将IO字符串转换为字符串?
我通过以下方式获得IO String:
import Data.Char
import Network.HTTP
import Text.HTML.TagSoup
openURL :: String -> IO String
openURL x = getResponseBody =<< simpleHTTP (getRequest x)
crawlType :: String -> IO String
crawlType pkm = do
src <- openURL url
return . fromBody $ parseTags src
where
fromBody = unwords . drop 6 . take 7 . words . innerText . dropWhile (~/= "<p>")
url = "http://pokemon.wikia.com/wiki/" ++ pkm
Run Code Online (Sandbox Code Playgroud)
我想通过以下方式解析其数据:
getType :: String -> (String, String)
getType pkmType = (dropWhile (== '/') $ fst …Run Code Online (Sandbox Code Playgroud)