-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | prototype-based programming on Haskell -- -- prototype-based programming on Haskell -- -- You can download source codes by git. -- -- git clone git://github.com/YoshikuniJujo/prototype.git prototype -- -- Example code -- --
--   module Main where
--   
--   import Control.Prototype
--   
--   main :: IO ()
--   main = fmap fst $ flip runPT initPTEnv $ do
--   dog <- clone object
--   name	<- makeMember "name"
--   setName	<- makeMember "setName"
--   sit	<- makeMember "sit"
--   setMethod dog setName $ \this [ n ] -> do
--   	setMember this name n
--   	return [ ]
--   setMethod dog sit $ \this _ -> do
--   	n <- member this name
--   	liftPT $ putStrLn $ fromPrimStr n ++ " sitting."
--   	return [ ]
--   myDog <- clone dog
--   method myDog setName [ primStr "John" ]
--   method myDog sit [ ]
--   return ()
--   
-- -- Another sample -- --
--   module Main where
--   
--   import MyToolkit
--   
--   main :: IO ()
--   main = runToolKit $ do
--   ( textView, setText, setContentView ) <- importMyToolkit
--   myTV <- clone textView
--   method myTV setText [ primStr "Hello, world!" ]
--   method myTV setContentView [ ]
--   return ()
--   
@package prototype @version 0.3 module Control.Prototype type PTMonad m = StateT (PTEnv m) m data Object data Member type Method m = Object -> [Object] -> PTMonad m [Object] runPT :: Monad m => PTMonad m a -> PTEnv m -> m (a, PTEnv m) initPTEnv :: PTEnv m object :: Object clone :: Monad m => Object -> PTMonad m Object makeMember :: Monad m => String -> PTMonad m Member member :: Monad m => Object -> Member -> PTMonad m Object method :: Monad m => Object -> Member -> [Object] -> PTMonad m [Object] setMember :: Monad m => Object -> Member -> Object -> PTMonad m () setMethod :: Monad m => Object -> Member -> Method m -> PTMonad m () liftPT :: Monad m => m a -> PTMonad m a primInt :: Int -> Object primStr :: String -> Object fromPrimInt :: Object -> Int fromPrimStr :: Object -> String printMemberName :: MonadIO m => Member -> m () instance Eq Object instance Show Object instance Eq Member instance Show Member instance Show (ObjectBody m)