Changeset 15381

Show
Ignore:
Timestamp:
02/28/07 22:10:07 (21 months ago)
Author:
audreyt
Message:

* Pugs.Class: Make Show a superclass to Boxable.

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • src/Pugs/Class.hs

    r15379 r15381  
    2424import MO.Util 
    2525import Pugs.Internals 
     26import Pugs.AST.Eval 
    2627 
    27 class (Typeable a, Ord a, Typeable1 m, Monad m) => Boxable m a | a -> m where 
     28class (Show a, Typeable a, Ord a, Typeable1 m, Monad m) => Boxable m a | a -> m where 
    2829    classOf :: a -> MI m 
    29     classOf o = mkBoxClass ty ([] :: [(String, String -> m (Invocant m))]) 
     30    classOf o = mkBoxClass ty ([] :: [(ID, ID -> m (Invocant m))]) 
    3031        where 
    31         ty = takeTypeName "" . reverse . show $ typeOf o 
     32        ty = _cast . takeTypeName "" . reverse . show $ typeOf o 
    3233        -- Here we intuit "Str" from "Pugs.Val.Str.PureStr". 
    3334        takeTypeName acc [] = acc 
     
    3940    fromObj (MkInvocant x _) = fromTypeable x 
    4041 
    41 (...) :: forall t a b (m :: * -> *). (Show b, Boxable m b) => t -> (a -> b) -> (t, a -> m (Invocant m)) 
    42 (...) x y = (x, mkObj . y) 
     42(...) :: forall a b (m :: * -> *). (Boxable m b) => String -> (a -> b) -> (ID, a -> m (Invocant m)) 
     43(...) x y = (_cast x, mkObj . y) 
    4344 
    44 (!!!) :: forall t a1 (m :: * -> *) a. (Show a, Boxable m a) => t -> (a1 -> m a) -> (t, a1 -> m (Invocant m)) 
    45 (!!!) x y = (x, mkObjM . y) 
     45(!!!) :: forall a1 (m :: * -> *) a. (Boxable m a) => String -> (a1 -> m a) -> (ID, a1 -> m (Invocant m)) 
     46(!!!) x y = (_cast x, mkObjM . y) 
    4647 
    47 mkObj :: (Show a, Boxable m a) => a -> m (Invocant m) 
     48mkObj :: (Boxable m a) => a -> m (Invocant m) 
    4849mkObj x = return $ MkInvocant x (class_interface (classOf x)) 
    4950 
    50 mkObjM :: (Show a, Boxable m a) => m a -> m (Invocant m) 
     51mkObjM :: (Boxable m a) => m a -> m (Invocant m) 
    5152mkObjM x = do 
    5253    x' <- x 
     
    6162    , Typeable1 m1 
    6263    , Method m1 (SimpleMethod m1) 
    63     ) => String -> [(String, t -> m (Invocant m))] -> MI m1 
     64    ) => String -> [(ID, t -> m (Invocant m))] -> MI m1 
    6465mkBoxClass cls methods = newMI MkMI 
    6566    { clsParents        = [] 
     
    6869    , clsPublicMethods  = newCollection' methodName $ map mkBoxMethod methods 
    6970    , clsPrivateMethods = newCollection [] 
    70     , clsName = cls 
     71    , clsName           = _cast cls 
    7172    } 
    7273 
     
    7778    , Typeable1 m1 
    7879    , Monad m1 
    79     ) => (String, t -> m1 (Invocant m1)) -> AnyMethod m 
     80    ) => (ID, t -> m1 (Invocant m1)) -> AnyMethod m 
    8081mkBoxMethod (meth, fun) = AnyMethod $ MkSimpleMethod 
    8182    { smName = meth