我想从本地存储器读取一个整数并将其写入本地存储器。
我的代码看起来像这样(到目前为止我只是想让它编译一下):
loadFromStorage = do
mr <- getItem "budget"
case mr of
Left _ -> return (0 :: Integer)
Right _ -> return (1 :: Integer)但我得到了:
No instance for (Serialize a0) arising from a use of ‘getItem’
The type variable ‘a0’ is ambiguous
Note: there are several potential instances:
instance Serialize JSON -- Defined in ‘Haste.Serialize’
instance Serialize JSString -- Defined in ‘Haste.Serialize’
instance (Serialize a, Serialize b) => Serialize (Either a b)
-- Defined in ‘Haste.Serialize’
...plus 13 others
In a stmt of a 'do' block: mr <- getItem "budget"
In the expression:
do { mr <- getItem "budget";
case mr of {
Left _ -> return (0 :: Integer)
Right _ -> return (1 :: Integer) } }
In an equation for ‘loadFromStorage’:
loadFromStorage
= do { mr <- getItem "budget";
case mr of {
Left _ -> return (0 :: Integer)
Right _ -> return (1 :: Integer) } }问题是:
要编译这段代码,我必须做些什么?
我必须做什么才能读写一个整数?
发布于 2016-07-02 22:32:44
即使您没有使用mr,也需要指定它的类型。
指定mr类型的一种方法是添加let _ = mr :: ...语句:
loadFromStorage = do
mr <- getItem "budget"
let _ = mr :: MyType
case mr of
Left _ -> return (0 :: Integer)
Right _ -> return (1 :: Integer)发布于 2016-07-02 22:57:09
这对我来说很有效:
toStorage :: Int -> IO ()
toStorage n = do
setItem "page" n
return ()
fromStorage :: IO Int
fromStorage = do
value <- getItem "page"
either (\_ -> return 0)
(\n -> return n)
valuehttps://stackoverflow.com/questions/38161006
复制相似问题