module TypeMachine.TH (type_, deriveIs, defineIs) where import Language.Haskell.TH hiding (Type, reifyType) import TypeMachine.TH.Is import TypeMachine.TM (TM, runTM) import TypeMachine.Type -- | Entrypoint of TypeMachine. Create a new data type using a 'TM' computation type_ :: String -> TM Type -> Q [Dec] type_ :: String -> TM Type -> Q [Dec] type_ String newTyName TM Type t = do fRes <- TM Type -> Q Type forall a. TM a -> Q a runTM TM Type t let newType = Type fRes{name = mkName newTyName} return [typeToDec newType]