{-# LANGUAGE TemplateHaskell #-}
module Language.Haskellish.TH where
import Language.Haskell.TH
import Data.Map as Map
grabExp :: String -> Q Exp
grabExp :: String -> Q Exp
grabExp String
x = Name -> Q Exp
forall (m :: * -> *). Quote m => Name -> m Exp
varE (Name -> Q Exp) -> Name -> Q Exp
forall a b. (a -> b) -> a -> b
$ String -> Name
mkName String
x
grabInfoMap :: [String] -> Q (Map String Info)
grabInfoMap :: [String] -> Q (Map String Info)
grabInfoMap = Map String (Q Info) -> Q (Map String Info)
forall (t :: * -> *) (m :: * -> *) a.
(Traversable t, Monad m) =>
t (m a) -> m (t a)
forall (m :: * -> *) a.
Monad m =>
Map String (m a) -> m (Map String a)
sequence (Map String (Q Info) -> Q (Map String Info))
-> ([String] -> Map String (Q Info))
-> [String]
-> Q (Map String Info)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [(String, Q Info)] -> Map String (Q Info)
forall k a. Ord k => [(k, a)] -> Map k a
Map.fromList ([(String, Q Info)] -> Map String (Q Info))
-> ([String] -> [(String, Q Info)])
-> [String]
-> Map String (Q Info)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (String -> (String, Q Info)) -> [String] -> [(String, Q Info)]
forall a b. (a -> b) -> [a] -> [b]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (\String
x -> (String
x,Name -> Q Info
reify (Name -> Q Info) -> Name -> Q Info
forall a b. (a -> b) -> a -> b
$ String -> Name
mkName String
x))