2 {-# LANGUAGE OverloadedStrings #-}
5 module Mate.Debug where
7 {- we cannot use `PrintfType' from Text.Printf, as it isn't exported.
8 - so we implement a `VarArgsFake' here.
9 - http://www.haskell.org/haskellwiki/Varargs -}
10 class VarArgsFake t where
11 varFake :: [String] -> t
13 instance VarArgsFake (IO a) where
14 varFake _ = return undefined
16 instance (Show a, VarArgsFake r) => VarArgsFake (a -> r) where
17 varFake _ _ = varFake []
19 -- note: with -O2 GHC is able to completely optimize away such a `printfFake' call
20 printfFake :: String -> (VarArgsFake t) => t
21 printfFake _ = varFake []
24 -- see counterpart at `debug.h'
26 printfJit :: String -> (VarArgsFake t) => t
27 printfJit = printfFake
31 printfBb :: String -> (VarArgsFake t) => t
36 printfMp :: String -> (VarArgsFake t) => t
41 printfCp :: String -> (VarArgsFake t) => t
46 printfStr :: String -> (VarArgsFake t) => t
47 printfStr = printfFake