2011-11-08 19 views
0
>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と等しくなく、Passed Not Failedも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!!!! " 
+0

明確にする:一致する日付がない場合、日付が利用可能であるとしますか? – ivanm

+0

はい、これは私がしたいことです。 –

+0

selectListの条件は結合式(&&)または論理積(||)ですか? –

答えて

1

これは難しい問題は、私はかなり野生の推測をされて書いているものを複製することであるが、ここに行く:

は、最終的な結果

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 matchTrueである必要がありますが、上記の行はmatchに1つのレコードが含まれているように見えます。ですから、この時点で私はL.nullが、あなたが思っている機能ではないと思われます。次のデバッグの提案は、matchをいくつかの他のプロパティに対してテストすることです(長さ関数は多分ですか?)、問題がL.nullまたはmatchであるかどうかを確認してください。別の考え方は、ifの後にprintステートメントを移動することです。それは何も変わるべきではありません(確かにHaskellではありません!)が、データベースクエリからの応答はときどき変わったです。 (例えばリストではなく、使用されると消費される結果のストリーム

Good Luck!

+0

トラブルシューティングのヒントありがとうございました。私はこれの最下点に到達する方法を失っていました。 –

関連する問題