prototype 0.5.0 → 0.5.3
raw patch · 2 files changed
+25/−3 lines, 2 files
Files
- prototype.cabal +2/−2
- src/Control/Prototype.hs +23/−1
prototype.cabal view
@@ -2,7 +2,7 @@ cabal-version: >= 1.2 name: prototype-version: 0.5.0+version: 0.5.3 stability: experimental author: Yoshikuni Jujo <PAF01143@nifty.ne.jp> maintainer: Yoshikuni Jujo <PAF01143@nifty.ne.jp>@@ -25,7 +25,7 @@ > import Control.Prototype > > main :: IO ()- > main = fmap fst $ flip runProt initProtEnv $ do+ > main = flip evalProt initProtEnv $ do > ( dog, setName, sit ) <- package "dog" $ do > dog <- clone object > name <- makeMember "name"
src/Control/Prototype.hs view
@@ -8,6 +8,8 @@ Method, runProt,+ evalProt,+ execProt, initProtEnv, package, object,@@ -15,12 +17,15 @@ makeMember, setMember, member,+ makeMethod, setMethod, method, liftProt,+ primBool, primInt, primStr,+ fromPrimBool, fromPrimInt, fromPrimStr, @@ -29,7 +34,8 @@ import Prelude hiding ( head ) import "monads-tf" Control.Monad.State (- StateT, runStateT, lift, MonadIO, liftIO, put, get, gets )+ StateT, runStateT, evalStateT, execStateT,+ lift, MonadIO, liftIO, put, get, gets ) import Data.List ( (\\) ) import Data.Maybe ( fromMaybe, listToMaybe ) @@ -46,6 +52,12 @@ runProt :: Monad m => Prot m a -> ProtEnv m -> m ( a, ProtEnv m ) runProt = runStateT +evalProt :: Monad m => Prot m a -> ProtEnv m -> m a+evalProt = evalStateT++execProt :: Monad m => Prot m a -> ProtEnv m -> m ( ProtEnv m )+execProt = execStateT+ liftProt :: Monad m => m a -> Prot m a liftProt = lift @@ -62,10 +74,14 @@ data Object = ObjectId { fromObjId :: Int } |+ PrimitiveBool { fromPrimBool :: Bool } | PrimitiveInt { fromPrimInt :: Int } | PrimitiveString { fromPrimStr :: String } deriving ( Eq, Show ) +primBool :: Bool -> Object+primBool = PrimitiveBool+ primInt :: Int -> Object primInt = PrimitiveInt @@ -133,6 +149,12 @@ setMember obj mn val = do objBody@ObjectBody { objectMembers = mems } <- getObject obj putObject objBody { objectMembers = ( mn, val ) : mems }++makeMethod :: Monad m => Method m -> Prot m Object+makeMethod met = do+ newId <- getNewId+ putObject $ Method newId met+ return newId setMethod :: Monad m => Object -> Member -> Method m -> Prot m () setMethod obj mem met = do