Changeset 22990 for src/Pugs/Eval.hs

Show
Ignore:
Timestamp:
11/12/08 10:01:29 (8 weeks ago)
Author:
audreyt
Message:

* GHC 6.10 support, part 3 of 3: Adjust for GADT's "rigid types" restriction.

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • src/Pugs/Eval.hs

    r21763 r22990  
    196196                -- auto-enreference 
    197197                esc $ VRef ref 
    198             case ref of 
     198            (case ref of 
    199199                MkRef IPair{}   -> esc (VRef ref) 
    200                 _               -> esc =<< readRef ref 
     200                _               -> esc =<< readRef ref) :: Eval () 
    201201        -- LValue here 
    202202        when isCollectionRef $ esc (castV ref) 
     
    508508    sub   <- fromCodeExp body 
    509509    -- XXX this is wrong -- should use Array.next 
    510     elms  <- case av of 
     510    elms  <- (case av of 
    511511        VRef (MkRef sv@IScalar{})   -> return [sv] 
    512         VList xs                    -> return . (`map` xs) $ \x -> case x of 
     512        VList xs                    -> return . (`map` xs) $ \x -> ((case x of 
    513513            VRef (MkRef sv@IScalar{})   -> sv 
    514             _                           -> (IScalar x) 
    515         _                           -> join $ doArray av array_fetchElemAll 
     514            _                           -> (IScalar x)) :: IVar VScalar) 
     515        _                           -> join $ doArray av array_fetchElemAll) :: Eval [IVar VScalar] 
    516516    -- This makes "for @x { ... }" into "for @x -> $_ is rw {...}" 
    517517    let arity = length (subParams sub) 
     
    11511151        | v     <- vals 
    11521152        ] 
     1153    forceThunk :: Val -> Eval Val 
    11531154    forceThunk (VRef (MkRef (IThunk tv)))   = thunk_force tv 
    11541155    forceThunk x                            = return x 
     
    14911492                    --- not scalarRef! -- use the new "transparent IType" thing! 
    14921493                    case showType (typeOfSigilVar var) of 
    1493                         "Hash"  -> ($ v) . fix $ \(redo :: Val -> Eval Val) x -> case x of 
     1494                        "Hash"  -> ($ v) . fix $ \(redo :: Val -> Eval Val) x -> (case x of 
    14941495                            VRef (MkRef (IHash h)) -> return (VRef $ hashRef h)  
    14951496                            VRef ref@(MkRef IScalar{}) -> redo =<< readRef ref 
    1496                             _ -> fmap (VRef . hashRef) (fromVal v :: Eval VHash) 
    1497                         "Array" -> ($ v) . fix $ \(redo :: Val -> Eval Val) x -> case x of 
     1497                            _ -> fmap (VRef . hashRef) (fromVal v :: Eval VHash)) :: Eval Val 
     1498                        "Array" -> ($ v) . fix $ \(redo :: Val -> Eval Val) x -> (case x of 
    14981499                            VRef (MkRef (IArray a)) -> return (VRef $ arrayRef a)  
    14991500                            VRef ref@(MkRef IScalar{}) -> redo =<< readRef ref 
    1500                             _ -> fmap (VRef . arrayRef) (fromVal v :: Eval VArray) 
    1501                         _       -> case v of 
     1501                            _ -> fmap (VRef . arrayRef) (fromVal v :: Eval VArray)) :: Eval Val 
     1502                        _       -> (case v of 
    15021503                            VRef (MkRef IScalar{}) -> return (VRef $ scalarRef v)  
    15031504                            VRef _ -> return v -- XXX - preserving ref 
    1504                             _ -> return (VRef $ scalarRef v)  
     1505                            _ -> return (VRef $ scalarRef v)) :: Eval Val 
    15051506                (False, False)  -> return v -- XXX reduce to val? 
    15061507                (False, True)   -> do