まず、質問をするときは、実際のエラーを投稿すると役に立ちます。これが私が得たものです:
test.hs:3:7:
Precedence parsing error
cannot mix `<' [infix 4] and `<' [infix 4] in the same infix expression
test.hs:4:7:
Precedence parsing error
cannot mix `<=' [infix 4] and `<=' [infix 4] in the same infix expression
test.hs:6:7:
Precedence parsing error
cannot mix `<=' [infix 4] and `<=' [infix 4] in the same infix expression
test.hs:7:7:
Precedence parsing error
cannot mix `<' [infix 4] and `<=' [infix 4] in the same infix expression
さて、問題は基本的に<
(および他の比較演算子) が実際には単なる 2 項関数、つまり 2 つの引数を取る関数であることです。コンパイラは、これらの関数の優先順位が同じであるため、式に括弧を配置する方法を知る方法がないことを伝えています。たとえば、これを見てください:
| 0 < qCalor < 3 = 30
コンパイラは、それが意味するのか、(0 < qCalor) < 3
それとも0 < (qCalor < 3)
. いずれにせよ、その行に適切な入力はありません。
のようなものを提案するか(0 < qCalor) && (qCalor < 3)
、さらに良いことに、次のような関数を使用することをお勧めします(おそらくこれには組み込み関数があります):
betweenNums a b c = (a < b) && (b < c)