module FRP.Dunai.Debug where

import Debug.Trace
import Data.MonadicStreamFunction hiding (trace)
import System.IO.Unsafe

-- ** Debugging

traceMSF :: Monad m
         => Show a
        => MSF m a a
traceMSF :: MSF m a a
traceMSF = (a -> String) -> MSF m a a
forall (m :: * -> *) a. Monad m => (a -> String) -> MSF m a a
traceMSFWith a -> String
forall a. Show a => a -> String
show

traceMSFWith :: Monad m
             => (a -> String)
             -> MSF m a a
traceMSFWith :: (a -> String) -> MSF m a a
traceMSFWith a -> String
f = (a -> a) -> MSF m a a
forall (a :: * -> * -> *) b c. Arrow a => (b -> c) -> a b c
arr (\a
x -> String -> a -> a
forall a. String -> a -> a
trace (a -> String
f a
x) a
x)

traceMSFWithIO :: (a -> IO b)
               -> MSF IO a a
traceMSFWithIO :: (a -> IO b) -> MSF IO a a
traceMSFWithIO a -> IO b
f = (a -> IO a) -> MSF IO a a
forall (m :: * -> *) a b. Monad m => (a -> m b) -> MSF m a b
arrM (\a
x -> a -> IO b
f a
x IO b -> IO a -> IO a
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return a
x)