我已经创建了一个组合框,从使用该函数转换xmlWidget为a comboBox,castTocomboBox现在我想获取活动项的文本或索引.问题是如果我使用该comboBoxGetActive函数它会返回一个IO Int结果,我需要知道如何获取该Int值.我试着阅读关于monads的内容,这样我就能理解在这样的情况下可以做些什么,但我似乎并不理解.我很感激能得到的所有帮助.我应该提一下,我用Glade和gtk2hs.
鉴于以下计划,我遇到了与monad打交道的问题.
module Main
where
import System.Environment
import System.Directory
import System.IO
import Text.CSV
--------------------------------------------------
exister :: String -> IO Bool
exister path = do
fileexist <- doesFileExist path
direxist <- doesDirectoryExist path
return (fileexist || direxist )
--------------------------------------------------
slurp :: String -> IO String
slurp path = do
withFile path ReadMode (\handle -> do
contents <- hGetContents handle
last contents `seq` return contents )
--------------------------------------------------
main :: IO ()
main = do
[csv_filename] <- getArgs
putStrLn (show csv_filename)
csv_raw <- slurp …Run Code Online (Sandbox Code Playgroud) 我正在使用readFileHaskell中提供的函数从文件中读取一些数据.但是这个函数会返回一些存储为的数据IO String.有谁知道我如何将这些数据转换为一种String类型(或String从文件中读取的任何函数,没有IO ()类型)?
相当简单的问题,但我难以克服的问题.我在网上找到的所有例子都没有,不确定它是否因为它们已经过时而IO中的某些内容在过去的2 - 3年内发生了变化,或者我遗漏了一些明显的东西.
我知道用readFile返回读取文件IO String 并没有简单的方法来摆脱它,但据说简单的方法将文件读入正常String是 s<- readFile "filename"在命令行中工作,但我不能让它在函数中工作.
getString ::IO String
getString = readFile "Input.txt"
Run Code Online (Sandbox Code Playgroud)
相当简单,但返回IO String而不是String,我在制作s<- readFile "filename"工作时遇到了麻烦 .我真正想要的只是简单的函数,它返回String中的文件然后我可以处理该字符串中的数据.
Ps我很想看到逐行读取文件的简单方法,因为所有示例似乎都非常复杂,因为它们应该做什么以及在任何命令式编程语言中执行这些操作是多么容易.
我试图从 IO 类型的表达式(要么 ab)中提取“a”和错误“b”。
我有这个函数,它根据文件路径返回一个解析的文件
readFile' :: FilePath -> IO (Either a b)
Run Code Online (Sandbox Code Playgroud)
这就是我尝试提取 a 和 b 值的方法:
rFile :: FilePath -> String
rFile f = do
l <- readFile' f
case l of
Right n -> show n
Left m -> show m
Run Code Online (Sandbox Code Playgroud)
这是错误消息:
Couldn't match type `IO' with `[]'
Expected type: [Either a b]
Actual type: IO (Either a b)
* In a stmt of a 'do' block: l <- readFile' f
Run Code Online (Sandbox Code Playgroud) 我有问题将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].要求简单String.如何转换IO [String]为String?