を引き起こし は後に、私はのようなものを持ってしようとしたとき、私はコンパイラエラーを取得していますコンパイラエラー
私はcase
を変更した場合と同じ - それは動作します:だから、私の質問は、なぜを割り当てている
case text of
"id" -> Desc EventId
"title" -> Asc EventTitle
と
Desc
はコンパイラエラーを引き起こしますか?
を引き起こし は後に、私はのようなものを持ってしようとしたとき、私はコンパイラエラーを取得していますコンパイラエラー
私はcase
を変更した場合と同じ - それは動作します:だから、私の質問は、なぜを割り当てている
case text of
"id" -> Desc EventId
"title" -> Asc EventTitle
と
Desc
はコンパイラエラーを引き起こしますか?
direction
機能を作成し、トップレベルに移動:
direction text = if text == "id" then Desc else Asc
はこの中updown
関数を参照してくださいSO答え:
https://stackoverflow.com/a/37380039/866915
を更新
でdirection EventId
を注文すると、この
where direction = if ... then Asc else Desc
のようなwhere句で定義されているのであれば
direction :: EntityField Event String
:direction EventTitle
はそれが型を持っている必要が意味をなすようにするためには
direction :: EntityField Event Int
:は、型を持っている必要が
両方のタイプ制約を満たすことはできません。しかし、あなたがそれを関数にすると:
direction t = if t == "id" then Asc else Desc
それは多形です。つまり、direction ...
は異なるコールサイトで異なるタイプを持つことができます。
更新
型シグネチャを追加してみてください、元のコードを使用するには:
where
direction :: EntityField r t -> SelectOpt r
direction = if text == "id" then Desc else Asc
エラーは何ですか?私の最高の推測:それは一般的な関数にデフォルトではありません – Carsten
btw:ポイントはどこですか - 最後のスニペットはとにかく(より良いように見える)なぜ私は持っている実際のケースの単純化されたバージョンです – Carsten
私の懸念は、変数に値を入れてコンパイルしないようにする理由です。 – amitaibu