Changeset 5170 for src/Pugs/Monads.hs

Show
Ignore:
Timestamp:
07/04/05 00:37:10 (4 years ago)
Author:
autrijus
svk:copy_cache_prev:
6965
Message:

* eval now pushes one caller frame, just as Perl5's eval does.

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • src/Pugs/Monads.hs

    r3904 r5170  
    4848enterEvalContext :: Cxt -> Exp -> Eval Val 
    4949enterEvalContext cxt = enterContext cxt . evalExp 
     50 
     51{-| 
     52Perform the specified evaluation in the specified package. 
     53 
     54(Subsequent chained 'Eval's do /not/ see this package.) 
     55-} 
     56enterPackage :: String -> Eval a -> Eval a 
     57enterPackage pkg = local (\e -> e{ envPackage = pkg }) 
     58 
     59{-| 
     60Enter a new environment and mark the previous one as 'Caller'. 
     61-} 
     62enterCaller :: Eval a -> Eval a 
     63enterCaller = local (\env -> env 
     64    { envCaller = Just env 
     65    , envDepth = envDepth env + 1 }) 
    5066 
    5167{-| 
     
    240256        } ] 
    241257 
    242 -- | (This doesn't seem to be used at the moment...) 
    243 caller :: Int -> Eval Env 
    244 caller n = do 
    245     depth <- asks envDepth 
    246     when (depth <= n) $ 
    247         fail "Cannot ask for deeper depth" 
    248     asks $ foldl (.) id $ replicate n (fromJust . envCaller) 
    249  
    250258evalVal :: Val -> Eval Val 
    251259evalVal val = do