Changeset 3473 for src/Pugs/Prim/List.hs
- Timestamp:
- 05/20/05 00:14:37 (4 years ago)
- svk:copy_cache_prev:
- 5016
- Files:
-
- 1 modified
-
src/Pugs/Prim/List.hs (modified) (4 diffs)
Legend:
- Unmodified
- Added
- Removed
-
src/Pugs/Prim/List.hs
r3372 r3473 1 1 module Pugs.Prim.List ( 2 op0Zip, op1 Fold, op1Pick, op1Sum,2 op0Zip, op1Pick, op1Sum, 3 3 op2Fold, op2Grep, op2Map, op2Join, 4 4 sortByM, … … 22 22 zipRest [] = [] 23 23 zipRest (_:xs) = xs 24 25 op1Fold :: (Val -> Val -> Eval Val) -> Val -> Eval Val26 op1Fold op v = do27 args <- fromVal v28 case args of29 (a:as) -> foldM op a as30 _ -> return undef31 24 32 25 op1Pick :: Val -> Eval Val … … 58 51 op2Fold sub@(VCode _) list = op2Fold list sub 59 52 op2Fold list sub = do 53 code <- fromVal sub 60 54 args <- fromVal list 61 55 if null args then return undef else do … … 64 58 local (\e -> e{ envContext = cxtItemAny }) $ do 65 59 evl (App (Val sub) [Val x, Val y] []) 66 foldM doFold (head args) (tail args) 60 case subAssoc code of 61 "left" -> foldM doFold (head args) (tail args) 62 "right" -> do 63 let args' = reverse args 64 foldM (flip doFold) (head args') (tail args') 65 "chain" -> callCC $ \esc -> do 66 let doFold' x y = do 67 val <- doFold x y 68 case val of 69 VBool False -> esc val 70 _ -> return val 71 foldM doFold' (head args) (tail args) 72 _ -> fail $ "Cannot reduce over associativity:" ++ show (subAssoc code) 67 73 68 74 op2Grep :: Val -> Val -> Eval Val
