-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | Utility functions for testing Template Haskell code -- -- Utility functions for testing Template Haskell code, including -- functions for testing failures in the Q monad. @package th-test-utils @version 1.2.0 module Language.Haskell.TH.TestUtils.QMode data MockedMode FullyMocked :: MockedMode FullyMockedWithIO :: MockedMode NotMocked :: MockedMode data QMode (mode :: MockedMode) -- | All Q actions are mocked and IO actions are disallowed. [MockQ] :: QMode 'FullyMocked -- | Same as MockQ, except IO actions are passed through. Useful if your TH -- code, for example, reads files with runIO. [MockQAllowIO] :: QMode 'FullyMockedWithIO -- | No mocking is done. Useful for running Q as normal, but you need to -- get error messages. [AllowQ] :: QMode 'NotMocked class IsMockedMode (mode :: MockedMode) where { type TestQResult mode a; } runResult :: IsMockedMode mode => Q a -> TestQResult mode a fmapResult :: IsMockedMode mode => (a -> b) -> TestQResult mode a -> TestQResult mode b instance GHC.Show.Show (Language.Haskell.TH.TestUtils.QMode.QMode mode) instance Language.Haskell.TH.Syntax.Lift (Language.Haskell.TH.TestUtils.QMode.QMode mode) instance Language.Haskell.TH.TestUtils.QMode.IsMockedMode 'Language.Haskell.TH.TestUtils.QMode.FullyMocked instance Language.Haskell.TH.TestUtils.QMode.IsMockedMode 'Language.Haskell.TH.TestUtils.QMode.FullyMockedWithIO instance Language.Haskell.TH.TestUtils.QMode.IsMockedMode 'Language.Haskell.TH.TestUtils.QMode.NotMocked module Language.Haskell.TH.TestUtils.QState -- | State information for mocking Q functionality. data QState (mode :: MockedMode) QState :: QMode mode -> [(String, Name)] -> [(Name, ReifyInfo)] -> QState (mode :: MockedMode) [mode] :: QState (mode :: MockedMode) -> QMode mode -- | Names that can be looked up with lookupTypeName or -- lookupValueName [knownNames] :: QState (mode :: MockedMode) -> [(String, Name)] -- | Reification information for Names to return when reify is -- called. [reifyInfo] :: QState (mode :: MockedMode) -> [(Name, ReifyInfo)] data ReifyInfo ReifyInfo :: Info -> Maybe Fixity -> Maybe [Role] -> Type -> ReifyInfo [reifyInfoInfo] :: ReifyInfo -> Info [reifyInfoFixity] :: ReifyInfo -> Maybe Fixity [reifyInfoRoles] :: ReifyInfo -> Maybe [Role] [reifyInfoType] :: ReifyInfo -> Type -- | A helper for loading names for reifyInfo -- -- Usage: -- --
--   QState
--     { reifyInfo = $(loadNames [''Int, ''Maybe])
--     , ...
--     }
--   
loadNames :: [Name] -> ExpQ -- | A shortcut for defining an unmocked Q. unmockedState :: QState 'NotMocked instance Language.Haskell.TH.Syntax.Lift Language.Haskell.TH.TestUtils.QState.ReifyInfo instance GHC.Show.Show Language.Haskell.TH.TestUtils.QState.ReifyInfo instance Language.Haskell.TH.Syntax.Lift (Language.Haskell.TH.TestUtils.QState.QState mode) instance GHC.Show.Show (Language.Haskell.TH.TestUtils.QState.QState mode) -- | This module defines utilites for testing Template Haskell code. module Language.Haskell.TH.TestUtils -- | State information for mocking Q functionality. data QState (mode :: MockedMode) QState :: QMode mode -> [(String, Name)] -> [(Name, ReifyInfo)] -> QState (mode :: MockedMode) [mode] :: QState (mode :: MockedMode) -> QMode mode -- | Names that can be looked up with lookupTypeName or -- lookupValueName [knownNames] :: QState (mode :: MockedMode) -> [(String, Name)] -- | Reification information for Names to return when reify is -- called. [reifyInfo] :: QState (mode :: MockedMode) -> [(Name, ReifyInfo)] data MockedMode FullyMocked :: MockedMode FullyMockedWithIO :: MockedMode NotMocked :: MockedMode data QMode (mode :: MockedMode) -- | All Q actions are mocked and IO actions are disallowed. [MockQ] :: QMode 'FullyMocked -- | Same as MockQ, except IO actions are passed through. Useful if your TH -- code, for example, reads files with runIO. [MockQAllowIO] :: QMode 'FullyMockedWithIO -- | No mocking is done. Useful for running Q as normal, but you need to -- get error messages. [AllowQ] :: QMode 'NotMocked data ReifyInfo ReifyInfo :: Info -> Maybe Fixity -> Maybe [Role] -> Type -> ReifyInfo [reifyInfoInfo] :: ReifyInfo -> Info [reifyInfoFixity] :: ReifyInfo -> Maybe Fixity [reifyInfoRoles] :: ReifyInfo -> Maybe [Role] [reifyInfoType] :: ReifyInfo -> Type -- | A helper for loading names for reifyInfo -- -- Usage: -- --
--   QState
--     { reifyInfo = $(loadNames [''Int, ''Maybe])
--     , ...
--     }
--   
loadNames :: [Name] -> ExpQ -- | A shortcut for defining an unmocked Q. unmockedState :: QState 'NotMocked runTestQ :: forall mode a. IsMockedMode mode => QState mode -> Q a -> TestQResult mode a runTestQErr :: forall mode a. (IsMockedMode mode, Show a) => QState mode -> Q a -> TestQResult mode String tryTestQ :: forall mode a. IsMockedMode mode => QState mode -> Q a -> TestQResult mode (Either String a) instance GHC.Base.Monad (Language.Haskell.TH.TestUtils.TestQ mode) instance GHC.Base.Applicative (Language.Haskell.TH.TestUtils.TestQ mode) instance GHC.Base.Functor (Language.Haskell.TH.TestUtils.TestQ mode) instance Language.Haskell.TH.Syntax.Quasi (Language.Haskell.TH.TestUtils.TestQ mode) instance Control.Monad.IO.Class.MonadIO (Language.Haskell.TH.TestUtils.TestQ mode) instance Control.Monad.Fail.MonadFail (Language.Haskell.TH.TestUtils.TestQ mode)