Changeset 15418
- Timestamp:
- 03/03/07 14:54:49 (21 months ago)
- Files:
-
- 1 modified
-
src/Pugs/Class.hs (modified) (4 diffs)
Legend:
- Unmodified
- Added
- Removed
-
src/Pugs/Class.hs
r15407 r15418 30 30 31 31 class (Show a, Typeable a, Ord a, Typeable1 m, Monad m) => Boxable m a | a -> m where 32 mkObj :: a -> Invocant m 33 mkObj x = MkInvocant x (class_interface (classOf x)) 34 32 35 classOf :: a -> MI m 33 36 classOf o = mkBoxClass ty ([] :: [(ID, ID -> m (Invocant m))]) … … 43 46 fromObj (MkInvocant x _) = fromTypeable x 44 47 45 (...) :: forall a b (m :: * -> *). (Boxable m b)=> String -> (a -> b) -> (ID, a -> m (Invocant m))46 (...) x y = (_cast x, mkObj. y)48 (...) :: Boxable m b => String -> (a -> b) -> (ID, a -> m (Invocant m)) 49 (...) x y = (_cast x, (return . mkObj) . y) 47 50 48 (!!!) :: forall a1 (m :: * -> *) a. (Boxable m a) => String -> (a1 -> m a) -> (ID, a1-> m (Invocant m))51 (!!!) :: Boxable m b => String -> (a -> m b) -> (ID, a -> m (Invocant m)) 49 52 (!!!) x y = (_cast x, mkObjM . y) 50 53 51 mkObj :: (Boxable m a) => a -> m (Invocant m) 52 mkObj x = return $ MkInvocant x (class_interface (classOf x)) 53 54 mkObjM :: (Boxable m a) => m a -> m (Invocant m) 54 mkObjM :: Boxable m a => m a -> m (Invocant m) 55 55 mkObjM x = do 56 56 x' <- x … … 84 84 mkBoxClass cls methods' 85 85 where 86 methods' = methods ++ 87 [ "HOW" ... (const self) 88 , "WHICH" ... id 89 ] 86 methods' = methods ++ 87 [ "HOW" ... const self 88 , "WHAT" ... const (raiseWhatError ("Can't access attributes of prototype: " ++ cls) `asTypeOf` self) 89 , "WHICH" ... id 90 ] 91 92 raiseWhatError :: String -> a 93 raiseWhatError = error 90 94 91 95 mkBoxMethod :: forall t (m1 :: * -> *) (m :: * -> *). … … 96 100 , Monad m1 97 101 ) => (ID, t -> m1 (Invocant m1)) -> AnyMethod m 98 mkBoxMethod (meth, fun) = AnyMethod $ MkSimpleMethod102 mkBoxMethod (meth, fun) = MkMethod $ MkSimpleMethod 99 103 { smName = meth 100 104 , smDefinition = MkMethodCompiled $ HsCode $ \args -> do
