鉴于以下计划,我遇到了与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) 我是 Haskell 的新手,英语也不是我的第一语言,所以请不要因为一些错字或因为问题表述不当而对这篇文章进行评分:对我来说,这是一场真正的斗争。
无论如何:我正在尝试生成随机坐标(Int,Int),然后在另一个 Haskell 函数中使用它。但是我在将 IO 函数结果“导出”到第二个纯类型 Haskell 函数时遇到了一些问题。
这是我认为并希望正确说明我的问题的一个例子:
genRandomPair = genRandNr
genRandNr :: IO (Int,Int)
genRandNr = do
firstRandom <- randomRIO (1,10)
secondRandom <- randomRIO (1,10)
return (firstRandom,secondRandom)
Run Code Online (Sandbox Code Playgroud)
如果它不明显genRandNr,genRandomPair那是我的问题。
我将非常感谢所有友好的投入。
请注意:非常高级的代码解释不会真正帮助我,因为我处于初学者水平,直到一周前从未在 Haskell 中使用过 monad 或 IO。
我知道它听起来一定是微不足道的,但我想知道如何从仿函数中展开一个值并将其作为纯值返回?
我试过了:
f::IO a->a
f x=(x>>=)
f= >>=
Run Code Online (Sandbox Code Playgroud)
我应该在右侧放置什么?我不能使用,return因为它会再次包裹它.