module Language.Haskell.HSX.QQ
( hsx
)
where
import qualified Language.Haskell.Exts.Syntax as Hs
import Language.Haskell.Exts hiding (Exp, parse, parseExp)
import Language.Haskell.HSX.Transform (transformExp)
import Language.Haskell.Meta.Parse hiding (parseHsExp, parseExp)
import Language.Haskell.Meta.Syntax.Translate (toExp)
import Language.Haskell.TH (Exp, ExpQ)
import Language.Haskell.TH.Quote (QuasiQuoter(..))
hsx :: QuasiQuoter
hsx :: QuasiQuoter
hsx = QuasiQuoter { quoteExp :: String -> Q Exp
quoteExp = String -> Q Exp
parseHsxExp
, quotePat :: String -> Q Pat
quotePat = forall a. HasCallStack => String -> a
error String
"the hsx QuasiQuoter can only be used on expressions."
, quoteType :: String -> Q Type
quoteType = forall a. HasCallStack => String -> a
error String
"the hsx QuasiQuoter can only be used on expressions."
, quoteDec :: String -> Q [Dec]
quoteDec = forall a. HasCallStack => String -> a
error String
"the hsx QuasiQuoter can only be used on expressions."
}
parseHsxExp :: String -> ExpQ
parseHsxExp :: String -> Q Exp
parseHsxExp = forall a c b. (a -> c) -> (b -> c) -> Either a b -> c
either (forall a. HasCallStack => String -> a
error forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a. Show a => a -> String
show) (forall (m :: * -> *) a. Monad m => a -> m a
return forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a. ToExp a => a -> Exp
toExp forall b c a. (b -> c) -> (a -> b) -> a -> c
. Exp () -> Exp ()
transformExp) forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> Either String (Exp ())
parseHsExp
parseExp :: String -> Either String Exp
parseExp = forall a c b. (a -> c) -> (b -> c) -> Either a b -> c
either forall a b. a -> Either a b
Left (forall a b. b -> Either a b
Right forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a. ToExp a => a -> Exp
toExp forall b c a. (b -> c) -> (a -> b) -> a -> c
. Exp () -> Exp ()
transformExp) forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> Either String (Exp ())
parseHsExp
parseHsExp :: String -> Either String (Exp ())
parseHsExp = forall a c b. (a -> c) -> (b -> c) -> Either a b -> c
either forall a b. a -> Either a b
Left (forall a b. b -> Either a b
Right forall b c a. (b -> c) -> (a -> b) -> a -> c
. Exp () -> Exp ()
transformExp) forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap forall a b. (a -> b) -> a -> b
$ forall a b. a -> b -> a
const ()) forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a. ParseResult a -> Either String a
parseResultToEither forall b c a. (b -> c) -> (a -> b) -> a -> c
. ParseMode -> String -> ParseResult (Exp SrcSpanInfo)
parseExpWithMode ParseMode
parseMode
parseMode :: ParseMode
parseMode :: ParseMode
parseMode = String
-> Language
-> [Extension]
-> Bool
-> Bool
-> Maybe [Fixity]
-> Bool
-> ParseMode
ParseMode String
"" Language
Haskell2010 [Extension]
allExtensions Bool
False Bool
True (forall a. a -> Maybe a
Just [Fixity]
baseFixities) Bool
False
allExtensions :: [Extension]
allExtensions :: [Extension]
allExtensions = forall a b. (a -> b) -> [a] -> [b]
map KnownExtension -> Extension
EnableExtension
[KnownExtension
RecursiveDo,KnownExtension
ParallelListComp,KnownExtension
MultiParamTypeClasses,KnownExtension
FunctionalDependencies,KnownExtension
RankNTypes,KnownExtension
ExistentialQuantification,
KnownExtension
ScopedTypeVariables,KnownExtension
ImplicitParams,KnownExtension
FlexibleContexts,KnownExtension
FlexibleInstances,KnownExtension
EmptyDataDecls,KnownExtension
KindSignatures,
KnownExtension
BangPatterns,KnownExtension
TemplateHaskell,KnownExtension
ForeignFunctionInterface,KnownExtension
Arrows,KnownExtension
Generics,KnownExtension
NamedFieldPuns,KnownExtension
PatternGuards,
KnownExtension
MagicHash,KnownExtension
TypeFamilies,KnownExtension
StandaloneDeriving,KnownExtension
TypeOperators,KnownExtension
RecordWildCards,KnownExtension
GADTs,KnownExtension
UnboxedTuples,
KnownExtension
PackageImports,KnownExtension
QuasiQuotes,KnownExtension
TransformListComp,KnownExtension
ViewPatterns,KnownExtension
XmlSyntax,KnownExtension
RegularPatterns]