Что не так с моей логикой? - PullRequest
0 голосов
/ 08 ноября 2011
>main :: IO ()
 main = withPostgresqlConn "host=localhost user=Rocko port=5432 dbname=Rocko" $           runSqlConn $ do
   runMigration migrateAll
   let compDay = C.fromGregorian 2011 11 21
   match <- selectList
              [TestStartDate ==. compDay,
               TestEstimatedEnd ==. compDay,
               TestStatus /<-. [Passed,Failed]] []
   scheduled <- selectList [TestStatus ==. Scheduled] []
--   liftIO $ print scheduled
   liftIO $ print match
   if (L.null match == True) then (liftIO $ print "date available!!!! ") else (liftIO $       print "date not available")
   return ()

Я пытаюсь определить, соответствует ли конкретный день этому критерию: он не равен TestStartDate, не равен TestEstimatedEnd, а также «Пропущенный» и «Неудачный» является членом TestStatus.* Тем не менее, я хочу продемонстрировать, что с выбранной датой (у которой должно быть совпадение в TestEstimatedEnd) не получается правильно.Стоит сказать: дата не указана.Так что не так с моей логикой?

> id |         firmware          |  version   | startDate  | estimatedEnd |  status

>----+---------------------------+------------+------------+--------------+-----------
  >1 | BCC Admin                 | 0.0.00.001 | 2011-11-19 | 2011-11-21   | Scheduled

>ghcifoo> main
 "date available!!!! "

1 Ответ

1 голос
/ 10 ноября 2011

Это трудная проблема для копирования, поэтому то, что я пишу, довольно дикое предположение, но здесь идет речь:

Позволяет работать в обратном направлении от конечного результата

if (L.null match == True) then (liftIO $ print "date available!!!! ") else (liftIO $       print "date not available")

Эта строка четко оценивает условие then. Ergo (L.null match == True) было True. Мой первый вопрос: почему оговорка == True? L.null match должно работать так же хорошо само по себе.

Теперь мы знаем, что L.null match должно быть True, но строка выше, кажется, указывает, что match содержит одну запись. Поэтому в этот момент я бы заподозрил, что L.null, возможно, не та функция, о которой вы думаете, или совпадение не содержит того, что вывод заставляет нас поверить в это. Моим следующим предложением отладки было бы проверить match на соответствие некоторым другим свойствам (возможно, есть функция длины?) И посмотреть, связана ли проблема с L.null или match. Еще одна мысль - переместить оператор печати после if. Это ничего не должно изменить (конечно, не в Haskell!), Но ответ на запрос к базе данных иногда странный . (например, не список, а поток результатов, которые потребляются по мере их использования.)

Удачи!

...