Changeset 15381
- Timestamp:
- 02/28/07 22:10:07 (21 months ago)
- Files:
-
- 1 modified
-
src/Pugs/Class.hs (modified) (5 diffs)
Legend:
- Unmodified
- Added
- Removed
-
src/Pugs/Class.hs
r15379 r15381 24 24 import MO.Util 25 25 import Pugs.Internals 26 import Pugs.AST.Eval 26 27 27 class ( Typeable a, Ord a, Typeable1 m, Monad m) => Boxable m a | a -> m where28 class (Show a, Typeable a, Ord a, Typeable1 m, Monad m) => Boxable m a | a -> m where 28 29 classOf :: a -> MI m 29 classOf o = mkBoxClass ty ([] :: [( String, String-> m (Invocant m))])30 classOf o = mkBoxClass ty ([] :: [(ID, ID -> m (Invocant m))]) 30 31 where 31 ty = takeTypeName "" . reverse . show $ typeOf o32 ty = _cast . takeTypeName "" . reverse . show $ typeOf o 32 33 -- Here we intuit "Str" from "Pugs.Val.Str.PureStr". 33 34 takeTypeName acc [] = acc … … 39 40 fromObj (MkInvocant x _) = fromTypeable x 40 41 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) 43 44 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) 46 47 47 mkObj :: ( Show a,Boxable m a) => a -> m (Invocant m)48 mkObj :: (Boxable m a) => a -> m (Invocant m) 48 49 mkObj x = return $ MkInvocant x (class_interface (classOf x)) 49 50 50 mkObjM :: ( Show a,Boxable m a) => m a -> m (Invocant m)51 mkObjM :: (Boxable m a) => m a -> m (Invocant m) 51 52 mkObjM x = do 52 53 x' <- x … … 61 62 , Typeable1 m1 62 63 , Method m1 (SimpleMethod m1) 63 ) => String -> [( String, t -> m (Invocant m))] -> MI m164 ) => String -> [(ID, t -> m (Invocant m))] -> MI m1 64 65 mkBoxClass cls methods = newMI MkMI 65 66 { clsParents = [] … … 68 69 , clsPublicMethods = newCollection' methodName $ map mkBoxMethod methods 69 70 , clsPrivateMethods = newCollection [] 70 , clsName =cls71 , clsName = _cast cls 71 72 } 72 73 … … 77 78 , Typeable1 m1 78 79 , Monad m1 79 ) => ( String, t -> m1 (Invocant m1)) -> AnyMethod m80 ) => (ID, t -> m1 (Invocant m1)) -> AnyMethod m 80 81 mkBoxMethod (meth, fun) = AnyMethod $ MkSimpleMethod 81 82 { smName = meth
