packages feed

ruin-0.1.0.0: test/MustCompile/PrintAndTime.hs

{-# Language DataKinds #-}
{-# Language FlexibleContexts #-}
{-# Language FlexibleInstances #-}
{-# Language MultiParamTypeClasses #-}
{-# Language ScopedTypeVariables #-}
{-# Language TypeApplications #-}
{-# Language TypeFamilies #-}
{-# Language TypeOperators #-}
{-# Language UndecidableInstances #-}

-- | This is the example from the Haddock on 'MapF'.

module MustCompile.PrintAndTime () where

import qualified System.CPUTime

import Data.Ruin

data PrintAndTime = MkPrintAndTime

instance (Show a,f ~ (a -> IO (a,Integer))) => FPure PrintAndTime s f where
  fpure = \_ x -> do
    print x
    (,) x <$> System.CPUTime.getCPUTime

_printAndTime :: (Show x, Show y) => ("x" :@ x,"y" :@ y) -> IO ("x" :@ (x,Integer),"y" :@ (y,Integer))
_printAndTime = rmapA MkPrintAndTime