грешка при анализиране при въвеждане в 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