[Haskell-beginners] Storing the time difference between two Monotonic time results

Awsaf Rahman awsafrahman1704 at gmail.com
Mon Jul 9 13:40:44 UTC 2018


Okay, here is what I am trying to do. I am trying to time this mergesort
program. I want to run this program 100, 1000, etc times and store the
timing results in a list if possible. Can't seem to figure out how to do
it! The following program prints the timings to the shell and I need to
figure out a way to store the timings in a list.


{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE BangPatterns #-}
import Control.Exception
import Formatting
import Formatting.Clock
import System.Clock
import Control.DeepSeq

mergesort [] = []
mergesort [x] = [x]
mergesort xs = let (lhalf, rhalf) = splitAt (length xs `div` 2) xs
               in merge' (mergesort lhalf) (mergesort rhalf)

merge' lhalf rhalf = merge lhalf rhalf []

merge [] [] acc = reverse acc
merge [] y acc = reverse acc ++ y
merge x [] acc = reverse acc ++ x

merge (l:ls) (r:rs) acc
        | l < r = merge ls (r:rs) (l:acc)
        | otherwise = merge rs (l:ls) (r:acc)

toList :: String -> [Integer]
toList input = read ("[" ++ input ++ "]")

repeater unsortedlist 0 result = return (result)

repeater unsortedlist counter result = do
                            start <- getTime Monotonic
                            evaluate(mergesort unsortedlist)
                            end <- getTime Monotonic
                            fprint (timeSpecs % "\n") start end
                            repeater unsortedlist (counter-1) result

main = do
    file <- getLine
    contents <- readFile file
    let !unsortedlist = (toList contents)
    repeater unsortedlist 100 []


On Mon, Jul 9, 2018 at 3:21 PM, David McBride <toad3k at gmail.com> wrote:

> I guess whatever version you are using did not export that function.  In
> any case the definition for that function is incredibly simple, so you
> could just write your own for now.
>
> diffTimeSpec :: TimeSpec -> TimeSpec -> TimeSpecdiffTimeSpec ts1 ts2 = abs (ts1 - ts2)
>
>
>
> On Mon, Jul 9, 2018 at 9:08 AM, Awsaf Rahman <awsafrahman1704 at gmail.com>
> wrote:
>
>> I imported the System.Clock module and tried to use the diffTimeSpec
>> function but it keeps saying "out of scope".
>>
>> On Mon, Jul 9, 2018 at 2:45 PM, David McBride <toad3k at gmail.com> wrote:
>>
>>> There is a diffTimeSpec function in that module that seems like it
>>> would work.
>>>
>>> On Mon, Jul 9, 2018 at 8:30 AM, Awsaf Rahman <awsafrahman1704 at gmail.com>
>>> wrote:
>>>
>>>> Hello,
>>>>
>>>> I am trying to time a function I have written in haskell using the
>>>> clock package in the following way:
>>>>
>>>> *start <- getTime Monotonic*
>>>> *evaluate(something)*
>>>> *end <- getTime Monotonic*
>>>> *fprint (timeSpecs % "\n") start end*
>>>>
>>>>
>>>> Now what I want is to store the time difference between *start* and *end.
>>>> *Is there a way I can do that?
>>>>
>>>> Regards
>>>> Awsaf
>>>>
>>>> _______________________________________________
>>>> Beginners mailing list
>>>> Beginners at haskell.org
>>>> http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners
>>>>
>>>>
>>>
>>> _______________________________________________
>>> Beginners mailing list
>>> Beginners at haskell.org
>>> http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners
>>>
>>>
>>
>> _______________________________________________
>> Beginners mailing list
>> Beginners at haskell.org
>> http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners
>>
>>
>
> _______________________________________________
> Beginners mailing list
> Beginners at haskell.org
> http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.haskell.org/pipermail/beginners/attachments/20180709/2a4f32d8/attachment-0001.html>


More information about the Beginners mailing list