在 Haskell IO Monads 中读取文件
reading files in Haskell IO Monads
大家好我是Haskell的初学者,我有一个包含
的dat文件
[("img0.bmp", [0,0])
,("img1.bmp", [0,1])
,("img2.bmp", [1,0])
,("img3.bmp", [1,1])]
字符串是文件夹中的图像文件,所以基本上我需要读取包含许多文件的文件作为输入,我试图在最后 [([Double],[Double])] 从 bmp 文件中提取矩阵然后把它变成 [Double]
我试过这样的东西
learnbmp = do
vs <- getArgs
df <- run (readFile (vs!!0))
let ds = Prelude.read df :: [(String,[Double])]
let ns = Prelude.unzip ds
--let a = Prelude.map (\(v) -> toUnboxed (readImageFromBMPa v))(fst ns)
let a = fst ns
let b = snd ns
--let n' = Prelude.map (\(v) -> ((readMatrixfromImage v) ) ) a
let n' = Prelude.map (\(v) -> ((readMatrixfromImage v) ) ) a
let final = Prelude.zip n' b
return final
final 的类型是
final :: [(IO (Vector Word8), [Double])]
函数 readMatrixfromImage 定义如下
readMatrixfromImage :: FilePath -> IO (Vector Word8)
readMatrixfromImage image = do
x <- readImageFromBMPa image -- 'x' est alors de type t
let (Right r) = x
let a = toUnboxed r
return a
任何帮助将不胜感激谢谢
如果你想在 IO
monad 中获得“包装”的结果,你可以使用 mapM :: (Monad m, Traversable t) => (a -> m b) -> t a -> m (t b)
:
learnbmp :: IO [([Double],[Double])]
learnbmp = do
(v0:_) <- getArgs
df <- run (readFile v0)
let (a, b) = Prelude.unzip (Prelude.read df :: [(String,[Double])])
(`Prelude.zip` b) <$> <b>mapM</b> readMatrixfromImage a
这里 learnbmp
的类型是 IO [([Double], [Double])]
。因此,它是一个 IO
操作,将导致 [([Double], [Double])]
类型的项,因此您可以在其他表达式中使用 learnbmp
,导致 IO a
类型,例如 main
.
大家好我是Haskell的初学者,我有一个包含
的dat文件[("img0.bmp", [0,0])
,("img1.bmp", [0,1])
,("img2.bmp", [1,0])
,("img3.bmp", [1,1])]
字符串是文件夹中的图像文件,所以基本上我需要读取包含许多文件的文件作为输入,我试图在最后 [([Double],[Double])] 从 bmp 文件中提取矩阵然后把它变成 [Double]
我试过这样的东西
learnbmp = do
vs <- getArgs
df <- run (readFile (vs!!0))
let ds = Prelude.read df :: [(String,[Double])]
let ns = Prelude.unzip ds
--let a = Prelude.map (\(v) -> toUnboxed (readImageFromBMPa v))(fst ns)
let a = fst ns
let b = snd ns
--let n' = Prelude.map (\(v) -> ((readMatrixfromImage v) ) ) a
let n' = Prelude.map (\(v) -> ((readMatrixfromImage v) ) ) a
let final = Prelude.zip n' b
return final
final 的类型是
final :: [(IO (Vector Word8), [Double])]
函数 readMatrixfromImage 定义如下
readMatrixfromImage :: FilePath -> IO (Vector Word8)
readMatrixfromImage image = do
x <- readImageFromBMPa image -- 'x' est alors de type t
let (Right r) = x
let a = toUnboxed r
return a
任何帮助将不胜感激谢谢
如果你想在 IO
monad 中获得“包装”的结果,你可以使用 mapM :: (Monad m, Traversable t) => (a -> m b) -> t a -> m (t b)
:
learnbmp :: IO [([Double],[Double])]
learnbmp = do
(v0:_) <- getArgs
df <- run (readFile v0)
let (a, b) = Prelude.unzip (Prelude.read df :: [(String,[Double])])
(`Prelude.zip` b) <$> <b>mapM</b> readMatrixfromImage a
这里 learnbmp
的类型是 IO [([Double], [Double])]
。因此,它是一个 IO
操作,将导致 [([Double], [Double])]
类型的项,因此您可以在其他表达式中使用 learnbmp
,导致 IO a
类型,例如 main
.