ちょうどあなたのオペレータの周りに括弧を追加します。
(<=>) :: Ternary -> Ternary -> Ternary
(<=>) T F = F
(<=>) T T = T
(<=>) T M = M
(<=>) F F = T
(<=>) F T = F
(<=>) F M = M
(<=>) M F = M
(<=>) M T = M
(<=>) M M = T
これは、中置フォームからプレフィックスフォームになります。また、あなただけの定義で中置を使用することができます。
-- Works:
(<^>) :: Int -> Int -> Int
a <^> b = a + b
-- Doesn't work:
{-
<^> :: Int -> Int -> Int
<^> a b = a + b
-}
-- Works:
letters :: Int -> Int -> Int
letters a b = a + b
-- Doesn't work:
{-
(letters) :: Int -> Int -> Int
a letters b = a + b
-}
私も、約束 - Haskellは複雑なルールを学ぶ価値がある:シンボルと
(<=>) :: Ternary -> Ternary -> Ternary
T <=> F = F
T <=> T = T
T <=> M = M
F <=> F = T
F <=> T = F
F <=> M = M
M <=> F = M
M <=> T = M
M <=> M = T
ちょうどnとして'M <=> M 'は' T'ではなく 'M'でなければなりません。しかし、それはあなたの "たぶん"の意味にかかっています。 – bitmask
'infixl'、' infixr'を使ってアリティとアソシアティビティを設定できることを忘れないでください... – Landei