2016-05-28 11 views
-2

を引き起こし は後に、私はのようなものを持ってしようとしたとき、私はコンパイラエラーを取得していますコンパイラエラー

私はcaseを変更した場合と同じ - それは動作します:だから、私の質問は、なぜを割り当てている

case text of 
    "id" -> Desc EventId 
    "title" -> Asc EventTitle 
Descはコンパイラエラーを引き起こしますか?

+1

エラーは何ですか?私の最高の推測:それは一般的な関数にデフォルトではありません – Carsten

+1

btw:ポイントはどこですか - 最後のスニペットはとにかく(より良いように見える)なぜ私は持っている実際のケースの単純化されたバージョンです – Carsten

+0

私の懸念は、変数に値を入れてコンパイルしないようにする理由です。 – amitaibu

答えて

2

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

しかし、それをトップレベルに移動する理由は、エラーを解決するでしょうか? – amitaibu

+0

コンパイラのエラーメッセージとは何ですか? – ErikR

+0

タイプエラーです。私はコンピュータの前で一度正確なものを提供します:) – amitaibu

関連する問題