| 372 | | maybeM rv $ \code -> return $ metaPrim |
| 373 | | { subAssoc = subAssoc code |
| 374 | | , subParams = makeParams ["Any", "Any"] |
| 375 | | , subBody = Prim (\[x, y] -> op2Hyper code x y) |
| 376 | | } |
| 377 | | |
| 378 | | buildReduce var keep = do |
| | 372 | maybeM rv (return . makeInfixHyperCode) |
| | 373 | |
| | 374 | makeInfixHyperCode code = metaPrim |
| | 375 | { subAssoc = subAssoc code |
| | 376 | , subParams = makeParams ["Any", "Any"] |
| | 377 | , subBody = Prim (\[x, y] -> op2Hyper code x y) |
| | 378 | } |
| | 379 | |
| | 380 | buildReduce var foldOrScan nilOrHyper = do |
| 395 | | MPost -> buildPrefixHyper var' -- +<< |
| 396 | | MPre -> buildPostfixHyper var' -- >>+ |
| 397 | | MHyper -> buildInfixHyper var' -- >>+<< |
| 398 | | MFold -> buildReduce varInfix False -- [+] |
| 399 | | MScan -> buildReduce varInfix True -- [\+] |
| 400 | | _ -> return Nothing |
| | 399 | MPost -> buildPrefixHyper var' -- +<< |
| | 400 | MPre -> buildPostfixHyper var' -- >>+ |
| | 401 | MHyper -> buildInfixHyper var' -- >>+<< |
| | 402 | MFold -> buildReduce varInfix MFold MNil -- [+] |
| | 403 | MScan -> buildReduce varInfix MScan MNil -- [\+] |
| | 404 | MHyperFold -> buildReduce varInfix MFold MHyper -- [>>+<<] |
| | 405 | MHyperScan -> buildReduce varInfix MScan MHyper -- [>>+<<] |
| | 406 | _ -> return Nothing |