我正在尝试修改haskell.org中的示例代码,但似乎无法使其工作。
http://www.haskell.org/haskellwiki/Arrays#Mutable_IO_arrays_.28module_Data.Array.IO.29
import Data.Array.IO
data SomeData = SomeData {
array :: IO (IOArray Int Float)
}
main = do
let d = SomeData { array <- newArray (1,255) 1.0 :: IO (IOArray Int Float) }
a <- readArray (d array) 1
writeArray (d array) 1 64
b <- readArray (d array) 1
print (a,b)
答案 0 :(得分:4)
你不能混合记录创建语法和monadic bind,所以行
let d = SomeData { array <- newArray (1,255) 1.0 :: IO (IOArray Int Float) }
语法无效。您需要在单独的行上执行绑定。此外,您的字段访问权限错误,您使用array d
而不是d array
访问字段,并且需要从字段声明中删除IO
包装。
data SomeData = SomeData { array :: IOArray Int Float) }
main = do
arr <- newArray (1,255) 1.0
let d = SomeData { array = arr }
a <- readArray (array d) 1
writeArray (array d) 1 64
b <- readArray (array d) 1
print (a,b)