-- 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.1.1 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 family 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)