2013-05-30 1 views
2

다음 do 블록은 컴파일 할 때 "conn '에 대한 구문 분석 오류를 발생시킵니다. if-then-else 문을 여러 가지 구성으로 시도해 보았습니다. 조건부를 추가하기 전에 데이터베이스 로직이 작동 했으므로 문제는 없습니다. 다른 사람에게 너무 많은 전화 번호가 있습니까? 논리를 완전히 개조하지 않고이 문제를 해결할 수있는 방법이 있습니까?하스켈 if-then-else 조건부에서 "parse error on input"

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 
+0

이 두 가지 문제가되는이 끝났다. 첫 번째 질문은 아래 답변에 설명되어 있습니다. 나는 "else"다음에 "do"가 필요했다. 또한 마지막 네 줄은 "let"의 "l"과 같은 열에 들여 쓰기해야했습니다. – Mike

답변

5

당신은 그래서 같은 elsedo 블록을 도입해야합니다

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 
+0

또한 마지막 네 열을 "let"의 "l"로 정렬해야했습니다. 하지만 이것이 가장 큰 문제였습니다. 감사. – Mike