module SpyF where
import Fudget
import CompOps
import IoF(ioF)
import StdIoUtil(echoStderrK)
--import EitherUtils
import NullF(getK,putK{-,F,K-})
--import FudgetIO
--import ContinuationIO(stderr)

spyF :: F a2 b -> F a2 b
spyF F a2 b
f = (b -> [Char]) -> [Char] -> F b b
forall b. (b -> [Char]) -> [Char] -> F b b
teeF b -> [Char]
forall a. Show a => a -> [Char]
show [Char]
"OUT: " F b b -> F a2 b -> F a2 b
forall a1 b a2. F a1 b -> F a2 a1 -> F a2 b
>==< F a2 b
f F a2 b -> F a2 a2 -> F a2 b
forall a1 b a2. F a1 b -> F a2 a1 -> F a2 b
>==< (a2 -> [Char]) -> [Char] -> F a2 a2
forall b. (b -> [Char]) -> [Char] -> F b b
teeF a2 -> [Char]
forall a. Show a => a -> [Char]
show [Char]
"IN: "

teeF :: (b -> [Char]) -> [Char] -> F b b
teeF b -> [Char]
show [Char]
prefix = K b b -> F b b
forall a b. K a b -> F a b
ioF K b b
teeK
  where
    teeK :: K b b
teeK =
      Cont (K b b) (KEvent b)
forall hi ho. Cont (K hi ho) (KEvent hi)
getK Cont (K b b) (KEvent b) -> Cont (K b b) (KEvent b)
forall a b. (a -> b) -> a -> b
$ \KEvent b
msg ->
      case KEvent b
msg of
	Low FResponse
_ -> K b b
teeK
	High b
msg -> [Char] -> K b b -> K b b
forall (f :: * -> * -> *) b ho.
FudgetIO f =>
[Char] -> f b ho -> f b ho
echoStderrK ([Char]
prefix[Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++b -> [Char]
show b
msg) (K b b -> K b b) -> K b b -> K b b
forall a b. (a -> b) -> a -> b
$
		    KCommand b -> K b b -> K b b
forall ho hi. KCommand ho -> K hi ho -> K hi ho
putK (b -> KCommand b
forall a b. b -> Message a b
High b
msg) (K b b -> K b b) -> K b b -> K b b
forall a b. (a -> b) -> a -> b
$
		    K b b
teeK