-- 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)