Работа с локальным хранилищем в 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
Другие вопросы по тегам