Работа с локальным хранилищем в Haste
Я хотел бы читать и писать целое число от и до локального хранилища.
Мой код выглядит так (пока пытаюсь сделать этот компилятор):
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) } }
Вопросы:
Что я должен сделать, чтобы этот код компилировался?
Что я должен сделать, чтобы прочитать и написать целое число?
2 ответа
Даже если вы не используете mr
вам нужно указать, какой это тип.
Один из способов указать тип mr
это добавить let _ = mr :: ...
заявление:
loadFromStorage = do
mr <- getItem "budget"
let _ = mr :: MyType
case mr of
Left _ -> return (0 :: Integer)
Right _ -> return (1 :: Integer)
Это работает для меня сейчас:
toStorage :: Int -> IO ()
toStorage n = do
setItem "page" n
return ()
fromStorage :: IO Int
fromStorage = do
value <- getItem "page"
either (\_ -> return 0)
(\n -> return n)
value