Changeset 14467 for src/Pugs/Prim/List.hs
- Timestamp:
- 10/22/06 01:37:44 (2 years ago)
- Files:
-
- 1 modified
-
src/Pugs/Prim/List.hs (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
src/Pugs/Prim/List.hs
r14140 r14467 390 390 | otherwise 391 391 = enterEvalContext cxtItemAny $ App (Val $ VCode sub) Nothing [Val x] 392 hyperList [] = return [] 393 hyperList (x:xs) = do 394 val <- doHyper x 395 rest <- hyperList xs 396 return (val:rest) 392 hyperList xs = do 393 env <- ask 394 liftIO $ do 395 chan <- newChan 396 forM ([(0::Int)..] `zip` xs) $ \(n, x) -> forkIO $ do 397 rv <- runEvalIO env $ doHyper x 398 writeChan chan (n, rv) 399 fmap (map snd . sort) (replicateM (length xs) (readChan chan)) 397 400 398 401 op1HyperPostfix :: VCode -> Val -> Eval Val … … 429 432 | otherwise 430 433 = enterEvalContext cxtItemAny $ App (Val $ VCode sub) Nothing [Val x, Val y] 431 hyperLists [] [] = return [] 432 hyperLists xs [] = return xs 433 hyperLists [] ys = return ys 434 hyperLists (x:xs) (y:ys) = do 435 val <- doHyper x y 436 rest <- hyperLists xs ys 437 return (val:rest) 438 434 hyperLists xs ys = do 435 env <- ask 436 liftIO $ do 437 chan <- newChan 438 len <- doHyperLists env chan 0 xs ys 439 fmap (map snd . sort) (replicateM len (readChan chan)) 440 doHyperLists :: Env -> Chan (Int, Val) -> Int -> [Val] -> [Val] -> IO Int 441 doHyperLists _ _ n [] [] = return n 442 doHyperLists _ chan n xs [] = do 443 forM ([n..] `zip` xs) (writeChan chan) 444 return (n + length xs) 445 doHyperLists _ chan n [] ys = do 446 forM ([n..] `zip` ys) (writeChan chan) 447 return (n + length ys) 448 doHyperLists env chan n (x:xs) (y:ys) = do 449 forkIO $ do 450 rv <- runEvalIO env $ doHyper x y 451 writeChan chan (n, rv) 452 doHyperLists env chan (n+1) xs ys
