-- 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 <- setMethod dog "setName" $ \this [ n ] -> do
--   	setMember this name n
--   	return [ ]
--   sit <- setMethod dog "sit" $ \this _ -> do
--   	n <- member this name
--   	liftPT $ putStrLn $ fromPrimStr n ++ " sitting."
--   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.1 module Control.Prototype type PTMonad m = ObjectMonad m type Object = ObjectId type Member = VarName type Method m = ObjectId -> [ObjectId] -> ObjectMonad m [ObjectId] runPT :: Monad m => PTMonad m a -> ObjectEnv m -> m (a, ObjectEnv m) initPTEnv :: ObjectEnv m object :: ObjectId clone :: Monad m => ObjectId -> ObjectMonad m ObjectId makeMember :: Monad m => String -> ObjectMonad m VarName member :: Monad m => ObjectId -> VarName -> ObjectMonad m ObjectId method :: Monad m => ObjectId -> VarName -> [ObjectId] -> ObjectMonad m [ObjectId] setMember :: Monad m => ObjectId -> VarName -> ObjectId -> ObjectMonad m () setMethod :: Monad m => ObjectId -> String -> Method m -> ObjectMonad m VarName liftPT :: Monad m => m a -> ObjectMonad m a primInt :: Int -> ObjectId primStr :: String -> ObjectId fromPrimInt :: ObjectId -> Int fromPrimStr :: ObjectId -> String printMemberName :: MonadIO m => VarName -> m () instance Eq ObjectId instance Show ObjectId instance Eq VarName instance Show VarName instance Show (ObjectBody m)