{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE OverloadedLabels #-}
{-# LANGUAGE DataKinds#-}
{-# LANGUAGE TypeOperators#-}
{-# OPTIONS_GHC -ddump-to-file #-}
module Main (main) where
import Criterion.Main
import Data.Units
mkBench f n = bench (show n) $ nf f n
iterations :: [Int]
iterations = [10, 100, 1000]
kmphTomps :: Int -> Double
kmphTomps n = iterate
(unQuantity . fromTo @(Kilo Meter ./. Hour) @(Meter ./. Second) . quantity)
5 !! n
multConv :: Int -> Double
multConv n = iterate (*3.6) (5 :: Double) !! n
-- | Check ddump to see it inlines correctly
u :: (.^-) Second 1 Double
u = fromTo (1415 :: Hertz Double)
-- main :: IO()
-- main = print u
main :: IO()
main = do
defaultMain [
bgroup "~>" [
bgroup "kmph ~> mps" (fmap (mkBench kmphTomps) iterations)
, bgroup "mult" (fmap (mkBench multConv) iterations)
]
]