-- |
-- Copyright: (C) 2013 Amgen, Inc.
--
-- This class is not meant to be imported in any other circumstance than in
-- a GHCi session.

{-# LANGUAGE TypeFamilies #-}

{-# OPTIONS_GHC -fno-warn-orphans #-}
module H.Prelude.Interactive
  ( module H.Prelude
  , PrintR(..)
  , p
  , printQuote
  )
  where

import qualified Foreign.R as R
import H.Prelude hiding (withEmbeddedR)

instance MonadR IO where
  io :: IO a -> IO a
io = IO a -> IO a
forall a. a -> a
id
  data ExecContext IO = ExecContext
  getExecContext :: IO (ExecContext IO)
getExecContext = ExecContext IO -> IO (ExecContext IO)
forall (m :: * -> *) a. Monad m => a -> m a
return ExecContext IO
ExecContext
  unsafeRunWithExecContext :: IO a -> ExecContext IO -> IO a
unsafeRunWithExecContext = IO a -> ExecContext IO -> IO a
forall a b. a -> b -> a
const

class PrintR a where
  printR :: MonadR m => a -> m ()

instance PrintR (SEXP s a) where
  printR :: SEXP s a -> m ()
printR = IO () -> m ()
forall (m :: * -> *) a. MonadR m => IO a -> m a
io (IO () -> m ()) -> (SEXP s a -> IO ()) -> SEXP s a -> m ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. SEXP s a -> IO ()
forall s (a :: SEXPTYPE). SEXP s a -> IO ()
R.printValue

instance PrintR (R.SomeSEXP s) where
  printR :: SomeSEXP s -> m ()
printR s :: SomeSEXP s
s = SomeSEXP s -> (forall (a :: SEXPTYPE). SEXP s a -> m ()) -> m ()
forall s r.
SomeSEXP s -> (forall (a :: SEXPTYPE). SEXP s a -> r) -> r
R.unSomeSEXP SomeSEXP s
s forall a (m :: * -> *). (PrintR a, MonadR m) => a -> m ()
forall (a :: SEXPTYPE). SEXP s a -> m ()
printR

-- | A form of the 'printR' function that is more convenient in an interactive
-- session.
p :: (MonadR m, PrintR a) => m a -> m ()
p :: m a -> m ()
p = (m a -> (a -> m ()) -> m ()
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= a -> m ()
forall a (m :: * -> *). (PrintR a, MonadR m) => a -> m ()
printR)

-- | A form of the 'printR' function that is more convenient in an interactive
-- session.
{-# DEPRECATED printQuote "Use 'p' instead." #-}
printQuote :: (MonadR m, PrintR a) => m a -> m ()
printQuote :: m a -> m ()
printQuote = m a -> m ()
forall (m :: * -> *) a. (MonadR m, PrintR a) => m a -> m ()
p