[Haskell-beginners] How to display a time difference?
Daniel Fischer
daniel.is.fischer at web.de
Wed Mar 18 06:41:56 EDT 2009
Am Mittwoch, 18. März 2009 11:28 schrieb Colin Paul Adams:
> >>>>> "Yitzchak" == Yitzchak Gale <gale at sefer.org> writes:
>
> Yitzchak> Colin Paul Adams wrote:
> >> The code of the following routine is intended to indicate how
> >> long it takes for the computer to make a move. However the time
> >> is printed (as very close to zero) long before the move is
> >> made.
>
> Yitzchak> You are writing a thunk to the IORef. It only gets
> Yitzchak> computed later on when you read the value.
>
> Yitzchak> Try using:
> >> readIORef game_state_ior >>= evaluate
> >> . update_interactive_from_move move >>= writeIORef
> >> game_state_ior
>
> Yitzchak> evaluate is in Control.Exception.
>
> Still no joy with:
>
> play_move :: IORef Game_state -> IO ()
> play_move game_state_ior = do
> (_, state, _) <- readIORef game_state_ior
> putStr "Playing AI: "
> start_time <- getCurrentTime
> let move = recommended_move state
> readIORef game_state_ior >>=
> evaluate . update_interactive_from_move move >>=
> writeIORef game_state_ior
> end_time <- getCurrentTime
> putStrLn $ show $ (diffUTCTime end_time start_time)
You would have to completely evaluate move. Depending on what type move is,
that might require much more than what seq or evaluate do.
Perhaps
import Control.Parallel.Strategies
let move = ...
(rnf move) `seq` mofifyIORef (...)
?
More information about the Beginners
mailing list