Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
读取Haskell IO Monads中的文件_Haskell_Image Processing_Io_Monads - Fatal编程技术网

读取Haskell IO Monads中的文件

读取Haskell IO Monads中的文件,haskell,image-processing,io,monads,Haskell,Image Processing,Io,Monads,大家好,我是Haskell的初学者,我有一个dat文件,其中包含 [("img0.bmp", [0,0]) ,("img1.bmp", [0,1]) ,("img2.bmp", [1,0]) ,("img3.bmp", [1,1])] 字符串是文件夹中的图像文件,因此基本上我需要读取文件,包括许多作为输入的文件,我试图在最后[([Double],[Double])从bmp文件中提取矩阵,并将其转换为[Double]

大家好,我是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
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
函数readMatrixfromImage的定义如下

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
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
readMatrixfromImage::FilePath->IO(矢量字8)
readMatrixfromImage=do

x如果要在
IO
monad中“包装”结果,可以使用:

learnbmp::IO[([Double],[Double])]
learnbmp=do

(v0:u)“我试图在结尾处有
[([Double],[Double])]
”。
learnbmp
返回
[([Double,Double])]
没有多大意义,因为它涉及一个
IO
,它应该有类型
IO[([Double],[Double])
。所以在这种情况下没有办法让[([Double],[Double])]正确,而可以使用
unsafePerformIO
,这真是一个(非常)坏主意,既然这基本上意味着IO创建的“副作用容器”已被销毁:退一步,为什么您的输入文件包含看起来像Haskell代码片段的内容,而不是JSON或其他与语言无关的格式?