@@ -86,6 +86,7 @@ inlineValues = everywhereOnJS convert
86 convert :: JS -> JS
86 convert :: JS -> JS
87 convert (JSApp fn [dict]) | isPreludeDict C.semiringNumber dict && isPreludeFn C.zero fn = JSNumericLiteral (Left 0)
87 convert (JSApp fn [dict]) | isPreludeDict C.semiringNumber dict && isPreludeFn C.zero fn = JSNumericLiteral (Left 0)
88 convert (JSApp fn [dict]) | isPreludeDict C.semiringNumber dict && isPreludeFn C.one fn = JSNumericLiteral (Left 1)
88 convert (JSApp fn [dict]) | isPreludeDict C.semiringNumber dict && isPreludeFn C.one fn = JSNumericLiteral (Left 1)
89+ convert (JSApp (JSApp fn [x]) [y]) | isPreludeFn (C.%) fn = JSBinary Modulus x y
89 convert other = other
90 convert other = other
91inlineOperator :: (String, String) -> (JS -> JS -> JS) -> JS -> JS
92inlineOperator :: (String, String) -> (JS -> JS -> JS) -> JS -> JS
@@ -105,7 +106,6 @@ inlineCommonOperators = applyAll $
105 , binary C.ringNumber (C.-) Subtract
106 , binary C.ringNumber (C.-) Subtract
106 , unary C.ringNumber C.negate Negate
107 , unary C.ringNumber C.negate Negate
107 , binary C.moduloRingNumber (C./) Divide
108 , binary C.moduloRingNumber (C./) Divide
108− --, binary C.numNumber (C.%) Modulus
110 , binary C.ordNumber (C.<) LessThan
110 , binary C.ordNumber (C.<) LessThan
111 , binary C.ordNumber (C.>) GreaterThan
111 , binary C.ordNumber (C.>) GreaterThan
@@ -140,11 +140,8 @@ inlineCommonOperators = applyAll $
140 binary dictName opString op = everywhereOnJS convert
140 binary dictName opString op = everywhereOnJS convert
142 convert :: JS -> JS
142 convert :: JS -> JS
143− convert (JSApp (JSApp (JSApp fn [dict]) [x]) [y]) | isOp fn && isPreludeDict dictName dict = JSBinary op x y
143+ convert (JSApp (JSApp (JSApp fn [dict]) [x]) [y]) | isPreludeDict dictName dict && isPreludeFn opString fn = JSBinary op x y
144 convert other = other
144 convert other = other
145− isOp (JSAccessor longForm (JSAccessor prelude (JSVar _))) = prelude == C.prelude && longForm == identToJs (Op opString)
146− isOp (JSIndexer (JSStringLiteral op') (JSVar prelude)) = prelude == C.prelude && opString == op'
148 binaryFunction :: String -> String -> BinaryOperator -> JS -> JS
145 binaryFunction :: String -> String -> BinaryOperator -> JS -> JS
149 binaryFunction dictName fnName op = everywhereOnJS convert
146 binaryFunction dictName fnName op = everywhereOnJS convert
@@ -199,4 +196,6 @@ isPreludeDict _ _ = False
200isPreludeFn :: String -> JS -> Bool
197isPreludeFn :: String -> JS -> Bool
201isPreludeFn fnName (JSAccessor fnName' (JSVar prelude)) = prelude == C.prelude && fnName' == fnName
198isPreludeFn fnName (JSAccessor fnName' (JSVar prelude)) = prelude == C.prelude && fnName' == fnName
199+isPreludeFn fnName (JSIndexer (JSStringLiteral fnName') (JSVar prelude)) = prelude == C.prelude && fnName' == fnName
200+isPreludeFn fnName (JSAccessor longForm (JSAccessor prelude (JSVar _))) = prelude == C.prelude && longForm == identToJs (Op fnName)
202isPreludeFn _ _ = False
201isPreludeFn _ _ = False