module TypeStructure.Prelude.TH
(
  module Exports,

  purify,
  tryToReify,
  isProperInstance',
)
where

import TypeStructure.Prelude.Basic
import Language.Haskell.TH as Exports
import THInstanceReification as Exports


purify :: Q a -> a
purify = unsafePerformIO . runQ

tryToReify :: Name -> Q (Maybe Info)
tryToReify n = recover (return Nothing) (fmap Just $ reify n) 

isProperInstance' :: Name -> [Type] -> Q Bool
isProperInstance' name types = recover (return False) (isProperInstance name types)