+++ /dev/null
-implementation module GenReduce\r
-\r
-import StdGeneric, _Array\r
-\r
-// or crush\r
-generic gReduce t :: (a a -> a) a t -> a\r
-gReduce{|c|} op e x = e\r
-gReduce{|PAIR|} fx fy op e (PAIR x y) = op (fx op e x) (fy op e y)\r
-gReduce{|EITHER|} fl fr op e (LEFT x) = fl op e x\r
-gReduce{|EITHER|} fl fr op e (RIGHT x) = fr op e x\r
-gReduce{|CONS|} f op e (CONS x) = f op e x \r
-gReduce{|FIELD|} f op e (FIELD x) = f op e x\r
-gReduce{|OBJECT|} f op e (OBJECT x) = f op e x\r
-gReduce{|{}|} f op e x = reduceArray f op e x\r
-gReduce{|{!}|} f op e x = reduceArray f op e x\r
-derive gReduce [], (,), (,,), (,,,), (,,,,), (,,,,,), (,,,,,,), (,,,,,,,)\r
-\r
-generic gReduceRSt t :: .t .st -> .st\r
-gReduceRSt{|c|} x st = st\r
-gReduceRSt{|PAIR|} fx fy (PAIR x y) st = fx x (fy y st)\r
-gReduceRSt{|EITHER|} fl fr x st = reduceEITHER fl fr x st\r
-gReduceRSt{|CONS|} f (CONS x) st = f x st\r
-gReduceRSt{|FIELD|} f (FIELD x) st = f x st\r
-gReduceRSt{|OBJECT|} f (OBJECT x) st = f x st\r
-gReduceRSt{|{}|} f xs st = reduceArrayRSt f xs st \r
-gReduceRSt{|{!}|} f xs st = reduceArrayRSt f xs st \r
-derive gReduceRSt [], (,), (,,), (,,,), (,,,,), (,,,,,), (,,,,,,), (,,,,,,,)\r
-\r
-generic gReduceLSt t :: .t .st -> .st\r
-gReduceLSt{|c|} x st = st\r
-gReduceLSt{|PAIR|} fx fy (PAIR x y) st = fy y (fx x st)\r
-gReduceLSt{|EITHER|} fl fr x st = reduceEITHER fl fr x st\r
-gReduceLSt{|CONS|} f (CONS x) st = f x st\r
-gReduceLSt{|FIELD|} f (FIELD x) st = f x st\r
-gReduceLSt{|OBJECT|} f (OBJECT x) st = f x st\r
-gReduceLSt{|{}|} f xs st = reduceArrayLSt f xs st \r
-gReduceLSt{|{!}|} f xs st = reduceArrayLSt f xs st \r
-derive gReduceLSt [], (,), (,,), (,,,), (,,,,), (,,,,,), (,,,,,,), (,,,,,,,)\r
-\r
-reduceEITHER fl fr (LEFT x) st = fl x st\r
-reduceEITHER fl fr (RIGHT x) st = fr x st\r
-\r
-
\ No newline at end of file