ошибка синтаксического анализа при вводе в Haskell if-then-else условное

Следующий блок do выдает ошибку "ошибка синтаксического анализа при вводе `conn'", когда я пытаюсь его скомпилировать. Я пробовал много разных конфигураций оператора if-then-else безрезультатно. Логика базы данных работала до того, как я добавил условное выражение, так что с этим проблем нет. У меня слишком много строк в else? Есть ли способ исправить это без полной переделки логики?

main = do
   contents <- BL.getContents
   let myData = decode contents :: Maybe Data
   if maybe True (\x -> result x /= "success") myData
      then error ("JSON download failed")
      else let myTrades = process myData
         conn <- connectSqlite3 "trades.db"
         insert <- DB.prepare conn "INSERT INTO trades VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?);"
         DB.executeMany insert $ map (\xs -> map DB.toSql xs) myTrades
         DB.commit conn
         DB.disconnect conn

person Mike    schedule 30.05.2013    source источник
comment
В итоге возникли две проблемы. Первый был описан в ответе ниже; Мне нужно было сделать после еще. Кроме того, последние четыре строки должны были иметь отступ, чтобы они находились в том же столбце, что и l в let.   -  person Mike    schedule 31.05.2013


Ответы (1)


Вам нужно ввести блок do после else вот так:

  else do let myTrades = process myData
          conn <- connectSqlite3 "trades.db"
          insert <- DB.prepare conn "INSERT INTO trades VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?);"
          DB.executeMany insert $ map (\xs -> map DB.toSql xs) myTrades
          DB.commit conn
          DB.disconnect conn
person sclv    schedule 30.05.2013
comment
Мне также нужно было выровнять последние четыре столбца с l в let. Хотя это была основная проблема. Спасибо. - person Mike; 31.05.2013