Georg Martius wrote:
[...]

I could write:

modifyT :: ((a, String) -> (a, String)) -> a ->  State String a
modifyT trans a = do str <- get
              let (a', str') = trans (a, str)
             put str'
              return a'

f :: State String ()
f = do put "hallo"
modify strTrans
i <- modifyT strIntTrans 4 -- strIntTrans :: (Int, String) -> (Int, String)
i' <- modifyT strIntTrans i ...


But this is obviously awkward.

[...]


Hi.

People have already replied about the state monad aspect, but there's another small improvement I'd like to suggest.

Look at what modifyT does with 'trans' and 'a'. They are always used together. So, how about combining them *outside* the definition of modifyT?

modifyT :: (String -> (a, String)) -> State String a
modifyT trans = do (a, s) <- gets trans
put s
return a
f = do ...
i <- modifyT (strIntTrans 4) -- strIntTrans :: Int -> String -> (Int, String)
i' <- modifyT (strIntTrans i)
...


Aside: if you rewrite ($) similarly, you get id.

Regards,
Tom


_______________________________________________ Haskell-Cafe mailing list [EMAIL PROTECTED] http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to