- primop_rule IntEqOp = Just (relop (==) `or_rule` litEq True op_name_case)
- primop_rule IntNeOp = Just (relop (/=) `or_rule` litEq False op_name_case)
- primop_rule CharEqOp = Just (relop (==) `or_rule` litEq True op_name_case)
- primop_rule CharNeOp = Just (relop (/=) `or_rule` litEq False op_name_case)
-
- primop_rule IntGtOp = Just (relop (>))
- primop_rule IntGeOp = Just (relop (>=))
- primop_rule IntLeOp = Just (relop (<=))
- primop_rule IntLtOp = Just (relop (<))
-
- primop_rule CharGtOp = Just (relop (>))
- primop_rule CharGeOp = Just (relop (>=))
- primop_rule CharLeOp = Just (relop (<=))
- primop_rule CharLtOp = Just (relop (<))
-
- primop_rule FloatGtOp = Just (relop (>))
- primop_rule FloatGeOp = Just (relop (>=))
- primop_rule FloatLeOp = Just (relop (<=))
- primop_rule FloatLtOp = Just (relop (<))
- primop_rule FloatEqOp = Just (relop (==))
- primop_rule FloatNeOp = Just (relop (/=))
-
- primop_rule DoubleGtOp = Just (relop (>))
- primop_rule DoubleGeOp = Just (relop (>=))
- primop_rule DoubleLeOp = Just (relop (<=))
- primop_rule DoubleLtOp = Just (relop (<))
- primop_rule DoubleEqOp = Just (relop (==))
- primop_rule DoubleNeOp = Just (relop (/=))
-
- primop_rule WordGtOp = Just (relop (>))
- primop_rule WordGeOp = Just (relop (>=))
- primop_rule WordLeOp = Just (relop (<=))
- primop_rule WordLtOp = Just (relop (<))
- primop_rule WordEqOp = Just (relop (==))
- primop_rule WordNeOp = Just (relop (/=))
-
- primop_rule other = Nothing
-
-
- relop cmp = twoLits (cmpOp (\ord -> ord `cmp` EQ) op_name)
+ primop_rule IntEqOp = [BuiltinRule op_name (relop (==)), BuiltinRule op_name_case (litEq True)]
+ primop_rule IntNeOp = [BuiltinRule op_name (relop (/=)), BuiltinRule op_name_case (litEq False)]
+ primop_rule CharEqOp = [BuiltinRule op_name (relop (==)), BuiltinRule op_name_case (litEq True)]
+ primop_rule CharNeOp = [BuiltinRule op_name (relop (/=)), BuiltinRule op_name_case (litEq False)]
+
+ primop_rule IntGtOp = one_rule (relop (>))
+ primop_rule IntGeOp = one_rule (relop (>=))
+ primop_rule IntLeOp = one_rule (relop (<=))
+ primop_rule IntLtOp = one_rule (relop (<))
+
+ primop_rule CharGtOp = one_rule (relop (>))
+ primop_rule CharGeOp = one_rule (relop (>=))
+ primop_rule CharLeOp = one_rule (relop (<=))
+ primop_rule CharLtOp = one_rule (relop (<))
+
+ primop_rule FloatGtOp = one_rule (relop (>))
+ primop_rule FloatGeOp = one_rule (relop (>=))
+ primop_rule FloatLeOp = one_rule (relop (<=))
+ primop_rule FloatLtOp = one_rule (relop (<))
+ primop_rule FloatEqOp = one_rule (relop (==))
+ primop_rule FloatNeOp = one_rule (relop (/=))
+
+ primop_rule DoubleGtOp = one_rule (relop (>))
+ primop_rule DoubleGeOp = one_rule (relop (>=))
+ primop_rule DoubleLeOp = one_rule (relop (<=))
+ primop_rule DoubleLtOp = one_rule (relop (<))
+ primop_rule DoubleEqOp = one_rule (relop (==))
+ primop_rule DoubleNeOp = one_rule (relop (/=))
+
+ primop_rule WordGtOp = one_rule (relop (>))
+ primop_rule WordGeOp = one_rule (relop (>=))
+ primop_rule WordLeOp = one_rule (relop (<=))
+ primop_rule WordLtOp = one_rule (relop (<))
+ primop_rule WordEqOp = one_rule (relop (==))
+ primop_rule WordNeOp = one_rule (relop (/=))
+
+ primop_rule other = []
+
+
+ relop cmp = twoLits (cmpOp (\ord -> ord `cmp` EQ))