2016-07-02 4 views
0

Я хотел бы прочитать и написать целое число от и до локального хранилища.Работа с локальным хранилищем в 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) } } 

Рассмотрены вопросы являются:

Что я должен сделать, чтобы этот код был скомпилирован?

Что мне делать, чтобы читать и писать целое число?

+0

Сообщение об ошибке предполагает у вас есть текст 'возврата (1 0 :: Integer) 'где-то в вашей программе. Вы уверены, что фрагмент кода, который вы опубликовали, является причиной ошибки? – ErikR

+0

Сообщение об ошибке было неправильным. Я обновил его. – rogergl

ответ

1

Даже если вы не используете mr, вам нужно указать, какой тип он есть.

Один из способов определить тип mr является добавление let _ = mr :: ... заявление:

loadFromStorage = do 
    mr <- getItem "budget" 
    let _ = mr :: MyType 
    case mr of 
     Left _ -> return (0 :: Integer) 
     Right _ -> return (1 :: Integer) 
0

Это работает для меня сейчас:

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 

 Смежные вопросы

  • Нет связанных вопросов^_^